Comperator trong Verilog
BÀI 4: THIẾT KẾ BỘ SO SÁNH 3 BIT 1. Mục tiêu của bài thí nghiệm Bài này thực hiện bộ so sánh hai số, các số được biểu diễn bởi 3 bit. Mạch điện được thực hiện thông qua lập trình VHDL chạy trong Quartus II và trên bo mạch DE1. Hai số được đưa vào so sánh thông qua các chuyển mạch, kết quả được hiển thị trên các đèn LED. 2. Các kiến thức cần trang bị trước khi thực hiện bài thí nghiệm này Bảng biểu diễn chức năng yêu cầu bằng bảng chân lý, hiểu cấu trúc và cách viết một chương trình VHDL ở mức cơ bản. 3. Các kiến thức và kỹ năng sẽ có được sau khi hoàn thành thí nghiệm - Sinh viên hiểu cách thực hiện bộ so sánh 2 số được biểu diễn dưới dạng nhị phân 3 bit, - Cách thực hiện thiết kế từ những yêu cầu đặt ra, - Kỹ năng sử dụng công cụ hỗ trợ thiết kế mạch Quartus II, phân tích, tổng hợp, và đánh giá kết quả. 4. Nội dung bài thí nghiệm Nhìn chung, việc so sánh số nhiều bit có thể được thực hiện bằng cách so sánh trọng số của các bit từ cao xuống thấp để nhận ra đâu là số lớn hơn. Việc so sánh này cần phải được thực hiện từ các bít có trọng lượng cao xuống các bit có trọng lượng thấp hơn. Như vậy, bộ so sánh hai số n bit bất kỳ có thể được hình thành từ các bộ so sánh với số bit nhỏ hơn. Bộ so sánh nhỏ nhất là bộ so sánh 1 bit (2 đầu vào mỗi đầu vào 1 bit và 3 đầu vào lấy kết quả từ các bộ so sánh trước đó). Ví dụ: bộ so sánh 3 bit có thể được hình thành từ 3 bộ so sánh 1 bit hoặc từ 1 bộ so sánh 2 bit kết hợp với 1 bộ so sánh 1 bít. Hoặc cũng có thể xây dựng bộ so sánh 3 bit trực tiếp. Khi xây dựng các bộ so sánh hai đầu vào, đầu vào biểu diễn số từ 2 trở lên, ta có thể dùng phép kiểm tra điều kiện và tạo ra mức logic ở đầu ra thích hợp trong VHDL. Dưới đây là các bước thực hiện bộ so sánh 3 bit với 3 đầu ra biểu lớn hơn (LO), bằng (BO) và nhỏ hơn (NO). Bộ so sánh này được hình thành từ 3 bộ so sánh 1 bit ghép với nhau. Hình 1 dưới đây cho thấy sơ đồ bộ so sánh 3 bit, bộ so sánh 1 bit, bảng chân lý của các bộ so sánh 3 bit và 1 bit. Trong đó, các đầu ra của bộ so sánh 1 bit được tối ưu thông qua bìa Karnaugh. Chương trình viết bằng VHDL như được đưa ra dưới đây: library ieee; use ieee.std_logic_1164.all; ENTITY sosanh_1bit IS B? so sánh 1 bit PORT ( x: IN std_logic; y: IN std_logic; LI: IN std_logic; BI: IN std_logic; library ieee; use ieee.std_logic_1164.all; ENTITY sosanh_3bit IS PORT ( AA : IN std_logic_vector(2 downto 0); BB : IN std_logic_vector(2 downto signal L_1, L_2, B_1, B_2, N_1, N_2 : std_logic; BEGIN u2 : sosanh_1bit PORT MAP ( x => AA(2), y => BB(2), LI => '0', BI => '1', NI: IN std_logic; LO: OUT std_logic; BO: OUT std_logic; NO: OUT std_logic); END sosanh_1bit; ARCHITECTURE LogicFunc of sosanh_1bit IS BEGIN hoạt động của bộ so sánh 1bit LO<=LI OR (BI AND x AND NOT y); BO<=(BI AND (NOT x AND NOT y)) OR (BI AND x AND y); NO<=(NOT LI AND NOT BI) OR (NOT LI AND NOT x AND y); END LogicFunc; 0); L : OUT std_logic; B : OUT std_logic; N : OUT std_logic); END sosanh_3bit; ARCHITECTURE STRUCT of sosanh_3bit IS COMPONENT sosanh_1bit PORT ( x: IN std_logic; y: IN std_logic; LI: IN std_logic; BI: IN std_logic; NI: IN std_logic; LO: OUT std_logic; BO: OUT std_logic; NO: OUT std_logic); END COMPONENT; NI => '0', LO => L_2, BO => B_2, NO => N_2); u1 : sosanh_1bit PORT MAP ( x => AA(1), y => BB(1), LI => L_2, BI => B_2, NI => N_2, LO => L_1, BO => B_1, NO => N_1); u0 : sosanh_1bit PORT MAP ( x => AA(0), y => BB(0), LI => L_1, BI => B_1, NI => N_1, LO => L, BO => B, NO => N); END STRUCT; a) Bộ so sánh 3 bit b) Bộ so sánh 3 bit được ghép e) Bộ so sánh 3 bit t ừ các b ộ 1 bit c) Bảng chân lý của bộ so sánh 3 bit d) Bộ so sánh 3 bit f) Hàm logic các đầu ra của bộ so sánh 1 bit Các bước thực hiện thiết kế này trên Quartus II như sau: Bước 1: Tạo project mới trong Quartus II Bước 2: Đưa thiết kế vào dùng VHDL với mã như được đưa ở trên Bước 3: Dịch chương trình Bước 4: Gán các chân cho DE1 với các đầu vào lấy từ các chuyển mạch SW 5 -SW 3 dành cho đầu vào A và các chuyển mạch SW 2 -SW 0 dành cho đầu vào B. Kết quả hiển thị được đưa ra các đèn LED với màu xanh LEDG 0 thể hiện số AA lớn hơn số BB và hai LED đỏ LEDR 0 , LEDR 1 tương ứng thể hiện số AA bằng và nhỏ hơn BB. Bước 5: Ghi chương trình lên DE1 Bước 6: Kiểm tra hoạt động của mạch bằng cách bật tắt các công tắc và quan sát kết quả trên các đèn LED 5. Các gợi ý mở rộng - Xây dựng bộ so sánh hai số 8 bit, - Viết chương trình VHDL dùng các cấu trúc IF-THEN để thực hiện - Dùng bộ so sánh cùng với các bộ cộng để thực hiện các bộ cộng trừ cộng/trừ hai số được biểu diễn theo kiểu bù 1 và bù 2. 6. Tài liệu tham khảo: 7. Các câu hỏi đánh giá hiểu biết - Có bao nhiêu phương án thực hiện bộ so sánh 8 bit ? khó khăn của các phương án đó khi thực hiện ra sao ? - Đường đi dài nhất của các liên kết trong bộ so sánh 3 bit này bằng bao nhiêu ? tốc độ tối đa cho phép đối với bộ so sánh này bằng bao nhiêu ? - Số phần tử logic được dùng cho thiết kế này là bao nhiêu ?