Kiểu dữ liệu có dấu và không dấu ( Signed and Unsigned) 2 7-

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

Như đã đề cập trước đây, các kiểu dữ liệu này được định nghĩa trong gói std_logic_arith của thư viện ieee. Cú pháp của chúng được minh họa trong ví dụ dưới đây:

Ví dụ:

SIGNAL x: SIGNED (7 DOWNTO 0); SIGNAL y: UNSIGNED (0 TO 3);

Lưu ý rằng cú pháp của chúng tương tự với STD_LOGIC_VECTOR, không giống như INTEGER.

Một giá trị UNSIGNED là một số không bao giờ nhỏ hơn zero. Ví dụ, “0101” biểu diễn số thập phân 5, trong khi “1101” là 13. Nhưng nếu kiểu SIGNED được sử dụng thay vào, giá trị có thể là dương hoặc âm ( theo định dạng bù 2). Do đó, “0101” vẫn biểu diễn số 5, trong khi “1101” sẽ biểu diễn số -3

Để sử dụng kiểu dữ liệu SIGNED hoặc UNSIGNED, gói std_logic_arith của thư viện ieee, phải được khai báo. Bất chấp cú pháp của chúng, kiểu dữ liệu SIGNED và UNSIGNED có hiệu quả chủ yếu đối với các phép toán số học, nghĩa là, ngược với STD_LOGIC_VECTOR, chúng chấp nhận các phép toán số học. Ở một khía cạnh khác, các phép toán logic thì không được phép.

* Ví dụ:

Các phép toán hợp lệ và không hợp lệ đối với kiểu dữ liệu signed/unsigned:

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_arith.all; -- gói cần thiết

thêm vào ...

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ệ (phép toán số học OK)

w <= a AND b; -- không hợp lệ (phép toán logic không OK)

Các phép toán hợp lệ và không hợp lệ với std_logic_vector: LIBRARY ieee;

USE ieee.std_logic_1164.all; -- không thêm gói đòi hỏi

...

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ệ (phép

toán số học không OK)

w <= a AND b; -- hợp lệ (phép toán logic OK)

* Ví dụ: Các phép toán số học với std_logic_vector LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_unsigned.all; -- bao gồm gói thêm vào

...

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ệ (phép toán số học

OK), không dấu

w <= a AND b; -- hợp lệ (phép toán logic OK).

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

Tải bản đầy đủ (PDF)

(139 trang)