III. MÔ TẢ PHẦN CỨNG TRONG VHDL
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 toá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 toá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 toán logic.
Ví dụ 2-45: các phép toá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 toá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 toá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ệ