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;
SIGNAL y : long; ...
y <= long(2*x + 5); -- OK, kết quả được chuyển đổithành kiểu long 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.
Cỏc kiểu dữ liệu VHDL tổng hợp cơ bản được túm tắt trong bảng 3.2
Bảng 3.2. Tổng hợp cỏc kiểu dữ liệu.