136
Bài giảng môn Kỹ thuật số 2 Giảng viên: Nguyễn Hữu Chân Thành 1 Chương 5 THIẾT KẾ SỐ DÙNG VHDL

Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Embed Size (px)

DESCRIPTION

Tài liệu VHDL tiếng việt

Citation preview

Page 1: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành1

Chương 5

THIẾT KẾ SỐ DÙNG VHDL

Page 2: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành2

NỘI DUNG

1. GIỚI THIỆU VỀ HDLs (Hardware Description Languages)

2. CÁC CẤU TRÚC CƠ BẢN CỦA VHDL

3. CÁC PHÁT BIỂU ĐỒNG THỜI

4. CÁC PHÁT BIỂU TUẦN TỰ

5. THIẾT KẾ MẠCH TUẦN TỰ

6. THIẾT KẾ MÁY TRẠNG THÁI

7. THIẾT KẾ PHÂN CẤP

Page 3: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành3

1. GIỚI THIỆU

Các phương pháp thiết kế:

Các phương trình Boolean

Thiết kế dựa trên Schematic

Các ngôn ngữ mô tả phần cứng HDLs (Hardware

Description Languages): VHDL, Verilog HDL, ABEL, …

Page 4: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành4

1. GIỚI THIỆU (tt)

Quá trình thiết kế hệ thống số:

Page 5: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành5

1. GIỚI THIỆU (tt)

Các công cụ CAD:

Nhập yêu cầu thiết kế (design entry)

Dùng bảng chân trị

Trực tiếp

Vẽ dạng sóng quan hệ vào/ra (Waveform Editor)

Dùng sơ đồ mạch (Graphic Editor) → thiết kế phân cấp

Page 6: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành6

1. GIỚI THIỆU (tt)

Các công cụ CAD:

Nhập yêu cầu thiết kế (design entry)

Dùng HDLs

Page 7: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành7

1. GIỚI THIỆU (tt)

Các công cụ CAD:

Tổng hợp (synthesis):

Tổng hợp logic (logic synthesis/logic optimization)

Ánh xạ công nghệ (technology mapping)

Tổng hợp sơ đồ mạch (layout synthesis/physical design)

Mô phỏng (simulation)

Mô phỏng chức năng (functional simulation)

Mô phỏng định thời (timing simulation)

Page 8: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành8

1. GIỚI THIỆU (tt)

VHDL (Very High Speed Integrated Circuits HDL):

Ngôn ngữ được dùng để mô tả các hệ thống số: lập tài liệu

(documentation), mô phỏng (simulation), kiểm chứng

(verification) và tổng hợp (synthesis).

VHDL được chuẩn hóa vào năm 1987 qua chuẩn IEEE 1076

(VHDL-87) và được cập nhật năm 1993 (VHDL-93). Sau đó

được bổ sung qua chuẩn IEEE 1164 với hệ thống logic đa trị.

Ứng dụng: thiết kế với các PLD, CPLD và FPGA.

Sự khác biệt giữa VHDL và các ngôn ngữ lập trình thông thường

Ngôn ngữ lập trình thông thường: tuần tự

VHDL: song song

Page 9: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành9

2. CÁC CẤU TRÚC CƠ BẢN CỦA VHDL

2.1. Entity

Interface declaration

Functional definition

Entity

Entity Declaration

Architecture body

Black box

Internal

machinery

Packages

Page 10: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành10

2.1. Entity (tt)

Khai báo entity

Entity định nghĩa giao tiếp của module phần cứng với môi

trường bên ngoài sử dụng nó.

Cú pháp khai báo:

entity entity_name is

generics

ports

begin

entity statements

end [entity] entity_name;

Page 11: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành11

2.1. Entity (tt)

Các port trong khai báo entity:

Mỗi tín hiệu I/O trong một khai báo entity được xem là mộtport.

Mỗi port được khai báo phải có tên, chiều dữ liệu (mode) vàkiểu dữ liệu.

port (port_name: mode data_type;

port_name: mode data_type;

port_name: mode data_type);

Các mode:

In: luồng dữ liệu chỉ đi vào entity.

Out: luồng dữ liệu chỉ đi ra khỏi entity.

Buffer: tương tự out, nhưng cho phép hồi tiếp nội

Inout: luồng dữ liệu có thể vào hay ra entity và cũng cho phép hồitiếp nội.

Page 12: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành12

2.1. Entity (tt)

Kiểu dữ liệu:

IEEE 1076/93: boolean, bit, bit_vector, integer, …

IEEE std_logic_1164: std_ulogic, std_ulogic_vector, std_logic và

std_logic_vector (hệ thống logic đa trị).

Các kiểu dữ liệu do người sử dụng đinh nghĩa.

Khai báo của các kiểu dữ liệu phải cho phép entity thấy được qua

các mệnh đề library và use.

Ví dụ 2.1: khai báo cổng AND

entity andgate is

port (A, B: in bit;

C : out bit);

end andgate;

A

BC

ANDGATE

A

BC

ANDGATE

Page 13: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành13

2.1. Entity (tt)

Ví dụ 2.2: khai báo bộ so sánh 4-bit

entity eqcomp4 is

port (A, B : in bit_vector(3 downto 0);

equals : out bit);

end eqcomp4;

Ví dụ 2.3:

library ieee;

use ieee.std_logic_1164.all;

entity eqcomp4 is

port (a, b : in std_logic_vector(3 downto 0);

equals: out std_logic);

end eqcomp4;

[3:0]A[3:0]

B[3:0]

Equals

4-bit comparator

[3:0]A[3:0]

B[3:0]

Equals

4-bit comparator

Page 14: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành14

2.2. Thân kiến trúc (Architecture body)

Khai báo entity là một hộp đen với mô tả các giao tiếp I/O còn

thân kiến trúc cung cấp mô tả chức năng của hộp đen đó.

Một entity có thể có nhiều thân kiến trúc.

Mỗi thân kiến trúc chỉ kết hợp với một khai báo entity.

Các kiến trúc của VHDL được chia làm 2 loại:

Mô tả hành vi (behavior description)

Mô tả dạng giải thuật (algorithmic description)

Mô tả luồng dữ liệu (data flow description)

Mô tả cấu trúc (structural description)

Một thiết kế có thể dùng một trong các loại trên hay cũng có thể

kết hợp các loại với nhau.

Page 15: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành15

1. GIỚI THIỆU (tt)

Biểu diễn hệ thống:

Dạng hành vi: mô tả chức năng của hệ thống → tập trung

vào quan hệ giữa các tín hiệu vào và ra.

Dạng cấu trúc: mô tả cài đặt bên trong của hệ thống → đặc tả

rõ ràng các thành phần nào được dùng và kết nối giữa chúng.

Page 16: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành16

2.2. Thân kiến trúc (Architecture body) (tt)

Khai báo thân kiến trúc:

architecture architecture_name of entity_name is

declarations

begin

concurrent_statements

end [architecture] architecture_name;

Mô tả hành vi: mô tả chức năng của hệ thống → tập trung vào

quan hệ giữa các tín hiệu vào và ra.

Mô tả dạng giải thuật: còn được gọi là mô tả cấp cao (high-

level) vì nó tương tự với mô tả trong các ngôn ngữ cấp cao

như C, Basic …

Page 17: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành17

2.2. Thân kiến trúc (Architecture body) (tt)

Ví dụ 2.4: Mô tả dạng giải thuật:-- bộ so sánh bằng 4-bit

entity eqcomp4 is

port (a, b : in std_logic_vector(3 downto 0);

equals: out std_logic);

end eqcomp4;

architecture behavioral of eqcomp4 is

begin

comp: process (a, b)

begin

if a=b then

equals <= „1‟;

else

equals<=„0‟;

end if;

end process comp;

end behavioral;

Page 18: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành18

2.2. Thân kiến trúc (Architecture body) (tt)

Mô tả luồng dữ liệu: mô tả cách dữ liệu truyền từ ngõ vàođến ngõ ra (không dùng các phát biểu tuần tự).

Ví dụ 2.5: Mô tả dạng luồng dữ liệu:

-- bộ so sánh bằng 4-bit

library ieee;

use ieee.std_logic_1164.all;

entity eqcomp4 is

port (a, b : in std_logic_vector(3 downto 0);

equals: out std_logic);

end eqcomp4;

architecture dataflow of eqcomp4 is

begin

equals <= „1‟ when (a=b) else „0‟;

end dataflow;

Page 19: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành19

2.2. Thân kiến trúc (Architecture body) (tt)

Ví dụ 2.6: Mô tả dạng luồng dữ liệu khác:

-- bộ so sánh bằng 4-bit

library ieee;

use ieee.std_logic_1164.all;

entity eqcomp4 is

port (a, b : in std_logic_vector(3 downto 0);

equals: out std_logic);

end eqcomp4;

architecture bool of eqcomp4 is

begin

equals <= not(a(0) xor b(0))

and not(a(1) xor b(1))

and not(a(2) xor b(2))

and not(a(3) xor b(3)) ;

end bool;

Page 20: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành20

2.2. Thân kiến trúc (Architecture body) (tt)

Mô tả dạng cấu trúc:

Chứa các danh sách kết nối (netlist) – các thành phần

(component) được khởi tạo và được kết nối với nhau qua các

tín hiệu.

Thiết kế dạng phân tầng (hierarchical design).

Top-down design

Bottom-up designStructural

Decomposition

Behavioral

Modelinga. Full Tree Design

Behavioral

Modeling

b. Partial Tree Design

Page 21: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành21

2.2. Thân kiến trúc (Architecture body) (tt)

Ví dụ 2.7: Mô tả dạng cấu trúc:library ieee;

use ieee.std_logic_1164.all;

entity eqcomp4 is

port (a, b : in std_logic_vector(3 downto 0);

equals: out std_logic);

end eqcomp4;

use work.gatespkg.all;

architecture struct of eqcomp4 is

signal x: std_logic_vector(0 to 3);

begin

u0: xnor2 port map (a(0), b(0),x(0));

u1: xnor2 port map (a(1), b(1),x(1));

u2: xnor2 port map (a(2), b(2),x(2));

u3: xnor2 port map (a(3), b(3),x(3));

u4: and4 port map (x(0), x(1),x(2),x(3),equals);

end struct;

Page 22: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành22

2.3. Danh hiệu

Danh hiệu cơ bản: gồm các ký tự alphabet, các ký số và dấu

gạch dưới.

Ký tự đầu tiên phải là chữ cái.

Ký tự cuối cùng không được là dấu gạch dưới.

Không phân biệt chữ hoa/thường.

Không cho phép hai dấu gạch dưới xuất hiện liên tiếp.

Danh hiệu mở rộng: chuỗi ký tự được ghi giữa hai dấu „\‟

Có thể sử dụng bất cứ ký tự cho phép nào, bao gồm cả các ký

tự !, ., @, và $.

Phân biệt chữ hoa và chữ thường.

Page 23: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành23

2.3. Danh hiệu (tt)

Ví dụ 2.9: Các danh hiệu nào sau đây là hợp lệ:_tx_clk?

Sai: phải bắt đầu bằng một chữ cái.

Tx_clk?

Đúng: danh hiệu hợp lệ.

6A15X?

Sai: không được bắt đầu bằng một chữ số.

Big#buffer?

Sai: không được có ký tự # trong danh hiệu.

Select?

Sai: từ khóa.

tx_clk_

Sai: ký tự cuối cùng không được là dấu gạch dưới.

ABC_456?

Đúng: danh hiệu hợp lệ.

Tx__clk

Sai: không cho phép hai dấu gạch dưới liên tiếp.

Page 24: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành24

2.4. Các đối tượng dữ liệu

Đối tượng dữ liệu giữ giá trị có kiểu dữ liệu cụ thể.

Đối tượng dữ liệu thuộc một trong 4 lớp: hằng số, biến số, tín

hiệu và tập tin (file).

Khả năng nhìn thấy (visibility):

Moät ñoái töôïng ñöôïc khai baùo trong moät package coù theå

ñöôïc tham chieáu bôûi moät entity hay moät architecture duøng

package ñoù.

Moät ñoái töôïng ñöôïc khai baùo trong moät entity chæ ñöôïc

thaáy trong entity ñoù.

Moät ñoái töôïng ñöôïc khai baùo trong moät architecture chæ

ñöôïc thaáy trong architecture ñoù.

Moät ñoái töôïng ñöôïc khai baùo trong moät process chæ ñöôïc

thaáy trong process ñoù.

Page 25: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành25

2.4.1 Hằng số

Giữ một giá trị không đổi trong mô tả thiết kế. Giá trị này thường

được gán khai báo.

Khai báo:

constant constant_name: type_name [:= value];

Ví dụ 2.10: Các khai báo hằng số:

constant bus_width: integer := 8;

constant rise_time: time := 10ns;

constant iteration: integer := 4;

Ñöôïc khai baùo trong vuøng khai baùo cuûa package, entity,

architecture hay process.

ÖÙng duïng: ñònh nghóa noäi dung cuûa ROM hay caùc thoâng soá coá

ñònh (delay, soá laàn laëp, rise time, hold time …).

Page 26: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành26

2.4.2 Tín hiệu

Ñaïi dieän cho giaù trò döõ lieäu treân caùc ñöôøng döõ lieäu thöïc trong

maïch (wire, port …) hay traïng thaùi cuûa caùc phaàn töû nhôù.

Khai baùo:

signal signal_name: type_name [:= initial value];

Ví duï 2.11: Caùc khai baùo tín hieäu

signal clock: bit;

signal databus: std_logic_vector(0 to 7);

Thöôøng ñöôïc khai baùo trong phaàn khai baùo cuûa entity hay

architecrture.

Coù hai chieàu: thôøi gian vaø giaù trò.

Moät giaù trò ñöôïc gaùn ñeán moät tín hieäu khoâng laøm tín hieäu thay

ñoåi töùc thôøi maø phaûi sau moät thôøi gian delay nhoû.

Kyù hieäu pheùp gaùn: “<=”

Page 27: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành27

2.4.3 Biến số

Chæ duøng trong caùc process hay subprogam (function vaø

procedure).

Khai baùo:

variable variable _name: type_name [:= initial value];

Ví duï 2.12: Caùc khai baùo bieán soá

variable result: std_logic := 0;

variable sum: integer range 0 to 100 := 10;

Phải ñöôïc khai baùo trong vuøng khai baùo cuûa caùc process haysubprogam.

Pheùp gaùn cho moät variable laø töùc thôøi (khoâng coù chieàu thôøi

gian).

Kyù hieäu pheùp gaùn: “:=”

Caùc bieán ñöôïc duøng chuû yeáu cho muïc ñích tính toaùn (voøng laëp,

trò trung gian, …).

Page 28: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành28

2.5. Các kiểu dữ liệu

Trong VHDL các đối tượng dữ liệu của các kiểu cơ bản (base

type) khác nhau không thể gán cho nhau mà không dùng hàm

chuyển đổi kiểu.

Ví dụ 2.13: Nếu a và b đều là các biến nguyên thì phép gán

a <= b + „1‟;

sẽ phát sinh lỗi trừ khi toán tử “+” là overloaded.

Các kiểu dữ liệu trong VHDL có thể chia ra làm 4 loại chính:

Kiểu vô hướng (kiểu một chiều)

Kiểu phức hợp (kiểu đa chiều)

Kiểu truy cập (access)

Kiểu tập tin (file)

Page 29: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành29

2.5.1. Kiểu vô hướng

Kiểu vô hướng chỉ giữ một giá trị tại thời điểm mô phỏng hiện

hành (current simulation time).

Kiểu vô hướng có thứ tự cho phép dùng với các toán tử quan hệ.

Có 4 loại kiểu vô hướng:

(1) Kiểu liệt kê (enumeration type)

(2) Kiểu số nguyên (integer type)

(3) Kiểu số dấu chấm động (floating type)

(4) Kiểu vật lý (physical type)

Page 30: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành30

2.5.1.1. Kiểu liệt kê

Danh sách các giá trị mà một đối tượng có thể giữ.

Kiểu liệt kê có thứ tự: giá trị phía trái nhất là nhỏ nhất, tăng dần

theo chiều sang phải và giá trị phía phải nhất là lớn nhất.

Các kiểu định nghĩa sẵn (predefined) trong các gói standard,

std_logic_1164, …

standard: bit, boolean, character

std_logic_1164: std_ulogic, std_logic

Ví dụ 2.14:

type boolean is (false, true);

type bit is („0‟, „1‟);

Page 31: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành31

2.5.1.1. Kiểu liệt kê (tt)

std_ulogic: hệ thống 9 mức logic

type std_ulogic is („U‟, „X‟, „0‟, „1‟, „Z‟, „W‟, „L‟, „H‟, „-‟);

Kiểu std_logic có cùng tập giá trị như std_ulogic nhưng có

hàm phân giải, resolved, để phân giải mức logic khi có nhiều

phép gán đến cùng một tín hiệu.

subtype std_logic is resolved std_ulogic;

Page 32: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành32

2.5.1.1. Kiểu liệt kê (tt)

Do người sử dụng định nghĩa (user-defined):

Ví dụ 2.15:

type states is (read, write , play, sleep);

signal current_state: states;

type sports is (baseball, football, basketball, soccer, running);

signal your_sport: sports;

better_than_baskball<=„1‟ when your_sport>= basketball else „0‟;

Page 33: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành33

2.5.1.2. Kiểu integer

VHDL hỗ trợ các số nguyên trong khoảng – 2147483648 (hay –

(231-1)) † 2147483647 ((231-1)) → (32-bit)

type integer is range -2147483648 to 2147483647;

Một đối tượng kiểu integer có thể ràng buộc với một khoảng.

variable a : integer range -255 to 255;

Các thao tác với số có dấu và không dấu → tùy công cụ tổng hợp

hỗ trợ.

2.5.1.3. Kiểu real

Giá trị trong khoảng -1.0E38 † +1.0E38

type real is range -1.0E38 to 1.0E38;

Thường không được hỗ trợ trong các công cụ tổng hợp do lượng

tài nguyên cần để cài đặt các thao tác số học là rất lớn.

Page 34: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành34

2.5.1.4. Kiểu vật lý

Thường là các đơn vị đo, không có ý nghĩa cho việc tổng hợp.

Ví dụ 2.16: Kiểu vật lý định nghĩa sẵn là time

type time is range -2147483647 to 2147483647

units

fs;

ps = 1000 fs;

ns = 1000 ps;

us = 1000 ns;

ms = 1000 us;

sec = 1000 ms;

min = 60 sec;

hr = 60 min;

end units;

Page 35: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành35

2.5.2. Kiểu phức hợp

Một đối tượng kiểu phức hợp có thể giữ nhiều giá trị tại 1 thời

điểm.

Có 2 loại kiểu phức hợp:

(1) Kiểu mảng (array type)

(2) Kiểu bản ghi (record type)

Page 36: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành36

2.5.2.1. Kiểu mảng

Đối tượng kiểu mảng gồm nhiều phần tử có cùng kiểu dữ liệu.

Các kiểu định nghĩa sẵn:

Ví dụ 2.17:

type bit_vector is array (natural range <>) of bit;

type std_logic_vector is array (natural range <>) of std_logic;

signal a: std_logic_vector (7 downto 0);

Người dùng cũng có thể định nghĩa kiểu riêng:

Ví dụ 2.18:

type byte is array(7 downto 0) of bit;

signal b: byte;

type data_word is array (7 downto 0) of std_logic; -- 1D

type ROM is array (0 to 125) of data_word; -- 1D x 1D

type decode_matrix is array (positive range 15 downto 1,natural range 3 downto 0) of std_logic; -- 2D

Page 37: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành37

2.5.2.1. Kiểu mảng (tt)

Một đối tượng mảng có thể gán cho một đối tượng mảng khác cócùng kiểu dữ liệu.

Phép gán có thể thực hiện cho toàn bộ mảng, một phần tử haymột phần của mảng.

Ví dụ 2.19:

signal X: std_logic_vector(0 to 3);

X <= “1100”;

X(3) <= „0‟;

X(0 to 2) <= “101”;

Có thể dùng ký hiệu để chỉ định cơ số cho một chuỗi bit: nhịphân (B), bát phân (O) và thập lục phân (X).

Ví dụ 2.20:

signal a: std_logic_vector(0 to 7);

a <= X“7A”;

Page 38: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành38

2.5.2.2. Kiểu bản ghi

Đối tượng kiểu bản ghi gồm nhiều phần tử có thể có các kiểu dữliệu khác nhau.

Ví dụ 2.21:

type iocell is record

buffer_inp : bit_vector(7 downto 0);

enable: bit;

buffer_out: bit_vector(7 downto 0);

end record;

signal busa, busb, busc: iocell;

busa.buffer_inp <= “01101011”;

busb.buffer_inp <= busa.buffer_inp;

busb.enable <= „1‟;

busc <= busb;

Page 39: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành39

2.5.3. Kiểu con (subtype)

Ví dụ 2.22:

type byte_size is integer range 0 to 255;

signal my_int: byte_size;

signal your_int: integer range 0 to 255;

Thao tác sau phát sinh lỗi biên dịch: if my_int=your_int then …

Kiểu con là kiểu cơ bản (base type) với một ràng buộc.

Ví dụ 2.23:

type DIGIT is („0‟,‟1‟,‟2‟,‟3‟,‟4‟,‟5‟,‟6‟,‟7‟,‟8‟,‟9‟);

subtype MIDDLE is DIGIT range ‟3‟ to ‟7‟;

subtype byte is bit_vector(7 downto 0);

signal b1: byte;

signal b2: bit_vector(7 downto 0);

Thao tác sau không phát sinh lỗi biên dịch: if b1 = b2 then …

Page 40: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành40

2.5.4. Một số kiểu dữ liệu bổ sung

Chuẩn IEEE 1076.3 định nghĩa 2 package VHDL: numeric_bit

và numeric_std.

Hai package này mở rộng một vài toán tử và định nghĩa một số

hàm mới cho các kiểu unsigned và signed.

Numeric_std:

type unsigned is array (natural range <>) of std_logic;

type signed is array (natural range <>) of std_logic;

Numeric_bit:

type unsigned is array (natural range <>) of bit;

type signed is array (natural range <>) of bit;

Tham khảo thêm các package khác trong \Refs\ieee1164pkg.pdf

Page 41: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành41

2.5.5. Chuyển đổi kiểu dữ liệu

Chuyển đổi từ một kiểu dữ liệu này sang một kiểu dữ liệu khác.

Các package bổ sung cung cấp sẵn một số hàm chuyển đổi kiểu

(tham khảo \Refs\ieee1164pkg.pdf).

Ví dụ 2.24:

- to_stdlogicvector(bit_vector): chuyển bit_vector thành std_logic_vector.

signal a: bit_vector(3 downto 0);

signal b: std_logic_vector(3 downto 0);

a <= “0101”;

b <= to_stdlogicvector(a);

- conv_std_logic_vector(integer, bits): chuyển integer thành std_logic_vector.

conv_std_logic_vector(7,4) sẽ cho kết quả là “0111”

- conv_integer(std_logic_vector): chuyển std_logic_vector thành integer.

conv_integer(“0111”) sẽ cho kết quả là 7

Page 42: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành42

2.6. Các toán tử

Biểu thức (expression): bao gồm các toán tử và các toán hạng.

Mỗi toán tử (operator) được chỉ định với một hay một số kiểu dữ

liệu cụ thể → dùng toán tử với các toán hạng thuộc kiểu dữ liệu

không được hỗ trợ là không hợp lệ → các toán tử mở rộng

(overloaded operators).

Các toán tử có sẵn trong VHDL

Page 43: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành43

2.6. Các toán tử (tt)

Một số lưu ý:

Các toán hạng trong các phép toán số học phải cùng kiểu,

ngoại trừ phép toán lấy mũ cần số mũ phải là số nguyên.

Các toán tử logic không có thứ tự ưu tiên như trong đại số

Boole → cần dùng các dấu ngoặc trong các phương trình

logic nhiều tầng (multilevel logic equations).

Ví dụ 2.25:

X = A + B.C trong đại số Boole được tính là X = A + (B.C)

Nhưng trong VHDL sẽ là X = (A + B).C

Do đó đoạn mã: X <= A or B and C cần viết lại là X <= A or (B and C)

Các toán hạng trong các phép toán quan hệ phải cùng kiểu,

tuy nhiên kết quả luôn là kiểu Boolean (True hay False).

Overloaded operators: tham khảo \Refs\ieee1164pkg.pdf

Page 44: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành44

2.7. Các thuộc tính

Cung cấp thông tin bổ sung về một tín hiệu, biến, kiểu dữ liệu

hay một thành phần (component).

Một số thuộc tính định nghĩa sẵn thông dụng:

Một số thuộc tính của kiểu vô hướng và kiểu mảng:

X'high giới hạn trên của X (hay chỉ số trên nếu X là 1 mảng)

X'low giới hạn dưới của X (hay chỉ số dưới nếu X là mảng)

X'left giá trị phía trái nhất của X (hay chỉ số phía trái nhất nếu X là

1 mảng)

X'right giá trị phía phải nhất của X (hay chỉ số phía phải nhất nếu X là

1 mảng)

Một số thuộc tính của kiểu mảng có ràng buộc:

X'range khoảng của X (thường dùng trong các vòng lặp loop)

X'reverse_range khoảng của X theo thứ tự ngược

X'length X'high - X'low + 1 (integer)

Page 45: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành45

2.7. Các thuộc tính (tt)

Một số thuộc tính của tín hiệu:

X'event có giá trị True khi có một sự kiện trên X (kiểu Boolean,

thường dùng để phát hiện xung clock).

Ví dụ 2.26:

type count is integer range 0 to 127;

type states is (read, write, play, sleep);

type word is array(15 downto 0) of std_logic;

count‟left = 0; count‟high = 127; count‟right = 127

word‟left = 15; word‟high = 15; word‟length=16.

states‟left = read; states‟low=read, states‟high=sleep

variable temp : bit_vector(15 downto 0);

for i in temp'range loop ...-- lặp 16 lần

if (clock'event and clock = „1‟) then …-- phát hiện cạnh lên clock

Page 46: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành46

Các lỗi thường gặp

Ví dụ 2.27:

library ieee;

use ieee.std_logic_1164.all;

entity many_errors is port

a: out std_logic_vector( 3 to 0);

b: out std_logic_vector(0 to 3);

c: in bit_vector(5 downto 0);)

end many_errors------------------------------------------------

entity no_error is port (

a: out std_logic_vector( 3 downto 0);

b: out std_logic_vector(0 to 3);

c: in bit_vector( 5 downto 0));

end no_error;

Page 47: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành47

Các lỗi thường gặp (tt)

Ví dụ 2.27: (tt)architecture terrible of many_errors

begin

my_label: process (c,a)

begin

if c = x”F” then b <= a

else b = „0101‟;

end if

end process;

end terrible-------------------------------------------architecture terrible of no_error is

begin

my_label: process (c,a)

begin

if c = “001111” then b <= a;

else b <= ”0101”;

end if;

end process;

end terrible;

Page 48: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành48

3. CÁC PHÁT BIỂU ĐỒNG THỜI (Concurrent Statements)

3.1. Phép gán tín hiệu đơn giản

Dạng tổng quát:

signal_name <= [transport] expression [after delay]

{,expression2 [after delay2]};

Ví dụ 3.1:

f <= (x1 and x2) or x3;

-- bộ cộng bán phần có delay

sum <= a xor b after 5 ns;

carry <= a and b after 10 ns;

-- tạo dạng sóng

pulse <= '1', '0' after 10 ns, '1' after 30 ns, '0' after 50 ns;

-- gán tín hiệu với others

S <= “0000”;

S <= (others => „0‟);

Page 49: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành49

3.1. Phép gán tín hiệu đơn giản (tt)

Phép gán tín hiệu là không tức thời → có delay

Inertial delay (mặc định)

Transport delay

Ví dụ 3.2:

Page 50: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành50

3.1. Phép gán tín hiệu đơn giản (tt)

Mỗi phép gán tín hiệu đồng thời trong architecture tạo ra một

driver cho tín hiệu → nhiều phép gán sẽ tạo ra nhiều driver.

Ví dụ 3.3:

Page 51: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành51

3.1. Phép gán tín hiệu đơn giản (tt)

Ví dụ 3.4: Tạo mạch tổ hợp với phát biểu gán tín hiệu đơn giản

status <= '1';

even <= (pl and p2) or (p3 and p4);

arith_result <= a + b + c - 1;

Page 52: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành52

3.1. Phép gán tín hiệu đơn giản (tt)

Lưu ý:

Phép gán tín hiệu với vòng hồi tiếp kín: có thể tạo ra trạng thái

nội không mong muốn hay mạch bị dao động.

Ví dụ 3.5:

q <= (q and (not en)) or (d and en);

→ q sẽ bằng d khi en = „1‟ và giữ nguyên giá trị trước đó nếu en = „0‟

→ q phụ thuộc ngõ vào và trạng thái nội → không phải mạch tổ hợp.

q <= ((not q) and (not en)) or (d and en);

→ q dao dộng giữa „0‟ và „1‟ khi en = „0‟.

Page 53: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành53

3.2. Phép gán tín hiệu có chọn lọc

Dạng tổng quát:

with select_expression select

signal_name <= expression_1 when choice_1,

expression_2 when choice_2, …

expression_n when choice_n;

Lưu ý:

choice_i phải là một giá trị hợp lệ hay một tập các giá trị hợplệ của select_expression.

Các giá trị của choice_i phải loại trừ nhau (mutuallyexclusive) và phủ tất cả các giá trị có thể củaselect_expression.

Từ khóa others có thể được dùng trong chọn lựa cuối cùng đểđại diện cho tất cả các giá trị không dùng.

Page 54: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành54

3.2. Phép gán tín hiệu có chọn lọc (tt)

Ví dụ 3.6: Mô tả mạch MUX 4 → 1 với mỗi kênh ngõ vào là 8-bitlibrary ieee ;use ieee.std_logic_1164.all;entity mux4 is

port (a,b,c,d: in std_logic_vector(7 downto 0);s: in std_logic_vector(1 downto 0);x: out std_logic_vector(7 downto 0)

);end mux4;architecture sel_arch of mux4 isbegin

with s selectx <= a when “00”,

b when “01”,c when “10",d when others;

end sel_arch;

a[7:0]

b[7:0]

c[7:0]

d[7:0]

s(1)

s(0)

x[7:0]

00

01

11

10

MUX

Page 55: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành55

3.2. Phép gán tín hiệu có chọn lọc (tt)

Ví dụ 3.7: Mô tả mạch giải mã 2 → 4 với ngõ ra tích cực mức 1library ieee ;

use ieee.std_logic_1164.all;

entity decoder4 is

port (

s: in std_logic_vector (1 downto 0);

x: out std_logic_vector (3 downto 0)

);

end decoder4 ;

architecture sel_arch of decoder4 is

begin

with s select

x <= “0001” when “00”,

“0010” when “01”,

“0100” when “10”,

“1000” when others;

end sel_arch;

Page 56: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành56

3.2. Phép gán tín hiệu có chọn lọc (tt)

Ví dụ 3.8: Mô tả mạch mã hóa ưu tiên 4 → 2library ieee;

use ieee.std_logic_1164.all;

entity prio_encoder42 is

port (

r: in std_logic_vector(3 downto 0);

code: out std_logic_vector(1 downto 0);

active: out std_logic

);

end prio_encoder42;

architecture sel_arch of prio_encoder42 is

begin

with r select

code <= “11” when “1000”|”1001”|”1010”|”1011”|”1100”|”1101”|”1110”|”1111”,

“10” when “0100”|”0101”|”0110”|”0111”,

“01” when ”0010”|”0011”,

“00” when others;

active <= r(3) or r(2) or r(1) or r(0);

end sel_arch;

Page 57: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành57

3.2. Phép gán tín hiệu có chọn lọc (tt)

Ví dụ 3.9: Mô tả mạch theo bảng chân trị sau:library ieee;

use.ieee.std_logic_1164.all;

entity truth_table is

port (

a,b: in std_logic;

y : out std_logic

);

end truth_table ;

architecture a of truth_table is

signal tmp: std_logic_vector (1 downto 0);

begin

tmp <= a & b;

with tmp select

y <= „0‟ when “00”,

„1‟ when “01”,

„1‟ when “10”,

„1‟ when others; -- “11”

end a;

Page 58: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành58

3.2. Phép gán tín hiệu có chọn lọc (tt)

Vấn đề cài đặt mạch của phát biểu gán tín hiệu chọn lọc: dựa trênmạch dồn kênh (MUX).

Ví dụ 3.10: Xét phát biểu sau:

with select_expression select

sig <= value_expr_0 when c0,

value_expr_1 when cl,

value_expr_n when others;

Giả sử select_expression có 1 trong 5 giá trị: c0, c1, c2, c3 và c4.

Page 59: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành59

3.2. Phép gán tín hiệu có chọn lọc (tt)

Ví dụ 3.11: Xét đoạn VHDL sau:

signal s: std_logic_vector (1 downto 0) ;

with s select

x <= (a and b) when “11”,

(a or b) when “01”|”10”,

„0‟ when others;

Page 60: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành60

3.3. Phép gán tín hiệu theo điều kiện

Dạng tổng quát:

signal_name <= expression_1 when boolean_expression_1 else

expression_2 when boolean_expression_2 else

expression_n;

Lưu ý:

Boolean_expression_i trả về giá trị True hay False.

Các biểu thức boolean_expression_i được tính lần lượt từ

trên xuống cho đến khi gặp giá trị True thì gán giá trị của

biểu thức expression_i tương ứng cho tín hiệu.

Giá trị cuối cùng expression_n sẽ được gán cho tín hiệu nếu

không có điều kiện nào là True.

Page 61: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành61

3.3. Phép gán tín hiệu theo điều kiện (tt)

Ví dụ 3.12: Mô tả mạch MUX 4 → 1 với mỗi kênh ngõ vào là 8-bitlibrary ieee ;

use ieee.std_logic_1164.all;

entity mux4 is

port (

a,b,c,d: in std_logic_vector(7 downto 0);

s: in std_logic_vector(1 downto 0);

x: out std_logic_vector(7 downto 0)

);

end mux4;

architecture cond_arch of mux4 is

begin

x <= a when (s = “00”) else

b when (s = “01”) else

c when (s = “10”) else

d;

end cond_arch;

Page 62: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành62

3.3. Phép gán tín hiệu theo điều kiện (tt)

Ví dụ 3.13: Mô tả mạch giải mã 2 → 4 với ngõ ra tích cực mức 1library ieee ;

use ieee.std_logic_1164.all;

entity decoder4 is

port (

s: in std_logic_vector (1 downto 0);

x: out std_logic_vector (3 downto 0)

);

end decoder4 ;

architecture cond_arch of decoder4 is

begin

x <= “0001” when (s = “00”) else

“0010” when (s = “01”) else

“0100” when (s = “10”) else

“1000”;

end cond_arch;

Page 63: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành63

3.3. Phép gán tín hiệu theo điều kiện (tt)

Ví dụ 3.14: Mô tả mạch mã hóa ưu tiên 4 → 2library ieee;

use ieee.std_logic_1164.all;

entity prio_encoder42 is

port (

r: in std_logic_vector(3 downto 0);

code: out std_logic_vector(1 downto 0);

active: out std_logic

);

end prio_encoder42;

architecture cond_arch of prio_encoder42 is

begin

code <= “11” when (r(3) = ‟1‟) else

“10” when (r(2) = ‟1‟) else

“01” when (r(1) = „1‟) else

“00”;

active <= r(3) or r(2) or r(1) or r(0);

end cond_arch;

Page 64: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành64

3.3. Phép gán tín hiệu theo điều kiện (tt)

Vấn đề cài đặt mạch của phát biểu gán tín hiệu theo điều kiện:

Cần 3 nhóm phần cứng:

Các mạch cho các giá trị biểu thức gán cho tín hiệu

Các mạch cho các biểu thức điều kiện Boolean

Hệ thống mạch ưu tiên (theo điều kiện)

Hệ thống mạch ưu tiên có thể cài đặt bằng một chuỗi các MUX 2→ 1.

Ví dụ 3.15: Xét phát biểu đơn giản sau với 1 mệnh đề when:

sig <= value_expr_1 when boolean_expr_1 else

value_expr_2;

Page 65: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành65

3.3. Phép gán tín hiệu theo điều kiện (tt)

Ví dụ 3.16: Xét phát biểu sau với 3 mệnh đề when:

sig <= value_expr_1 when boolean_expr_1 else

value_expr_2 when boolean_expr_2 else

value_expr_3 when boolean_expr_3 else

value_expr_4;

Page 66: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành66

3.3. Phép gán tín hiệu theo điều kiện (tt)

Ví dụ 3.17: Xét đoạn VHDL sau:

signal a, b, y: std_logic;

y <= ‟0‟ when a=b else

„1‟;

Page 67: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành67

3.3. Phép gán tín hiệu theo điều kiện (tt)

Ví dụ 3.18: Xét đoạn VHDL sau:

signal r: std_logic_vector(2 downto 1);

signal y: std_logic_vector(1 downto 0);

y <=“10” when r(2)= „1‟ else

“01” when r(1)= „1‟ else

“00”;

Page 68: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành68

3.3. Phép gán tín hiệu theo điều kiện (tt)

Ví dụ 3.19: Xét đoạn VHDL sau:

signal a, b, c, x, y, r: std_logic;

r <= a when x = y else

b when x > y else

c;

Page 69: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành69

3.3. Phép gán tín hiệu theo điều kiện (tt)

So sánh giữa phát biểu gán tín hiệu chọn lọc và theo điều kiện:

Trong phát biểu gán tín hiệu chọn lọc, mỗi chọn lựa tương

ứng với một hàng trong bảng chân trị.

→ thích hợp cho các mạch mô tả bằng bảng chân trị hay

bảng hoạt động như bảng chân trị.

Trong phát biểu gán tín hiệu theo điều kiện, các điều kiện

phải theo thứ tự từ trên xuống.

→ thích hợp cho các mạch cần có sự ưu tiên giữa các hoạt

động.

Page 70: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành70

3.4. Phát biểu khởi trị component

Dạng tổng quát:

label: component_name generic map(generic_association_list)

port map(port_association_list);

Có 2 cách kết hợp giữa các tham số hình thức và các tham số

thực:

Kết hợp theo vị trí (positional association): mỗi tham số thực

trong khởi trị component được ánh xạ theo vị trí của tham số

hình thức trong khai báo component.

Kết hợp theo tên (named association):

formal1 => actual1, formal2 => actual2, …

Page 71: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành71

3.4. Phát biểu khởi trị component (tt)

Ví dụ 3.20:entity dec2to4 is

port(s0,s1,en : in bit; y0,y1,y2,y3 : out bit);

end dec2to4;

architecture structural of dec2to4 is

component inv

port(a : in bit; b : out bit);

end component;

component and3

port(a1,a2,a3 : in bit; o1 : out bit);

end component;

signal ns0,ns1 : bit;

begin

i1 : inv port map(s0,ns0);

i2 : inv port map(s1,ns1);

a1 : and3 port map(en,ns0,ns1,y0);

a2 : and3 port map(en,s0,ns1,y1);

a3 : and3 port map(en,ns0,s1,y2);

a4 : and3 port map(a1 => en, a2 => s0, a3 => s1, o1 => y3);

end structural;

Page 72: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành72

3.5. Phát biểu process

Dạng tổng quát:

[label:] process [sensitivity_list] is -- is [VHDL-93]

process declarations

begin

sequential statements

end process [label];

Process có 2 trạng thái:

Thực thi (execution): mỗi khi có một trong các tín hiệu trongdanh sách cảm nhận (sensitivity list) thay đổi giá trị.

Treo (suspension): khi thực thi xong phát biểu cuối cùngtrong process hay gặp phát biểu wait.

wait for time_expression;

wait until boolean_condition;

wait on sensitivity_list;

Page 73: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành73

3.5. Phát biểu process (tt)

Ví dụ 3.21:

proc1: process (a,b,c)

begin

x <= a and b and c;

end process;

proc2: process

begin

x <= a and b and c;

wait on a, b, c;

end process;

Page 74: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành74

3.5. Phát biểu process (tt)

Một số công cụ tổng hợp không kiểm tra danh sách cảm nhận,

thay vào đó chúng giả sử là tất cả các tín hiệu bên phải của phép

gán và các tín hiệu trong các biểu thức điều kiện là trong danh

sách cảm nhận.

Ví dụ 3.22:

proc3: process (a,b,c)

begin

x <= a and b and c;

end process;

proc4: process (a,b) -- không có biến c

begin

x <= a and b and c;

end process;

Page 75: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành75

3.5. Phát biểu process (tt)

VHDL tạo ra một driver duy nhất cho mỗi tín hiệu được gán giá

trị bên trong một process → tất cả các hoạt động được thực hiện

trên driver và chỉ cập nhật cho tín hiệu khi process treo.

Chỉ có phép gán cuối cùng đến tín hiệu là có tác động.

Ví dụ 3.23: Giả sử A, B, C, D, E là các tín hiệu và ban đầu đều

bằng 1. Xác định giá trị của chúng sau khi thực thi process sau:

signal A,B,E: integer;

process (C, D)

begin

A <= 2;

B <= A + C;

A <= D + 1;

E <= A*2;

end process;

process (C, D)

variable AV,BV,EV: integer;

begin

AV := 2;

BV := AV + C;

AV := D + 1;

EV := AV*2;

A <= AV;

B <= BV;

E <= EV;

end process;

Page 76: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành76

4. CÁC PHÁT BIỂU TUẦN TỰ (Sequential Statements)

4.1. Phát biểu if .. then .. else

if boolean_expression then

{sequential_statement}

[{elsif boolean_expression then

{sequential_statement} }]

[else

{sequential_statement} ]

end if;

Lưu ý:

Các biểu thức Boolean sẽ được tính tuần tự. Khi một biểuthức có giá trị True, các phát biểu trong nhánh tương ứngđược thực thi, các nhánh còn lại sẽ bị bỏ qua.

Nếu không có biểu thức nào là True, các phát biểu của nhánhelse sẽ được thực thi.

Page 77: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành77

4.1. Phát biểu if .. then .. else (tt)

Ví dụ 4.1: Mô tả mạch MUX 4 → 1architecture if_arch of mux4 isbeginmux_4_1: process (a, b, c, d, s)

beginif s = “00” then

x <= a;elsif s= “01” then

x <= b;elsif s = “10” then

x <= c;else

x <= d;end if;

end process;end if_arch;

Page 78: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành78

4.1. Phát biểu if .. then .. else (tt)

Ví dụ 4.2: Mô tả mạch giải mã 2 → 4architecture if_arch of decoder4 is

begin

process (s)

begin

if (s = “00”) then

x <= “0001”;

elsif (s = “01”) then

x <= “0010”;

elsif (s = “10”) then

x <= “0100”;

else

x <= “1000”;

end if ;

end process;

end if_arch;

Page 79: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành79

4.1. Phát biểu if .. then .. else (tt)

Ví dụ 4.3: Mô tả mạch mã hóa ưu tiên 4 → 2architecture if_arch of prio_encoder42 is

begin

process (r)

begin

if (r(3) = „1‟) then

x <= “11”;

elsif (r(2) = „1‟) then

x <= “10”;

elsif (r(1) = „1‟) then

x <= “01”;

else

x <= “00”;

end if ;

end process;

active <= r(3) or r(2) or r(1) or r(0);

end if_arch;

Page 80: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành80

4.1. Phát biểu if .. then .. else (tt)

Các nhánh không đầy đủ

Ví dụ 4.4: Xét đoạn mã sau:

→ ngầm định trạng thái (bộ nhớ) nội.

process (a, b)

begin

if (a=b) then

eq <= „1‟;

end if;

end process;

process (a, b)

begin

if (a=b) then

eq <= „1‟;

else

eq <= eq;

end if;

end process;

eq <= „0‟;

Page 81: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành81

4.1. Phát biểu if .. then .. else (tt)

Phép gán tín hiệu không đầy đủ

Ví dụ 4.5: Xét đoạn mã sau:

process (a, b)

begin

if (a>b) then

gt <= „1‟;

elsif (a=b) then

eq <= „1‟;

else

lt <= „1‟;

end if ;

end process;

process (a, b)

begin

if (a>b) then

gt <= „1‟;

eq <= „0‟;

lt <= „0‟;

elsif (a=b) then

gt <= „0‟;

eq <= „1‟;

lt <= „0‟;

else

gt <= „0‟;

eq <= „0‟;

lt <= „1‟;

end if ;

end process;

Page 82: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành82

4.1. Phát biểu if .. then .. else (tt)

Một cách khác cho mã gọn và rõ ràng hơn:

Ví dụ 4.6: Xét đoạn mã sau:

process (a, b)

begin

if (a>b) then

gt <= „1‟;

elsif (a=b) then

eq <= „1‟;

else

lt <= „1‟;

end if;

end process;

process (a, b)

begin

gt <= „0‟;

eq <= „0‟;

lt <= „0‟;

if (a>b) then

gt <= „1‟;

elsif (a=b) then

eq <= „1‟;

else

lt <= „1‟;

end if;

end process;

Page 83: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành83

4.1. Phát biểu if .. then .. else (tt)

Vấn đề cài đặt mạch của phát biểu if: dùng hệ thống mạch ưutiên tương tự phát biểu gán tín hiệu theo điều kiện.

Ví dụ 4.7: Xét đoạn mã sau:

if boolean_expression then

sig_a <= value_expr_a_1;

sig_b <= value_expr_b_1;

else

sig_a <= value_expr_a_2;

sig_b <= value_expr_b_2;

end if;

Page 84: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành84

4.1. Phát biểu if .. then .. else (tt)

Ghép các phát biểu if đơn:

Ví dụ 4.8: Xét lại ví dụ mạch mã hóa ưu tiên 4 → 2:architecture cascade_if_arch of prio_encoder42 is

begin

process (r)

begin

x <= “00”;

if (r(1) = „1‟) then

x <= “01”;

end if;

if (r(2) = „1‟) then

x <= “10”;

end if;

if (r(3) = „1‟) then

x <= “11”;

end if;

end process;

active <= r(3) or r(2) or r(1) or r(0);

end cascade_if_arch;

Page 85: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành85

4.2. Phát biểu case .. when

Dạng tổng quát:

case expression is

when choice_1 => {sequential_statement}

when choice_2 => {sequential_statement}

when choice_n => {sequential_statement}

end case;

Lưu ý:

choice_i phải là một giá trị hợp lệ hay một tập các giá trị hợplệ của expression.

Các giá trị của choice_i phải loại trừ nhau (mutuallyexclusive) và phủ tất cả các giá trị có thể củaselect_expression.

Từ khóa others có thể được dùng trong chọn lựa cuối cùng đểphủ cho tất cả các giá trị không dùng.

Page 86: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành86

4.2. Phát biểu case .. when (tt)

Ví dụ 4.9: Mô tả mạch MUX 4 → 1architecture case_arch of mux4 isbeginmux_4_1: process (a, b, c, d, s)

begincase s is

when “00” =>x <= a;

when “01” =>x <= b;

when “10” =>x <= c;

when others =>x <= d;

end case;end process;

end case_arch;

Page 87: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành87

4.2. Phát biểu case .. when (tt)

Ví dụ 4.10: Mô tả mạch giải mã 2 → 4architecture case_arch of decoder4 isbegin

process (s)begin

case s iswhen “00” =>

x <= “0001”;when “01” =>

x <= “0010”;when “10” =>

x <= “0100”;when others =>

x <= “1000”;end case;

end process;end case_arch;

Page 88: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành88

4.2. Phát biểu case .. when (tt)

Ví dụ 4.11: Mô tả mạch mã hóa 4 → 2architecture case_arch of prio_encoder42 isbegin

process (r)begin

case r iswhen “1000”|”1001”|”1010”|”1011”|”1100”|”1101”|”1110”|”1111” =>

code <= “11”;when “0100”|”0101”|”0110”|”0111” =>

code <= “10”;when “0010”|”0011” =>

code <= “01”;when others =>

code <= “00”;end case;

end process;active <= r(3) or r(2) or r(1) or r(0);

end case_arch;

Page 89: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành89

4.2. Phát biểu case .. when (tt)

Vấn đề gán tín hiệu không đầy đủ:

Ví dụ 4.12: Xét đoạn mã sau:

process (a)

begin

case a is

when “100”|”101”|”110”|”111” =>

high <= '1';

when “010”|”011” =>

middle <= '1';

when others =>

low <='l';

end case;

end process;

process (a)

begin

case a is

when “100”|”101”|”110”|”111” =>

high <= „1‟;

middle <= „0‟;

low <=„0‟;

when “010”|”011” =>

high <= „0‟;

middle <= „1‟;

low <= „0‟;

when others =>

high <= „0‟;

middle <= „0‟;

low <= „1‟;

end case;

end process;

Page 90: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành90

4.2. Phát biểu case .. when (tt)

Một cách khác cho mã gọn hơn:

Ví dụ 4.13: Xét đoạn mã sau:

process (a)

begin

case a is

when “100”|”101”|”110”|”111” =>

high <= '1';

when “010”|”011” =>

middle <= '1';

when others =>

low <='l';

end case;

end process;

process (a)

begin

high <= „0‟;

middle <= „0‟;

low <=„0‟;

case a is

when “100”|”101”|”110”|”111” =>

high <= „1‟;

when “010”|”011” =>

middle <= „1‟;

when others =>

low <= „1‟;

end case;

end process;

Page 91: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành91

4.2. Phát biểu case .. when (tt)

Vấn đề cài đặt mạch của phát biểu case: dùng mạch dồn kênhtương tự phát biểu gán tín hiệu chọn lọc.

Ví dụ 4.14: Xét đoạn mã sau:

case case_expr is

when c0 =>

sig_a <= value_expr_a_0;

sig_b <= value_expr_b_0;

when c1 =>

sig_a <= value_expr_a_1;

sig_b <= value_expr_b_1;

when others =>

sig_a <= value_expr_a_n;

sig_b <= value_expr_b_n;

end case;

Giả sử case_expr có thể có 5 giá trị: c0, c1, c2, c3 và c4.

Page 92: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành92

Bài tập

Mô tả mạch giải mã 3 → 8 (74LS138)

Page 93: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành93

5. THIẾT KẾ MẠCH TUẦN TỰ

Một tín hiệu sẽ tạo ra chốt/flip-flop nếu được gán dưới sự thay

đổi của một tín hiệu khác.

if (clk = „1‟) then … → tạo chốt

if (clk‟event and clk = „1‟) then … → tạo flip-flop (cạnh lên)

Nếu phép gán cho biến được thực hiện dưới sự thay đổi của tín

hiệu khác và giá trị này sau đó truyền lại cho một tín hiệu → tạo

chốt/flip-flop.

Một biến sẽ tạo ra chốt/flip-flop nếu nó được dùng trước khi

được gán một giá trị.

Page 94: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành94

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.1:

process (clk)

begin

if (clk'event and clk='1') then

output1 <= temp; -- output1 được lưu

output2 <= a; -- output2 được lưu

end if;

end process;

process (clk)

begin

if (clk'event and clk='1') then

output1 <= temp; -- output1 được lưu

end if;

output2 <= a; -- output2 không được lưu

end process;

Page 95: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành95

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.2: Biến temp làm cho tín hiệu x được lưu

process (clk)

variable temp: bit;

begin

if (clk'event and clk='1') then

temp := a;

end if;

x <= temp; -- biến temp làm cho tín hiệu x được lưu

end process;

Page 96: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành96

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.3: Tạo D-FF

entity dff_logic is

port (

d, clk : in std_logic;

q : out std_logic);

end dff_logic;

architecture a of dff_logic is

begin

process (clk)

begin

if (clk‟event and clk = „1‟) then

q <= d;

end if;

end process;

end a;

Page 97: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành97

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.4: Tạo D-FF dùng phát biểu wait để phát hiện cạnh xung

entity dff_logic is

port (

d, clk : in std_logic;

q : out std_logic);

end dff_logic;

architecture a of dff_logic is

begin

process

begin

wait until (clk‟event and clk = „1‟) then

q <= d;

end if;

end process;

end a;

Page 98: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành98

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.5: Tạo D-FF dùng hàm rising_edge để phát hiện cạnh xung

entity dff_logic is

port (

d, clk : in std_logic;

q : out std_logic);

end dff_logic;

architecture a of dff_logic is

begin

process (clk)

begin

if rising_edge(clk) then

q <= d;

end if;

end process;

end a;

Page 99: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành99

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.6: Tạo T-FFentity tff_logic is

port (t, clk : in std_logic;q : buffer std_logic);

end tff_logic;architecture a of tff_logic is

beginprocess (clk)begin

if (clk’event and clk = „1‟) thenif (t = „1‟) then

q <= not(q);end if;

end if;end process;

end a;

Page 100: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành100

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.7: Tạo D-FF với ngõ ra q và qbarentity dff_logic is

port (d, clk : in std_logic;

q : out std_logic;

qbar : out std_logic);

end dff_logic;

architecture a of dff_logic is

begin

process (clk)

begin

if rising_edge(clk) then

q <= d;

qbar <= not d;

end if;

end process;

end a;

Page 101: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành101

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.8: Tạo D-FF với ngõ ra q và qbarentity dff_logic is

port (d, clk : in std_logic;

q : buffer std_logic;

qbar : out std_logic);

end dff_logic;

architecture a of dff_logic is

begin

process (clk)

begin

if rising_edge(clk) then

q <= d;

end if;

end process;

qbar <= not q;

end a;

Page 102: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành102

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.9: Tạo D-FF với reset bất đồng bộentity dff_async_reset is

port (d, clk, rst: in std_logic;q : out std_logic);

end dff_async_reset;architecture a of dff_async_reset is

beginprocess (clk, rst)begin

if (rst = „1‟) thenq <= „0‟;

elsif (clk’event and clk = „1‟) thenq <= d;

end if;end process;

end a;

Page 103: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành103

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.10: Tạo D-FF với reset đồng bộentity dff_sync_reset is

port (d, clk, rst: in std_logic;q : out std_logic);

end dff_sync_reset;architecture a of dff_sync_reset is

beginprocess (clk)begin

if (clk’event and clk = „1‟) thenif (rst = „1‟) then

q <= „0‟;else

q <= d;end if;

end if;end process;

end a;

Page 104: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành104

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.11: Tạo thanh ghi dịch

a b c

Page 105: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành105

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.11: Tạo thanh ghi dịch (tt)

a b c

Page 106: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành106

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.11: Tạo thanh ghi dịch (tt)

doutdin

Page 107: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành107

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.12: Tạo bộ đếm đồng bộ 8-bit với ngõ ra 3 trạng thái (OE), có

chân cho phép nạp dữ liệu (LOAD) đồng bộ và cho phép đếm

(EN).library ieee;

use ieee.std_logic_1164.all;

use ieee. std_logic_unsigned.all;

entity counter is port (

clk, load, oe, enable : in std_logic;

data : in std_logic_vector(7 downto 0);

cnt_out : out std_logic_vector(7 downto 0));

end counter;

architecture cnt8 of counter is

signal cnt: std_logic_vector(7 downto 0);

begin

process ( clk)

begin

Page 108: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành108

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.12: (tt)if rising_edge(clk) then

if load = „1‟ then

cnt <= data;

elsif enable = „1‟ then

cnt <= cnt+1;

end if;

end if;

end process;

three_state: process(oe,cnt) -- three-state buffers

begin

if oe = ‟0‟ then

cnt_out <= (others => „Z‟);

else

cnt_out <= cnt;

end if;

end process three_state;

end cnt8;

Page 109: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành109

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Bài tập: Tạo mạch JK_FF với ngõ ra Q đảo và không đảo

Page 110: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành110

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.13: Xác định mạch tổng hợp của mô tả VHDL sau:

Page 111: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành111

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Phát biểu vòng lặp loop:

Dạng tổng quát:

[loop_label:] [iteration_scheme] loop

{sequential_statement}

end loop [loop_label];

Có 2 kiểu lặp (iteration_scheme):

(1) for identifier in range

(2) while boolean_expression

Page 112: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành112

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Ví dụ 5.14: Tạo thanh ghi dịch từ trái sang phải tổng quát N-bit (mặc

định N = 4) với chân cho phép nạp dữ liệu đồng bộ Load.

ENTITY shift_n IS

GENERIC (N : INTEGER := 4 ) ;

PORT (D : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);

clk : IN STD_LOGIC;

Load, w : IN STD_LOGIC;

Q : BUFFER STD_LOGIC_VECTOR(N-1 DOWNTO 0));

END shift_n ;

ARCHITECTURE behavior OF shift_n IS

BEGIN

PROCESS

BEGIN

WAIT UNTIL Clock'EVENT AND Clock = '1' ;

IF Load = '1' THEN

Q <= D;

ELSE

Genbits: FOR i IN 0 TO N-2 LOOP

Q(i) <= Q(i+1) ;

END LOOP;

Q(N-1) <= w;

END IF;

END PROCESS;

END behavior;

Page 113: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành113

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Phát biểu exit: phát biểu tuần tự làm việc thực thi nhảy ra khỏi vònglặp trong cùng hay vòng lặp được chỉ định bởi một nhãn.

Dạng tổng quát:

exit [loop_label] [when condition];

Ví dụ 5.15:Loop_X: loop

a_v := 0;

Loop_Y: loop

exit Loop_X when condition_1;

Output_1(a_v) := Input_1(a_v);

av := av + 1;

exit when condition_2;

end loop Loop_Y;

Assign_Y: B(i) <= Output_1(i) after 10 ns;

exit Loop_X when condition_3; -- nếu bỏ qua nhãn Loop_X?

end loop Loop_X;

Assign_X: A <=B after 10 ns;

Page 114: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành114

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Phát biểu next: phát biểu tuần tự chỉ có thể dùng trong vòng lặp chophép bỏ qua các phát biểu còn lại trong lần lặp hiện hành.

Dạng tổng quát:

next [loop_label] [when condition];

Ví dụ 5.16:

Loop_X: for count_value in 1 to 8 loop

Assign_1: A(count_value) := '0';

k := 0;

Loop_Y: loop

Assign_2: B(k) := '0';

next Loop_X when condition_1; -- nếu bỏ qua nhãn Loop_X?

Assign_3: B(k + 8) := '0';

k := k + 1;

end loop Loop_Y;

end loop Loop_X;

Page 115: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành115

5. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Các lỗi thường gặplibrary ieee;

use ieee.std_logic_1164.all;entity term-count is port

clock, reset, oe : in bit;data : in std_logic_vector(7 downto 0);cnt_out : out std_logic_vector(7 downto 0);

equals : out std_logic;);

end term-count;

architecture a of term-count

signal cnt: std_logic_vector(7 downto 0);

begin

compare: process

begin

if data = cnt then

equals = „1‟;

end if;

end process;

Page 116: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành116

6. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Các lỗi thường gặp (tt)

counter: process (clk)

begin

if reset = „1‟ then

cnt <= “0000”;

elseif (clock‟event and clock=„1‟)

cnt <= cnt + 1;

end if;

end process;

cnt_out <= (others <= „Z‟) when oe = „0‟ else cnt;

end a;

Page 117: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành117

6. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Mã VHDL sau khi sửa lỗi:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity term_count is port (

clock, reset, oe : in bit;data : in std_logic_vector(7 downto 0);cnt_out : out std_logic_vector(7 downto 0);equals : out std_logic);

end term_count;architecture a of term_count

signal cnt: std_logic_vector(7 downto 0);begin

compare: process (cnt, data)begin

if data = cnt thenequals <= „1‟;

elseequals <= „0‟;

end if;end process;

Page 118: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành118

6. THIẾT KẾ MẠCH TUẦN TỰ (tt)

Mã VHDL sau khi sửa lỗi: (tt)

counter: process (clock, reset)

begin

if reset = „1‟ then

cnt <= “00000000”;

elsif (clock‟event and clock=„1‟) then

cnt <= cnt + 1; -- khai báo thêm use ieee.std_logic_unsigned.all;

end if;

end process;

cnt_out <= (others => „Z‟) when oe = „0‟ else cnt;

end a;

Page 119: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành119

6. THIẾT KẾ MÁY TRẠNG THÁI

Có nhiều cách khác nhau để mô tả một máy trạng thái:

Page 120: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành120

6. THIẾT KẾ MÁY TRẠNG THÁI (tt)

Một khuôn dạng mô tả máy trạng thái (reset bất đồng bộ):

Moore output

Page 121: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành121

6. THIẾT KẾ MÁY TRẠNG THÁI (tt)

Khuôn dạng đầy đủ:

Page 122: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành122

6. THIẾT KẾ MÁY TRẠNG THÁI (tt)

Ví dụ 6.1: Mô tả FSM sau:

Page 123: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành123

6. THIẾT KẾ MÁY TRẠNG THÁI (tt)

Trường hợp cần ngõ ra Mealy đồng bộ có thể dùng khuôn dạng:

Dùng thêm 1 tín hiệu

tạm temp cho ngõ ra

Page 124: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành124

6. THIẾT KẾ MÁY TRẠNG THÁI (tt)

Ví dụ 6.2: Mô tả lại FSM của vd 6.1

với ngõ ra đồng bộ:

Page 125: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành125

6. THIẾT KẾ MÁY TRẠNG THÁI (tt)

Ví dụ 6.3: Mô tả FSM sau:

Chỉ dùng 1 process cho khối logic

trạng thái kế tiếp và hiện tại

Tạo khối logic ngõ ra riêng

Page 126: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành126

6. THIẾT KẾ MÁY TRẠNG THÁI

Ví dụ 6.3: (tt) Dùng 2 process

Page 127: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành127

6. THIẾT KẾ MÁY TRẠNG THÁI

Ví dụ 6.4: Mô tả FSM sau:

Chỉ dùng 1 process cho khối logic

trạng thái kế tiếp và hiện tại

Tạo khối logic ngõ ra riêng

Page 128: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành128

6. THIẾT KẾ MÁY TRẠNG THÁI

Vấn đề gán trạng thái:

library IEEE;

use IEEE.std_logic_1164.all;

library SYNOPSYS;

use SYNOPSYS.attributes.all;

...

architecture fsmexampe_arch of fsmexamp is

type Sreg_type is (INIT, A0, A1, OK0, OK1);

attribute enum_encoding of Sreg_type: type is

"0000 0001 0010 0100 1000";

signal Sreg: Sreg_type;

...library IEEE;

use IEEE.std_logic_1164.all;

...

architecture fsmexampc_arch of fsmexamp is

subtype Sreg_type is STD_LOGIC_VECTOR (1 to 4);

constant INIT: Sreg_type := "0000";

constant A0 : Sreg_type := "0001";

constant A1 : Sreg_type := "0010";

constant OK0 : Sreg_type := "0100";

constant OK1 : Sreg_type := "1000";

signal Sreg: Sreg_type;

...

Page 129: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành129

7. THIẾT KẾ PHÂN CẤP TRONG VHDL

Page 130: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành130

7. THIẾT KẾ PHÂN CẤP TRONG VHDL (tt)

Để dùng một component trong thiết kế cần có hai bước:

Khai báo component: cho biết tên và các giao tiếp của

component.

Khởi tạo component: kết hợp các tín hiệu với các port của

component.

Page 131: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành131

7. THIẾT KẾ PHÂN CẤP TRONG VHDL (tt)

Có 2 cách cơ bản để khai báo 1 component:

Khai báo trong đoạn mã chính của thiết kế.

Khai báo trong một PACKAGE.

Page 132: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành132

7. THIẾT KẾ PHÂN CẤP TRONG VHDL (tt)

Có 2 cách kết hợp giữa các tham số hình thức và tham số thực:

Theo vị trí: mỗi tham số thực trong khởi tạo component được

ánh xạ theo vị trí của mỗi port trong khai báo component.

Theo tên: danh sách kết hợp có dạng: (không cần theo thứ tự)

formal1 => actual1, formal2 => actual2, …

Page 133: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành133

7. THIẾT KẾ PHÂN CẤP TRONG VHDL (tt)

Ví dụ 7.1: Thực hiện mạch logic như hình sau:

Page 134: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành134

7. THIẾT KẾ PHÂN CẤP TRONG VHDL (tt)

Ví dụ 7.1: (tt)

w

Page 135: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành135

7. THIẾT KẾ PHÂN CẤP TRONG VHDL (tt)

Ví dụ 7.1: (tt)

Cũng có thể khai báo component trong 1 PACKAGE như sau:

Page 136: Slide-ch4-Thiet Ke He Thong So Dung Vhdl

Bài giảng môn Kỹ thuật số 2

Giảng viên: Nguyễn Hữu Chân Thành136

Q&A