Tải bản đầy đủ (.ppt) (82 trang)

VHDL (PLD) (kỹ THUẬT số SLIDE) (chữ biến dạng do slide dùng font VNI times, tải về xem bình thường)

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 (2.11 MB, 82 trang )

VHDL


VHDL
- VHDL là ngôn ngữ mô tả phần cứng.
- VHDL viết tắt của VHSIC (Very High Speed
Integrated Circuit) Hardware Description
Language
- VHDL không phân biệt chữ viết hoa và
chữ thường.

databus

Databus

DataBus

DATABUS

- VHDL là ngôn ngữ “định dạng tự do”.
if (a=b) then
if

(a=b)

if (a =
b) then
NguyenTrongLuat

then



Thuật ngữ COMPONENT:
- Là khái niệm trung tâm mô tả phần
cứng bằng VHDL để biểu diễn các cấp
thiết kế từ cổng đơn giản đến 1 hệ thống
phức
- Môtạp.
tả component bao gồm ENTITY và
ARCHITECTURE.
- Một component có thể sử dụng các
component khaùc.
mux2to1

nand2

a
b

NguyenTrongLuat

d0

z

d1
sel

y



Mã VHDL cơ bản
LIBRARY
khai báo thư viện
ENTITY
thực thể
ARCHITECTURE
kiến trúc

NguyenTrongLuat


Ví dụ: Mã VHDL mô tả component NAND 2
ngõ vào
LIBRARY ieee;
USE ieee.std_logic_1164.all;

a
b

z

ENTITY nand_gate IS
PORT(
a
: IN STD_LOGIC;
b
: IN STD_LOGIC;
z
: OUT STD_LOGIC);
END nand_gate;

ARCHITECTURE model OF nand_gate IS
BEGIN
z <= a NAND b;
END model;

NguyenTrongLuat


LIBRARY

LIBRARY ieee;
USE ieee.std_logic_1164.all;

- LIBRARY: khai báo thư viện ieee
- USE: sử dụng các định nghóa gói (package)
std_logic_1164
Mô tả các tín hiệu xuất/nhập
ENTITY
của khối component
a
b

z

ENTITY nand_gate IS
PORT(
a
: IN STD_LOGIC;
b
: IN STD_LOGIC;

z
: OUT STD_LOGIC);
END nand_gate;

- ENTITY: đặt tên cho entity (nand_gate)
- PORT: khai báo
cácport
chân
xuất/nhập
* Tên
(portname):
a, b,
z
* Kiểu port (mode): IN,
OUT
* Kiểu tín hieäu (type):
STD_LOGIC
NguyenTrongLuat


* Các kiểu chân PORT I/0
IN: dữ liệu đi vào entity qua port và có thể
được
đọcliệu
trongxuất
entity.
OUT: dữ
ra ngoài entity qua chân
port.
OUT 2

không
thể
vềdữ
lạiliệu
entity.
INOUT:Port
là port
chiều,
chọc
phép
đi
vào
hoặc
ra. tự port OUT, nhưng được phép
BUFFER
: tương
đọc lại bởi entity.
IN

OUT
BUFFER

IN
IN

INOUT
OUT

NguyenTrongLuat



ARCHITECTURE
Mô tả thiết kế bên trong của khối,
chỉ rõ mối quan hệ giữa các ngõ vào
và ngõ ra.
a
b

z

ARCHITECTURE model OF nand_gate IS
BEGIN
z <= a NAND b;
END model;

- ARCHITECTURE: đặt tên cho architecture
(model)
- Có 3 loại mô tả architecture
* Mô tả cấu trúc (Structural)
* Mô tả luồng dữ liệu (Dataflow)
* Mô tả hành vi (Behavioral)
NguyenTrongLuat


ĐỐI
DỮ biểu
LIỆUdiễn
(Data
object)
* Tín TƯNG

hiệu (signal):
cho
các
dây kết nối của mạch. Nó được khai báo
trong phần PORT của khai báo entity hoặc
trong phần đầu trong architecture (trước
BEGIN).
SIGNAL signal_name : signal_type;
SIGNAL a được
: std_logic;
* Biến (Variable):
khai báo và sử
dụng trong process. Biến không phải là tín
hiệu logic thật.
VARIABLE variable_name : variable_type;
VARIABLE b : std_logic;
* Hằng số (Constant): giữ một giá trị
không được thay đổi
CONSTANT constant_name : constant_type;
CONSTANT max : integer;
Các đối tượng dữ liệu có thể được
đặt giá trị đầu, khai báo sau phần khai
báo kiểu dữ liệu _type:= value;
CONSTANT max : integer : = 25;

NguyenTrongLuat


* Sự khác nhau giữa Tín hiệu (Signal) và
Biến (Variable)

- Lệnh gán tín hiệu:
signal_name <= expression;
a <= NOT b AND c;
- Lệnh gán biến:
variable_name := expression;
y := NOT a;
- Phép gán biến (Variable) cho giá trị
tức thời, phép gán của tín hiệu (signal)
bị trễ (delay)
- Tín hiệu (Signal) có thể quan sát dạng
sóng (waveform), nhưng biến (Variable) thì
không.
- Biến (Variable) là cục bộ trong process.
NguyenTrongLuat


KIỂU DỮ LIỆU (Data type)

- Các kiểu dữ liệu là đặc tính của
signal, variable, …
- Các dữ liệu cùng kiểu mới được gán ho
- Có thể tạo ra các kiểu dữ liệu mới
bằng lệnh TYPE hoặc SUBTYPE
* Kiểu BIT và BIT_VECTOR:

*
*
*
*
*


- BIT có giá trị ‘0’ và ‘1’.
- BIT_VECTOR là dãy (array) của BIT.
Kiểu INTEGER
có giá trị TRUE và
Kiểu BOOLEAN:
FALSE.
Kiểu CHARACTER
do người sử dụng
Kiểu liệt kê (ENUMERATION)
định nghóa.
...

NguyenTrongLuat


* STD_LOGIC:

Valu
Meaning
e

- Là kiểu tín
Forcing (Strong driven)
‘X’
hiệu quyết định
Unknown
(có thể được
‘0’
Forcing (Strong driven) 0

lái
bằng
2 trị
ngõ
- Có
9 giá
‘1’
Forcing (Strong driven) 1
vào)
‘Z’
High Impedance
- Hữu ích khi mô phỏng
Weak (Weakly driven)
- Chỉ có 3 giá
‘W’
Unknown
trị ‘0’, ‘1’, ‘Z’ là
Weak (Weakly driven) 0.
có thể tổng hợp ‘L’
Models a pull down.

‘H’

Weak (Weakly driven) 1.
Models a pull up.

SIGNAL a: STD_LOGIC; ‘-’
Care
a là tín hiệuDon't
STD_LOGIC

kiểu 1
‘U’
Uninitialized
bit
SIGNAL b: STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL c: STD_LOGIC_VECTOR(0 TO 7);
b,c là tín hiệu STD_LOGIC kiểu
bus có 8 bit
NguyenTrongLuat


Phép gán tín hiệu kiểu STD_LOGIC
SIGNAL
SIGNAL
SIGNAL
SIGNAL
SIGNAL
SIGNAL

a:
b:
c:
d:
e:
f:

STD_LOGIC;
STD_LOGIC_VECTOR(3 DOWNTO 0);
STD_LOGIC_VECTOR(0 TO 3);
STD_LOGIC_VECTOR(7 DOWNTO 0);

STD_LOGIC_VECTOR(15 DOWNTO 0);
STD_LOGIC_VECTOR(8 DOWNTO 0);

a <= ’1’;
-- giá trị gán đặt giữa 1
dấu nháy đơn ‘ ’
a <= b(2);
-- a <= b(2),
b <= "0000”;
-- giá trị gán đặt giữa 1
dấu nháy kép “ ”
c <= B”0000”;
-- B là ký hiệu cơ số 2 (có
thể bỏ)
d <= ”0110_0111”; -- biểu diễn từng nhóm 4
bit phân cách _
e <= X”AF67”;
-- X là ký hiệu cơ số 16
(Hex)
NguyenTrongLuat


Ghép nối chuỗi
(Concatenation)
SIGNAL a: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL b: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL c, d, e: STD_LOGIC_VECTOR(7 DOWNTO 0);

a <= ”0000”;
b <= ”1111”;

c <= a & b;
“00001111”
d <= ’0’ & ”0001111”;
“00001111”

--

c=

--

d=

e <= ’0’ & ’0’ & ’0’ & ’0’ & ’1’ & ’1’ &
’1’ & ’1’;
-- e =
“00001111”
NguyenTrongLuat


PHÉP TOÁN (Operator)
* Phép toán Logic (Logical Operator):

NOT
NOT AND
AND OR
OR NAND
NAND NOR
NOR XOR
XOR XNOR

XNOR

Sử dụng cho kiểu: bit, bit_vector, boolean,
std_logic, std_logic_vector.
* Phép toán quan hệ (Relationship
Operator):

==

/=
/=

<<

<=
<=

>>

>=
>=

So sánh 2 toán hạng cùng kiểu và kết
quả trả về kiểu boolean
* Phép toán dịch (Shift Operator):

SLL
SLL SRL
SRL SLA
SLA SRA

SRA ROL
ROL ROR
ROR
* Phép toán coäng (Adding Operator):
+
-

+

NguyenTrongLuat

-


* Phép toán nhân (Multiplying Operator):

**

//

MOD
MOD

REM
REM

* Phép toán dấu (Sign Operator):
-++

**

* Phép toán khác (Operator):**

ABS
ABS

* Thứ tự ưu tiên thực hiện các phép
toán

**
*
+
+
=
AND

ABS NOT
/
MOD
REM
(Dấu)
&
/=
<
<=
>
>=
OR NAND NOR XOR XNOR

Các phép toán cùng loại không có ưu
tiên,

nếu cần sử dụng ( )
NguyenTrongLuat


MÔ TẢ THIẾT KẾ (Design description)

MÔ TẢ THIẾT
KẾ

CẤU TRÚC
(Structural)

(Design
description)
LUỒNG DỮ
LIỆU
(Dataflow)

NguyenTrongLuat

HÀNH VI
(Behavioral)


MÔ TẢ CẤU TRÚC (Structural
description)
- Sử dụng các khối component có cấp
thấp
- Các hơn.
khối component này được kết nối

thứ
bậc.
-theo
Các
component
cấp thấp được khai báo
bằng lệnh COMPONENT, đặt ở phần
ARCHITECTURE (trước BEGIN).
x
1
x
2

y

COMPONENT
COMPONENT
PORT
PORT

and2
and2
(x1,x2:IN
(x1,x2:IN STD_LOGIC;
STD_LOGIC;
y:
y: OUT
OUT STD_LOGIC);
STD_LOGIC);
END

END COMPONENT;
COMPONENT;

- Để kết nối component cấp thấp, thực
hiện lệnh thay thế trị số component
(component instantiation) PORT MAP.
* Kết
hợp vị trí (positional
Có 2 cách
:
association)
* Kết hợp theo tên (named
association)
NguyenTrongLuat


* Kết hợp theo tên (named
association)
COMPONENT component_name
port declarations;
END COMPONENT;
...
Label: component_name PORT MAP (
port_name1 => sig_name1,
port_name2 => sig_name2 );
COMPONENT and2
PORT (x1,x2:IN STD_LOGIC;
y: OUT STD_LOGIC);
END COMPONENT;
BEGIN

user1: and2 PORT MAP ( x1 => a, x2 => b,
y => c );
...
NguyenTrongLuat


* Kết hợp vị trí (positional
association)
COMPONENT component_name
port declarations;
END COMPONENT;
...
Label: component_name PORT MAP (
sig_name1, sig_name2, ...
COMPONENT
COMPONENT
PORT
PORT

and2
and2
(x1,x2:IN
(x1,x2:IN STD_LOGIC;
STD_LOGIC;
y:
y: OUT
OUT STD_LOGIC);
STD_LOGIC);
END
END COMPONENT;

COMPONENT;
BEGIN
BEGIN
user1:
user1: and2
and2 PORT
PORT MAP
MAP (( a,
a, b,
b, cc );
);
...
...
NguyenTrongLuat

);


VD: Thiết kế XOR 3
ngõ vào
LIBRARY ieee;
USE ieee.std_logic_1164.all;

a
b

u1_out
result

c


ENTITY xor3 IS
PORT ( a, b, c : IN STD_LOGIC;
result : OUT STD_LOGIC);
END xor3;
ARCHITECTURE structural OF xor3 IS
SIGNAL u1_out: STD_LOGIC;
COMPONENT xor2
PORT ( i1, i2 : IN STD_LOGIC;
y : OUT STD_LOGIC );
END COMPONENT;
BEGIN
u1: xor2 PORT MAP ( i1 => a, i2 => b,
y => u1_out);
u2: xor2 PORT MAP ( i1 => u1_out, i2 => c,
y => result);
END structural;
NguyenTrongLuat


MÔ TẢ LUỒNG DỮ LIỆU (Dataflow
description)
- Mô tả luồng dữ liệu di chuyển từ ngõ
vào đến ngõ ra.
- Sử dụng các phát biểu đồng thời
(Concurrent statement):
* Phép gán bằng phép toán
* Phép gán WHEN - ELSE
* Phép gán WITH – SELECT - WHEN
* Phép tạo GENERATE

- Các phát biểu này được thực thi cùng
thời điểm, vì vậy thứ tự các phát biểu
là như nhau
NguyenTrongLuat


Phép gán bằng phép toán (OPERATOR)
a
b

u1_out
result

c
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY xor3 IS
PORT ( a, b, c : IN STD_LOGIC;
result : OUT STD_LOGIC);
END xor3;
ARCHITECTURE dataflow OF xor3 IS
SIGNAL u1_out: STD_LOGIC;
BEGIN
Result <= u1_out XOR c;
u1_out <= a XOR b;
Result <= u1_out XOR c; u1_out <= a XOR b;
END dataflow;
NguyenTrongLuat



Phép gán tín hiệu theo điều kiện
(Condition Signal Assigment)
WHEN - ELSE
signal_name <= value1 WHEN condition1 ELSE
{value2 WHEN condition2 ELSE}
valueN ;

VD: Mux2to1 LIBRARY ieee;
mux2to1
d0
y

d1
sel

se
l

y

0
1

d0
d1

NguyenTrongLuat

USE ieee.std_logic_1164.all;
ENTITY mux2to1 IS

PORT ( d0, d1 : IN STD_LOGIC;
sel : IN STD_LOGIC;
y : OUT STD_LOGIC);
END mux2to1;
ARCHITECTURE dataflow1 OF mux2to1 IS
BEGIN
y <= d0 WHEN sel = ’0’ ELSE d1;
END dataflow1;
y <= d0 WHEN sel = ’0’ ELSE
d1 WHEN OTHERS;


VD: xnor2

xnor2

a
b

c

a

b

c

0
0
1

1

0
1
0
1

1
0
0
1

LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY xnor2 IS
PORT ( a, b : IN STD_LOGIC;
c : OUT STD_LOGIC);
END xnor2;
ARCHITECTURE dataflow1 OF xnor2 IS
BEGIN
c <= ’1’ WHEN a = ’0’ AND b =
’0’ WHEN a = ’0’ AND b =
’0’ WHEN a = ’1’ AND b =
’1’ WHEN a = ’1’ AND b =
’0’ WHEN OTHERS;
END dataflow1;
NguyenTrongLuat

’0’
’1’

’0’
’1’

ELSE
ELSE
ELSE
ELSE


×