Tải bản đầy đủ (.pdf) (52 trang)

Bài giảng thiết kế hệ thống số: Ngôn ngữ mô tả phần cứng HDL( Ngôn ngữ VHDL)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (860.62 KB, 52 trang )

Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

Chương 5 : NGÔN NGỮ MÔ TẢ PHẦN CỨNG HDL
Hardware Description Language

Phần C: Ngôn ngữ VHDL (VHSIC HDL = Very-High-Speed Integrated Circuits)

GV: TS Võ Đình Tùng


Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

7.1. TỔNG QUAN NGÔN NGỮ VHDL
VHDL = VHSIC HDL (very-high-speed integrated circuits hardware
descripton language)
VHDL là một ngôn ngữ mô tả phần cứng, được dùng phổ biến trong việc thiết
kế các mạch tích hợp và các hệ thống số một cách dễ dàng và hiệu quả với tốc độ cao.
Ngôn ngữ VHDL dựa trên một ngôn ngữ mô tả phần cứng khác là VHSIC
(Very High Speed Integated Circuit) do bộ quốc phòng Mỹ phát triển từ năm 1980.
Phiên bản đầu tiên của ngôn ngữ này là VHDL 87. VHDL là một ngôn ngữ mô tả phần
cứng đầu tiên được tổ chức IEEE chứng nhận là một tiêu chuẩn chung.
Một trong những điều cơ bản thúc đẩy việc sử dụng ngôn ngữ VHDL đó là tính
chuẩn hóa, độc lập về cơng nghệ của các nhà cung cấp…VHDL được ứng dụng trực
tiếp trên các công nghệ FPGA , CPLDs…Code VHDL được viết để thực thi các mạch
tích hợp trong các thiết bị lập trình được của các hãng như Xilinx, Altera, Amtel …
7.2. CẤU TRÚC CỦA MỘT THIẾT KẾ DÙNG NGÔN NGỮ VHDL.
---------------------------------- Ghi chú


--------------------------------PACKAGE
Library

(Tùy chọn)
(Thư viện)

use
ENTITY

(Bắt buộc)

ARCHITECTURE

(Bắt buộc)

CONFIGURATIONS

(Tùy chọn)

-----------------------------------7.2.1. PACKAGE (KHỐI).
Package là một vùng lưu trữ các dữ liệu để dùng chung cho các entity.
Mô tả dữ liệu bên trong một package cho phép được tham khảo bởi một entity
khác, vì vậy dữ liệu có thể được dùng chung.
Một package bao gồm 2 phần:
+ Phần mô tả định nghĩa giao diện cho package.
+ Phần thân ấn định các hoạt động cụ thể của package.
Cú pháp khai báo PACKAGE được xác định là:
GV: TS Võ Đình Tùng



Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

----------------------------------------------------------------------------------------------------PACKAGE example_arithmetic IS
-- các khai báo khối có thể chứa các khai báo sau:
- Subprogram declaration.
- Type, subtype declaration.
- Constant, deferred constant declaration.
- Signal declaration creates a global signal.
- File declaration.
- Alias declaration.
- Attribute declaration, a user-define attribute.
- Attribute specification.
- Use clause.
END example_arithmetic;
----------------------------------------------------------------------------------------------------Tất cả các đối tượng khai báo trong package có thể được truy xuất bởi bất kỳ
một thiết kế nào đó bằng cách sử dụng mệnh đề use và khai báo library.
----------------------------------------------------------------------------------------------------library my_lib;
use my_lib.example_arithmetic.all;
----------------------------------------------------------------------------------------------------Một số thư viện chuẩn
library ieee;
use ieee.std_logic_1164.all;
std_logic_1164: là thư viện logic chuẩn của IEEE (đoạn 1164), mục đích cung
cấp các chuẩn cơ bản để có thể mô tả các kiểu dữ liệu kết nối trong VHDL.
std_logic_arith: là thư viện chứa tập các phép toán và hàm
Kiểu std_logic có thể có các giá trị
U Uninitialized
X Unknown
0 Zero

1 One
Z Tristate (Must be upper case!)
GV: TS Võ Đình Tùng


Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

W Weak unknown
L Weak Zero
H Weak One
- Don't care
Ngoài ra có thể tự tạo riêng các thư viện trong thiết kế.
7.2.2. ENTITY
Khai báo entity chỉ dùng để mô tả ngõ vào và ngõ ra của một thiết kế. Mức cao
nhất của bất kỳ một thiết kế VHDL là một khai báo entity đơn, khi thiết kế trong
VHDL, tên của file lưu trữ phải trùng với tên theo sau của từ khóa entity.
Ví dụ, mơ tả bộ cộng bán phần sau

----------------------------------------------------------------------------------------------------library ieee;
use ieee.std_logic_1164.all;
ENTITY HALF_ADDER IS
PORT( A,B : IN BIT;
SUM,CARRY : OUT BIT);
END HALF_ADDER;
----------------------------------------------------------------------------------------------------Trong khai báo ENTITY, có 4 kiểu tín hiệu khác nhau:
• IN: mơ tả các ngõ vào entity. Kiểu IN thì được sử dụng cho các ngõ vào
clock, các ngõ vào điều khiển,…
• OUT: mơ tả dịng dữ liệu đi ra khỏi entity, entity sẽ không thể đọc các tín hiệu

này, kiểu OUT chỉ được sử dụng khi tín hiệu không được sử dụng bởi bất kỳ
kiểu nào trong entity.
• BUFFER: Kiểu tín hiệu này mơ tả dịng dữ liệu đi ra khỏi entity, nhưng entity
có thể đọc những tín hiệu này (mục đích đọc lại tín hiệu ngõ ra ở bên trong của
GV: TS Võ Đình Tùng


Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

cấu trúc). Tuy nhiên , tín hiệu sẽ khơng thể điều khiển từ ngõ ra của entity, vì
vậy nó khơng thể được sử dụng cho các dữ liệu ngõ vào.
• INOUT: Kiểu tín hiệu này cho phép tín hiệu có thể có cả hai kiểu: vào và ra,
khi khai báo tín hiệu theo kiểu INOUT thì tín hiệu có thể được điều khiển từ
ngõ ra của entity. Kiểu tín hiệu này chỉ nên sử dụng khi thật cần thiết(ví dụ như
bus dữ kiệu 3 trạng thái), và khi sử dụng kiểu tín hiệu này thì mã của chương
trình sẽ trở nên khó hiểu hơn đối với người thiết kế.
Loại tín hiệu cũng phải được mô tả trong khai báo PORT, loại tín hiệu sẽ mơ tả
các giá trị mà tín hiệu đó có thể được ấn định, ngồi ra có thể mơ tả một vector những
tín hiệu có cùng loại.
 Lưu ý: trong file report, nếu không gán chân linh kiện thì các biến ngõ vào và ra
sẽ được gán ngẫu nhiên. Để gán các chân, có thể thực hiện từ phần mềm hỗ trợ
hoặc thực hiện như sau:
Ví dụ:
----------------------------------------------------------------------------------------------------ENTITY my_design is
Port (a, b : in integer range 0 to 7;
c : bit_vector (3 to 5);
d : bit_vector (27 downto 25);
e : out Boolean);

attribute pinnum: string;
attribute pinnum of c: signal is "1,2,3";
attribute pinnum of d: signal is "6,5,4";
attribute pinnum of e: signal is "2";
END my_design;
----------------------------------------------------------------------------------------------------7.2.3. ARCHITECTURE.
Chức năng của architecture là mơ tả mối liên hệ giữa các tín hiệu ngõ vào và tín
hiệu ngõ ra ( bao gồm cả những tín hiệu BUFFER), có thể viết nhiều kiến trúc khác
nhau trong một entity, nhưng chỉ một trong số đó có khả năng xuất hiện trong mã
VHDL. architechture có 3 dạng: mơ tả cấu trúc (structure); mơ tả dịng dữ liệu (data
flow); mơ tả hành vi (behavioral)
GV: TS Võ Đình Tùng


Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

7.2.3.1. Mơ tả architechture dưới dạng cấu trúc (structure)
Ví dụ chương trình bộ cộng trên sẽ có dạng:
----------------------------------------------------------------------------------------------------ENTITY HALF_ADDER IS
PORT( A,B :

IN BIT;

SUM,CARRY :

OUT BIT);

END HALF_ADDER;

ARCHITECTURE HA_STRUCTURE OF HALF_ADDER IS
Component XOR2
Port(X,Y: in BIT; Z: out BIT);
End component
Component AND2
Port(L,M: in BIT; N: out BIT);
End component
BEGIN
X1: XOR2 port map (A,B,SUM);
A1: AND2 port map (A,B,CARRY);
END HA_STRUCTURE;
----------------------------------------------------------------------------------------------------Chú ý, trong trường hợp này các tín hiệu trong Port Map (ánh xạ cổng) của đối
tượng trong thành phần này và các tín hiệu trong khai báo phải được liên kết theo vị trí
7.2.3.2. Mơ tả architechture dưới dạng dịng dữ liệu (data flow)
Ví dụ chương trình bộ cộng trên sẽ có dạng:
----------------------------------------------------------------------------------------------------ENTITY HALF_ADDER IS
PORT( A,B :

IN BIT;

SUM,CARRY :

OUT BIT);

END HALF_ADDER;
ARCHITECTURE HA_STRUCTURE OF HALF_ADDER IS
BEGIN
SUM<=A xor B;
CARRY<=A and B;
GV: TS Võ Đình Tùng



Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

END HA_STRUCTURE;
----------------------------------------------------------------------------------------------------Mơ hình dịng dữ liệu sử dụng phát biểu gán tín hiệu đồng thời, ký hiệu <= chỉ
giá trị được gán cho tín hiệu. Phép gán được thực hiện khi có 1 sự kiện tín hiệu của
biểu thức bên phải.
7.2.3.3. Mô tả architechture dưới dạng hành vi (behavioral)
Kiểu mô tả hành vi bao gồm tập hợp thứ tự các phép gán tín hiệu tuần tự được
khai báo bên trong phát biểu process.
Biến được khai báo trong process là biến cục bộ. Tín hiệu khơng được khai báo
trong process
Ví dụ chương trình bộ cộng trên sẽ có dạng:
----------------------------------------------------------------------------------------------------ENTITY HALF_ADDER IS
PORT( A,B : IN BIT;
SUM,CARRY : OUT BIT);
END HALF_ADDER;
ARCHITECTURE HA_STRUCTURE OF HALF_ADDER IS
BEGIN
Process(A,B);
Begin
SUM<=A xor B;
CARRY<=A and B;
End process;
END HA_STRUCTURE;
----------------------------------------------------------------------------------------------------Ví dụ mơ tả một D-FF:


GV: TS Võ Đình Tùng


Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

----------------------------------------------------------------------------------------------------ENTITY DFF IS
PORT( D,CK :
Q:

IN BIT;
OUT BIT);

END DFF;
ARCHITECTURE DFF_BEHAVIOR OF DFF IS
BEGIN
Process(CK);
Begin
If rising_edge(ck) then
Q<=D;
End if;
End process;
END DFF_BEHAVIOR ;
----------------------------------------------------------------------------------------------------7.2.3.4. Mô tả architechture dưới dạng hỗn hợp (mixed style)
Có thể trộn lẫn 3 kiểu trong một architechture
Ví dụ mơ tả mạch cộng toàn phần (FULL_ADDER) sau:

----------------------------------------------------------------------------------------------------ENTITY FULL_ADDER IS
PORT( A,B,CIN :

GV: TS Võ Đình Tùng

IN BIT;


Bài giảng thiết kế hệ thống số

SUM, COUT :

Chương 5C: Ngôn ngữ VHDL

OUT BIT);

END DFF;
ARCHITECTURE FA_MIXED OF FULL_ADDER IS
Component XOR2
Port(X,Y: in BIT; Z: out BIT);
End component
Signal S1: BIT

--Khai báo tín hiệu cục bộ trong architechture

BEGIN
X1: XOR2 port map (A,B,S1); --structure
Process(A,B,CIN); --behavior
Variable T1,T2,T3: BIT;
Begin
T1:=A and B;
T2:=A and CIN;
T3:=B and CIN;

COUT<=T1 or T2 or T3;
End process;
SUM<=S1 xor CIN; --dataflow
END FULL_ADDER;
----------------------------------------------------------------------------------------------------7.2.4. CONFIGURATION
Configuration dùng để liên kết các hợp phần tới entity. Configuration ban đầu
có thể được ấn định tới rất nhiều architecture trong một entity.

GV: TS Võ Đình Tùng


Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

Định cấu hình cho phép mơ phỏng các thiết kế ở thành phần con, dễ dàng kiểm
tra được thiết kế hơn một chương trình lớn. Một cấu hình được dùng để nối từng cặp
như sau:
• Một thân architecture tới khai báo entity của nó.
• Một component với một entity.
Ví dụ xây dựng một entity FULL_ADDER ở trên có thể tách ra làm ba
architecture body: FA_BEHAVIOR, FA_STRUCTURE, và FA_MIXED. Một
architecture bất kỳ có thể được chọn bằng cách đặc tả một configuration thích hợp.
----------------------------------------------------------------------------------------------------Library HS_LIB, CMOS_LIB;
ENTITY FULL_ADDER IS
Port(A,B,Cin : IN BIT; SUM, Cout: OUT BIT);
END FULL_ADDER;
ARCHITECTURE FA_STR OF FULL_ADDER IS
Component XOR2
Port(D1,D2 : IN BIT; DZ : OUT BIT);

END componen;
Component AND2
Port ( Z: OUT BIT; B0,B1: IN BIT);
END Component;
-- Đặc tả cấu hình:
CONFIGURATION FA_BINDING OF FULL_ADDER IS
For FA_STR
For X1,X2 : XOR2
use entity WORK.XOR2(XOR2BEH);
End for;
-- liên kết thực thể với nhiều đối tượng của một thành phần.
For A3: AND2
Use entity HS_LIB.AND2HS(AND2STR);
PORT MAP (HS_B => A1, HS_Z=>Z, HS_A => A0 );
End for;
--liên kết thực thể với các đối tượng đơn của một thành phần.
GV: TS Võ Đình Tùng


Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

For all : OR2
Use entity CMOS_LIB.OR2CMOS(OR2STR);
End for;
-- liên kết thực thể với tất cả các đối tượng của thành phần OR2.
For others: AND2
Use entity WORK.A_GATE(A_GATE_BODY);
PORT MAP(A0,A1,Z);

End for;
-- liên kết thực thể với tất cả các đối tượng không được liên kết của
thành phần AND2.
End for;
End for;
Signal S1, S2, S3, S4, S5: BIT;
BEGIN
X1: XOR2 port map(A, B, S1);
X1: XOR2 port map(S1, Cin, SUM);
A1: AND2 port map(S2, A, B);
A2: AND2 port map(S3, B, Cin);
A3: AND2 port map(S4, A, Cin);
O1: OR2 port map(S2, S3, S5);
O2: OR2 port map(S3, B, Cin);
NAND_GATE port map(S4,S5,Cout);
END FA_STR;
----------------------------------------------------------------------------------------------------Có 4 đặc tả cấu hình trong phần khai báo của thân kiến trúc (architecture body):
• Đặc tả thứ nhất chỉ rằng đối tượng có nhãn X1 và X2 của component XOR2
liên kết với entity bởi cặp entity - architecture XOR2 và XOR2BEH có sẵn
trong thư viện WORK.
• Đặc tả thứ hai liên kết đối tượng component AND2 có nhãn A3 đến entity bởi
cặp entity - architecture AND2HS và AND2STR đã có trong thư viện thiết kế
HS_LIB. Anh xạ của cổng thành phần (AND2 ) và các cổng thực
thể(AND2HS) được liên kết theo tên (name association).
GV: TS Võ Đình Tùng


Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL


• Đặc tả thứ ba chỉ rằng tất cả các đối tượng của component OR2 được liên kết
với entity bởi cặp entity - architecture có sẵn trong thư viện thiết kế
CMOS_LIB.
• Đặc tả cuối cùng chỉ rằng tất cả các đối tượng không liên kết (unbound) của
component AND2, đối tượng A1 và A2 được liên kết tới entity khác là:
A_GATE có architecture A_GATE_BODY, kiến trúc này có sẵn trong thư
viện WORK.
Trong ví dụ này đã chỉ ra các đối tượng của cung một thành phần (component)
có thể được liên kết (bound) với các thực thể khác nhau.
7.3. CÁC KHAI BÁO TRONG VHDL.
7.3.1. Khai báo kiểu hỗ trợ
Kiểu liệt kê, số nguyên, dãy một chiều và kiểu bản ghi.
7.3.1.1 Kiểu liệt kê
Ví dụ
----------------------------------------------------------------------------------------------------Type STD_ULOGIC is (‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘_’);
--std_ulogic là 1 kiểu liệt kê bao gồm 9 giá trị được khai báo là
USignal S: STD_ULOGIC;
Type STATE_TYPE is (HALT, READY, RUN, ERROR);
--HALT< READY< RUN< ERROR
Variable STATE: STATE_TYPE;
Type CODE_TYPE is (NUL, ‘0’, ‘1’);
Function CODE (C: in INTEGER) return CODE_TYPE;
----------------------------------------------------------------------------------------------------Kiểu STD_ULOGIC và STATE_TYPE là 2 kiểu liệt kê; tuy nhiên mức độ trừu
tượng của STATE_TYPE cao hơn của STD_ULOGIC.
Trật tự các giá trị xuất hiện trong khai báo liệt kê định nghĩa thứ tự của chúng,
giá trị bên trái nhỏ hơn giá trị bên phải.
7.3.1.2 Kiểu nguyên
Kiểu nguyên là 1 tập hợp những giá trị rơi vào vùng số ngun được chỉ ra.

Ví dụ:
GV: TS Võ Đình Tùng


Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

----------------------------------------------------------------------------------------------------type LENGTH is range 0 to 1000;
type BYTE_INT is range –128 to 127;
type MY_INTEGER is range -2147483647 to 2147483647;
----------------------------------------------------------------------------------------------------7.3.1.3. Kiểu dãy nhiều chiều.
Kiểu dãy nhiều chiều được VHDL hỗ trợ để định nghĩa một tập chỉ số. Tuy
nhiên chỉ có dãy một chiều được công cụ tổng hợp cho phép. Vậy phải khai báo hai
dãy một chiều thay vì một dãy hai chiều.
Ví dụ:
----------------------------------------------------------------------------------------------------Type WORD is array (31 downto 0) of BIT;
Type RAM is array (1023 downto 0) of WORD;
----------------------------------------------------------------------------------------------------Thay vì:
----------------------------------------------------------------------------------------------------Type OTHER_RAM is array (1023 downto 0, 31 downto 0) of BIT
----------------------------------------------------------------------------------------------------7.3.1.4. Kiểu bản ghi
Kiểu bản ghi định nghĩa tập các kiểu khác nhau. Mỗi thành phần bản ghi được
định vị bằng tên của nó, và có thể dịch bởi công cụ tổng hợp như là giá trị độ dời
không đổi hoặc được biến đổi trong vài trường hợp (khái niệm bản ghi khơng cịn tồn
tại nữa, địa chỉ thành phần được tính tốn chỉ một lần và trở thành mã cố định). Ví dụ:
----------------------------------------------------------------------------------------------------Architecture A of E is
Type CODE_TYPE is (NONE, DATA, STATMT) ;
Type ITEM_TYPE is record;
CODE: CODE_TYPE;
INT: INTEGER;

End record;
Signal S1, S2 : ITEM_TYPE;
Begin
GV: TS Võ Đình Tùng


Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

Process
Variable V: ITEM_TYPE;
Begin
S1 <= V;
V:= S2;

S2.INT <= 0;
V.CODE := S1.CODE;
----------------------------------------------------------------------------------------------------7.3.1.5. Tiêu chuẩn IEEE
Khối STD_LOGIC_1164 định nghĩa các giá trị kiểu đa luận lý. Khối này được
hỗ trợ bởi tất cả cơng cụ tổng hợp. Ví dụ:
----------------------------------------------------------------------------------------------------Type STD_LOGIC is ( ‘U’, -- Uninitialized
‘X’, -- Forcing Unknown
‘0’, -- Forcing 0
‘1’, -- Forcing 1
‘Z’, -- High Impedance
‘W’, -- Weak Unknown
‘L’, -- Weak 0
‘H’, -- Weak 1
‘U’, -- Don’t care );

----------------------------------------------------------------------------------------------------'X', '1', '0' là giá trị mạnh và trội hơn các giá trị yếu 'W', 'L', 'H' và chúng lại trội
hơn 'Z'. '1' và '0' có thể hiểu như là nối nguồn và nối đất.
Giá trị 'U'và 'W' được gọi là giá trị gần luận lý, chủ yếu có chức năng mơ phỏng
và hiển nhiên khơng có ý nghĩa phần cứng. Giá trị 'U' là chữ tận cùng bên trái trong
định nghĩa STD_ULOGIC liệt kê, và là giá trị mặc định cho các biến số hoặc các tín
hiệu ban đầu trước khi được gán các giá trị 'X' và 'W' biểu diễn trạng thái mà bộ mơ
phỏng khơng thể xác định được. 'W' có ảnh hưởng ít hơn có thể bị gán đến '0', '1' và
'X'.

GV: TS Võ Đình Tùng


Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

Do các công cụ tổng hợp chưa thể phân biệt giữa các độ mạnh yếu, nên các giá
trị 'L' và 'H' khơng có ngữ nghĩa tổng hợp chuẩn.
'Z' có thể được dùng trong mô phỏng như là kết quả khi khơng có bộ điều khiển
nào đang hoạt động. Đối với tổng hợp, phần cứng đặc biệt được ám chỉ khi gán phép
gán giá trị vô hướng 'Z' được dùng, mục đích của phép gán là đặt đầu ra tới bộ đệm 3
trạng thái.
7.3.2. Các kiểu không hỗ trợ.
Vài kiểu dữ liệu khơng được dùng cho mục đích tổng hợp (ví dụ, tất cả kiểu vật lý
định nghĩa bởi người thiết kế không được hỗ trợ), kiểu vật lý định nghĩa trước TIME
không được hỗ trợ. Ngay cả sự ràng buộc thời gian đối với tổng hợp không được biểu
diễntrong VHDL với các biểu thức thời gian. Do đó mệnh đề after và reject khơng
được dịch và khơng có cơng cụ tổng hợp nào có thể đảm bảo rằng tín hiệu sẽ thay đổi
sau một khoảng thời gian chính xác.
Nếu các mệnh đề này được sử dụng trong mô tả VHDL, công cụ tổng hợp sẽ bỏ

qua và kết quả phần cứng có thể mâu thuẫn với mơ tả đầu vào. Điều này nói rằng kiểu
mẫu chính xác cho tổng hợp không dùng bất kỳ biểu thức thời gian nào, bao gồm lệnh
biểu thức thời gian wait for. Trong mô phỏng qúa trình bị tạm ngưng trong thời gian
định nghĩa bởi biểu thức for. Trong suốt giai đoạn này, tất cả tín hiệu giữ các giá trị
mới của chúng. Trong miền tổng hợp khơng thể phỏng đốn phần cứng với các kết quả
như vậy mà khơng cung cấp phần cứng vì nó quá phức tạp và quá đặc biệt (như bộ
định thời gian).
7.3.3. Các kiểu con.
Các kiểu con rất hữu dụng cho tổng hợp. Ở mỗi bước mô phỏng, các kiểu con
cung cấp khả năng mạnh mẽ cho việc kiểm tra sử dụng kiểu. Các kiểu con còn thừa
hưởng tất cả toán tử định nghĩa từ các kiểu cơ bản của chúng.
Ví dụ: chức năng thao tác trên kiểu BIT_VECTOR có thể được dùng với bất kỳ
kiểu con của BIT_VECTOR dài bằng giá trị cịn lại trong khoảng thích hợp.
7.4. CÁC ĐỐI TƯỢNG VHDL
Đối tượng trong VHDL là các thông tin về hằng số, biến số và tín hiệu.
7.4.1. Hằng số.
Các khai báo hằng số:
Constant constant_name : type_name [:=value]
GV: TS Võ Đình Tùng


Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

Ví dụ:
----------------------------------------------------------------------------------------------------Constant rise_time : time :=10 ns;
Constant bus_width : integer :=8;
----------------------------------------------------------------------------------------------------Ví dụ:
----------------------------------------------------------------------------------------------------Type TAB2 is array (BIT, BIT) of BIT;

Constant AND_TAB: TAB2 := ((‘0’, ’0’), (‘0’, ‘1’));
----------------------------------------------------------------------------------------------------Giá trị hằng số được tính tốn chỉ một lần. Q trình tổng hợp chấp nhận hằng
số của bất kỳ kiểu tổng hợp nào.
Trong trường hợp khai báo như vậy không tạo ra bất kỳ phần cứng nào. Nếu
hằng số được dùng trong phép gán tín hiệu như các lệnh dưới đây thì phần cứng được
suy ra:
Ví dụ:
----------------------------------------------------------------------------------------------------Signal Z, A, B : BIT;

Z <= AND_TAB (A,B);
----------------------------------------------------------------------------------------------------Sự khai báo hằng số không tạo ra phần cứng. Hằng số chỉ cung cấp điều kiện để
xác định phần cứng. Hằng số là một biểu thức vì vậy nó tồn tại trong cùng một nơi như
các biểu thức:
Ví dụ: Phía phải của phép gán tín hiệu
----------------------------------------------------------------------------------------------------Constant COD1: BIT_VECTOR := X ”EA”;
Constant MASK: BIT_VECTOR:=”01111111”;
Signal V, R, A: BIT_VECTOR(7 downto 0);

begin
V <= COD1; R <= A and MASK;
GV: TS Võ Đình Tùng


Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

----------------------------------------------------------------------------------------------------Ví dụ: trong biểu thức lệnh if hoặc case
----------------------------------------------------------------------------------------------------If S= CST1 then …
Case VALUE is

When CST_N =>…
----------------------------------------------------------------------------------------------------Ví dụ: trong lệnh đồng thời có điều kiện:
----------------------------------------------------------------------------------------------------Z <= CST1 when A=’1’ else S when B= CST2 else CST3;
----------------------------------------------------------------------------------------------------7.4.2. Khai báo biến số và tín hiệu.
Các khai báo biến số
Variable variable_name : type_name [:=value];
Ví dụ:
----------------------------------------------------------------------------------------------------Variable CTRL_STATUS : BIT_VECTOR (10 DOWNTO 0);
----------------------------------------------------------------------------------------------------Ở đây biến CTRL_STATUS là một dãy có 11 phần tử, mỗi phần tử trong dãy có
kiểu là BIT
Ví dụ, Thực hiện mạch sau

----------------------------------------------------------------------------------------------------Entity MEMO_ONE is
Port ( DATA: in BIT_VECTOR (1 downto 0);
CLOCK :in BIT;
Z: out BIT);
Constant K1: BIT_VECTOR : = “01”;
GV: TS Võ Đình Tùng


Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

Constant K2: BIT_VECTOR := “10” ;
End MEMO_ONE;

Architecture A of MEMMO_ONE is
Begin
Process (CLOCK)

Variable A1, A2: BIT_VECTOR(DATA’range);
Variable A3: BIT;
Begin
If CLOCK = ‘1’ and CLOCK’event then
A1 := DATA and K1;
A2 := DATA and K2;
A3 := A1(0) or A2(1);
Z <= A3;
End if;
End process;
End A;
----------------------------------------------------------------------------------------------------Các biến số sử dụng trong ví dụ trên khơng tạo ra bất kỳ phần cứng nào. Thật ra
quá trình tương đương có thể được cho mà khơng có bất kỳ biến nào, ở đó tất cả các
biến được thay thế bởi các phương trình của chúng. Chúng ta có thể viết lại như sau.
----------------------------------------------------------------------------------------------------Begin
If CLOCK = ‘1’ and CLOCK’event then
Z <= (DATA and K2)(1) or (DATA and K1)(0);
End if;
----------------------------------------------------------------------------------------------------Khai báo tín hiệu:
Cú pháp:
Signal signal_name : type_name [:=value]
Ví dụ:

GV: TS Võ Đình Tùng


Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL


----------------------------------------------------------------------------------------------------Signal clock: bit;
--khai báo tín hiệu clock của kiểu bit lấy giá trị 1,0
Signal data_bus : bit_vector( 0 to 7);
-- khai bo tín hiệu data_bus thuộcc kiểu bit_vector có độ rộng 8 bit
----------------------------------------------------------------------------------------------------7.4.3. Các giá trị khởi động.
Trong VHDL, có 3 loại giá trị ban đầu:
• Giá trị mặc định từ định nghĩa kiểu hay kiểu con
• Giá trị ban đầu khi đối tượng được khai báo
• Giá trị được gán khi sử dụng một phát biểu lúc bắt đầu quá trình.
Trường hợp thứ nhất và thứ hai sẽ bị bỏ qua bởi cơng cụ tổng hợp, nên có thể
phát sinh mâu thuẫn giữa hoạt động mô phỏng và kết quả tổng hợp. Do đó đề nghị
phải khởi động một cách rõ ràng và có hệ thống các biến và tín hiệu với các lệnh đặc
biệt. Điều này đạt được trong phần mã tổng hợp phục vụ cho việc xử lý thiết lập/thiết
lập lại và sự khởi động phải được trình bày trong phần này.
Nếu cổng out hoặc thơng số out của chương trình con có giá trị mặc định,
chúng hoạt động giống như một giá trị khởi động cho tín hiệu hoặc biến và sẽ bị cơng
cụ tổng hợp bỏ qua.
7.4.4. Các toán tử số học
Toán tử logic và toán tử bit là một phần của toán tử số học. VHDL định nghĩa
bảy loại toán tử. Chúng được chỉ ở bảng dưới đây với sự tăng dần mức ưu tiên.
Loại Toán tử Ưu tiên

Toán tử

Luận lý

Or and nor nand xor xnor

Quan hệ


= /= > < >= <=

Dịch

Sll Srl Sla SRA Rol Ror

Cộng

+-&

Một ngôi

+-

Nhân

* / mod rem

Hỗn hợp

** abs not

7.4.4.1. Tốn tử luận lý
GV: TS Võ Đình Tùng

Ưu tiên

Thấp nhất

Cao nhất



Bài giảng thiết kế hệ thống số

Chương 5C: Ngôn ngữ VHDL

Toán tử luận lý và toán tử not chấp nhận các tốn hạng có các kiểu BIT,
BOOLEAN, và VECTOR với kích thước giống nhau. Một quy ước được chấp nhận
rộng rãi cho giá trị boolean: TRUE tương đương với giá trị BIT '1' và ngược lại.
Toán tử nand và nor không kết hợp với nhau trong 1 cú pháp liên tục, chúng
phải được ngăn cách bằng dấu () :
A and B nand C; -- trái luật
(A and B ) nand C;-- đúng luật;
Ví dụ:
----------------------------------------------------------------------------------------------------Signal S, X, Y: BIT_VECTOR (1 downto 0);
Signal R, A, B, C : BIT;
Signal T, D, E, F, G: BOOLEAN;
-Begin
S <= X and Y;
R <= (A and B) and C;
T <= D xor E xor F xor G;
----------------------------------------------------------------------------------------------------Sơ đồ kết quả của các hàm trên như sau:

7.4.4.2.Toán tử quan hệ.
Tốn tử quan hệ ln trả về giá trị Boolean '0' hoặc '1' và là kết quả của sự so
sánh hai toán hạng cùng một kiểu cơ bản.
Trong mơ phỏng, tốn tử bằng và khác được định nghĩa rõ ràng cho các kiểu.
Kết quả là TRUE nếu hai tốn hạng có cùng giá trị.
GV: TS Võ Đình Tùng




×