Danh mục

Giáo trình Thiết kế mạch logic số - Chương 3: Thiết kế các khối logic tổ hợp và tuần tự thường gặp

Số trang: 54      Loại file: pdf      Dung lượng: 1.48 MB      Lượt xem: 11      Lượt tải: 0    
10.10.2023

Hỗ trợ phí lưu trữ khi tải xuống: 31,000 VND Tải xuống file đầy đủ (54 trang) 0

Báo xấu

Xem trước 6 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Giáo trình Thiết kế mạch logic số - Chương 3: Thiết kế các khối logic tổ hợp và tuần tự thường gặp trình bày các nội dung về khối cộng/trừ, bộ cộng tích lũy, thanh ghi, bộ đếm, bộ dịch và thanh ghi dịch, khối nhân số nguyên, khối chia số nguyên, bộ nhớ,...
Nội dung trích xuất từ tài liệu:
Giáo trình Thiết kế mạch logic số - Chương 3: Thiết kế các khối logic tổ hợp và tuần tự thường gặp Chương III: Thiết kế các khối logic tổ hợp và tuần tự thường gặp1. Khối cộng/trừ1.1. Khối cộng đơn giản Khối cộng đơn giản: thực hiện phép cộng giữa hai số được biểu diễn dướidạng std_logic_vector hay bit_vector. Các cổng vào gồm hạng tử A, B, bit nhớCin, các cổng ra bao gồm tổng Sum, và bit nhớ ra Cout: A B Cin Cout Σ Sum Hình 2.6: Sơ đồ khối bộ cộng Hàm cộng có thể được mô tả trực tiếp bằng toán tử “+” mặc dù với kết quảnày thì mạch cộng tổng hợp ra sẽ không đạt được tối ưu về tốc độ, mô tả VHDLcủa bộ cộng như sau: --------- Bo cong don gian -------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ----------------------------------------- entity adder32 is port( Cin : in std_logic; A : in std_logic_vector(31 downto 0); B : in std_logic_vector(31 downto 0); SUM : out std_logic_vector(31 downto 0); Cout: out std_logic ); end adder32; ----------------------------------------- architecture behavioral of adder32 is signal A_temp : std_logic_vector(32 downto 0); signal B_temp : std_logic_vector(32 downto 0); signal Sum_temp : std_logic_vector(32 downto 0); begin A_temp Tính A – B: A 01010 01010 - = - = + B 00101 11011 1 00101Loại bỏ bit nhớ ở kết quả cuối cùng ta được A – B = 00101 = 5.Tính B – A: B 00101 00101 - = - = + A 01010 10110 0 11011Loại bỏ bit nhớ ta được B – A = 11101, đây là số âm, muốn tính giá trị tuyệt đối đểkiểm tra lại lấy bù 2 của 11101 Bù 2 (11101) = 00100 + 1 = 00101 = 5vậy B – A = -5 Dựa trên tính chất trên của số bù hai ta chỉ cần thay đổi một chút trong cấutrúc của bộ cộng để nó có khả năng thực hiện cả phép cộng lẫn phép trừ màkhông phải thay đổi nhiều về cấu trúc phần cứng. Tại đầu vào có thêm tín hiệuSUB, tín hiệu này quyết định sẽ thực hiện phép cộng hay phép trừ. Khi SUB = 1 đểlấy bù 2 của B sẽ lấy đảo B và cho giá trị đầu vào Cin =1, để hiện thực trên mạchcấu trúc bộ cộng được bổ xung một khối MUX trước cổng B, khối này có hai đầuvào là B và not B, nếu SUB= 0 thì B được chọn, nếu SUB = 1 thì not B được chọn.Đầu vào Cin được OR với SUB trước khi vào bộ cộng. Sub Cin A B MUX Cout Σ Sum Hình 2.8: Sơ đồ khối bộ cộng trừ đơn giản Trong mã nguồn cho module cộng/trừ adder_sub.vhd sử dụng bộ cộngadder32 như một module con (component). ------------ Bo cong trừ đơn giản ---------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; -------------------------------------------- entity adder_sub is port( SUB : in std_logic; Cin : in std_logic; A : in std_logic_vector(31 downto 0); B : in std_logic_vector(31 downto 0); SUM : out std_logic_vector(31 downto 0); Cout: out std_logic ); end adder_sub; --------------------------------------------- architecture rtl of adder_sub is signal B_temp : std_logic_vector(31 downto 0); signal Cin_temp : std_logic; component adder32 is port ( Cin : in std_logic; A : in std_logic_vector(31 downto 0); B : in std_logic_vector(31 downto 0); SUM : out std_logic_vector(31 downto 0); Cout : out std_logic ); end component; -------------------------------------------- begin Cin_temp Như vậy bộ cộng nối tiếp có 32x2 = 64 lớp trễ. Phép cộng là một phép toán cơ bản và sử dụng nhiều do vậy việc nghiêncứu, sử dụng các thuật toán tăng tốc bộ cộng đã và đang được nghiên cứu rấtnhiều. Trong phần này ta xem xét một thuật toán phổ biến nhằm rút ngắn thờigian thực hiện tính toán chuỗi bit nhớ là thuật toán thấy nhớ trước (Crarry Look-Ahead). Thuật toán này sử dụng sơ đồ toán trong đó phát huy tối đa các phéptoán song song cho các đại lượng trung gian độc lập với nhau nhằm giảm thời gianđợi giữa các bit nhớ. Giả sử các đầu và là a(31:0), b(31:0) và đầu vào Cin. Khi đó định nghĩa: gi = ai and bi = ai .bi – nhớ phát sinh (generate carry) Nếu ai, bi bằng 1 thì gibằng 1 khi đó ...

Tài liệu được xem nhiều: