1. Trang chủ
  2. » Luận Văn - Báo Cáo

Giao trinh bai tap kts2 ch2 asm

41 258 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 41
Dung lượng 438,98 KB

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

Nội dung

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 nand_gate IS PORT - ENTITY : đặt tê

Trang 1

- 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

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.

Trang 2

Mã VHDL cơ bản

LIBRARY khai báo thư viện

ENTITY thực thể

ARCHITECTURE kiến trúc

Trang 3

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 nand_gate IS PORT (

- 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 hiệu (type): STD_LOGIC

a

Mô tả các tín hiệu xuất/nhập của khối component

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

IN IN

OUT BUFFER

OUT INOUT

Trang 4

- ARCHITECTURE : đặt tên cho architecture (model model )

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.

- 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

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;

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

VARIABLE b : std_logic;

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;

Trang 5

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

a <= NOT b AND c ;

variable_name := expression;

y := NOT a ;

- Lệnh gán biến:

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

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

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ó 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 6

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 bus có 8 bit

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

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 ‘ ’

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)

f <= O”723”; O là ký hiệu cơ số 8 (Octal)

Trang 7

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

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 ROL ROR

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

Trang 8

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

** 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 tiên, nếu cần sử dụng ( )

NguyenTrongLuat 15

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

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

CẤU TRÚC (Structural)

LUỒNG DỮ LIỆU (Dataflow)

HÀNH VI (Behavioral)

Trang 9

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)

- Để 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 association)

* Kết hợp theo tên (named association) Có 2 cách :

Label : component_name PORT MAP (

port_name1 => sig_name1 ,

port_name2 => sig_name2 );

Trang 10

Label : component_name PORT MAP (

ARCHITECTURE structural OF xor3 IS

SIGNAL u1_out: STD_LOGIC;

c

result

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

Trang 11

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

- 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

ARCHITECTURE dataflow OF xor3 IS

SIGNAL u1_out : STD_LOGIC;

BEGIN

u1_out <= a XOR b Result <= u1_out XOR c END dataflow;

Result <= u1_out XOR c u1_out <= a XOR b

a b

c

result u1_out

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

Trang 12

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 ;

mux2to1

sel y 0 1

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

Trang 13

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 y sel

mux2to1

sel y 0 1

d0 d1

NguyenTrongLuat 25

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 14

c <= ’1’ WHEN ”00” | ”11”,

’0’ WHEN OTHERS ; END dataflow2;

NguyenTrongLuat 27

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 (component instantitation).

[Name:] FOR index_variable IN range GENERATE

xor_array : FOR i IN 7 downto 0 GENERATE

user : xor2 PORT MAP (

x(i) , y(i) , z(i) );

END GENERATE ;

Trang 15

generic_name1 : data_type := default_values;

generic_name2 : data_type := default_values;

) PORT (

port_name : mode data_type;

) END entity_name;

PORT MAP (

port_name => sig_name );

* Khai báo component có GENERIC

COMPONENT component_name GENERIC (

generic_name1 : data_type := default_values;

) PORT (

port_name : mode data_type;

) END COMPONENT ;

Trang 16

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ó

NguyenTrongLuat 31

PROCESS

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

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

NguyenTrongLuat 33

Phát biểu IF - THEN - ELSE

IF condition1 THEN sequential_statements_1;

{ ELSIF condition2 THEN sequential_statements_1;}

{ ELSE sequential_statements_1;}

END IF ;

d0 d1 y sel

mux2to1

sel y 0 1

d0 d1

VD: Mux2to1

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY mux2to1 IS PORT ( d0 , d1 , sel : IN STD_LOGIC;

IF sel = ’0’ THEN y <= d0 ; ELSE y <= d1 ;

END IF;

END PROCESS;

END behavior1;

Trang 18

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

d0 d1 y sel

mux2to1

sel y 0 1

d0 d1

VD: Mux2to1

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY mux2to1 IS PORT ( d0 , d1 , sel : IN STD_LOGIC;

Phát biểu FOR - LOOP

[Name:] FOR variable_name IN range LOOP

sequential_statements;

END LOOP [name] ;

sqr: FOR i IN 1 to 10 LOOP

a(i) := i*i ; END LOOP sqr;

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 19

Phát biểu WHILE - LOOP

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 20

BỘ CỘNG

A D D E R LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY fulladder IS PORT ( x , y , z : IN STD_LOGIC;

y

s z

Cin

a2 a1 a0 b3 b2 b1 b0

s3 s2 s1 s0

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY adder4 IS PORT ( Cin : IN STD_LOGIC;

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

s : OUT STD_LOGIC_VECTOR(3 downto 0);

Cout : OUT STD_LOGIC);

END Structure;

Thiết kế bộ cộng 4 bit adder4 sử dụng fulladder

Trang 21

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 hiệu std_logic.

Bộ cộng 4 bit adder4 sử dụng phép cộng số học

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_signed.all;

ENTITY adder4 IS PORT ( Cin : IN STD_LOGIC;

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

s : OUT STD_LOGIC_VECTOR(3 downto 0);

Cout : OUT STD_LOGIC);

NguyenTrongLuat 41

BỘ DỒN KÊNH

M U X

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY mux4 IS PORT (

END Function;

MUX4 d0 d1 d2 d3 s1 s0 y

ARCHITECTURE Dataflow OF mux4 IS BEGIN

y <= d0 WHEN s = ”00” ELSE d1 WHEN s = ”01” ELSE d2 WHEN s = ”10” ELSE d3 WHEN OTHERS;

END Dataflow;

WITH s SELECT

y <= d0 WHEN ”00”, d1 WHEN ”01”, d2 WHEN ”10”, d3 WHEN OTHERS ;

Trang 22

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY mux16 IS PORT (

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

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

mux16

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY mux16 IS PORT (

Trang 23

BỘ GIẢI MÃ D

E C O D E R

x0 x1 en dec2x4

ARCHITECTURE flow2 OF

dec2x4 IS SIGNAL

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 24

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY dec3to8 IS PORT ( : IN STD_LOGIC_VECTOR(2 downto 0);

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

- STD_LOGIC_ARITH

- STD_LOGIC_UNSIGNED

BỘ GIẢI MÃ

3    8 BỘ GIẢI MÃ

3    8

Trang 25

NguyenTrongLuat 49

BỘ MÃ HÓA ƯU TIÊN

E N C O D E R

x0 x1 v encoder

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

x : OUT STD_LOGIC_VECTOR(1 downto 0);

Trang 26

NguyenTrongLuat 51

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

END behavior1;

ARCHITECTURE behavior2 OF compare IS BEGIN

PROCESS (a, b) BEGIN

aeqb <= ’0’; agtb <= ’0’; altb <= ’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;

segs : OUT STD_LOGIC_VECTOR(6 downto 0);

Trang 27

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

NguyenTrongLuat 53

- 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

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY Dlatch IS PORT ( , Clk : IN STD_LOGIC;

IF Clk = ’1’ THEN

Q <= D

Qn <= NOT Q ; END IF ;

END PROCESS ; END behavior;

Trang 28

NguyenTrongLuat 55

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY Dflipflop IS PORT ( , Clk : IN STD_LOGIC;

IF Clk’event AND Clk = ’1’ THEN

Q <= D

Qn <= NOT Q ; END IF ;

- clk’event phát hiện sự thay đổi tín hiệu clk từ 0 lên 1 hoặc từ 1 về 0.

- Gói std_logic_1164 có định nghĩa 2 hàm (function): rising_edge để phát hiện cạnh lên và falling_edge để phát hiện cạnh xuống của tín hiệu.

IF rising_edge( clk ) THEN

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY DFF IS PORT ( , Clk, Pr, Cl : IN STD_LOGIC;

Q Qn : OUT STD_LOGIC);

END DFF;

ARCHITECTURE behavior OF DFF IS BEGIN

PROCESS ( Clk, Pr, Cl ) BEGIN

Ngày đăng: 09/12/2016, 07:32

TỪ KHÓA LIÊN QUAN

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

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN