![Phân tích tư tưởng của nhân dân qua đoạn thơ: Những người vợ nhớ chồng… Những cuộc đời đã hóa sông núi ta trong Đất nước của Nguyễn Khoa Điềm](https://timtailieu.net/upload/document/136415/phan-tich-tu-tuong-cua-nhan-dan-qua-doan-tho-039-039-nhung-nguoi-vo-nho-chong-nhung-cuoc-doi-da-hoa-song-nui-ta-039-039-trong-dat-nuoc-cua-nguyen-khoa-136415.jpg)
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
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 đó ...
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ìm kiếm theo từ khóa liên quan:
Thiết kế mạch logic số chương 3 Thiết kế mạch logic số Thiết kế các khối logic tổ hợp Thiết kế các khối logic tuần tự Logic tuần tự Logic tổng hợpTài liệu liên quan:
-
Ứng dụng thiết kế FPGA: Phần 1
71 trang 70 0 0 -
Bài giảng Thiết kế vi mạch lập trình được - Nguyễn Thế Dũng
140 trang 45 0 0 -
Giáo trình Thiết kế mạch logic số - Chương 1: Các khái niệm chung
26 trang 28 0 0 -
CHƯƠNG I: PHÂN TÍCH CHƯƠNG TRÌNH
16 trang 24 0 0 -
Giáo trình Thiết kế mạch logic số - Chương 4: Thiết kế vi mạch số trên FPGA
81 trang 17 0 0 -
Giáo trình Thiết kế mạch logic số - Chương 5: Thiết kế vi mạch số trên thư viện cổng chuẩn
29 trang 17 0 0 -
GIỚI THIỆU CÁC LINH KIỆN ĐƯỢC DÙNG
16 trang 16 0 0 -
Giáo trình Thiết kế mạch logic số - Chương 2: Ngôn ngữ mô tả phần cứng VHDL
78 trang 15 0 0 -
Bài giảng Nhập môn Tin học - Chương 6: Lập kế hoạch viết chương trình trên máy tính
46 trang 14 0 0