Bộ so sánh không dấu và có dấu 11 3-

Một phần của tài liệu Thiết kế vi mạch bằng VHDL (Trang 114 - 116)

Hình 9.3 hiện lên sơ đồ của bộ so sánh. Kích thước của vector được so sánh là generic (n+1). 3 đầu ra phải được cung cấp là: 1 đầu ra là a>b, 1 đầu ra là a = b, đầu ra còn lại là a < b. 3 giải pháp được giới thiệu :đầu tiên xét a và b là các số có dấu, trong khi 2 giải pháp còn lại là các số không dấu. Kết quả mô phỏng sẽ cho chúng ta thấy rõ hơn.

Hình 9.3.Mô hình của bộ so sánh Bộ so sánh có dấu:

Để làm việc với số có dấu hoặc số không dấu thì chúng ta đều phải khai báo gói std_logic_arith (cụ thể chúng ta sẽ thấy trong đoạn mã dưới đây). Mã thiết kế bộ so sánh có dấu:

---- Bo so sanh co dau: --- LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_arith.all; -- can thiet! --- ENTITY Bo_so_sanh_co_dau IS

GENERIC (n: INTEGER := 7);

PORT (a, b: IN SIGNED (n DOWNTO 0); x1, x2, x3: OUT STD_LOGIC); END Bo_so_sanh_co_dau;

--- ARCHITECTURE arc OF Bo_so_sanh_co_dau IS BEGIN

x1 <= '1' WHEN a > b ELSE '0'; x2 <= '1' WHEN a = b ELSE '0'; x3 <= '1' WHEN a < b ELSE '0'; END arc;

--- Kết quả mô phỏng:

Hình 9.4. Kết quả mô phỏng bộ so sánh có dấu Bộ so sánh không dấu 1:

Phần mã VHDL sau đây là bản sao của phần mã đã được trình bày (ở bộ so sánh không dấu).

---- Bo so sanh khong dau 1: --- LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_arith.all; --rat can thiet! ---

ENTITY Bo_so_sanh_khong_dau1 IS GENERIC (n: INTEGER := 7);

PORT (a, b: IN UNSIGNED (n DOWNTO 0); x1, x2, x3: OUT STD_LOGIC); END Bo_so_sanh_khong_dau1;

--- ARCHITECTURE arc OF Bo_so_sanh_khong_dau1 IS BEGIN x1 <= '1' WHEN a > b ELSE '0'; x2 <= '1' WHEN a = b ELSE '0'; x3 <= '1' WHEN a < b ELSE '0'; END arc; --- Kết quả:

Bộ so sánh không dấu 2:

Bộ so sánh không dấu có thể cũng được thực hiện với STD_LOGIC_VECTORS, trong trường hợp này không cần thiết phải khai báo std_logic_arith.

Mã thiết kế sẽ như sau:

---- Bo so sanh khong dau: --- LIBRARY ieee;

USE ieee.std_logic_1164.all;

--- ENTITY comparator IS

GENERIC (n: INTEGER := 7);

PORT (a, b: IN STD_LOGIC_VECTOR (n DOWNTO 0); x1, x2, x3: OUT STD_LOGIC);

END comparator;

--- ARCHITECTURE unsigned OF comparator IS BEGIN x1 <= '1' WHEN a > b ELSE '0'; x2 <= '1' WHEN a = b ELSE '0'; x3 <= '1' WHEN a < b ELSE '0'; END unsigned; Mô phỏng kết quả:

Hình 9.5.2. Kết quả của bộ so sánh không dấu2

Một phần của tài liệu Thiết kế vi mạch bằng VHDL (Trang 114 - 116)