1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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)

82 40 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 82
Dung lượng 3,48 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

MÔ TẢ LUỒNG DỮ LIỆU Dataflow * Phép gán bằng phép toán - 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 * Phép gán WHEN - ELSE * Phép gán WITH –

Trang 1

VHDL

Trang 2

- VHDL là ngôn ngữ mô tả phần cứng

- VHDL viết tắt của V HSIC (Very High Speed

Integrated Circuit) H ardware D escription

L anguage

- 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

Trang 3

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à

Trang 4

Mã VHDL cơ bản

Trang 5

Ví dụ: Mã VHDL mô tả component NAND 2

Trang 6

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)

- 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,

Trang 7

* 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

IN

IN

OUT BUFFER

OUT INOUT

Trang 8

và ngõ ra.

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

a

Trang 9

ĐỐ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;

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

* Hằng số (Constant): giữ một giá trị

không được thay đổi

CONSTANT constant_name : constant_type;

SIGNAL a : std_logic;

VARIABLE b : std_logic;

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;

Trang 10

- Lệnh gán tín hiệu: signal_name <= expression;

- Biến (Variable) là cục bộ trong process .

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

Trang 11

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

- Các kiểu dữ liệu là đặc tính của

signal, variable, …

- Có thể tạo ra các kiểu dữ liệu mới

bằng lệnh TYPE hoặc SUBTYPE

- Các dữ liệu cùng kiểu mới được gán hoặc kết nối với nhau

* 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 liệt kê (ENUMERATION) do người sử dụng

định nghĩa.

* Kiểu CHARACTER

*

Trang 12

SIGNAL a : STD_LOGIC;

SIGNAL b : STD_LOGIC_VECTOR(7 DOWNTO 0);

a là tín hiệu STD_LOGIC kiểu 1 bit

b,c là tín hiệu STD_LOGIC kiểu

e 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.

(có thể được

lái bằng 2 ngõ

vào)

Trang 13

SIGNAL a : STD_LOGIC;

SIGNAL b : STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL c : STD_LOGIC_VECTOR(0 TO 3);

SIGNAL d : STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL e : STD_LOGIC_VECTOR(15 DOWNTO 0);

SIGNAL f : STD_LOGIC_VECTOR(8 DOWNTO 0);

a <= ’1’; giá trị gán đặt giữa 1

dấu nháy đơn ‘ ’

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

NguyenTrongLuat 13

Trang 14

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

Trang 15

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,

* Phép toán dịch (Shift Operator):

SLL SRL SLA SRA ROL ROR

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

Trang 16

-* 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 ** ABS

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

toán

** ABS NOT

* / MOD REM + - (Dấu)

+ - &

= /= < <= > >=

AND OR NAND NOR XOR XNOR

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

Trang 17

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

MÔ TẢ THIẾT

KẾ

(Design description)

Trang 18

MÔ TẢ CẤU TRÚC (Structural

- Các component cấp thấp được khai báo

bằng lệnh COMPONENT, đặt ở phần

ARCHITECTURE (trước BEGIN)

- Để kết nối component cấp thấp, thực

hiện lệnh thay thế trị số component

(component instantiation) PORT MAP

Trang 21

ARCHITECTURE structural OF xor3 IS

SIGNAL u1_out: STD_LOGIC;

result

VD: Thieát keá XOR 3

Trang 22

MÔ TẢ LUỒNG DỮ LIỆU (Dataflow

* Phép gán bằng phép toán

- 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

* Phép gán WHEN - ELSE

* Phép gán WITH – SELECT - WHEN

* Phép tạo GENERATE

Trang 23

ARCHITECTURE dataflow OF xor3 IS

SIGNAL u1_out : STD_LOGIC;

result u1_out

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

Trang 24

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 ;

d0 d1 y <= d0 d1 WHEN OTHERS WHEN sel = ’0’ ; ELSE

VD: Mux2to1

Trang 25

c <= ’1’ WHEN a = ’0’ AND b = ’0’ ELSE

’0’ WHEN a = ’0’ AND b = ’1’ ELSE

’0’ WHEN a = ’1’ AND b = ’0’ ELSE

’1’ WHEN a = ’1’ AND b = ’1’ ELSE

VD: xnor2

a

Trang 26

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 ;

d0 d1

END dataflow2;

Trang 27

WITH select_signal SELECT

signal_name <= value1 WHEN const1_of_select_signal,

{value2 WHEN const2_of_select_signal,} valueN WHEN OTHERS ;

WITH select_signal SELECT

signal_name <= value1 WHEN const1_of_select_signal,

{value2 WHEN const2_of_select_signal,} valueN WHEN OTHERS ;

Tham số const_of_select_signal có thể biểu diễn nhiều giá trị riêng biệt hoặc

1 dãi giá trị liên tiếp.

Trang 28

c <= ’1’ WHEN ”00” | ”11”, ’0’ WHEN OTHERS ;

END dataflow2;

Trang 29

Phát biểu FOR - GENERATE

GENERATE là cách để tạo ra nhiều tình

huống (instance) cho các phát biểu đồng

thời, thường dùng cho các phép gán thay thế trị số tương đương component

xor_array : FOR i IN 7 downto 0 GENERATE

user : xor2 PORT MAP ( x(i) , y(i) , z(i) ); END GENERATE ;

Trang 30

- Là cấu trúc để đưa 1 hằng số vào

trong entity giống khai báo CONSTANT.

- Tiện lợi của generic là có thể sử dụng nó trong phép gán thay thế trị số tương

đương component (component instantitation),

để sử dụng các giá trị hằng số khác

nhau khi tham chiếu component

ENTITY entity_name IS

GENERIC (

generic_name1 : data_type := default_values;

generic_name2 : data_type := default_values;

Trang 31

* Phép gán thay thế trị số component có

GENERIC

Label : component_name

GENERIC MAP ( generic_name1 => sig_name1 , gereric_name2 => sig_name2 );

PORT MAP ( port_name => sig_name );

* Khai báo component có GENERIC

Trang 32

MÔ TẢ HÀNH VI ( Behavioral

description)

- Mô tả sự đáp ứng của ngõ ra theo

ngõ vào

- Các phát biểu tuần tự (Sequential

statement): cho phép mô tả hoạt động

tuần tự của các tín hiệu

* Phát biểu IF

* Phát biểu CASE

* Phát biểu LOOP

- Sử dụng phát biểu PROCESS chứa các

lệnh được thực thi tuần tự, phụ thuộc

vào thứ tự của nó

Trang 33

- Process thực hiện các lệnh bên trong

nó 1 cách tuần tự Vì vậy thứ tự của

các lệnh rất quan trọng.

- Một Architecture có nhiều Process Các

Process là các phát biểu đồng thời

- Process được kích hoạt khi có sự thay đổi của 1 tín hiệu.

[Name:] PROCESS ( sensitivity list ) variable declarations BEGIN

sequential statements END PROCESS [Name] ;

Sensitivity list : danh sách cảm nhận

Variable declarations : khai báo biến

Trang 34

* Danh sách cảm nhận

(sensitivity list):

- Khai báo các tín hiệu dùng để kích hoạt

Process khi tín hiệu thay đổi (thường gọi

là sự kiện event) Thường là các tín hiệu

ngõ vào.

- Khi Process được kích hoạt thì các phát

biểu bên trong process được thực hiện

tuần tự Khi thực hiện xong phát biểu

cuối cùng thì Process vào trạng thái chờ (suspend) * Khai báo biến (variable

declaration): Khai báo các biến cục bộ sử

dụng trong Process

* Phát biểu tuần tự :

- Đặt giữa BEGIN và END của

Process.

- Gồm các phép gán tín hiệu và biến, các phát biểu tuần tự IF, CASE, LOOP…

Trang 35

Phát biểu IF - THEN - ELSE

IF condition1 THEN sequential_statements_1;

{ ELSIF condition2 THEN sequential_statements_1;}

END PROCESS;

Trang 36

Phát biểu CASE - WHEN

CASE select_signal IS

WHEN value1 => sequential_statements_1;

WHEN value2 => sequential_statements_2;

WHEN OTHERS => sequential_statements_N;

END PROCESS;

Trang 37

Phát biểu FOR - LOOP

[Name:] FOR variable_name IN range LOOP

FOR j IN 3 downto 0 LOOP

IF reset(j) = ’1’ THEN data(j) := ’0’;

END IF ;

END LOOP ;

Tương tự như phát biểu đồng thời

FOR_GENERATE.

Trang 38

Phát biểu WHILE - LOOP

Trang 39

THIẾT KẾ HỆ TỔ HỢP BẰNG VHDL

- Hệ tổ hợp có thể được thực hiện bằng

các phát biểu đồng thời (concurent

statement) và tuần tự (sequential

statement)

- Phát biểu đồng thời (concurent staement)

được dùng trong mô tả cấu trúc

(structural description) và luồng dữ liệu

(dataflow description)

- Phát biểu tuần tự (sequent statement)

được dùng trong mô tả hành vi (dataflow

description)

Trang 40

BỘ CỘNG

A D D E R

Trang 41

b3 b2 b1 b0

s3 s2 s1 s0

s : OUT STD_LOGIC_VECTOR(3 downto 0);

Cout : OUT STD_LOGIC);

stage0 : fulladder PORT MAP ( a(0) , b(0) , Cin , s(0) , c(1) ) ;

stage1 : fulladder PORT MAP ( a(1) , b(1) , c(1) , s(1) , c(2) ) ; stage2 : fulladder PORT MAP ( a(2) , b(2) , c(2) , s(2) , c(3) ) ; stage3 : fulladder PORT MAP ( a(3) , b(3) , c(3) , s(3) , Cout ) ;

END Structure;

Thiết kế bộ cộng 4 bit adder4

sử dụng fulladder

Trang 42

Lệnh USE ieee.std_logic_signed.all cho phép

sử dụng gói (package) std_logic_signed , để

thực hiện phép toán số học trên các tín

Bộ cộng 4 bit adder4 sử dụng

phép cộng số học

s : OUT STD_LOGIC_VECTOR(3 downto 0);

Cout : OUT STD_LOGIC);

Trang 43

BỘ DỒN KÊNH

M U X

y <= (NOT s(1) AND NOT s(0) AND d0 ) OR

(NOT s(1) AND s(0) AND d1 ) OR

( s(1) AND NOT s(0) AND d2 ) OR

( s(1) AND s(0) AND d3 );

END Function;

MUX4

d0 d1 d2 d3 s1 s0

ARCHITECTURE Dataflow OF mux4 IS

Trang 44

M0 : mux4 PORT MAP ( d(0) , d(1) , d(2) , d(3) , c(1 downto 0) , w(0) );

M1 : mux4 PORT MAP ( d(4) , d(5) , d(6) , d(7) , c(1 downto 0) , w(1) );

M2 : mux4 PORT MAP ( d(8) , d(9) , d(10) , d(11) , c(1 downto 0) , w(2) ); M3 : mux4 PORT MAP ( d(12) , d(13) , d(14) , d(15) , c(1 downto 0) , w(3) ); M4 : mux4 PORT MAP ( w(0) , w(1) , w(2) , w(3) , c(3 downto 2) , f );

END Structure;

NguyenTrongLuat 44

Thiết kế MUX 16 1 sử dụng

MUX 4 1

mux16

Trang 45

MUXES : mux4 PORT MAP (

d(4*i) , d(4*i+1) , d(4*i+2) , d(4*i+3) , c(1 downto 0) , w(i) );

Trang 46

BỘ GIẢI

D E C O D E R

en x1 x0 y3 y2 y1 y0

0 X

X

x0 x1 en dec2x4

ARCHITECTURE flow2 OF

dec2x4 IS SIGNAL

en_x : STD_LOGIC_VECTOR(

2 downto 0);

BEGIN en_x <= en & x ;

WITH en_x SELECT

f <= ”0001” WHEN ”100” ,

”0010” WHEN ”101” , ”0100” WHEN ”110” , ”1000” WHEN ”111” ,

Trang 47

Thieát keá IC DECCODER 74138

data : STD_LOGIC_VECTOR(2 downto 0);

temp : STD_LOGIC_VECTOR(7 downto 0);

BEGIN

data <= c & b & a ;

WITH data SELECT temp <= ”11111110” WHEN ”000” ,

Trang 49

For … loop

Sử dụng hàm CONV_INTEGER

để đổi dữ liệu kiểu STD_LOGIC_VECTOR thành kiểu INTEGER.

Để sử dụng hàm này, trong phần LIBRARY cần phải khai báo gói (package)

Trang 50

BỘ MÃ HÓA ƯU

TIÊN E

N C O D E R

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY encoder IS

PORT ( i : IN STD_LOGIC_VECTOR(3 downto 0);

x : OUT STD_LOGIC_VECTOR(1 downto 0);

v : OUT STD_LOGIC);

END encoder;

ARCHITECTURE flow OF encoder IS

BEGIN

x <= ”11” WHEN i(3) = ’1’ ELSE

”10” WHEN i(2) = ’1’ ELSE

”01” WHEN i(1) = ’1’ ELSE

to ”0111”, ”11” WHEN OTHERS ;

WITH i SELECT

V <=’0’ WHEN ”0000”, ’1’ WHEN OTHERS;

Trang 51

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY encoder2 IS

PORT ( i : IN STD_LOGIC_VECTOR(3 downto 0);

x : OUT STD_LOGIC_VECTOR(1 downto 0);

END PROCESS ;

Sử dụng

PROCESS

Trang 52

BỘ SO SÁNH C O M

P A R A T O R

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY compare IS

PORT ( a, b : IN STD_LOGIC_VECTOR(3 downto 0);

aeqb, agtb, altb : OUT STD_LOGIC);

END compare;

ARCHITECTURE behavior1 OF compare IS

BEGIN

aeqb <= ’1’ WHEN a = b ELSE ’0’;

agtb <= ’1’ WHEN a > b ELSE ’0’;

altb <= ’1’ WHEN a < b ELSE ’0’;

IF a = b THEN aeqb <= ’1’; END IF;

IF a > b THEN agtb <= ’1’; END IF;

IF a < b THEN altb <= ’1’; END IF;

END PROCESS;

BỘ SO SÁNH 4

BIT

Trang 53

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY led IS

PORT ( bcd : IN STD_LOGIC_VECTOR(3 downto 0);

segs : OUT STD_LOGIC_VECTOR(6 downto 0);

Trang 54

THIẾT KẾ HỆ TUẦN TỰ BẰNG VHDL

- Hệ tuần tự chỉ được thực hiện bằng

các phát biểu tuần tự (sequential

statement)

- Thực hiện: mạch chốt, FF, thanh ghi, bộ

đếm, máy trạng thái.

- Biến (Variable) chỉ tồn tại cục bộ trong

Process, vì vậy muốn lấy giá trị của biến

ra ngoài Process thì ta phải gán biến cho tín hiệu (Signal).

- Trong Process, biến được cập nhật giá trị

sau mỗi phát biểu; còn tín hiệu chỉ được

cập nhật ở cuối Process

Trang 56

- Gói std_logic_1164 có định nghĩa 2 hàm

(function): rising_edge để phát hiện cạnh lên và

IF rising_edge( clk ) THEN

Trang 58

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY regn IS

GENRERIC ( n : NATURAL := 4);

PORT ( D : IN STD_LOGIC_VECTOR(n-1 downto 0);

Clk , Reset : _VECTORIN STD_LOGIC;

Q : OUT STD_LOGIC(n-1 downto 0));

Trang 59

BỘ ĐẾM (COUNTER)

Sử dụng biến count để thực hiện chức năng bộ đếm

đồng bộ

Biến count được gán cho ngõ ra Q

ở cuối Process,

Trang 62

LIBRARY ieee;

USE ieee.std_logic_1164.all

USE ieee.std_logic_unsigned.all;

ENTITY Updncnt4 IS

PORT ( Clk , Rst , Updn : IN STD_LOGIC;

Q : OUT STD_LOGIC_VECTOR(3 downto 0));

END Updncnt4;

ARCHITECTURE Behavioral OF Updncnt4 IS

SIGNAL count : STD_LOGIC_VECTOR (3 downto 0);

Trang 63

ARCHITECTURE shiftreg OF sipo IS

SIGNAL reg : STD_LOGIC_VECTOR(n-1 downto 0);

Trang 64

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY siso IS

GENERIC ( n : NATURAL := 8);

PORT ( Clk , Serin : IN STD_LOGIC;

Serout : OUT STD_LOGIC);

END siso;

ARCHITECTURE shiftreg OF siso IS

SIGNAL reg : STD_LOGIC_VECTOR(n-1 downto 0);

BEGIN

PROCESS ( Clk ) BEGIN

IF rising_edge( Clk ) THEN

reg <= reg(n-2 downto 0) & Serin ;

END IF ; END PROCESS ; Serout <= reg(n-1) ;

Trang 65

ARCHITECTURE shiftreg OF piso IS

SIGNAL reg : STD_LOGIC_VECTOR(n-1 downto 0);

ELSE reg <= reg(n-2 downto 0) & Serin ;

Ngày đăng: 29/03/2021, 10:29

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm