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

Kts c5 vhdl(brief)

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 (21.01 MB, 81 trang )

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)

then

if (a =
b) then
NguyenTrongLuat

1


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 tạp.
- Mô tả component bao gồm ENTITY và ARCHITECTURE.
- Một component có thể sử dụng các component khác.
mux2to1

nand2

a
b

d0

z

d1

y

sel

NguyenTrongLuat

2


Mã VHDL cơ bản
LIBRARY
khai báo thư viện

ENTITY

thực thể

ARCHITECTURE
kiến trúc

NguyenTrongLuat

3


Ví dụ: Mã VHDL mô tả component NAND 2 ngõ vaø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

4


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
ENTITY

Mô tả các tín hiệu xuất/nhập 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ác chân xuất/nhập
* Tên port (portname): a, b, z
* Kiểu port (mode): IN, OUT
* Kiểu tín hieäu (type): STD_LOGIC
NguyenTrongLuat

5


* Các kiểu chân PORT I/0

IN: dữ liệu đi vào entity qua port và có thể được đọc trong entity.
OUT: dữ liệu xuất ra ngoài entity qua chân port.
Port OUT không thể đọc về lại entity.
INOUT: là port 2 chiều, cho phép dữ liệu đi vào hoặc ra.
BUFFER: tương tự port OUT, nhưng được phép đọc lại bởi entity.
IN

OUT
BUFFER

IN
IN

INOUT


OUT
NguyenTrongLuat

6


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

z

b

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

7



ĐỐI TƯNG DỮ LIỆU (Data object)
* Tín hiệu (signal): biểu diễn 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 : std_logic;
* Biến (Variable): được 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

8


* 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

9


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 kết nối với nhau
- 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
* Kiểu BOOLEAN: có giá trị TRUE và FALSE.
* Kiểu CHARACTER
* Kiểu liệt kê (ENUMERATION) do người sử dụng định nghóa.
* ...
NguyenTrongLuat

10



* STD_LOGIC:
- Là kiểu tín hiệu quyết
định (có thể được lái bằng
2 ngõ vào)
- Có 9 giá trị
- Hữu ích khi mô phỏng
- Chỉ có 3 giá trị ‘0’, ‘1’,
‘Z’ là có thể tổng hợp

Value

Meaning

‘X’

Forcing (Strong driven) Unknown

‘0’

Forcing (Strong driven) 0

‘1’

Forcing (Strong driven) 1

‘Z’

High Impedance


‘W’

Weak (Weakly driven) Unknown

‘L’

Weak (Weakly driven) 0.
Models a pull down.

‘H’

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

‘-’

Don't Care

‘U’

Uninitialized

SIGNAL a: STD_LOGIC;
a là tín hiệu STD_LOGIC kiểu 1 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


11


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);

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

-- X là ký hiệu cơ số 16 (Hex)
-- O là ký hiệu cơ số 8 (Octal)
-- b(3) <= c(0), b(2) <= c(1),
-- b(1) <= c(2), b(0) <= c(3)
d(7 downto 6)<= ”11”;
c(0 to 2)<= e(7 downto 5);
a
a
b
c
d
e
f
b

<=
<=
<=
<=
<=
<=
<=
<=

’1’;
b(2);
"0000”;
B”0000”;
”0110_0111”;
X”AF67”;

O”723”;
c;

NguyenTrongLuat

12


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;

--

c = “00001111”

d <= ’0’ & ”0001111”;

--

d = “00001111”

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


NguyenTrongLuat

13


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

NOT

AND

OR

NAND

NOR

XOR

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

SRL

SLA

SRA

* Phép toán cộng (Adding Operator):
NguyenTrongLuat

ROL
+

ROR
14


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


*

/

MOD

REM

* Phép toán dấu (Sign Operator):
* Phép toán khác (Operator):

**

+
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ử duïng ( )
NguyenTrongLuat

15


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

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

CẤU TRÚC

LUỒNG DỮ LIỆU

HÀNH VI

(Structural)

(Dataflow)


(Behavioral)

NguyenTrongLuat

16


MÔ TẢ CẤU TRÚC (Structural description)
- Sử dụng các khối component có cấp thấp hơn.
- Các khối component này được kết nối theo thứ bậc.
- Các component cấp thấp được khai báo bằng lệnh
COMPONENT, đặt ở phần ARCHITECTURE (trước BEGIN).
x1

y

x2

COMPONENT and2
PORT (x1,x2:IN STD_LOGIC;
y: OUT STD_LOGIC);
END 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.
Có 2 cách: * Kết hợp vị trí (positional association)
* Kết hợp theo tên (named association)
NguyenTrongLuat

17



* 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

18


* 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 and2
PORT (x1,x2:IN STD_LOGIC;
y: OUT STD_LOGIC);
END COMPONENT;
BEGIN
user1: and2 PORT MAP ( a, b, c );
...
NguyenTrongLuat

19


VD: Thiết kế XOR 3 ngõ vào

a
b

u1_out

LIBRARY ieee;
USE ieee.std_logic_1164.all; c

result

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

20


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

21



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

22


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
mux2to1
d0
y

d1
sel

sel

y

0
1

d0
d1

NguyenTrongLuat

LIBRARY ieee;
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;
23


xnor2

VD: 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

24


Phép gán tín hiệu có chọn lọc (Select Signal Assigment)
WITH – SELECT - WHEN
WITH select_signal SELECT
signal_name <= value1 WHEN const1_of_select_signal,
{value2 WHEN const2_of_select_signal,}
valueN WHEN OTHERS;
mux2to1
d0
y

d1
sel

sel

y

0
1

d0

d1

NguyenTrongLuat

LIBRARY ieee;
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 dataflow2 OF mux2to1 IS
BEGIN
WITH sel SELECT
y <= d0 WHEN ’0’,
d1 WHEN OTHERS;
END dataflow2;
25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×