tai lieu vhdl tieng viet

111
PHAN HẢI PHONG [email protected] Thiết kế VLSI 06/14/2022 Phan Hải Phong 1

Upload: tranvanthanh

Post on 24-Dec-2015

41 views

Category:

Documents


10 download

DESCRIPTION

Tai lieu

TRANSCRIPT

Page 1: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

1

P H A N H Ả I P H O N G

H A I P H O N G P H A N @ G M A I L . C O M

Thiết kế VLSI

Page 2: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

2

Nội dung chính

Giới thiệu về IC và thiết kế VLSICấu trúc FPGANgôn ngữ mô tả phần cứng VHDL

Page 3: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

3

Tài liệu tham khảo

Application-Specific Integrated Circuits - Michael John Sebastian Smith, Addison-Wesley

VHDL - Programming by Example By Douglas L. Perry, McGraw-Hill.

Circuit Design with VHDL – Volnei A.Pedroni, MIT Press

Page 4: Tai lieu VHDL tieng viet

Phan Hải Phong 04/19/2023

4

Giới thiệu về IC và thiết kế VLSI

Page 5: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

5

Lược sử phát triển mạch tích hợp (IC)

1947

Transistor đầu tiên

1958

Vi mạch tích hợp đầu tiên

1970

Giải pháp SoC đầu tiên - Đồng

hồ Hamilton Pulsar

2009

Chip Xeon 7400(1,9 tỉ transistor)

1971

CPU Intel 4004

1974

SoC đầu tiên – đồng hồ Microma

Page 6: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

6

Mạch tích hợp - Integrated Circuits (IC)

(a) A pin-grid array (PGA) package (b) The silicon die or chip is under the package lid

Page 7: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

7

Ứng dụng của IC

Processors CPU, DSP, Controllers

Memory chips RAM, ROM, EEPROM

Analog Mobile communication,

audio/video processing

Programmable PLA, FPGA

Embedded systems Used in cars, factories Network cards

System-on-chip (SoC)

Page 8: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

8

Mạch tích hợp - Integrated Circuits (IC)

Kích thước IC: Small Scale Integration (SSI): chứa 1 – 10 logic gates (trước1970s) Medium Scale Integration (MSI): logic functions, counters Large Scale Integration (LSI): many, first microprocessors on the chip Very Large Scale Integration (VLSI): very many

Complementary Metal Oxide Semiconductor (CMOS) Fast, cheap, low power transistors

Xây dựng một chip CMOS đơn giản: CMOS transistors Building logic gates from transistors Transistor layout and fabrication

Page 9: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

9

Một số loại transistor bán dẫn

CMOS* Bipolar (e.g., TTL)Bi-CMOS - hybrid Bipolar, CMOS (for high speed)Ga-As - Gallium Arsenide (for high speed)Si-Ge - Silicon GermaCMOS: fast, cheap, low power transistor

Page 10: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

10

CMOS transistor

Page 11: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

11

Thiết kế logic họ CMOS

Page 12: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

12

Ví dụ: bộ đảo CMOS

Page 13: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

13

Ví dụ: mạch NAND

Page 14: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

14

Thiết kế và chế tạo IC

Page 15: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

15

Các hướng thiết kế vi mạch (IC)

Quick design (semi-custom design)High-performance design (full-custom design)

Page 16: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

16

Các phương pháp thiết kế vi mạch kích thước lớn (VLSI)

Full CustomASIC - Application-Specific Integrated CircuitPLD, FPGA - Programmable LogicSoC - System-on-a-Chip

Page 17: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

17

Phương pháp thiết kế Full Custom

Mỗi phần tử của mạch đều được thiết kế riêng biệtHiệu suất

Chi phí thiết kế cao Chi phí NRE (Non-Recurring Engineering) cao Hiệu năng cao Chi phí cho từng vi mạch thấp (nếu sản xuất với số lượng lớn)

Ví dụ: Analog and Mixed-Signal Microprocessor

Page 18: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

18

Phương pháp thiết kế ASIC

Constrained design using pre-designed (and sometimes pre-manufactured) components that are assembled and wired by CAD tools. Standard cell (pre-designed cells) Gate array (pre-manufactured cells - just add wiring) Structured ASIC (complex function customized by wiring)

Hiệu năng: Low Design Cost (CAD tools greatly reduce design effort) High NRE Cost (lower in Gate Array / Structured ASIC) Medium Unit Cost Medium Performance

Ví dụ: Control chip for cell phone Graphics chips for desktop computers (e.g. nVidia, ATI)

Page 19: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

19

Phương pháp thiết kế kiểu logic tái lập trình

Pre-manufactured components with programmable interconnect wired by CAD tools

Hiệu năng: Low Design Cost (CAD tools greatly reduce design effort) Low NRE Cost (basically 0) Low performance High unit cost

Ví dụ: Network routers (e.g., Cisco)

Page 20: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

20

Phương pháp thiết kế kiểu SOC

Idea: combine several large blocks Pre-designed custom cores, called Intellectual Property (IP) cores (e.g. ARM

processor, microcontroller) ASIC logic for special-purpose hardware Programmable Logic (PLD, FPGA) Analog

Hiệu năng: Medium design cost High NRE cost Medium performance Medium unit cost

Ví dụ: Consumer electronics (e.g., iPod) Cable set-top boxes Chip đa năng cho thiết bị di động

Page 21: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

21

SOC: OMAP-4

Page 22: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

22

Ý tưởng thiết kế với lõi IP

Ý tưởng: tái sử dụng các lõi đã thiết kế.Hard IP – pre-designed layout in a specific

technology Standard Cells Processor Cores Memory Cores

Soft IP - synthesizable HDL Proprietary algorithms (e.g. MPEG encoding/decoding)

Page 23: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

23

Các mức thiết kế VLSI

Page 24: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

24

Luồng thiết kế (design flow)

Page 25: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

25

Designers – Tasks – Tools

Page 26: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

26

Hướng thiết kế

Top-Down Design Method High level functions are defined first Lower level implementation details are filled in later

Bottom-Up Design Method Low level functions are defined and finished first High level implementation are completed in later

Page 27: Tai lieu VHDL tieng viet

Phan Hải Phong 04/19/2023

27

Cấu trúc FPGA

Page 28: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

28

Giới thiệu chung

FPGA: Field Programmable Gate Array – mảng logic tái khả trình.

Được thiết kế đầu tiên bởi Ross Freeman (người sáng lập công ty Xilinx), vào năm 1984.

Chứa các phần tử logic có khả năng tái cấu hình để tạo thành các vi mạch số khác nhau.

FPGA được lập trình bằng cách: Sử dụng một sơ đồ mạch logic Sử dụng ngôn ngữ mô tả phần cứng (Hardware Description

Language - HDL)

Page 29: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

29

Giới thiệu chung

FPGA bao gồm: Các thành phần logic khả trình (các khối logic) Các kết nối tái cấu hình để cho phép các khối logic được nối

dây với nhau.

Các khối logic có thể được cấu hình để thực hiện các hàm tổ hợp phức tạp hay chỉ đơn thuần là các cổng logic như AND và XOR.

Trong hầu hết các FPGA thì các khối logic cũng chứa các phần tử nhớ, các phần tử nhớ này có thể là flip-flop hay các khối nhớ đầy đủ hơn.

Page 30: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

30

Cấu trúc chung của FPGA

Các khối logic cấu hình được (configurable logic blocks - CLB)

Các khối I/O cấu hình được (configurable I/O blocks)

Các liên kết khả trình (Programmable Interconnect)

Page 31: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

31

Cấu trúc CLB đơn giản

Bảng tìm kiếm 4 đầu vào (Lookup table - LUT) LUT là khối logic có thể thực hiện bất kỳ hàm logic nào từ 4

đầu vào, kết quả của hàm này tùy thuộc vào mục đích mà gửi ra ngoài khối logic trực tiếp hay thông qua phần tử nhớ flip-flop

Flip-flop

Page 32: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

32

Một CLB phức tạp

Page 33: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

33

Khối I/O tái cấu hình

Được sử dụng để: Chuyển các tín hiệu vào trong chip. Gởi tín hiệu từ trong chip ra ngoài. Cả 2 nhiệm vụ trên (một cách đồng thời).

Page 34: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

34

Kết nối khả trình

Page 35: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

35

Thiết kế chip trên FPGA

Page 36: Tai lieu VHDL tieng viet

Phan Hải Phong 04/19/2023

36

Ngôn ngữ mô tả phần cứng VHDL

Page 37: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

37

Giới thiệu

VHDL: là một ngôn ngữ mô tả phần cứng.

VHDL:VHSIC Hardware Description Language

(VHSIC: Very High Speed Integrated Circuits).

Được Bộ Quốc Phòng Mỹ đưa ra đầu tiên vào năm

1980.

Page 38: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

38

Giới thiệu

Tổ chức IEEE chính thức phê chuẩn chấp nhận ngôn ngữ VHDL như là một chuẩn của họ vào năm 1987, chuẩn IEEE 1076

Giống như các chuẩn kác của IEEE, chuẩn IEEE 1076 được sửa đổi theo chu kỳ tối thiểu là 5 năm

Sửa đổi đầu tiên được thực hiện năm 1993, và VHDL-93 hiện nay được coi là phiên bản chính thức của ngôn ngữ này, hiện nay bắt đầu xuất hiện VHDL 200X

Tuy nhiên, hầu hết các công cụ (tool) đều hỗ trợ phiên bản đầu tiên (VHDL-87)

Các bộ phận của VHDL 200X

được hỗ trợ bởi một số tool

VHDL-87

VHDL-93

VHDL-2X

Page 39: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

39

Giới thiệu

Là một ngôn ngữ chuẩn, độc lập với công nghệ.

Ứng dụng trong hai phương thức thiết kế vi mạch

chính:

Programmable Logic Devices:

CPLD: Complex Programmable Logic Devices

FPGA: Field Programmable Gate Arrays.

ASIC: Appliation Specific Integrated Circuits.

Page 40: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

40

Luồng thiết kế

Page 41: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

41

Mức trừu tượng trong thiết kế

Behavioral

Logic

RTL

Layout

Ít chi tiết hơn, thiết kế và mô phỏng nhanh hơn

Chi tiết hơn, phụ thuộc công nghệ, thiết kế và mô phỏng chậm hơn

DFF AND_OR2

CLB_R5C5

CLB_R5C6

F

Page 42: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

42

Các công cụ EDA

Có nhiều công cụ EDA khác nhau được sử dụng để thiết kế vi mạch bằng VHDL.

Các công cụ hỗ trợ theo 3 hướng chính: tổng hợp (synthesis), thực thi phần cứng (implementation), mô phỏng (simulation).

Công cụ: Quartus – Altera ISE suite – Xilinx Model Sim – Mentor Graphic

Page 43: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

43

Công cụ để học VHDL???

• Trình soạn thảo:- Notepad- Notepad++- Word- …• Chương trình mô phỏng:

Xillinx ISE, Quartus, ModelSim…

Page 44: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

44

Cấu trúc chương trình VHDL

LIBRARY: chứa các khai báo về những thư viện được dùng trong chương trình.

ENTITY: khai báo về các cổng vào ra của mạch điệnARCHITECTURE: chứa mã VHDL mô tả hành vi của

mạch điện (chức năng của mạch).

Page 45: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

45

LIBRARY

Tập hợp các đoạn code thường hay được sử dụng. Cho phép tái sử dụng và chia sẻ các đoạn mã trong

nhiều thiết kế khác nhau.Các thành phần của LIBRARY

PACKAGES FUNCTIONS PROCEDURES COMPONENTS

Page 46: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

46

LIBRARY

Khai báo: LIBRARY library_name; USE library_name.package_name.package_parts;

Các thư viện thường xuyên sử dụng: IEEE STD WORK

Các gói thường được sử dụng: ieee.std_logic_1164 (ieee library) standard (std library) work (work library).

Page 47: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

47

Ví dụ

LIBRARY ieee;

USE ieee.std_logic_1164.all

LIBRARY std;

USE std.standard.all;

LIBRARY work;

USE work.all;

Page 48: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

48

Thư viện IEEE

std_logic_1164 : STD_LOGIC (8 levels) and STD_ULOGIC (9

levels)

std_logic_arith : kiểu dữ liệu SIGNED và UNSIGNED,các phép

toán và so sánh, các hàm chuyển đổi

std_logic_signed: chứa các hàm cho phép hoạt động với kiểu

STD_LOGIC_VECTOR có dấu.

std_logic_unsigned : chứa các hàm cho phép hoạt động với

kiểu STD_LOGIC_VECTOR không dấu.

Page 49: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

49

ENTITY

Nơi chứa các mô tả về các cổng vào ra của mạch điện.

Cú pháp:ENTITY entity_name ISPORT (port_name : signal_mode signal_type;port_name : signal_mode signal_type;

...);END entity_name;

Page 50: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

50

ENTITY

Các mode của tín hiệu: IN: tín hiệu vào OUT: tín hiệu ra INOUT: tín hiệu vào ra hai hướng BUFFER: tín hiệu ra có nhớ đệm

Các kiểu tín hiệu: BIT STD_LOGIC, STD_LOGIC_VECTOR INTEGER

…Tên của ENTITY không được trùng với các từ khoá trong

VHDL

Page 51: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

51

Ví dụ: NAND GATE

ENTITY nand_gate ISPORT (a, b : IN BIT;

x: OUT BIT);END nand_gate;

Page 52: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

52

ARCHITECTURE

Phần mã mô tả hoạt động (chức năng) của mạch điện.

Cú pháp:ARCHITECTURE architecture_name OF entity_name IS[declarations]BEGIN(code)END architecture_name;

Không được sử dụng các từ khoá của VHDL để làm tên của ARCHITECTURE

Có thể trùng tên với ENTITY

Page 53: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

53

Ví dụ: NAND GATE

ARCHITECTURE nand_arch OF nand_gate ISBEGINx<=a NAND b;END nand_arch;

Page 54: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

54

Kiểu dữ liệu (Data Types)

BIT và BIT_VECTOR: kiểu logic 2 mức ( ‘0’ và ‘1’)

STD_LOGIC (and STD_LOGIC_VECTOR): 8 giá trị logic

của hệ thống được giới thiệu trong chuẩn IEEE1164

STD_ULOGIC (and STD_ULOGIC_VECTOR): 9 giá trị

logic của hệ thống được giới thiệu trong chuẩn IEEE1164

SIGNED and UNSIGNED: tương tự như STD_LOGIC và

STD_LOGIC_VECTOR nhưng cho phép thực hiện các

phép toán số học

Các kiểu dữ liệu này cho phép tổng hợp phần cứng được.

Page 55: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

55

Kiểu dữ liệu (Data Types)

BOOLEAN: True, False.INTEGER: 32-bit số nguyên ( từ -2,147,483, 647

đến +2,147,483, 647).NATURAL: 32-bit số nguyên không âm (từ 0 đến

2,147,483,64 7).REAL: kiểu số thực (từ -1.0E38 đến 1.0E38).

Page 56: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

56

Kiểu dữ liệu (Data Types)

Kiểu vật lý: mô tả các thông số vật lý (thời gian, điện áp, dòng điện…). Chỉ sử dụng trong mô phỏng, không thể tổng hợp phần cứng (synthesis).

Kiểu kí tự: mô tả các kí tự trong bảng mã ASCII. Không thể tổng hợp phần cứng.

Page 57: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

57

BIT và BIT_VECTOR

Chỉ gồm 2 giá trị: ‘0’ và ‘1’

5=> 0101 ( 3 downto 0 ) => 1010 ( 0 to 3 )

Page 58: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

58

BIT và BIT_VECTOR

Ví dụ:

Gán giá trị.

Page 59: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

59

STD_LOGIC và STD_LOGIC_VECTOR

8 giá trị logic

Mức yếu k xác định

Mức yếu thấp

Mức yếu cao

Page 60: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

60

STD_LOGIC và STD_LOGIC_VECTOR

Ví dụ

Gán cho biến 1 giá trị

Page 61: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

61

STD_LOGIC và STD_LOGIC_VECTOR

Xung đột logic

Page 62: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

62

User-Defined Data Types

Kiểu dữ liệu do người dùng định nghĩa, cho phép tạo ra kiểu dữ liệu cho riêng mình.

Cú pháp: TYPE name_type IS RANGE begin_poin TO end_poin

Có hai dạng dữ liệu do người dùng tự định nghĩa: integer và enumerated;

Page 63: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

63

User-Defined Data Types

Integer

Page 64: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

64

User-Defined Data Types

enumerated

Page 65: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

65

Kiểu con - Subtypes

Là kiểu dữ liệu được trích xuất từ một kiểu dữ liệu khác với những điều kiện ràng buộc cụ thể.

Lý do sử dụng Subtype: một số phép toán không cho phép sử dụng khi 2 kiểu dữ liệu là khác nhau nhưng có thể cho phép khi sử dụng kiểu con.

Page 66: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

66

Kiểu con - Subtypes

Ví dụ

Page 67: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

67

Kiểu con - Subtypes

Ví dụ:

Page 68: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

68

Một số kiểu dữ liệu khác

Kiểu mảng – Array: tập hợp các đối tượng có cùng kiểu dữ liệu.TYPE type_name IS ARRAY (specification) OF data_type;

Kiểu bảng ghi – Record: chứa các đối tượng khác kiểu dữ liệuTYPE birthday IS RECORDday: INTEGER RANGE 1 TO 31;month: month_name;

END RECORD;

Kiểu mảng cổng – Port Array:

Page 69: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

69

Signed và Unsigned

Ví dụ:SIGNAL x: SIGNED (7 DOWNTO 0);SIGNAL y: UNSIGNED (0 TO 3);

Khai báo tương tự STD_LOGIC, không phải theo INTEGER.

Khai báo sử dụng gói std_logic_arith của thư viện IEEE

UNSIGNED: giá trị không âmSIGNED: giá trị âmCho phép thực hiện các toán tử số học, nhưng không

cho phép thực hiện các toán tử logic.

Page 70: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

70

Signed và Unsigned

Ví dụ:

Page 71: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

71

Signed và Unsigned

Ví dụ:

Page 72: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

72

How???

Hai gói: std_logic_signed and std_logic_unsigned cho phép sử dụng kiểu STD_LOGIC_VECTOR tương tự như với SIGNED và UNSIGNED

Page 73: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

73

Example

LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all; -- extra package includedSIGNAL a: IN STD_LOGIC_VECTOR (7 DOWNTO 0);SIGNAL b: IN STD_LOGIC_VECTOR (7 DOWNTO 0);SIGNAL x: OUT STD_LOGIC_VECTOR (7 DOWNTO 0);...v< = a+b;- - legal (arithmetic operation OK), unsignedw< =a AND b; -- legal (logical operation OK)

Page 74: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

74

Operator

VHDL cung cấp sẵn một số loại toán tử sau: Toán tử gán Toán tử logic Toán tử số học Toán tử tương quan Toán tử dịch

Page 75: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

75

Toán tử gán

Được sử dụng để gán giá trị cho tín hiệu, biến và hằng số. <= sử dụng để gán giá trị cho SIGNAL. := sử dụng để gán giá trị cho VARIABLE, CONSTANT,

GENERIC (thường là để thiết lập giá trị khởi đầu) => sử dụng để gán giá trị cho các tín hiệu trong vector hoặc

giá trị OTHERS.

Page 76: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

76

Ví dụ

SIGNAL x : STD_LOGIC;VARIABLE y : STD_LOGIC_VECTOR (3 DOWNTO 0);SIGNAL w: STD_LOGIC_VECTOR (0 TO 7); x<= '1'; y:= "0000";w<= "10000000";w<=(0 =>'1', OTHERS =>'0');

Page 77: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

77

Toán tử logic

Được sử dụng để thực hiện các phép toán logicChỉ áp dụng đối với các loại dữ liệu: BIT,

STD_LOGIC, STD _ULOGICCác toán tử được hỗ trợ

NOT AND OR NAND NOR XOR XNOR

Page 78: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

78

Ví dụ

y <= NOT a AND b; y <= NOT (a AND b); y <= a NAND b;

Thực hiện từ trái qua phải

Page 79: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

79

Toán tử số học

Sử dụng để thực hiện các phép toán số họcChỉ áp dụng cho các loại dữ liệu: INTEGER,

SIGNED, UNSIGNED, hoặc REAL + Addition - Subtraction * Multiplication / Division ** Exponentiation MOD Modulus REM Remainder ABS Absolute value ( trị tuyệt đối )

Page 80: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

80

Toán tử so sánh

Được dùng để thực hiện phép toán so sánhCó thể áp dụng cho mọi kiểu dữ liệu

= Bằng /= Khác < Nhỏ hơn > Lớn hơn <= Nhỏ hơn hoặc bằng >= Lớn hơn hoặc bằng

Page 81: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

81

Toán tử dịch

Được sử dụng để dịch dữ liệuCú pháp:

<left operand> <shift operation> <right operand> Left operand -> BIT_VECTOR Right operand -> INTEGER

sll : Shift left logic – vị trí bên phải được lấp bởi giá trị ‘0’

srl : Shift right logic – vị trí bên trái được lấp bởi giá trị ‘0’

Page 82: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

82

Mã song song và mã tuần tự

Mã lệnh của VHDL được chia làm hai loại: Mã song song (concurrent) Mã tuần tự (sequential)

Mã lệnh được phân chia dựa vào cấu trúc của mạch điện: mạch logic kết hợp (combinational logic) -> mã song song mạch logic tuần tự (sequential logic) -> mã tuần tự

Page 83: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

83

Combinational logic

Giá trị đầu ra của mạch điện chỉ phụ thuộc vào giá trị đầu vào hiện tại

Mạch điện không có thành phần nhớCó thể được thực thi bằng các phần tử cổng logic

Page 84: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

84

Sequential Logic

Giá trị đầu ra phụ thuộc không chỉ giá trị đầu vào hiện tại mà còn cả giá trị đầu vào trước đó.

Mạch điện phải bao gồm các thành phần nhớ.

Page 85: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

85

Mã song song

Thông thường, mã lệnh của VHDL thuộc dạng mã song song.

Chỉ các mã lệnh nằm trong PROCESS, FUNCTION, PROCEDURE là mã tuần tự.

Với mã song song, mạch điện được tổng hợp như nhau, bất chấp thứ tự của câu lệnh trong chương trình.

Page 86: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

86

Mã song song

Các loại mã lệnh thuộc dạng mã song song Các toán tử Câu lệnh WHEN

WHEN/ELSE WITH/SELECT/WHEN

Câu lệnh GENERATE Câu lệnh BLOCK

Page 87: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

87

Toán tử

Page 88: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

88

Toán tử

Các toán tử có thể được sử dụng để mô tả bất kỳ mạch kết hợp nào.

Các mạch điện phức tạp có thể được biểu diễn dễ dàng hơn với mã lệnh tuần tự cho dù không chứa phần tử logic tuần tự

Page 89: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

89

Bộ multiplexer

Bộ MUX gồm 4 đầu vào, 1 đầu raTín hiệu ra được chọn từ 4 đầu vào thông qua 2

chân s0 và s1Mô tả mạch bằng các toán tử logic

Page 90: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

90

Code of MUX

LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY mux IS PORT ( a, b, c, d, s0, s1: IN STD_LOGIC; y: OUT STD_LOGIC); END mux;

ARCHITECTURE pure_logic OF mux IS BEGIN y <= (a AND NOT s1 AND NOT s0) OR (b AND NOT s1 AND s0) OR (c AND s1 AND NOT s0) OR (d AND s1 AND s0); END pure_logic;

Page 91: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

91

Câu lệnh WHEN

Có hai dạng lệnh:WHEN/ELSEassignment WHEN condition ELSEassignment WHEN condition ELSE...;

WITH/SELECT/WHENWITH identifier SELECTassignment WHEN value,assignment WHEN value,...;

Lưu ý 2 từ khoá: OTHERS và UNAFFECTED

Page 92: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

92

Ví dụ

Page 93: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

93

MUX with WHEN/ELSE

LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY mux IS PORT ( a, b, c, d: IN STD_LOGIC; sel: IN STD_LOGIC_VECTOR (1 DOWNTO 0); y: OUT STD_LOGIC);END mux;ARCHITECTURE mux1 OF mux ISBEGIN y <= a WHEN sel="00" ELSE b WHEN sel="01" ELSE c WHEN sel="10" ELSE d;END mux1;

Page 94: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

94

MUX with WITH/SELECT/WHEN

LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY mux IS PORT ( a, b, c, d: IN STD_LOGIC; sel: IN STD_LOGIC_VECTOR (1 DOWNTO 0); y: OUT STD_LOGIC);END mux;ARCHITECTURE mux2 OF mux ISBEGIN WITH sel SELECT y <= a WHEN "00", -- notice "," instead of ";" b WHEN "01", c WHEN "10", d WHEN OTHERS;END mux2;

Page 95: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

95

Câu lệnh GENERATE

FOR /GENERATE: label: FOR identifier IN range GENERATE (concurrent assignments) END GENERATE;

Page 96: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

96

Mã tuần tự

if/elsecase loop Phải được viết bên

trong một process, function, procedure

architecture RTL of ENTITY_1 is . . . begin concurrent statements ;

. . . process begin case ( sel_a ) is when… . . . end case ; end process ;

. . . process begin if (sel_b = “00”) then . . . else…. end if ; end process ; ...end architecture RTL ;

Các process sẽ đc thực hiện song song, các lệnh trong process đc thực hiện tuần tự

Page 97: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

97

Process

Process là một vùng mã tuần tự bên trong mã VHDL.Đặc trưng bởi các lệnh tuần tự và danh sách độ nhạy

“sensitivity list” (hoặc sử dụng lệnh WAIT)Một process được phát sinh khi một tín hiệu trong danh

sách độ nhạy thay đổi (hoặc khi điều kiện của lệnh WAIT phát sinh).

Cú pháp:[label:] PROCESS (sensitivity list) #ds độ nhạy[VARIABLE name type [range] [:= initial_value;]]BEGIN

(sequential code)

END PROCESS [label];

Page 98: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

98

Các câu lệnh If/Else

Câu lệnh if/else làm cho các giao dịch được thực hiện dựa trên những điều kiện nhất định. Có ba dạng lệnh if/else cơ bản sau:

processbeginif (boolean expression) thensequential statements;

end if ;

processbeginif (boolean expression) thensequential statements;

end if ;

processbeginif (boolean expression) thensequential statements ;else sequential statements ;

end if ;

processbeginif (boolean expression) thensequential statements ;else sequential statements ;

end if ;

processbeginif (boolean expression 1) thensequential statements ;elsif (boolean expression 2) then sequential statements ; elsif (boolean expression 3) then sequential statements ; else sequential statements ;

end if ;

processbeginif (boolean expression 1) thensequential statements ;elsif (boolean expression 2) then sequential statements ; elsif (boolean expression 3) then sequential statements ; else sequential statements ;

end if ;

Page 99: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

99

Ví dụ IF/THEN

process (A, B, C, D, Sel)beginIf (Sel = “00”) then

Z <= A ;elsif (Sel = “01”) then

Z <= B ;elsif (Sel = “10”) then

Z <= C ; elsif (Sel = “11”) then

Z <= D ; end if; end process ;

process (A, B, C, D, Sel)beginIf (Sel = “00”) then

Z <= A ;elsif (Sel = “01”) then

Z <= B ;elsif (Sel = “10”) then

Z <= C ; elsif (Sel = “11”) then

Z <= D ; end if; end process ;

Z

D

C

B

A

SelD

C

B

AZ

Late arriving signal?Late arriving signal?

1. Điều kiện đầu tiên thoả mãn sẽ được thực hiện ngay

2. Các điều kiện có thể gối nhau3. Điều kiện đầu tiên của lệnh

if/elsif có ưu tiên cao nhất

Sufficient for std_logic?Sufficient for std_logic?

Page 100: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

100

Bộ đếm 1 số thập phân

Chứa 1 đầu vào và 4 đầu raĐếm 1 số thập phân, tăng dần

từ 0-9-0.Đếm khi có 1 xung clock được

kích vào.

BÀI TẬP VỀ NHÀ

HỌC LẠI SÁNG THỨ 7 h207

Page 101: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

101

Thanh ghi dịch 4 bit

Bit đầu ra q sẽ nhận giá trị của đầu vào d sau 4 xung clock

Có 1 tín hiệu reset không đồng bộ, sẽ đưa các flip-flop về ‘0’ khi phát sinh.

Page 102: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

102

Lệnh WAIT

Có thể được sử dụng tương tự lệnh IFNếu sử dụng trong process thì process đó không

cần đến danh sách độ nhạy.Có thể không được tổng hợp phần cứngWAIT UNTIL signal_condition;WAIT ON signal1 [, signal2, ... ];WAIT FOR time;

Page 103: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

103

Câu lệnh Case

Câu lệnh case làm cho các giao dịch được thực hiện tuỳ thuộc vào giá trị của biểu thức chọn

Lệnh case có hai dạng cơ bản:

process (…) begincase ( selector expression ) iswhen ... =>

sequential statements ;when ... =>

sequential statements ; when ... =>

sequential statements ; end case ; . . .end process ;

process (…) begincase ( selector expression ) iswhen ... =>

sequential statements ;when ... =>

sequential statements ; when ... =>

sequential statements ; end case ; . . .end process ;

process (...)begincase ( selector expression ) iswhen ... =>

sequential statements ; . . . when others =>

sequential statements ; end case ; . . .end process ;

process (...)begincase ( selector expression ) iswhen ... =>

sequential statements ; . . . when others =>

sequential statements ; end case ; . . .end process ;

Page 104: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

104

Ví dụ lệnh Case

Tất cả các giá trị có thể có của biểu thức chọn đều phải được chỉ rõ (specified) trong câu lệnh

Các điều kiện không được chồng chéo (gối) nhau Giải các giá trị được mô tả phải hữu hạn (discrete) Lệnh Case thích hợp với các cấu trúc kiểu LUT

Hầu hết các công cụ tổng hợp mạch đều tạo ra cấu trúc MUX từ lệnh case

process (A, B, C, D, Sel )begincase Sel is when “00” => Z <= A ; when “01” => Z <= B ; when “10” => Z <= C ; when “11” => Z <= D ;

end case ;. . .end process ;

process (A, B, C, D, Sel )begincase Sel is when “00” => Z <= A ; when “01” => Z <= B ; when “10” => Z <= C ; when “11” => Z <= D ;

end case ;. . .end process ;

Z

D

C

B

A

Sel Is this sufficient for std_logic?

Page 105: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

105

Lệnh LOOP

Được sử dụng khi muốn lặp lại một số lần hữu hạn các đoạn mã trong chương trình.

FOR / LOOP: vòng lặp được thực hiện trong một số lần.[label:] FOR identifier IN range(khoang can lap) LOOP

(sequential statements)END LOOP [label];WHIL E / LOOP: vòng lặp được thực hiện đến khi điều

kiện không còn thỏa mãn.

[label:] WHILE condition LOOP(sequential statements)END LOOP [label];

Page 106: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

106

Tín hiệu và biến

VHDL cung cấp 2 kiểu “biến” để lưu tạm dữ liệu trong quá trình tín toán: SIGNAL (tín hiệu) VARIABLE (biến).

VHDL cũng cung cấp 2 kiểu hằng số để lưu các dữ liệu cố định: CONSTANT GENERIC

Page 107: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

107

Global và Local

Global: CONSTANT và SIGNAL được truy cập từ mọi vị trí trong

chương trình. Được sử dụng trong cả mã tuần tự và mã song song

Local: VARIABLE chỉ được truy cập trong các phần mã tuần tự Giá trị của VARIABLE không truyền được ra ngoài các phần

mã này.

Page 108: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

108

CONSTANT

CONSTANT name : type := value; CONSTANT set_bit : BIT := '1'; CONSTANT datamemory : memory := (('0','0','0','0'),

('0','0','0','1'), ('0','0','1','1'));

CONSTANT có thể được khai báo trong PACKAGE, ENTITY, hoặc ARCHITECTURE. Nếu khai báo trong PACKAGE thì có thể truy cập được ở bất kỳ ENTITY nào. Nếu khai báo trong ENTITY thì có thể truy cập được trong bất kỳ

ARCHITECTURE nào. Nếu khai báo trong ARCHITECTURE thì được truy cập chỉ trong kiến trúc đó.

Page 109: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

109

SIGNAL

SIGNAL được dùng để chuyển dữ liệu vào và ra khỏi mạch điện.

SIGNAL cũng được dùng như những liên kết bên trong mạch (dây dẫn).

Các PORT của mạch điện là các SIGNAL

SIGNAL name : type [range] [:= initial_value];Trong PROCESS, giá trị của SIGNAL không được cập

nhật ngay lập tức (giá trị của SIGNAL chưa được sẵn sàng cho dòng mã tiếp theo).

Page 110: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

110

VARIABLE

Chỉ được truy cập cục bộ (Local)Chỉ được dùng trong mã tuần tự (PROCESS,

FUNCTION, PROCEDURE)Không chuyển được giá trị ra khỏi đoạn mã đó (chỉ

chuyển được thông qua SIGNAL).Giá trị của VARIABLE được cập nhật ngay lập tức

tại thời điểm thay đổi (sẵn sàng cho dòng mã tiếp theo)

Cú pháp: VARIABLE name : type [range] [:= init_value];

Page 111: Tai lieu VHDL tieng viet

04/19/2023Phan Hải Phong

111

q = d;qbar = not q;