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
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
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
Phan Hải Phong 04/19/2023
4
Giới thiệu về IC và thiết kế VLSI
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
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
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)
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
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
04/19/2023Phan Hải Phong
10
CMOS transistor
04/19/2023Phan Hải Phong
11
Thiết kế logic họ CMOS
04/19/2023Phan Hải Phong
12
Ví dụ: bộ đảo CMOS
04/19/2023Phan Hải Phong
13
Ví dụ: mạch NAND
04/19/2023Phan Hải Phong
14
Thiết kế và chế tạo IC
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)
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
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
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)
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)
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
04/19/2023Phan Hải Phong
21
SOC: OMAP-4
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)
04/19/2023Phan Hải Phong
23
Các mức thiết kế VLSI
04/19/2023Phan Hải Phong
24
Luồng thiết kế (design flow)
04/19/2023Phan Hải Phong
25
Designers – Tasks – Tools
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
Phan Hải Phong 04/19/2023
27
Cấu trúc FPGA
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)
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.
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)
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
04/19/2023Phan Hải Phong
32
Một CLB phức tạp
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).
04/19/2023Phan Hải Phong
34
Kết nối khả trình
04/19/2023Phan Hải Phong
35
Thiết kế chip trên FPGA
Phan Hải Phong 04/19/2023
36
Ngôn ngữ mô tả phần cứng VHDL
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.
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
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.
04/19/2023Phan Hải Phong
40
Luồng thiết kế
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
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
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…
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).
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
…
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).
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;
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.
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;
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
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;
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
04/19/2023Phan Hải Phong
53
Ví dụ: NAND GATE
ARCHITECTURE nand_arch OF nand_gate ISBEGINx<=a NAND b;END nand_arch;
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.
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).
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.
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 )
04/19/2023Phan Hải Phong
58
BIT và BIT_VECTOR
Ví dụ:
Gán giá trị.
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
04/19/2023Phan Hải Phong
60
STD_LOGIC và STD_LOGIC_VECTOR
Ví dụ
Gán cho biến 1 giá trị
04/19/2023Phan Hải Phong
61
STD_LOGIC và STD_LOGIC_VECTOR
Xung đột logic
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;
04/19/2023Phan Hải Phong
63
User-Defined Data Types
Integer
04/19/2023Phan Hải Phong
64
User-Defined Data Types
enumerated
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.
04/19/2023Phan Hải Phong
66
Kiểu con - Subtypes
Ví dụ
04/19/2023Phan Hải Phong
67
Kiểu con - Subtypes
Ví dụ:
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:
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.
04/19/2023Phan Hải Phong
70
Signed và Unsigned
Ví dụ:
04/19/2023Phan Hải Phong
71
Signed và Unsigned
Ví dụ:
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
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)
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
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.
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');
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
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
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 )
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
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’
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ự
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
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ớ.
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.
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
04/19/2023Phan Hải Phong
87
Toán tử
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ự
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
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;
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
04/19/2023Phan Hải Phong
92
Ví dụ
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;
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;
04/19/2023Phan Hải Phong
95
Câu lệnh GENERATE
FOR /GENERATE: label: FOR identifier IN range GENERATE (concurrent assignments) END GENERATE;
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ự
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];
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 ;
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?
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
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.
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;
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 ;
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?
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];
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
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.
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 đó.
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).
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];
04/19/2023Phan Hải Phong
111
q = d;qbar = not q;
Recommended