Chuyển đổi dữ liệu 2 8-

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

VHDL không cho phép các phép toán trực tiếp ( số học, logic, …) tác động lên các dữ liệu khác kiểu nhau. Do đó, thường là rất cần thiết đối với việc chuyển đổi dữ liệu từ một kiểu này sang một kiểu khác. Điều này có thể được thực hiện trong hai cách cơ bản: hoặc chúng ta viết một ít code cho điều đó, hoặc chúng ta gọi một FUNCTION từ một gói được định nghĩa trước mà nó cho phép thực hiện các phép biến đổi cho ta.

Nếu dữ liệu được quan hệ đóng ( nghĩa là 2 toán hạng có cùng kiểu cơ sở, bất chấp đang được khai báo thuộc về hai kiểu lớp khác nhau), thì std_logic_1164 của thư viện ieee cung cấp các hàm chuyển đổi dễ thực hiện.

* Ví dụ: các phép toán hợp lệ và không hợp lệ đối với các tập con TYPE long IS INTEGER RANGE -100 TO 100;

TYPE short IS INTEGER RANGE -10 TO 10; SIGNAL x : short;

...

y <= 2*x + 5; -- lỗi, không phù hợp kiểu

y <= long(2*x + 5); -- OK, kết quả được chuyển đổi thành kiểu long

Nhiều hàm chuyển đổi dữ liệu có thể được tìm trong gói std_logic_arith của thư viện ieee:

o conv_integer(p): chuyển đổi một tham số p của kiểu INTEGER,

UNSIGNED, SIGNED, hoặc STD_ULOGIC thành một giá trị INTEGER. Lưu ý rằng STD_LOGIC_VECTOR không được kể đến.

o conv_unsigned(p, b): chuyển đổi một tham số p của kiểu

INTEGER, UNSIGNED, SIGNED, hoặc STD_ULOGIC thành một giá trị UNSIGNED với kích cỡ là b bit.

o conv_signed(p, b): chuyển đổi một tham số p của kiểu INTEGER,

UNSIGNED, SIGNED, hoặc STD_ULOGIC thành một giá trị SIGNED với kích cỡ là b bits.

o conv_std_logic_vector(p, b): chuyển đổi một tham số p thuộc kiểu

dữ liệu INTEGER, UNSIGNED, SIGNED, hoặc STD_LOGIC thành một giá trị STD_LOGIC_VECTOR với kích thước b bits.

* Ví dụ: chuyển đổi dữ liệu: LIBRARY ieee;

USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; ...

SIGNAL a: IN UNSIGNED (7 DOWNTO 0); SIGNAL b: IN UNSIGNED (7 DOWNTO 0);

SIGNAL y: OUT STD_LOGIC_VECTOR (7 DOWNTO 0); ...

y <= CONV_STD_LOGIC_VECTOR ((a+b), 8);

-- Phép toán hợp lệ: a+b được chuyển đổi từ UNSIGNED thành một

-- giá trị 8-bit STD_LOGIC_VECTOR, sau đó gán cho y. Một cách khác có thể chọn đã được đề cập đến trong mục trước đây. Nó bao gồm việc sử dụng các gói std_logic_signed và std_logic_unsigned từ thư viện ieee. Các gói này cho phép các phép toán với dữ liệu STD_LOGIC_VECTOR được thực hiện nếu dữ liệu đã là kiểu SIGNED hoặc UNSIGNED, một cách lần lượt.

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