IV. GIỚI THIỆU VỀ MƠ HÌNH HÀNH
h. Kiểu dữ liệu SIGNED và UNSIGNED
Là các dữ liệu đã định nghĩa trong gói std_logic_arith của thư viện IEEE. Cú pháp khai báo như sau:
Ví dụ 2-43:
SIGNAL x: SIGNED (7 downto 0);
SIGNAL y: UNSIGNED (0 to 3);
Giá trị của số khơng dấu thì khơng được nhỏ hơn 0. Ví dụ “0101” tượng trưng cho số thập phân 5, “1101” tượng trưng cho số thập phân 13. Nếu số có dấu được sử dụng thì có giá trị cả âm và dương ở dạng bù 2. Ví dụ “0101” tượng trưng cho số thập phân 5, còn “1101” tượng trưng cho số thập phân -3.
Để sử dụng các kiểu dữ liệu SIGNED và UNSIGNED thì gói std_logic_arith của thư viện IEEE phải được khai báo.
Ví dụ 2-44: các phép tốn hợp lệ và khơng hợp lệ với các dữ liệu có dấu và khơng dấu:
LIBRARY IEEE;
USE IEEE.std_logic_arith.ALL; -- gói dữ liệu khai báo thêm …
SIGNAL a: IN SIGNED (7 downto 0);
SIGNAL b: IN SIGNED (7 downto 0);
SIGNAL x: OUT SIGNED (7 downto 0);
…
v <= a + b ; -- hợp lệ vì cùng kiểu dữ liệu tốn học.
w <= a AND b ; -- khơng hợp lệ vì khơng tương thích phép với phép tốn logic.
Ví dụ 2-45: các phép tốn hợp lệ và khơng hợp lệ với dữ liệu STD_LOGIC_VECTOR:
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
…
SIGNAL a: IN STD_LOGIC_VECTOR (7 downto 0);
SIGNAL b: IN STD_LOGIC_VECTOR (7 downto 0);
SIGNAL x: OUT STD_LOGIC_VECTOR (7 downto 0);
…
v <= a + b ; -- khơng hợp lệ vì kiểu dữ liệu logic.
w <= a AND b ; -- hợp lệ vì phép tốn logic sử dụng kiểu logic.
Mặc dù bị cấm ở trên nhưng có một cách rất đơn giản cho phép dữ liệu kiểu STD_LOGIC_VECTOR tham gia trực tiếp vào các phép toán số học. Thư viện IEEE cung cấp 2 gói dữ liệu STD_LOGIC_SIGNED và STD_LOGIC_UNSIGNED cho phép các phép tốn trên các dữ liệu STD_LOGIC_VECTOR có thể được thực hiện giống như các dữ liệu loại SIGNED và UNSIGNED theo thứ tự.
Ví dụ 2-46: các phép toán với dữ liệu STD_LOGIC_VECTOR:
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL; -- khai báo thêm .
…
SIGNAL a: IN STD_LOGIC_VECTOR (7 downto 0);
SIGNAL b: IN STD_LOGIC_VECTOR (7 downto 0);
SIGNAL x: OUT STD_LOGIC_VECTOR (7 downto 0);
…
v <= a + b ; -- hợp lệ w <= a AND b ; -- hợp lệ