Upload
thanh-my-duong
View
54
Download
9
Embed Size (px)
Citation preview
ChuyênChuyên đềđề::
ĐẠI HỌC BÁCH KHOA ĐÀ NẴNGKHOA ĐIỆN TỬ - VIỄN THÔNG
ChuyênChuyên đềđề::
ThiếtThiết kếkế phầnphần cứngcứngvớivới vi vi mạchmạch logic logic khảkhả trìnhtrình
Giảng viên: TS. Huỳnh Việt Thắng
Đà Nẵng, 08/2013@
ETEDUT
Nội dung môn họcNội dung môn học
1. Ôn tập về Thiết kế số
2. Giới thiệu công nghệ IC khả trình
3. Máy trạng thái hữu hạn (FSM)
4. Ngôn ngữ mô tả phần cứng VHDL
5. Quy trình thiết kế với phần mềm ISE và FPGA củaXilinx
2
Xilinx
6. Giới thiệu các chủ đề nâng cao
7. Các ví dụ và bài tập thiết kế
8. Tổng kết@
ETEDUT
Tài liệu tham khảoTài liệu tham khảoTham khảo chính:
1) Douglas L. Perry, VHDL Programming by Example, 4th Edition (2002)
2) Tống Văn On, Nguyên lý mạch tích hợp: Tập 2 - Lập trình ASIC, NXB Laođộng xã hội, 2005động xã hội, 2005
Đọc thêm:
3) Peter J. Ashenden, The VHDL Cookbook
4) Nguyễn Quốc Tuấn, Giáo trình Ngôn ngữ VHDL để thiết kế vi mạch, NXB
Đại học quốc gia TP.HCM, 2002
5) Tống Văn On, Thiết kế mạch số với VHDL và Verilog (2 tập), NXB Laođộng xã hội, 2007
6) Các tài liệu tham khảo và các datasheet sưu tầm trên Internet
3
6) Các tài liệu tham khảo và các datasheet sưu tầm trên Internet
Trân trọng cảm ơn PGS.TS. Phạm Ngọc Nam, Viện Điện TửViễn Thông, Trường Đại học Bách khoa Hà Nội đã cho phéptham khảo và sử dụng bài giảng của Thầy!
@ETEDUT
Kiểm tra đánh giá môn họcKiểm tra đánh giá môn học
• Kiểm tra giữa kỳ: Thi viết được dùng tài liệu
• Kiểm tra cuối kỳ: Thi viết được dùng tài liệu
• Bài tập thiết kế theo nhóm và báo cáo trước lớp• Bài tập thiết kế theo nhóm và báo cáo trước lớp
• Dự kiến kế hoạch học tập�Thời gian học trong ______ buổi
�Kế hoạch có thể thay đổi tùy theo sự sắp xếp của GV với lớp và sẽđược thông báo trước
4
@ETEDUT
Website môn họcWebsite môn học
• https://sites.google.com/site/hvthangete/teaching/fpga
• Password download slide: “fpga@etedut”
5
@ETEDUT
About your lecturerAbout your lecturer• Bộ môn Kỹ thuật Điện Tử, khoa ĐTVT, ĐHBK Đà Nẵng
� Office: Khu C, ĐHBK ĐN; Email: [email protected]
• Research Interests� Reconfigurable computing (aka computing with FPGA)� Reconfigurable computing (aka computing with FPGA)
� Embedded reconfigurable systems
� Machine learning
� Floating-point arithmetic, Interval arithmetic, Affine arithmetic
• Education� 06/2003: Kỹ sư, ĐHBK ĐN (khóa 1998-2003)
� 12/2007: Thạc sĩ kỹ thuật chuyên ngành Điện tử, ĐHĐN� Thesis: “Implementation of a Network-on-Chip on FPGA”, Thực hiện Network-on-Chip trên
6
� Thesis: “Implementation of a Network-on-Chip on FPGA”, Thực hiện Network-on-Chip trên
nền FPGA
� 07/2012: Tiến sĩ kỹ thuật chuyên ngành Điện-Điện tử, ĐH Kỹ thuật Graz (TU Graz),Cộng hòa Áo (Austria)� Thesis: “Efficient floating-point Implementation of Signal Processing Algorithms on
Reconfigurable Hardware”, Thực hiện hiệu quả các thuật toán xử lý tín hiệu dấu phẩy động
trên phần cứng tái cấu hình@
ETEDUT
1. ÔN TẬP1. ÔN TẬP
@ETEDUT
1. ÔN TẬP1. ÔN TẬP
• Mạch số gồm:�Hệ tổ hợp (Combinational Circuits)
�Hệ tuần tự (Sequential Circuits)�Hệ tuần tự (Sequential Circuits)
• Hệ tổ hợp�Không có tính nhớ, trạng thái ngõ ra chỉ phụ thuộc tín hiệu vào
�Thiết kế trên cơ sở cổng logic (logic gates)
• Hệ tuần tự�Có tính nhớ và có tính đồng bộ
10
�Có tính nhớ và có tính đồng bộ
�Thiết kế trên cơ sở Flip – Flop (FF)
• Đ�c l�i trong các sách v� K� Thu�t S�
@ETEDUT
1. ÔN TẬP1. ÔN TẬP
• Biểu diễn mạch số theo các dạng chính tắc: tổng các tích số (CT1)
hoặc tích các tổng số (CT2)
• Mỗi đầu ra hoặc tín hiệu ra được biểu diễn bằng một phương trình• Mỗi đầu ra hoặc tín hiệu ra được biểu diễn bằng một phương trìnhđại số theo các biến đầu vào và tuân thủ theo 1 trong 2 dạng chínhtắc
• Rút gọn (tối thiểu hóa) phương trình logic đầu ra theo 2 nhómphương pháp:� Biến đổi đại số: tiên đề định lý đại số Boole
� Thuật toán:
11
� Thuật toán:�Bảng Karnaugh (Bìa K, K-Map)
�Thuật toán Quinn Mc-Cluskey@ETEDUT
1. ÔN TẬP1. ÔN TẬP
• Rút gọn phương trình logic bằng bìa K: “Kết hợp 2n ô kế
cận để loại đi n biến dư thừa”
• Ý nghĩa của giá trị tùy định “X” ?
• Ví dụ: Rút gọn hàm sau:
�F1(x3,x2,x1,x0) = ΣΣΣΣ (0,1,2,3,4,5,8,10,14) + d(9,12)
12
@ETEDUT
11. ÔN TẬP. ÔN TẬP
• Logic gates: AND, OR, NAND, NOR, NOT, BUFFER, XOR,XNOR�Totem Pole Output�Totem Pole Output
�Open Collector Output
�Tri-state Output
• Flip-Flop: RS, JK, D, T�Bảng trạng thái, phương trình
�Bảng đầu vào kích (Excitation Table): dùng cho thiết kế
13
�Ý nghĩa tín hiệu đồng bộ Ck
�Các ngõ vào Preset (Pr) và Clear (Cl) và phương pháp thiết lập trạngthái ban đầu cho FF bằng các mạch RC
@ETEDUT
1. ÔN TẬP1. ÔN TẬP
• Các mạch tổ hợp thông dụng:�MUX / DEMUX
�Encoder / Decoder�Encoder / Decoder
�Adder / Subtracter
�Magnitude Comparator
�Parity Generator/Checker
• Các mạch tuần tự thông dụng:�Counter (nối tiếp, song song, hỗn hợp)
14
�Register, Shift Register
�Memory
• ALU (Arithmetic Logic Unit)?
• Microprocessor?@
ETEDUT
2. 2. GiớiGiới thiệuthiệu chungchung vềvềcôngcông nghệnghệ IC IC khảkhả trìnhtrình
@ETEDUT
Các bước thiết kế VLSI (1/9)Các bước thiết kế VLSI (1/9)
System Specification Circuit Design
Architectural Design Physical Design
Functional Design Fabrication
16
Logic Design
Functional Design Fabrication
Packaging
@ETEDUT
Các bước thiết kế VLSI (2/9)Các bước thiết kế VLSI (2/9)
System Specification – Xác định kích thước, tốc độ, côngsuất và các chức năng của hệ thống
Architectural Design – Xác định kiến trúc của hệ thống: víArchitectural Design – Xác định kiến trúc của hệ thống: vídụ: RISC/CISC, số lượng ALU, kích thước bộ nhớ cache.Việc xác định kiến trúc sẽ giúp cho việc ước lượng tốc độxử lý của hệ thống, kích thước chip, công suất tiêu thụ …
17
@ETEDUT
Các bước thiết kế VLSI (3/9)Các bước thiết kế VLSI (3/9)
Functional Design – Xác định các khối chức năng chínhvà kết nối giữa các khối. Chưa cần xác định chi tiết cáchthức thực hiện các khối này.thức thực hiện các khối này.
18
@ETEDUT
Các bước thiết kế VLSI (4/9)Các bước thiết kế VLSI (4/9)
Logic Design – Thiết kế logic, ví dụ: thiết kế mạch logictổ hợp, logic dãy, ALU, khối điều khiển…. Kết quả củabước thiết kế này là bản mô tả RTL (Register Transferbước thiết kế này là bản mô tả RTL (Register Transfer
Level). RTL được biểu diễn bằng ngôn ngữ mô tả phầncứng HDL (Hardware Description Language), e.g.,VHDL, Verilog.
19
X = (AB+CD)(E+F)Y= (A(B+C) + Z + D)
@ETEDUT
Các bước thiết kế VLSI (5/9)Các bước thiết kế VLSI (5/9)
Circuit Design – Thiết kế mạch bao gồm các cổng logic,transistors và các kết nối. Kết quả thu được từ bước thiếtkế này là một netlist.kế này là một netlist.
20
@ETEDUT
Các bước thiết kế VLSI (6/9)Các bước thiết kế VLSI (6/9)
• Net list:net1: top.in1 i1.in
net2: i1.out xxx.B
• Component list:top: in1=net1 n1=topin1 n2=topin2
n3=botin1 out=outnetnet2: i1.out xxx.B
topin1: top.n1 xxx.xin1
topin2: top.n2 xxx.xin2
botin1: top.n3 xxx.xin3
net3: xxx.out i2.in
outnet: i2.out top.out
i1: in=net1 out=net2
xxx: xin1=topin1 xin2=topin2xin3=botin1 B=net2 out=net3
i2: in=net3 out=outnet
21
@ETEDUT
Các bước thiết kế VLSI (7/9)Các bước thiết kế VLSI (7/9)
Component hierarchy
top
i1 xxx i2
22
i1 xxx i2
@ETEDUT
Các bước thiết kế VLSI (8/9)Các bước thiết kế VLSI (8/9)
Physical Design – Chuyển từ netlist sang dạng biểu diễnhình học. Cách biểu diễn hình học này được gọi là layout.
23
@ETEDUT
Các bước thiết kế VLSI (9/9)Các bước thiết kế VLSI (9/9)
Fabrication – Bao gồm các quá trình như quang khắc,đánh bóng, khuyếch tán …để chế tạo ra chip (IC).
Packaging – Sắp xếp các IC trên một board mạch in PCBPackaging – Sắp xếp các IC trên một board mạch in PCB(Printed Circuit Board) hoặc trên một module đa chípMCM (Multi-Chip Module)
24
@ETEDUT
Remark: Remark: CácCác bướcbước thiếtthiết kếkế VLSIVLSI
System Specification Netlist
Architectural Physical
Design
ArchitecturalSpecification
Layout
Timing & relationshipChips
Architectural
Design
Functional
Design
Design
Fabrication
Packaging
Circuit Design
or
Logic Synthesis
25
RTL in HDL
Timing & relationshipbetween functional units
Packaged andtested chips
Logic
Design
Packaging@ETEDUT
ThiếtThiết kếkế VLSIVLSI
Các bước thiết kế vật lýCác bước thiết kế vật lý
26
@ETEDUT
Các bước thiết kế vật lý (1/6)Các bước thiết kế vật lý (1/6)
Circuit Partitioning
Floorplanning & Placement
Routing
27
Layout Compaction
Extraction and Verification@
ETEDUT
Các bước thiết kế vật lý (Các bước thiết kế vật lý (22//66))
Circuit Partitioning – Chia một mạch lớn thành các mạchnhỏ hơn
�
�
28
�@
ETEDUT
Các bước thiết kế vật lý (3/6)Các bước thiết kế vật lý (3/6)
Floorplanning – Thiết lập kế hoạch bố trí các module trênlayout một cách hợp lý khi mà hình dạng, kích thước, ví tríchân của các module chưa được cố định.chân của các module chưa được cố định.
29
Deadspace
@ETEDUT
Các bước thiết kế vật lý (4/6)Các bước thiết kế vật lý (4/6)
Placement – Bố trí cố định các module (module có thể làcổng logic, các khối chuẩn standard cells…) khi đã biếtcác thông số chi tiết của các module sao cho trễ tín hiệu,các thông số chi tiết của các module sao cho trễ tín hiệu,diện tích và số lượng kết nối nhỏ nhất.
30
v
Feedthrough
Standard cell type 1
Standard cell type 2@
ETEDUT
Các bước thiết kế vật lý (5/6)Các bước thiết kế vật lý (5/6)
Routing – Kết nối giữa các module trên cơ sở bảo đảm vềtrễ, khoảng cách giữa các đường dây.
31
v
Feedthrough
Type 1 standard cel1
Type 2 standard cell@
ETEDUT
Các bước thiết kế vật lý (6/6)Các bước thiết kế vật lý (6/6)
Compaction – Bước này tối thiểu hoá diện tích của vùnglayout để giảm kích thước chip
Verification – Kiểm tra layout bao gồm kiểm tra luật thiếtVerification – Kiểm tra layout bao gồm kiểm tra luật thiếtkế DRC (Design Rule Checking), tạo ngược lại mạch điệntừ layout (circuit extraction) để so sánh với netlist ban đầu,kiểm tra hoạt động (performance verification ) bằng cáchlấy thông tin hình học để tính toán các giá trị điện trở, điệndung, trễ…
32
dung, trễ…
@ETEDUT
Các công nghệ dùng trong thiết kếCác công nghệ dùng trong thiết kế
• Full-Custom ASICs (Application specific IC)�Các khối logic (logic cells) và các lớp mặt nạ không được thiết kế sẵn
mà do người thiết kế thiết kế mà do người thiết kế thiết kế
• Semicustom ASICs�Các khối logic ( logic cells) được thiết kế sẵn (được định nghĩa trong
thư viện cell) và các lớp mặt nạ được thiết kế bởi người thiết kế
�2 loại: Standard-cell based and Gate-array-based ASICs
• Các linh kiện logic khả trình (Programmable Logic Devices)
33
• Các linh kiện logic khả trình (Programmable Logic Devices)�Tất cả các khối logic được thiết kế sẵn và không cần phải thiết kế lớp
mặt nạ nào
�Types: PLD (Programmable Logic Device) and FPGA (Field Programmable Gate Array)
@ETEDUT
CôngCông nghệnghệ IC IC khảkhả trìnhtrình
34
@ETEDUT
Công nghệ IC khả trìnhCông nghệ IC khả trình
• Realisation as AND-OR: F1=xy+xy’z+x’yz
• Realisation as OR-AND: F1=((x’+y’) (x’+y+z’) (x+y’+z’))’(x+y’+z’))’
x y z
F1
x y z
F1
35
@ETEDUT
Công nghệ IC khả trìnhCông nghệ IC khả trìnhPrProgrammable logic arrayogrammable logic array
• PLA
Programmable
And
plane
And
plane
Or
plane
Input
Output
Programmable
36
plane
@ETEDUT
Công nghệ IC khả trìnhCông nghệ IC khả trìnhPrProgrammable logic arrayogrammable logic array
• PLA
37
@ETEDUT
Công nghệ IC khả trìnhCông nghệ IC khả trìnhProgrammable Array LogicProgrammable Array Logic
• PAL
And
plane
And
plane
Or
Input
Output
Programmable
Fixed
38
Or
planeOutput
@ETEDUT
Công nghệ IC khả trìnhCông nghệ IC khả trìnhProgrammable Array LogicProgrammable Array Logic
39
@ETEDUT
Công nghệ IC khả trìnhCông nghệ IC khả trìnhComplex Programmable Logic DevicesComplex Programmable Logic Devices
• CPLD
40
@ETEDUT
Công nghệ IC khả trìnhCông nghệ IC khả trìnhComplex Programmable Logic DevicesComplex Programmable Logic Devices
• Các công nghệ lập trình�PROM: Lập trình 1 lần
�EPROM, flash, EEPROM: lập trình nhiều lần�EPROM, flash, EEPROM: lập trình nhiều lần
Non-volatile
41
@ETEDUT
Ví dụ: PROMVí dụ: PROM
Address
Vcc Vcc Vcc VccFuse
After manufacturing
4
2-to
-4 D
ecoder
2
MSB
42
4
2-to-4 Mux
2
LSB
Data
@ETEDUT
Ví dụ: PROMVí dụ: PROM
Address
Vcc Vcc Vcc Vcc
After programming
4
2-to
-4 D
ecoder
2
MSB
43
4
2-to-4 Mux
2
LSB
Data
@ETEDUT
Công nghệ IC khả trìnhCông nghệ IC khả trìnhFieldField--programmable Gate Arrayprogrammable Gate Array
• FPGA: XC40xx Long linesRouting via switching matrices
I/O I/O I/O I/O
CLBCLB CLB
SM SM SM SM
SM SM SM SMI/O
I/OCLB: Configurable
Logic Block
SW: Switching Matrix
44
CLB CLB CLB
SM SM SM SM
SM SM SM SM
I/O
I/O
@ETEDUT
Công nghệ IC khả trìnhCông nghệ IC khả trìnhFieldField--programmable Gate Arrayprogrammable Gate Array
• Cấu tạo của một CLB (Configurable Logic Block)
16x1 G16x1
LUT:
Bool-function
of 4
variables
16x1
LUT:
FF
G
G
GQ
F
45
LUT:
Bool-function
of 4
variables
FF
F
F
FQ@ETEDUT
Công nghệ IC khả trìnhCông nghệ IC khả trìnhFieldField--programmable Gate Arrayprogrammable Gate Array
• FPGA: Switching Matrix SMPass
TOR
46
@ETEDUT
Công nghệ IC khả trìnhCông nghệ IC khả trìnhFieldField--programmable Gate Arrayprogrammable Gate Array
• Các loại kết nối:
47
@ETEDUT
Công nghệ IC khả trìnhCông nghệ IC khả trìnhFieldField--programmable Gate Arrayprogrammable Gate Array
• Công nghệ lập trình:�SRAM-based:
�Volatile�Volatile
�Reprogrammble
�Antifuse�Non-volatile
�Programmed only-one
�IP security
48
@ETEDUT
Công nghệ IC khả trìnhCông nghệ IC khả trìnhFieldField--Programmable Gate Array (FPGA)Programmable Gate Array (FPGA)
• Hãng cung cấp FPGA hàng đầu thế giới �Công ty Xilinx: http://www.xilinx.com/
�Công ty Altera: http://www.altera.com/�Công ty Altera: http://www.altera.com/
�Công ty Lattice Semiconductor: http://www.latticesemi.com/
�Công ty Actel: http://www.actel.com/
�Công ty Crypress: http://www.cypress.com/
�Công ty Atmel: http://www.atmel.com/
�Công ty QuickLogic: http://www.quicklogic.com/
49
�Công ty QuickLogic: http://www.quicklogic.com/
@ETEDUT
Công nghệ IC khả trìnhCông nghệ IC khả trìnhƯu điểmƯu điểm
50
@ETEDUT
Công nghệ IC khả trìnhCông nghệ IC khả trìnhƯu điểmƯu điểm
• FPGA vs Custom ASIC�FPGAs are more flexible
�FPGAs are more cost effective for small quantities�FPGAs are more cost effective for small quantities
�ASICs have higher densities
• FPGA vs Parallel Computer�FPGAs are more cost effective
�FPGAs are smaller
�Parallel Computers are easier to program
51
�Parallel Computers are easier to program@ETEDUT
Total cost
FPGA .13µFPGA .09µ
FPGA vs. ASIC Cost FPGA vs. ASIC Cost ASIC: High volumes needed to recover design costASIC: High volumes needed to recover design cost
ASIC .13µ
FPGA .13µ
ASIC .09µ
ASIC Design Cost is much
higher
(and increasing)!!
ASIC cost/part is lower
52
VolumeFor each technology advance, crossover volume moves higher Courtesy: Richard Sevcik, Xilinx
@ETEDUT
Ứng dụng của công nghệ IC khả trìnhỨng dụng của công nghệ IC khả trình
• Aerospace & Defense
• Automotive
• Consumer
• Digital Video Technologies
• Industrial/Scientific & Medical
• Test & Measurement
• Wired Communications
53
• Wired Communications
• Wireless Communications@ETEDUT
Ứng dụng của công nghệ IC khả trìnhỨng dụng của công nghệ IC khả trình
54
@ETEDUT
Ứng dụng của công nghệ IC khả trìnhỨng dụng của công nghệ IC khả trình
55
@ETEDUT
Ứng dụng của công nghệ IC khả trìnhỨng dụng của công nghệ IC khả trình
56
@ETEDUT
Ứng dụng của công nghệ IC khả trìnhỨng dụng của công nghệ IC khả trình
57
@ETEDUT
Ứng dụng của công nghệ IC khả trìnhỨng dụng của công nghệ IC khả trình
58
@ETEDUT
Ứng dụng của công nghệ IC khả trìnhỨng dụng của công nghệ IC khả trình
59
@ETEDUT
Ứng dụng của công nghệ IC khả trìnhỨng dụng của công nghệ IC khả trình
60
@ETEDUT
Ứng dụng của công nghệ IC khả trìnhỨng dụng của công nghệ IC khả trình
61
@ETEDUT
Ứng dụng của công nghệ IC khả trìnhỨng dụng của công nghệ IC khả trình
62
@ETEDUT
3. Finite State Machine3. Finite State Machine(FSM)(FSM)
Máy trạng thái hữu hạn@ETEDUT
Các mức thiết kế mạch số (Các mức thiết kế mạch số (11//22))
• Thiết kế dùng các cổng logic rời rạc (Gate level):�AND, OR, NAND, NOT…, Flip Flops
�Dùng cho các bài toán thiết kế đơn giản như thiết kế bộ tổng, tổng�Dùng cho các bài toán thiết kế đơn giản như thiết kế bộ tổng, tổngcủa tích, bộ đếm…
�Kết quả: module
• Thiết kế dùng các thanh ghi và các module số (RTL: registertransfer level)�Thanh ghi dịch, decoder, ALU, Mux, bộ cộng, nhân, bộ đếm…
�Dùng cho các bài toán thiết kế từ trung bình đến phức tạp như thiết
64
�Dùng cho các bài toán thiết kế từ trung bình đến phức tạp như thiếtkế vi xử lý, thiết kế các bộ mã hoá và giải mã âm thanh, hình ảnh …
�Kết quả: vi mạch (IC)
@ETEDUT
Các mức thiết kế mạch số (2/2)Các mức thiết kế mạch số (2/2)
• Thiết kế hệ thống (system level design)
�Vi xử lý, bộ nhớ, các bộ mã hoá và giải mã hình ảnh, âm thanh số,các bộ xử lý tín hiệu số…các bộ xử lý tín hiệu số…
�Dùng cho thiết kế các hệ thống số phức tạp như máy rút tiền tựđộng, các ứng dụng đa phương tiện
�Kết quả: PCB
• Trong quá trình thiết kế một hệ thống số, các mức trên có thểđược sử dụng 1 đến nhiều lần
65
được sử dụng 1 đến nhiều lần
@ETEDUT
Thiết kế mạch số tổ hợpThiết kế mạch số tổ hợpCác mạch logic tổ hợp cơ bảnCác mạch logic tổ hợp cơ bản
•Ripple-carry adders•Adder/subtractors
•Multipliers•Multipliers•Logic units
•Arithmetic-logic units•Decoders
•Selectors•Buses
66
•Buses
•Magnitude comparators@ETEDUT
Thiết kế mạch số tuần tựThiết kế mạch số tuần tựCác loại flipCác loại flip--flopflop
• Một số khái niệm:� Mạch logic tổ hợp: tín hiệu đầu ra là hàm số của các giá trị hiện tại của
các tín hiệu đầu vào� Mạch logic tuần tự: tín hiệu đầu ra là hàm số của các giá trị hiện tại của� Mạch logic tuần tự: tín hiệu đầu ra là hàm số của các giá trị hiện tại của
tín hiệu đầu vào và trạng thái hiện tại (có nghía là cùng là hàm số củacác giá trị trước đó của tín hiệu đầu vào)
� Mạch logic tuần tự không đồng bộ: tín hiệu đầu ra và trạng thái thayđổi ngay khi tín hiệu đầu vào thay đổi
� Mạch logic tuần tự đồng bộ: tín hiệu đầu ra và trạng thái chỉ thay đổikhi tín hiệu đầu vào là đồng hồ xung nhịp có 1 giá trị nào đấy
� Chu kỳ xung nhịp: khoàng thời gian giữa hai lần chuyển từ 1 xuống 0của tín hiệu xung nhịp
� Tần số xung nhịp: 1 / chu kỳ xung nhịp
67
� Tần số xung nhịp: 1 / chu kỳ xung nhịp� Chu kỳ tác động của xung nhịp: (thời gian tín hiệu xung nhịp = 1) / chu
kỳ xung nhịp� Sườn lên: tín hiệu xung nhịp chuyển từ 0→1� Sườn xuống: tín hiệu xung nhịp chuyển từ 1→0
@ETEDUT
Thiết kế mạch số tuần tựThiết kế mạch số tuần tựCác loại flipCác loại flip--flopflop
S
Clk
Q
Symbol
S R Q(next)
Characteristic table
(for design of SR flip-flop)
SR flipSR flip--flopflop
R
Clk
Q’
Tam giác có nghĩa là tác động sườn lên
Tác động sườn xuống
S R Q(next)
0 0 Q
0 1 0
1 0 1
1 1 NA
Excitation table
(for design with SR flip-flop)Tác động mức 1
68
Q Q(next) S R
0 0 0 x
0 1 1 0
1 0 0 1
1 1 x 0
Excitation table
(for design with SR flip-flop)Tác động mức 1
Tác động mức 0@ETEDUT
ThiếtThiết kếkế mạchmạch sốsố tuầntuần tựtựCácCác loạiloại flipflip--flopflop
J
Clk
Q
Symbol
J K Q(next)
Characteristic table
(for design of JK flip-flop)
JK flipJK flip--flopflop
K
Clk
Q’
J K Q(next)
0 0 Q
0 1 0
1 0 1
1 1 Q’
Excitation table
(for design with JK flip-flop)
69
Q Q(next) J K
0 0 0 x
0 1 1 x
1 0 x 1
1 1 x 0
Excitation table
(for design with JK flip-flop)
Circuits that use
JK flip-flops are cheaper
than those using SR flip-flops:
more don’t cares@
ETEDUT
ThiếtThiết kếkế mạchmạch sốsố tuầntuần tựtựCácCác loạiloại flipflip--flopflop
D
Clk
Q
Symbol Characteristic table
(for design of D flip-flop)
D Q(next)
D flipD flip--flopflop
Clk
Q’
D Q(next)
0 0
1 1
Excitation table
(for design with D flip-flop)
70
Excitation table
(for design with D flip-flop)
Q Q(next) D
0 0 0
0 1 1
1 0 0
1 1 1
Designing with D flip-flop
is easy
@ETEDUT
ThiếtThiết kếkế mạchmạch sốsố tuầntuần tựtựCácCác loạiloại flipflip--flopflop
T
Clk
Q
Symbol Characteristic table
(for design of T flip-flop)
T Q(next)
T flipT flip--flopflop
Clk
Q’
T Q(next)
0 Q
1 Q’
Excitation table
(for design with T flip-flop)
71
Excitation table
(for design with T flip-flop)
Q Q(next) T
0 0 0
0 1 1
1 0 1
1 1 0
D
Clk
Q
Q’
T @ETEDUT
Thiết kế mạch số tuần tựThiết kế mạch số tuần tựThiết kế mạch số tuần tự đồng bộThiết kế mạch số tuần tự đồng bộ
• Máy trạng thái hữu hạn Finite State Machine (FSM)
• FSM loại Moore (phụ thuộc vào trạng thái)
• FSM loại Mealy (phụ thuộc vào tín hiệu vào)
• Các bước thiết kế:�Bước 1: Vẽ sơ đồ trạng thái
�Bước 2: Tối thiểu hoá số lượng các trạng thái
�Bước 3: Mã hoá trạng thái
72
�Bước 4: Lựa chọn flip-flop
�Bước 5: Thực hiện mạch logic tổ hợp
�Bước 6: Phân tích tín hiệu theo thời gian
@ETEDUT
Finite State MachineFinite State Machine
• Ví dụ: Thiết kế một bộ đếm đến 4. Bộ đếm sẽ đếm khi cótín hiệu CE=1 (Count Enable) và ngừng đếm khi CE= 0.
• Bước 1: Vẽ sơ đồ trạng thái FSM• Bước 1: Vẽ sơ đồ trạng thái FSM
Count=0
CE=0 CE=0
Count=1CE=1
73
CE=0CE=0 Count=2
CE=1
Count=3
CE=1
CE=1@ETEDUT
Finite State MachineFinite State Machine
Count=0
CE=0 CE=0
Count=1CE=1
Chỉ chuyển trạng thái tại sườn lên của xung nhịpTại sườn lên của xung nhịp, chỉ được phép 1 điều kiện chuyển trạng thái xảy ra
Count=0
CE=0 CE=0
Count=1CE=1
Count=0
CE=0 CE=0
Count=1CE=1
Count=0
CE=0 CE=0
Count=1CE=1
Count=0
CE=0 CE=0
Count=1CE=1
Count=0
CE=0CE=0
Count=1CE=1
Count=2
CE=1
Count=3
CE=1
CE=1
Count=0
CE=0CE=0
Count=1CE=1
Count=2
CE=1
Count=3
CE=1
CE=1
Count=0
CE=0CE=0
Count=1CE=1
Count=2
CE=1
Count=3
CE=1
CE=1
Count=0
CE=0CE=0
Count=1CE=1
Count=2
CE=1
Count=3
CE=1
CE=1
Count=0
CE=0CE=0
Count=1CE=1
Count=2
CE=1
Count=3
CE=1
CE=1
74
CE=1
1. Ta đang ở trạng thái “Count=0”
2. CE = 0: đợi ở chân của sườn lên của xung nhịp3. CE=1: đợi ở chân của 1 sườn lên khác nhưng chưa đếm4. Sườn lên của xung nhịp: chuyển sang trạng thái “Count=1”, CE vẫn =15. CE = 0: đợi ở chân của 1 sườn lên khác
6. Sườn lên của xung nhịp: chyển sang “Count=1”, với CE=0
CE=1CE=1CE=1CE=1
@ETEDUT
Finite State MachineFinite State Machine
• Bước 2: Tối thiểu hoá số trạng thái
• Bước 3: Mã hoá các trạng thái
Q1Q0=00
CE=0 CE=0
Q1Q0=01CE=1
75
CE=0CE=0 Q1Q0=10
CE=1
Q1Q0=11
CE=1
CE=1@ETEDUT
Finite State MachineFinite State Machine
• Bước 4: Chọn loại flip-flop. Ở đây để đơn giản ta chọnloại D
• Bước 5: Thực hiện mạch• Bước 5: Thực hiện mạch
76
@ETEDUT
Finite State MachineFinite State Machine
• Chuyển FSM sang bảng trạng thái kế tiếp
Q1Q0=00
CE=0 CE=0
Q1Q0=01CE=1
Q1Q0=00
CE=0CE=0
Q1Q0=01
Q1Q0=10
CE=1
Q1Q0=11
CE=1
CE=1
Present state Next state
77
Present state Next state
Q1Q0 Q1nQ0n
CE=0 CE=1
00 00 01
01 01 10
10 10 11
11 11 00
@ETEDUT
Finite State MachineFinite State Machine
• Xác định các hàm đầu vào flip-flop DPresent state Next state
Q1Q0 Q1nQ0n1 0 1n 0n
CE=0 CE=1
00 00 01
01 01 10
10 10 11
11 11 00
Q0
Excitation table
for D flip-flop Q0
78
0 0 1 1
0 1 0 1CE
Q1n=D1
Q0
Q1Q Q(next) D
0 0 0
0 1 1
1 0 0
1 1 1
for D flip-flop
⇒ D to be applied
is identical to Qn
0 1 1 0
1 0 0 1CE
Q0n=D0
Q0
Q1@ETEDUT
Finite State MachineFinite State Machine
• Thực hiện:
Q1n=D1
Q0
Q1Q0n=D0
Q0
Q1
0 0 1 1
0 1 0 1CE
Q1n=D1 Q1
0 1 1 0
1 0 0 1CE
Q0n=D0 Q1
CE Q1 Q0
Q1nD1
Q1
79
Q0n
D1
Q’
D0
Q0
Q’
@ETEDUT
Finite State MachineFinite State Machine• Bước 6: Phân tích tín hiệu theo thời gian
CE Q1 Q0
QQ1
CE Q1 Q0
QQ1
CE Q1 Q0
QQ1
CE Q1 Q0
QQ1
CE Q1 Q0
QQ1
CE Q1 Q0
QQ1Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
80
Clk
CE
Q1
Q0
@ETEDUT
FSM loại MooreFSM loại Moore
• Ví dụ: Thiết kế bộ đếm 4, đếm đến 3 thì báo
• Bước 1: Vẽ sơ đồ trạng thái FSM:
Count=0
Y=0
CE=0 CE=0
Count=1
Y=0
CE=1
81
CE=0CE=0 Count=2
Y=0
CE=1
Count=3
Y=1CE=1
CE=1@ETEDUT
FSM loại MooreFSM loại Moore
• Đặc điểm:�Tín hiệu đầu ra được xác định tại mỗi trạng thái
�Tín hiệu ra chỉ phụ thuộc vào trạng thái hiện tại mà không phụ�Tín hiệu ra chỉ phụ thuộc vào trạng thái hiện tại mà không phụthuộc vào tín hiệu vào
�Do đó, giá trị tín hiệu ra được ghi ở bên trong vòng tròn biểudiễn trạng thái
82
@ETEDUT
FSM loại MooreFSM loại Moore
• Bước 2: Tối thiểu hoá số lượng trạng thái
• Bước 3: Mã hoá trạng thái
Q1Q0=00
Y=0
CE=0 CE=0
Q1Q0=01
Y=0
CE=1
83
CE=0CE=0 Q1Q0=10
Y=0
CE=1
Q1Q0=11
Y=1CE=1
CE=1@ETEDUT
FSM loại MooreFSM loại Moore
• Bước 4: Chọn loại flip-flop. Ở đây để đơn giản ta chọnloại D
• Bước 5: Thực hiện mạch• Bước 5: Thực hiện mạch
84
@ETEDUT
FSM loại MooreFSM loại Moore
• Chuyển FSM sang bảng trạng thái kế tiếp
Q1Q0=00
CE=0 CE=0
Q1Q0=01CE=1Q1Q0=00
Y=0
CE=0CE=0
Q1Q0=01
Y=0
CE=1
Q1Q0=10
Y=0
CE=1
Q1Q0=11
Y=1CE=1
CE=1
Present state Next state Outputs
85
Present state Next state Outputs
Q1Q0 Q1nQ0n Y
CE=0 CE=1
00 00 01 0
01 01 10 0
10 10 11 0
11 11 00 1
Y chỉ phụ thuộc trạng tháihiện tại, không phụ
thuộc vào tín hiệu vào
@ETEDUT
FSM loại MooreFSM loại Moore
• Xác định các hàm đầu vào flip-flop DPresent state Next state Outputs
Q1Q0 Q1nQ0n Y
CE=0 CE=1
Q1n=D1
Q0
Q1
Excitation table
for D flip-flop Q0n=D0
Q0
Q1
CE=0 CE=1
00 00 01 0
01 01 10 0
10 10 11 0
11 11 00 1
86
0 0 1 1
0 1 0 1CE
Q1
Q Q(next) D
0 0 0
0 1 1
1 0 0
1 1 1
for D flip-flop
⇒ D to be applied
is identical to Qn
0 1 1 0
1 0 0 1CE
Q1
0 0
0 1
Y
Q1
Q0
@ETEDUT
FSM loại MooreFSM loại Moore
• Thực hiện mạch:
Q1n=D1
Q0
Q1Q0n=D0
Q0
Q1Y
Q0
0 0 1 1
0 1 0 1CE
Q1n=D1 Q1
0 1 1 0
1 0 0 1CE
Q0n=D0 Q1
CE Q1 Q0
Q1nD1
Q1
0 0
0 1
Y
Q1
Q0
Y
87
Q0n
D1
Q’
D0
Q0
Q’
@ETEDUT
FSM loại MooreFSM loại Moore• Bước 6: Phân tích tín hiệu theo thời gian
CE Q1 Q0
QQ1
Y
CE Q1 Q0
QQ1
Y
CE Q1 Q0
QQ1
Y
CE Q1 Q0
QQ1
Y
CE Q1 Q0
QQ1
Y
CE Q1 Q0
QQ1
YQ1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
YQ1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
YQ1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
YQ1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
YQ1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
YQ1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Y
88
Clk
CE
Q1
Q0
Y
Danger for
Glitch!@
ETEDUT
FSM loại MealyFSM loại Mealy
• Ví dụ: Thiết kế bộ đếm 4, nếu tín hiệu đếm CE=1 và giátrị đếm =3 thì tín hiệu ra Y=1
• Bước 1: Vẽ sơ đồ trạng thái FSM:• Bước 1: Vẽ sơ đồ trạng thái FSM:
Count=0
CE=0/Y=0 CE=0/Y=0
Count=1CE=1/Y=0
89
CE=0/Y=0CE=0/Y=0 Count=2
CE=1/Y=0
Count=3
CE=1/Y=0
CE=1/Y=1@ETEDUT
FSM loại MealyFSM loại Mealy
• Đặc điểm:� Tín hiệu ra được xác định cho mỗi trạng thái và các tín hiệu vào
tại trạng thái đótại trạng thái đó
� Tín hiệu ra phụ thuộc vào trạng thái đầu hiện tại và các giá trịđầu vào tại trạng thái đó
� Do đó giá trị tín hiệu ra được ghi tại mũi tên chuyển trạng thái
90
@ETEDUT
FSM loại MealyFSM loại Mealy
• Bước 2: Tối thiểu hoá số lượng trạng thái
• Bước 3: Mã hoá trạng thái
Q1Q0=00
CE=0/Y=0 CE=0/Y=0
Q1Q0=01CE=1/Y=0
91
CE=0/Y=0CE=0/Y=0 Q1Q0=10
CE=1/Y=0
Q1Q0=11
CE=1/Y=0
CE=1/Y=1@ETEDUT
FSM loại MealyFSM loại Mealy
• Bước 4: Chọn loại flip-flop. Ở đây để đơn giản ta chọnloại D
• Bước 5: Thực hiện mạch• Bước 5: Thực hiện mạch
92
@ETEDUT
FSM loại MealyFSM loại Mealy
• Chuyển FSM sang bảng trạng thái kế tiếp
Q Q =00
CE=0/Y=0 CE=0/Y=0
Q Q =01CE=1/Y=0
Q1Q0=00
CE=0/Y=0CE=0/Y=0
Q1Q0=01CE=1/Y=0
Q1Q0=10
CE=1/Y=0
Q1Q0=11
CE=1/Y=0
CE=1/Y=1
Present state Next state/Outputs
93
Present state Next state/Outputs
Q1Q0 Q1nQ0n/Y
CE=0 CE=1
00 00/0 01/0
01 01/0 10/0
10 10/0 11/0
11 11/0 00/1
Y phụ thuộc vào trạng tháihiện tại, và phụ
thuộc vào cả tín hiệu vào
@ETEDUT
FSM loại MealyFSM loại Mealy• Xác định các hàm đầu vào flip-flop D
Present state Next state/Outputs
Q1Q0 Q1nQ0n/Y
CE=0 CE=1
Q1n=D1
Q0
Q1Excitation table
for D flip-flopQ0n=D0
Q0
Q1
CE=0 CE=1
00 00/0 01/0
01 01/0 10/0
10 10/0 11/0
11 11/0 00/1
94
0 0 1 1
0 1 0 1CE
Q Q(next) D
0 0 0
0 1 1
1 0 0
1 1 1
for D flip-flop
⇒ D to be applied
is identical to Qn
0 1 1 0
1 0 0 1CE
0 0 0 0
0 0 1 0CE
Y
Q0
Q1
@ETEDUT
FSM loại MealyFSM loại Mealy
• Thực hiện mạch:
Q1n=D1
Q0
Q1Q0n=D0
Q0
Q1Y
Q0
Q1
0 0 1 1
0 1 0 1CE
Q1n=D1 Q1
0 1 1 0
1 0 0 1CE
Q0n=D0 Q1
CE Q1 Q0
Q1nD1
Q1
0 0 0 0
0 0 1 0CE
Y Q1
Y
95
Q0n
D1
Q’
D0
Q0
Q’
@ETEDUT
FSM loại MealyFSM loại Mealy• Bước 6: Phân tích tín hiệu theo thời gian
CE Q1 Q0
Q1nQ1 Y
CE Q1 Q0
Q1nQ1 Y
CE Q1 Q0
Q1nQ1 Y
CE Q1 Q0
Q1nQ1 Y
CE Q1 Q0
Q1nQ1 Y
CE Q1 Q0
Q1nQ1 Y
CE Q1 Q0
Q1nQ1 Y
Q1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
YQ1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
YQ1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
YQ1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
YQ1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
YQ1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
YQ1n
Q0n
D1
Q1
Q’
D0
Q0
Q’
Y
96
Clk
CE
Q1
Q0
Y
Danger for
Glitch!@
ETEDUT
Mô hình FSM loại MooreMô hình FSM loại Moore
D
Clk
Q
Clock Next
State S*
Current
State SInputs I
Clk
S*=F(S,I)
Mạch logic tổ hợp
cho trạng thái kế
O=H(S)
Mạch logic tổ hợp cho tín hiệu ra
D
Clk
Q
Outputs
O
97
thái kế tiếp
hiệu ra
D
Clk
Q@ETEDUT
Mô hình FSM loại MealyMô hình FSM loại Mealy
D
Clk
Q
Clock Next State S* Current
State SInputs I
Clk
S*=F(S,I)
Mạch logic tổ hợp
cho trạng thái kế
tiếp
O=H(S,I)
Mạch logic tổ hợp cho tín hiệu ra
D
Clk
Q
Outputs
O
98
tiếp hiệu ra
D
Clk
Q@ETEDUT
TómTóm tắttắt: : CácCác bướcbước thiếtthiết kếkế FSMFSM
@ETEDUT
Bước 1: Vẽ sơ đồ trạng thái FSMBước 1: Vẽ sơ đồ trạng thái FSM
• FSM được xây dựng từ bản miêu tả chi tiết bài toán• Lựa chọn loại FSM cho phù hợp: Moore hay Mealy• Vẽ trạng thái đầu tiên và các trạng thái tiếp theo dựa vào• Vẽ trạng thái đầu tiên và các trạng thái tiếp theo dựa vàođiều kiện chuyển trạng thái ...
100
@ETEDUT
Bước Bước 22: Tối thiểu hoá số lượng : Tối thiểu hoá số lượng trạng tháitrạng thái
• Mục đích: ít trạng thái đồng nghĩa với ít flip-flop
• Nguyên tắc:�2 FSM được coi là tương đương nếu như chúng cho cùng một
chuỗi tín hiệu ra với cùng một chuỗi tín hiệu vào
�2 trạng thái của FSM loại Moore có thể được thay thế bởi 1 trạngthái nếu như 2 trạng thái đó có cùng tín hiệu ra đồng thời có cùngtrạng thái kế tiếp khi có cùng tín hiệu vào
� 2 trạng thái của FSM loại Mealy có thể đựơc thay thế bới 1 trạng
101
� 2 trạng thái của FSM loại Mealy có thể đựơc thay thế bới 1 trạngthái nếu như chúng có cùng tín hiệu ra cho cùng tín hiệu vàođồng thời chúng có cùng trạng thái kế tiếp khi có cùng tín hiệuvào
@ETEDUT
Bước 2: Tối thiểu hoá số lượng Bước 2: Tối thiểu hoá số lượng trạng tháitrạng thái
• Ví dụ:
NEXT STATE / OUTPUTPRESENT
STATE AB=00 AB=01 AB=10
s0 s4/1 s2/0 s1/1
s1 s2/0 s5/1 s4/1
s s /1 s /0 s /1
102
s2 s1/1 s0/0 s3/1
s3 s2/0 s5/1 s4/1
s4 s0/0 s5/1 s1/1
s5 s2/0 s4/1 s2/1
@ETEDUT
Bước 2: Tối thiểu hoá số lượng Bước 2: Tối thiểu hoá số lượng trạng tháitrạng thái
• Xây dựng bảng như sau:
NEXT STATE / OUTPUTPRESENT NEXT STATE / OUTPUTPRESENT
STATE AB=00 AB=01 AB=10
s0 s4/1 s2/0 s1/1
s1 s2/0 s5/1 s4/1
s2 s1/1 s0/0 s3/1
s3 s2/0 s5/1 s4/1
s4 s0/0 s5/1 s1/1
s5 s2/0 s4/1 s2/1
s1
s
103
s5 s2/0 s4/1 s2/1s2
s3
s4
s5
s0 s1 s2 s3 s4
@ETEDUT
Bước 2: Tối thiểu hoá số lượng Bước 2: Tối thiểu hoá số lượng trạng tháitrạng thái
• Xoá tất cả các tổ hợp trạng thái có tín hiệu ra khác nhaucho cùng tín hiệu vào
NEXT STATE / OUTPUTPRESENT NEXT STATE / OUTPUTPRESENT
STATE AB=00 AB=01 AB=10
s0 s4/1 s2/0 s1/1
s1 s2/0 s5/1 s4/1
s2 s1/1 s0/0 s3/1
s3 s2/0 s5/1 s4/1
s4 s0/0 s5/1 s1/1
s5 s2/0 s4/1 s2/1
s1
s
104
s5 s2/0 s4/1 s2/1s2
s3
s4
s5
s0 s1 s2 s3 s4
@ETEDUT
Bước Bước 22: Tối thiểu hoá số lượng : Tối thiểu hoá số lượng trạng tháitrạng thái
• Chỉ rõ những cặp trạng thái kế tiếp nào phải tương đươngđể cho cặp trạng thái đang xét cũng là tương đương
NEXT STATE / OUTPUTPRESENT NEXT STATE / OUTPUTPRESENT
STATE AB=00 AB=01 AB=10
s0 s4/1 s2/0 s1/1
s1 s2/0 s5/1 s4/1
s2 s1/1 s0/0 s3/1
s3 s2/0 s5/1 s4/1
s4 s0/0 s5/1 s1/1
s s /0 s /1 s /1
s1
1-41-41-41-41-41-41-4
105
s5 s2/0 s4/1 s2/1s2
s3
s4
s5
s0 s1 s2 s3 s4
1-4
1-3
1-4
1-3
OK
1-4
1-3
0-2
OK
1-4
1-3
4-5
2-4
0-2
OK
1-4
1-3
4-5
2-4
0-20-2
1-4
OK
1-4
1-3
4-5
2-4
4-5
2-4
0-20-2
1-4
OK
1-4
1-3
4-5
2-4
4-5
2-4
0-2, 4-5
1-2
0-20-2
1-4
OK@ETEDUT
Bước 2: Tối thiểu hoá số lượng Bước 2: Tối thiểu hoá số lượng trạng tháitrạng thái
• Xoá những cặp trạng thái mà không thể có cặp trạng tháikế tiếp tương đương
NEXT STATE / OUTPUTPRESENT
1-4
NEXT STATE / OUTPUTPRESENT
STATE AB=00 AB=01 AB=10
s0 s4/1 s2/0 s1/1
s1 s2/0 s5/1 s4/1
s2 s1/1 s0/0 s3/1
s3 s2/0 s5/1 s4/1
s4 s0/0 s5/1 s1/1
s s /0 s /1 s /1
s1
1-4: ?1-4: ?1-4: ?1-4: ?1-4: ?1-4: ?
106
1-4
1-3
4-5
2-4
4-5
2-4
0-2, 4-5
1-2
0-20-2
1-4
OK
s5 s2/0 s4/1 s2/1s2
s3
s4
s5
s0 s1 s2 s3 s4
1-4: ?
1-3:OK
4-5
2-4
4-5
2-4
0-2, 4-5
1-2
0-20-2
1-4
OK
1-4: ?
1-3:OK
4-5
2-4
4-5
2-4
0-2, 4-5
1-2
0-2: ?0-2
1-4
OK
1-4: ?
1-3:OK
4-5
2-4
4-5
2-4
0-2, 4-5
1-2
0-2: ?0-2
1-4
OK
1-4: ?
1-3:OK
4-5
2-4
4-5
2-4
0-2, 4-5
1-2
0-2: ?0-2: ?
1-4: ?
OK
1-4: ?
1-3:OK
4-5
2-4
4-5
2-4
0-2, 4-5
1-2
0-2: ?0-2: ?
1-4: ?
OK
1-4: ?
1-3:OK
4-5
2-4
4-5
2-4
0-2, 4-5
1-2
0-2: ?0-2: ?
1-4: ?
OK@ETEDUT
Bước Bước 22: Tối thiểu hoá số lượng : Tối thiểu hoá số lượng trạng tháitrạng thái
• Lặp lại cho đến khi không còn xoá được cặp trạng thái nàonữa thì dừng
NEXT STATE / OUTPUTPRESENT NEXT STATE / OUTPUTPRESENT
STATE AB=00 AB=01 AB=10
s0 s4/1 s2/0 s1/1
s1 s2/0 s5/1 s4/1
s2 s1/1 s0/0 s3/1
s3 s2/0 s5/1 s4/1
s4 s0/0 s5/1 s1/1
s s /0 s /1 s /1
s1
1-4: ?1-4: ?1-4: ?1-4: ?
107
s5 s2/0 s4/1 s2/1s2
s3
s4
s5
s0 s1 s2 s3 s4
1-4: ?
1-3:OK
4-5
2-4
4-5
2-4
0-2, 4-5
1-2
0-2: ?0-2: ?
1-4: ?
OK
1-4: ?
1-3:OK
4-5
2-4
4-5
2-4
0-2, 4-5
1-2
0-2: ?0-2: ?
1-4: ?
OK
1-4: ?
1-3:OK
4-5
2-4
4-5
2-4
0-2, 4-5
1-2
0-2: ?0-2: ?
1-4: ?
OK
1-4: ?
1-3:OK
4-5
2-4
4-5
2-4
0-2, 4-5
1-2
0-2: ?0-2: ?
1-4: ?
OK Sô lượng trạng thái tối thiểu : 3{s0,s2}=u0
{s1,s3,s4}=u1
{s5}=u2@
ETEDUT
Bước Bước 22: Tối thiểu hoá số lượng : Tối thiểu hoá số lượng trạng tháitrạng thái
• Xây dựng bảng trạng thái mớiNEXT STATE / OUTPUTPRESENT
STATE AB=00 AB=01 AB=10
s0 s4/1 s2/0 s1/1
s1 s2/0 s5/1 s4/1
s2 s1/1 s0/0 s3/1
s3 s2/0 s5/1 s4/1
s4 s0/0 s5/1 s1/1
s5 s2/0 s4/1 s2/1
Sô lượng trạng thái tối thiểu : 3{s0,s2}=u0
{s1,s3,s4}=u1
{s5}=u2
108
NEXT STATE / OUTPUTPRESENT
STATE AB=00 AB=01 AB=10
u0 u1/1 u0/0 u1/1
u1 u0/0 u2/1 u1/1
u2 u0/0 u1/1 u0/1@
ETEDUT
Bước 3: Mã hoá trạng tháiBước 3: Mã hoá trạng thái
• n trạng thái cần ít nhất log2n flip-flops.
• Có tât cả n! khả năng mã hoá (n lựa chọn cho trạng tháiđầu tiên, n-1 cho trạng thái thứ 2 ...)đầu tiên, n-1 cho trạng thái thứ 2 ...)
No. s0 s1 s2 s3 No. s0 s1 s2 s3
1 00 01 10 11 13 10 00 01 11
2 00 01 11 10 14 10 00 11 01
3 00 10 01 11 15 10 01 00 11
4 00 10 11 01 16 10 01 11 00
5 00 11 01 10 17 10 11 00 01
109
5 00 11 01 10 17 10 11 00 01
6 00 11 10 01 18 10 11 01 00
7 01 00 10 11 19 11 00 01 10
8 01 00 11 10 20 11 00 10 01
9 01 10 00 11 21 11 01 00 10
10 01 10 11 00 22 11 01 10 00
11 01 11 00 10 23 11 10 00 01
12 01 11 10 00 24 11 10 01 00@
ETEDUT
Bước 3: Mã hoá trạng tháiBước 3: Mã hoá trạng thái
• Có cần thiết phải lựa chọn cách mã hoá?�Có, bởi mỗi sự lựa chọn sẽ cho ta độ phức tạp của mạch tổ hợp
cũng như trễ của toàn bộ mạchcũng như trễ của toàn bộ mạch
• Các kiểu mã hoá thường dùng:�Straightforward
�Minimum-bit-change
�One-hot
110
@ETEDUT
Bước 3: Mã hoá trạng thái Bước 3: Mã hoá trạng thái StraightforwardStraightforward
• Kiểu mã hoá này sử dụng giá trị nhị phân của thứ tự trạngthái để làm mã cho trạng thái đó (s0→000, s5→101, …)
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
s0 s0/0 s1/0 s2/1
s1 s1/0 s2/0 s0/0
s2 s2/0 s0/1 s1/0
111
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0@
ETEDUT
Bước Bước 33: Mã hoá trạng thái : Mã hoá trạng thái MinimumMinimum--bitbit--changechange
• Mã sẽ được gán cho trạng thái sao cho tổng số bít thay đổikhi chuyển trạng thái của tất cả các trạng thái là nhỏ nhất
• Phương pháp mã hoá này hay đựơc sử dụng khi muốn tối• Phương pháp mã hoá này hay đựơc sử dụng khi muốn tốithiểu hoá kích thước chip cũng như công suất tiêu thụ
00 011
00 011
112
00 01
10111
22
00 01
11101
11
Straightforward Minimum-bit-change
Gray code
counter@ETEDUT
Bước 3: Mã hoá trạng thái Bước 3: Mã hoá trạng thái MinimumMinimum--bitbit--changechange
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
s0 s0/0 s1/0 s2/1
s1 s1/0 s2/0 s0/0
0 1
2
s1 s1/0 s2/0 s0/0
s2 s2/0 s0/1 s1/0
113
2
Possible
encoding:
s0=00
s1=10
s2=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
00 00/0 10/0 11/1
10 10/0 11/0 00/0
11 11/0 00/1 10/0@
ETEDUT
Bước 3: Mã hoá trạng thái Bước 3: Mã hoá trạng thái OneOne--hothot
• Mỗi trạng thái ứng với một flip-flop, Q của 1 FF =1, Qcủa các FF khác =0
• Dùng khi số lượng trạng thái nhỏ• Dùng khi số lượng trạng thái nhỏ
• Rất dễ thực hiện, mạch tổ hợp đơn giản
• Cấu trúc của FPGA rất phù hợp với kiểu mã hoá này
114
@ETEDUT
Bước 3: Mã hoá trạng thái Bước 3: Mã hoá trạng thái OneOne--hothotNEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
s0 s0/0 s1/0 s2/1
s1 s1/0 s2/0 s0/0
s s /0 s /1 s /0
One-hot encoding
s0=001
s1=010
s2=100
s2 s2/0 s0/1 s1/0
115
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
001 001/0 010/0 100/1
010 010/0 100/0 001/0
100 100/0 001/1 010/0@
ETEDUT
Bước Bước 33: Mã hoá trạng thái : Mã hoá trạng thái OneOne--hothot
CD=10
Y=1
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0CD=10
Y=1
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
CD=11
Y=1
Y
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
Q0
D
Q1
D
Q2
DP C C
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
CD=11
Y=1
116
C
D
@ETEDUT
Bước 3: Mã hoá trạng thái Bước 3: Mã hoá trạng thái OneOne--hothot
• Mã hoá One-hot với flip-flop D�Mỗi một mũi tên chuyển trạng thái tới một trạng thái cần một
cổng ANDcổng AND
117
@ETEDUT
Bước 3: Mã hoá trạng thái Bước 3: Mã hoá trạng thái OneOne--hothot
CD=10
Y=1
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0CD=10
Y=1
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0CD=10
Y=1
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0CD=10
Y=1
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0CD=10
Y=1
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0CD=10
Y=1
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0CD=10
Y=1
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0CD=10
Y=1
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0CD=10
Y=1
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0CD=10
Y=1
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0CD=10
Y=1
s0
CD=0X
Y=0
s1
CD=10
Y=0
CD=0X
Y=0
s2
CD=10
Y=0
CD=0X
Y=0
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
CD=11
Y=1
Q0
S R
Q1
S R
Q2
S R Y
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
CD=11
Y=1
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
CD=11
Y=1
P C C
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
CD=11
Y=1
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
CD=11
Y=1
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
CD=11
Y=1
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
CD=11
Y=1
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
CD=11
Y=1
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
CD=11
Y=1
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
CD=11
Y=1
s0 s1
CD=11
Y=0
s2
CD=11
Y=0
CD=11
Y=1
118
C
D
@ETEDUT
Bước 3: Mã hoá trạng thái Bước 3: Mã hoá trạng thái OneOne--hothot
• Mã hoá One-hot với flip-flop SR :� Mỗi một mũi tên chuyển trạng thái xuất phát từ một trạng thái
khác cần một cổng AND tại đầu vào Skhác cần một cổng AND tại đầu vào S
�Mỗi một mũi tên hướng tới các trạng thái khác cần 1 cổng ANDtại đầu vào R
119
@ETEDUT
Bước Bước 44: Lựa chọn loại Flip: Lựa chọn loại Flip--flopflop
• JK flip-flop�Đây là loại flip-flop đắt nhất
�Khó thiết kế nhất�Khó thiết kế nhất
� Có nhiều trạng thái don’t cares nên mạch tổ hợp nhanh và rẻnhất
• SR flip-flop�flip-flop rẻ
�Khó thiết kế
120
�Khó thiết kế
@ETEDUT
Bước 4: Lựa chọn loại FlipBước 4: Lựa chọn loại Flip--flopflop
• D flip-flop�flip-flop rẻ
�Dễ thiết kế nhất�Dễ thiết kế nhất
�Không có don’t cares dẫn tới mạch tổ hợp phức tạp và chậm nhất
• T flip-flop�flip-flop rẻ
�Dễ thiết kế
�Không có don’t cares dẫn tới mạch tổ hợp phức tạp và chậm nhất
121
�Không có don’t cares dẫn tới mạch tổ hợp phức tạp và chậm nhất
�Thường đựơc dùng để thiết kế bộ đếm và bộ chia tần@ETEDUT
Bước 5: Thực hiện mạch logic tổ Bước 5: Thực hiện mạch logic tổ hợp D fliphợp D flip--flopflop
• Xác định các hàm đầu vào flip-flop DY
Q0
Q1NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
Excitation table
for D flip-flop
0 0 x 0
0 0 x 0
1 0 x 0
0 0 x 1C
D
Q1n=D1
Q0
Q Q0n=D0
Q0
Q
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
122
Q Q(next) D
0 0 0
0 1 1
1 0 0
1 1 1
for D flip-flop
⇒ D to be applied
is identical to Qn
0 0 x 1
0 0 x 1
Q1n=D1 Q1
1 0 x 0
0 1 x 0C
D
0 1 x 0
0 1 x 0
Q0n=D0 Q1
0 0 x 1
1 0 x 0C
D
@ETEDUT
Bước 5: Thực hiện mạch logic tổ Bước 5: Thực hiện mạch logic tổ hợp D fliphợp D flip--flopflop
0 0 x 0
0 0 x 0
Y
Q0
Q1
0 0 x 1
0 0 x 1
Q1n=D1
Q0
Q1
0 1 x 0
0 1 x 0
Q0n=D0
Q0
Q1
0 0 x 0
1 0 x 0
0 0 x 1C
D0 0 x 1
1 0 x 0
0 1 x 0C
D0 1 x 0
0 0 x 1
1 0 x 0C
D
Q1
D
Q0
D Y
Clr Clr
123
C
D@
ETEDUT
Bước 5: Thực hiện mạch logic tổ Bước 5: Thực hiện mạch logic tổ hợp T fliphợp T flip--flopflop
• Xác định các hàm đầu vào TY
Q0
Q1NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
Excitation table
for T flip-flop
0 0 x 0
0 0 x 0
1 0 x 0
0 0 x 1C
D
T1
Q0
Q T0
Q0
Q
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
124
Q Q(next) T
0 0 0
0 1 1
1 0 1
1 1 0
for T flip-flop
0 0 x 0
0 0 x 0
T1 Q1
1 0 x 1
0 1 x 1C
D
0 0 x 0
0 0 x 0
T0 Q1
0 1 x 1
1 1 x 0C
D
@ETEDUT
0 0 x 0
0 0 x 0
T0
Q0
Q1
0 0 x 0
0 0 x 0
T1
Q0
Q1
Bước 5: Thực hiện mạch logic tổ Bước 5: Thực hiện mạch logic tổ hợp T fliphợp T flip--flopflop
0 0 x 0
0 0 x 0
Y
Q0
Q1
0 0 x 0
0 1 x 1
1 1 x 0C
D0 0 x 0
1 0 x 1
0 1 x 1C
D0 0 x 0
1 0 x 0
0 0 x 1C
D
Q1
T
Q0
T YCost: 32
Clr Clr
125
C
D@
ETEDUT
Bước 5: Thực hiện mạch logic tổ Bước 5: Thực hiện mạch logic tổ hợp SR fliphợp SR flip--flopflop
• Xác định các hàm đầu vào S và RNEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
Excitation table
for SR flip-flop
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
S1
Q0
Q R1
Q0
Q
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
126
for SR flip-flop
Q Q(next) S R
0 0 0 x
0 1 1 0
1 0 0 1
1 1 x 0
S1 Q1
C
D
R1 Q1
C
D
Q Q(next) S R
0 0 0 x
0 1 1 0
1 0 0 1
1 1 x 0
0
0
x
x
Q Q(next) S R
0 0 0 x
0 1 1 0
1 0 0 1
1 1 x 0
0 0
0 0
x x
x x
Q Q(next) S R
0 0 0 x
0 1 1 0
1 0 0 1
1 1 x 0
0 0 x
0 0 x
x x 0
x x 0
Q Q(next) S R
0 0 0 x
0 1 1 0
1 0 0 1
1 1 x 0
0 0 x
0 0 x
0
x x 0
x x 0
x
Q Q(next) S R
0 0 0 x
0 1 1 0
1 0 0 1
1 1 x 0
0 0 x
0 0 x
0 1
x x 0
x x 0
x 0
Q Q(next) S R
0 0 0 x
0 1 1 0
1 0 0 1
1 1 x 0
0 0 x
0 0 x
0 1 0
x x 0
x x 0
x 0 1
Q Q(next) S R
0 0 0 x
0 1 1 0
1 0 0 1
1 1 x 0
0 0 x
0 0 x
1 0 0
0 1 0
x x 0
x x 0
0 x 1
x 0 1
0 0 x x
0 0 x x
1 0 x 0
0 1 x 0
x x x 0
x x x 0
0 x x 1
x 0 x 1@
ETEDUT
Bước 5: Thực hiện mạch logic tổ Bước 5: Thực hiện mạch logic tổ hợp SR fliphợp SR flip--flopflop
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
Y
Q0
Q1NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
Excitation table
for SR flip-flop
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
S0
Q0
Q R0
Q0
Q
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
0 0 x 0
0 0 x 0
1 0 x 0
0 0 x 1C
D
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
127
for SR flip-flop
Q Q(next) S R
0 0 0 x
0 1 1 0
1 0 0 1
1 1 x 0
S0 Q1
C
D
R0 Q1
C
D
0 x 0
0 x 0
x 0 x
x 0 x
0 x 0
0 x 0
1 0 0
x 0 x
x 0 x
0 1 x
0 x 0
0 x 0
0 0 1
1 0 0
x 0 x
x 0 x
x 1 0
0 1 x
0 x x 0
0 x x 0
0 0 x 1
1 0 x 0
x 0 x x
x 0 x x
x 1 x 0
0 1 x x@
ETEDUT
Bước 5: Thực hiện mạch logic tổ Bước 5: Thực hiện mạch logic tổ hợp SR fliphợp SR flip--flopflop
S1
Q0
Q1R1
Q0
Q1
0 0 x x
0 0 x x
x x x 0
x x x 0
C
D
C
D0 0 x x
1 0 x 0
0 1 x 0
x x x 0
0 x x 1
x 0 x 1
Q1
S R
Q0
S R
CC
128
C
D
@ETEDUT
Bước 5: Thực hiện mạch logic tổ Bước 5: Thực hiện mạch logic tổ hợp SR fliphợp SR flip--flopflop
S0
Q0
Q1R0
Q0
Q1
0 x x 0
0 x x 0
x 0 x x
x 0 x x
C
D
C
D
Q1
S R
Q0
S R
CC
0 x x 0
0 0 x 1
1 0 x 0
x 0 x x
x 1 x 0
0 1 x x
129
C
D
@ETEDUT
Bước 5: Thực hiện mạch logic tổ Bước 5: Thực hiện mạch logic tổ hợp SR fliphợp SR flip--flopflop
S0
Q0
Q1R0
Q0
Q1
0 x x 0
0 x x 0
x 0 x x
x 0 x x
0 0 x 0
0 0 x 0
Y
Q0
Q1
C
D
C
D
Q1
S R
Q0
S R
CC
0 x x 0
0 0 x 1
1 0 x 0
x 0 x x
x 1 x 0
0 1 x x
0 0 x 0
1 0 x 0
0 0 x 1C
D
Y
130
C
D
@ETEDUT
Bước 5: Thực hiện mạch logic tổ Bước 5: Thực hiện mạch logic tổ hợp JK fliphợp JK flip--flopflop
• Xác định các hàm đầu vào J và KNEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
Excitation table
for JK flip-flop
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
J1
Q0
Q K1
Q0
Q
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
131
for JK flip-flop
Q Q(next) J K
0 0 0 x
0 1 1 x
1 0 x 1
1 1 x 0
J1 Q1
C
D
K1 Q1
C
D
Q Q(next) J K
0 0 0 x
0 1 1 x
1 0 x 1
1 1 x 0
0
0
x
x
0 0
0 0
x x
x x
Q Q(next) J K
0 0 0 x
0 1 1 x
1 0 x 1
1 1 x 0
0 0 x
0 0 x
x x 0
x x 0
Q Q(next) J K
0 0 0 x
0 1 1 x
1 0 x 1
1 1 x 0
0 0 x
0 0 x
0 1 x
x x 0
x x 0
x x 1
Q Q(next) J K
0 0 0 x
0 1 1 x
1 0 x 1
1 1 x 0
0 0 x
0 0 x
1 0 x
0 1 x
x x 0
x x 0
x x 1
x x 1
0 0 x x
0 0 x x
1 0 x x
0 1 x x
x x x 0
x x x 0
x x x 1
x x x 1@
ETEDUT
Bước 5: Thực hiện mạch logic tổ Bước 5: Thực hiện mạch logic tổ hợp JK fliphợp JK flip--flopflop
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
NEXT STATE / OUTPUTPRESENT
STATE CD=0X CD=10 CD=11
Y
Q0
Q1
Excitation table
for JK flip-flop
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
J0
Q0
Q K0
Q0
Q
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
STATE CD=0X CD=10 CD=11
00 00/0 01/0 10/1
01 01/0 10/0 00/0
10 10/0 00/1 01/0
0 0 x 0
0 0 x 0
1 0 x 0
0 0 x 1C
D
132
for JK flip-flop
Q Q(next) J K
0 0 0 x
0 1 1 x
1 0 x 1
1 1 x 0
J0 Q1
C
D
K0 Q1
C
D
0 x 0
0 x 0
x 0 x
x 0 x
0 x 0
0 x 0
1 x 0
x 0 x
x 0 x
x 1 x
0 x 0
0 x 0
0 x 1
1 x 0
x 0 x
x 0 x
x 1 x
x 1 x
0 x x 0
0 x x 0
0 x x 1
1 x x 0
x 0 x x
x 0 x x
x 1 x x
x 1 x x@
ETEDUT
Bước 5: Thực hiện mạch logic tổ Bước 5: Thực hiện mạch logic tổ hợp JK fliphợp JK flip--flopflop
J1
Q0
Q1K1
Q0
Q1
0 0 x x
0 0 x x
x x x 0
x x x 0
C
D
C
D
Q1
J K
Q0
J K
CC
0 0 x x
1 0 x x
0 1 x x
x x x 0
x x x 1
x x x 1
133
C
D
@ETEDUT
Bước 5: Thực hiện mạch logic tổ Bước 5: Thực hiện mạch logic tổ hợp JK fliphợp JK flip--flopflop
J0
Q0
Q1K0
Q0
Q1
0 x x 0
0 x x 0
x 0 x x
x 0 x x
0 0 x 0
0 0 x 0
Y
Q0
Q1
C
D
C
D
Q1
J K
Q0
J K
CC
0 x x 0
0 x x 1
1 x x 0
x 0 x x
x 1 x x
x 1 x x
0 0 x 0
1 0 x 0
0 0 x 1C
D
Y
134
C
D
@ETEDUT
Bước 6: Phân tích tín hiệu theo Bước 6: Phân tích tín hiệu theo thời gianthời gian
• Xác định tần số tối đa:�Tần số tối đa = 1/trễ của đường dài nhất
� Đường dài nhất là đường có trễ mạch tổ hợp lớn nhất giữa hai� Đường dài nhất là đường có trễ mạch tổ hợp lớn nhất giữa haisườn xung nhịp
�Ví dụ:
Q1
D
Q0
D Y
Clr ClrQ1
D
Q0
D Y
Clr Clr
135
C
D
C
D@
ETEDUT
Thiết kế mạch số tuần tựThiết kế mạch số tuần tựCác mạch số tuần tự cơ bảnCác mạch số tuần tự cơ bản
• Thanh ghi (Registers)
• Thanh ghi dịch (Shift registers)
• Bộ đếm (Counter)
• Tệp thanh ghi (Register files)
• Cấu trúc hàng đợi vào sau ra trước LIFO (stack)
• Cấu trúc hàng đợi vào trước ra trước FIFO
136
@ETEDUT
4. 4. NgônNgôn ngữngữ mômô tảtảphầnphần cứngcứng VHDLVHDL
@ETEDUT
Giới thiệu về VHDLGiới thiệu về VHDL
• VHDL = VHSIC Hardware Description Language
• VHSIC = Very High Speed Integrated Circuit
• Là ngôn ngữ lập trình dùng để mô tả hoạt động của hệthống số
• Được quy định trong chuẩn IEEE 1076 từ năm 1983
• Các ngôn ngữ mô tả phần cứng khác:�Verilog
138
�Verilog
�Abel @ETEDUT
library IEEE; -- Su dung thu vien chuan IEEEuse IEEE.STD_LOGIC_1164.ALL; --Su dung tat ca cac thanh phan trong goi STD_LOGIC_1164
entity hex2led isPort ( HEX : in std_logic_vector(3 downto 0);
LED : out std_logic_vector(6 downto 0));end hex2led;-- Khai bao hoat dong cua hex2Ledarchitecture Behavioral of hex2led is
HEXEntity
32
654
beginwith HEX SELect
LED<= "1111001" when "0001", --1"0100100" when "0010", --2"0110000" when "0011", --3"0011001" when "0100", --4"0010010" when "0101", --5"0000010" when "0110", --6"1111000" when "0111", --7"0000000" when "1000", --8"0010000" when "1001", --9
HEX LEX
Entity
hex2led
210
0
3
12
4
139
"0010000" when "1001", --9"0001000" when "1010", --A"0000011" when "1011", --b"1000110" when "1100", --C"0100001" when "1101", --d"0000110" when "1110", --E"0001110" when "1111", --F"1000000" when others; --0
end Behavioral;@
ETEDUT
Giới thiệu về VHDLGiới thiệu về VHDLVVí dụ 1í dụ 1
• Thiết kế mạch ‘Test’ với 3 đầu vào 8-bit (In1, In2, In3) vàhai đầu ra 1 bit (Out1, Out2). Out1=‘1’ khi In1=In2 vàOut2=‘1’ khi In1 = In3Out2=‘1’ khi In1 = In3
In1
In2
Test
Out1Compare
A
B
EQ
140
In2
In3 Out2
Compare
A
B
EQ
Test là một khối gồm 2 bản copy của khối compare@
ETEDUT
Compare
Giới thiệu về VHDLGiới thiệu về VHDLVVí dụ 1í dụ 1
A[0] XNOR
Thiết kế khối compare dùng mạch tổ hợp
A
B
EQ
A[0]
B[0]
A[1]
B[1]
A[7]
EQ
XNOR
AND
141
BA[7]
B[7]@ETEDUT
Giới thiệu về VHDLGiới thiệu về VHDLVVí dụ í dụ 11
• Thiết kế khối compare dùng VHDL
- -Eight bit comparator
‘Entity’ xác định giao diệnvới bên ngoài của khối cần thiết kế
- -Eight bit comparator
entity Compare is
port(A,B: in bit_vector(0 to 7);
EQ: out bit);
end Compare;
architecture Behav1 of Compare is
begin
EQ <= ‘1’ when (A=B) else ‘0’;
end Behav1;
đầu vào và ra được gọi là port
‘Architecture’ miêu tả hoạt độngvà cấu trúc bên trong của
khối cần thiết kế
142
end Behav1;khối cần thiết kế
Chú ý:-Một entity có thể có nhiều architecture, mỗi architecture là mộtcách thể hiện khác nhau của cùng một chức năng
- Các Ports là vector có chiều: vào (in), ra (out), hoặc cả vào cả ra (inout)@
ETEDUT
Giới thiệu về VHDLGiới thiệu về VHDLComponent và InstantiationComponent và Instantiation
• Biểu diễn Test bằng VHDL
entity Test isentity Test is
port( In1,In2,In3: in bit_vector(0 to 7);
Out1,Out2: out bit);
end Test;
architecture Struct1 of Test is
component Comparator is
port(X,Y: in bit_vector(0 to 7);
Z: out bit);
end component;
2 bản copy của cùng mộtcomponent
‘Comparator’
143
end component;
begin
Compare1: Comparator port map (X=>In1, Y=>In2, Z=>Out1);
Compare2: Comparator port map (X=>In1,Y=>In3,Z=>Out2);
end Struct1;
‘Comparator’
Chú ý:- Hai bản comparator chạy song song với nhau !!!
- Đây là architecture miêu tả cấu trúc của entity Test@
ETEDUT
Giới thiệu về VHDLGiới thiệu về VHDLCấu hình (Configuration)Cấu hình (Configuration)
• Khi một entity có nhiều architectures, ta sẽ xử dụngarchitecture nào?
• Làm thế nào để gắn ‘Components’ với ‘Entities’?• Làm thế nào để gắn ‘Components’ với ‘Entities’?
-- Configuration information: architecture selection
-- and component-entity binding
configuration Build1 of Test is
for Struct1
for Compare1: Comparator use entity Compare(Behav1)
port map (A => X, B => Y, EQ => Z);
144
for Compare1: Comparator use entity Compare(Behav1)
port map (A => X, B => Y, EQ => Z);
end for;
for others: Comparator use entity Compare(Behav1)
port map (A => X, B => Y, EQ => Z);
end for;
end for;
end Build1;@
ETEDUT
Giới thiệu về VHDLGiới thiệu về VHDLKhai báo Entity và ArchitectureKhai báo Entity và Architecture
ENTITY:
entity Entity_name isentity Entity_name isport(Signal_name: in Signal_type;
Signal_name: out Signal_type);end Entity_name;
ARCHITECTURE:
145
architecture Architecture_name of Entity_name isKhai báo các tín hiệu cục bộ;Khai báo các components;
beginCác câu lệnh;
end Architecture_name;@
ETEDUT
Giới thiệu về VHDLGiới thiệu về VHDLKhai bKhai báo component áo component
COMPONENT:
component Component_name is
port(Signal_name: in Signal_type;
Signal_name: out Signal_type);
end component;end component;
Khai báo copy của COMPONENT :
Instance_name: component Component_nameport map (Signal_list);
146
Hoặc cách thứ 2, copy trực tiếp:
Instance_name: entity Entity_name(Architecture_name)port map (Signal_list);
@ETEDUT
Giới thiệu về VHDLGiới thiệu về VHDLKhai bKhai báo cấu hìnháo cấu hình
CONFIGURATION:
configuration Config_name of Entity_name is
for Architecture_namefor Architecture_name
for Instance_name: Component_name use entity
Entity_name(Architecture_name)
port map (Signal_list);
end for;
end for;
end Config_name;
147
@ETEDUT
Giới thiệu về VHDLGiới thiệu về VHDLVí dụ 2Ví dụ 2
• Biểu diễn cổng AND bằng VHDL
A
BY
B
C
Y
-- 3-input AND gate
entity AND3 is
port ( A,B,C: in bit;
Y: out bit);
end AND3;
148
architecture RTL of AND3 is
begin
Y <= ‘1’ when ((A=‘1’) and (B=‘1’) and (C=‘1’)) else ‘0’;
end RTL;
@ETEDUT
Giới thiệu về VHDLGiới thiệu về VHDLVí dụ 2Ví dụ 2
• Biểu diễn cổng OR bằng VHDL
A
BY
B
C
Y
-- 3-input OR gate
entity OR3 is
port ( A,B,C: in bit;
Y: out bit);
end OR3;
149
architecture RTL of OR3 is
begin
Y <= ‘0’ when ((A=‘0’) and (B=‘0’) and (C=‘0’)) else ‘1’;
end RTL;
@ETEDUT
Giới thiệu về VHDLGiới thiệu về VHDLVí dụ 2Ví dụ 2
• Biểu diễn cổng INV bằng VHDL
A Y
-- INV gate
entity INV is
port ( A: in bit;
Y: out bit);
end INV;
A Y
150
architecture RTL of INV is
begin
Y <= ‘1’ when (A=‘0’) else ‘0’;
end RTL;
@ETEDUT
Giới thiệu về VHDLGiới thiệu về VHDLVí dụ 3Ví dụ 3
• Thiết kế bộ MUX 2-1 dùng VHDL
AA
S
BY
entity MUX21 is
port ( A,B,S: in bit;
Y: out bit);
end MUX21;
151
architecture Behav of MUX21 is
begin
Y <= A when (S=‘1’) else B;
end Behav;
@ETEDUT
architecture Struct of MUX21 is
signal U,V,W : bit;
Giới thiệu về VHDLGiới thiệu về VHDLVí dụ 3Ví dụ 3
A
BY
signal U,V,W : bit;
component AND2 is
port ( X,Y: in bit;
Z: out bit);
end component;
component OR2 is
port ( X,Y: in bit;
Z: out bit);
end component;
component INV is
S
A
S Y
U V
W
152
component INV is
port ( X: in bit;
Z: out bit);
end component;
begin
Gate1: INV port map (X=>S,Z=>U);
Gate2: AND2 port map (X=>A,Y=>S,Z=>W);
Gate3: AND2 port map (X=>U,Y=>B,Z=>V);
Gate4: OR2 port map (X=>W,Y=>V,Z=>Y);
end Struct;
B
U V
@ETEDUT
Giới thiệu về VHDLGiới thiệu về VHDLVí dụ 3Ví dụ 3
• Giả sử ta muốn sử dụng các cổng AND, OR và INV ở vídụ 2 trong MUX21
configuration Use3InputGates of MUX21 is
for Behav
end for;
for Struct
for Gate1:INV use entity INV(RTL)
port map (A=>X,Y=>Z);
end for;
for All:AND2 use entity AND3(RTL)
port map (A=>X,B=>Y,C=>’1’,Y=>Z);
Entities
A
B
C
Y
A Y
153
for All:AND2 use entity AND3(RTL)
port map (A=>X,B=>Y,C=>’1’,Y=>Z);
end for;
for Gate4:OR2 use entity OR3(RTL)
port map (A=>X,B=>Y,C=>’0’,Y=>Z);
end for;
end for;
end Use3InputGates;
Components
X
Y
Z
X Z@
ETEDUT
Giới thiệu về VHDLGiới thiệu về VHDLTạo TTạo Testbenchestbench
• Testbench là entity dùng để mô phỏng và kiểm tra thiết kế
AY
entity Testbench is
end Testbench;MUX21
A
BY
S
end Testbench;
Testbench không có port
architecture BehavTest of Testbench is
Signal In1,In2,Select,Out : bit;
begin
mux21_copy: entity MUX21(Behav) port map (In1, In2, Select, Out);
Thu: process is
154
Thu: process is
begin
In1<=‘0’;In2<=‘1’;Select<=‘0’; wait for 20 ns;
Select<=‘1’; wait for 20 ns;
In1<=‘1’;In2<=‘0’; wait for 20 ns;
...
end process;
end BehavTest;@
ETEDUT
Giới thiệu về VHDLGiới thiệu về VHDLSSử dụng lạiử dụng lại
• Thông thường, các bộ phận của thiết kế này có thể đượcdùng lại trong các thiết kế khác
• Các sản phẩm công nghiệp thường bao gồm 95% bộ phận• Các sản phẩm công nghiệp thường bao gồm 95% bộ phậndùng lại và chỉ có 5% là phải thiết kế mới
• VHDL khuyến khích dùng lại bằng khái niệm ‘Packages’
• Một ‘Package’ chứa các định nghĩa về hằng số, khai báocomponent, các kiểu dữ liệu của người sử dụng, cácchương trình con viết bằng VHDL
155
chương trình con viết bằng VHDL
• Package được cất ở trong ‘Library’: library thực chất làmột thư mục
@ETEDUT
Giới thiệu về VHDLGiới thiệu về VHDLSSử dụng lạiử dụng lại
Package interface declaration:
package Package_name is
-- constants
-- user defined types-- user defined types
-- component declarations
-- sub programs
end Package_name;
How to use a package?
156
How to use a package?
use Library_name.Package_name.all;
…
U1: entity Package_name.Entity_name(Architecture_name);
@ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:CCác kiểu dữ liệu đã được định nghĩaác kiểu dữ liệu đã được định nghĩa
package Standard is
type Bit is (‘0’,’1’);type Bit is (‘0’,’1’);
type Boolean is (False, True);
type Character is (--ASCII set);
type Integer is range implementation_defined;
type Real is range implementation_defined;
type Bit_vector is (--array of bits);
type String is (--array of characters);
type Time is range implementation_defined;
end Standard;
157
Bit, Boolean và Character là kiểu dữ liệu liệt kê@ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:CCác kiểu dữ liệu đã được định nghĩaác kiểu dữ liệu đã được định nghĩa
Ví dụ về khai báo các kiểu số nguyên:type Year is range 0 to 99;
type Memory_address is range 65535 downto 0;type Memory_address is range 65535 downto 0;
Ví dụ về khai báo các kiểu số thựctype Probability is range 0.0 to 1.0;
type Input_level is range -5.0 to 5.0;
Khai báo bit_vector, giá trị được đặt trong dấu nháy képconstant State1: bit_vector(4 downto 0) := “00100”;
158
constant State1: bit_vector(4 downto 0) := “00100”;
Kiểu chuỗi String là một chuỗi ký tự characters; giá trị của nóđược đặt trong dấu nháy kép
constant Error_message: string
:= “Unknown error: ask your poor sysop for help”;
MSB, bit 4 LSB@ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:CCác kiểu dữ liệu đã được định nghĩaác kiểu dữ liệu đã được định nghĩa
ARCHITECTURE test OF test ISBEGINPROCESS(X)
ARCHITECTURE test OF test ISSIGNAL a : REAL;
PROCESS(X)VARIABLE a : INTEGER;BEGIN
a := 1; --Ok 1a := -1; --Ok 2a := 1.0; --error 3
END PROCESS;END test;
SIGNAL a : REAL;BEGIN
a <= 1.0; --Ok 1a <= 1; --error 2a <= -1.0E10; --Ok 3a <= 1.5E-20; --Ok 4a <= 5.3 ns; --error 5
END test;
159
@ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:CCác kiểu dữ liệu đã được định nghĩaác kiểu dữ liệu đã được định nghĩa
Kiểu Time là kiểu vật lý:type Time is range implementation_defined
units
fs; Primary unit:fs;
ps = 1000 fs;
ns = 1000 ps;
us = 1000 ns;
ms = 1000 us;
sec = 1000 ms;
min = 60 sec;
hr = 60 min;
end units;
Primary unit:
resolution limit
Secondary units
160
Được sử dụng rất nhiều trong chạy mô phỏngwait for 20 ns;
constant Sample_period: time := 2 ms;
constant Clock_period: time := 50 ns;
@ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:CCác kiểu dữ liệu các kiểu dữ liệu của người sử dụngủa người sử dụng
Người sử dụng có thể định nghĩa kiểu vật lý như sau:type Length is range 0 to 1E9
units
um;
Primary unit:
resolution limitum;
mm = 1000 um;
m = 1000 mm;
km = 1000 m;
mil = 254 um;
inch = 1000 mil;
foot = 12 inch;
yard = 3 foot;
end units;
resolution limit
Metric secondary units
Imperial secondary units
161
@ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:KKiểu liiểu liệt kê ệt kê ccủa người sử dụngủa người sử dụng
Người sử dụng có thể định nghĩa kỉêu liệt kê như sau:
type FSM_states is (reset, wait, input, calculate, output);
constant reset: bit_vector := “10000”;
constant wait: bit_vector := “01000”;
constant input: bit_vector := “00100”;
constant calculate: bit_vector := “00010”;
constant output: bit_vector := “00001”;
162
constant output: bit_vector := “00001”;
@ETEDUT
PACKAGE example ISTYPE current IS RANGE 0 TO 1000000000UNITS
na; --nano ampsua = 1000 na; --micro ampsma = 1000 ua; --milli ampsa = 1000 ma; --amps
END UNITS;TYPE load_factor IS (small, med, big );TYPE load_factor IS (small, med, big );END example;
USE WORK.example.ALL;ENTITY delay_calc IS
PORT ( out_current : OUT current;load : IN load_factor;delay : OUT time);
END delay_calc;ARCHITECTURE delay_calc OF delay_calc ISBEGIN
delay <= 10 ns WHEN (load = small) ELSE
163
delay <= 10 ns WHEN (load = small) ELSEdelay <= 20 ns WHEN (load = med) ELSEdelay <= 30 ns WHEN (load = big) ELSEdelay <= 10 ns;out_current <= 100 ua WHEN (load = small)ELSEout_current <= 1 ma WHEN (load = med) ELSEout_current <= 10 ma WHEN (load = big) ELSEout_current <= 100 ua;
END delay_calc;@
ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:KKiểu miểu mảng arrayảng array
type 1D_array is array (1 to 10) of integer;
type 2D_array is array (5 downto 0, 1 to 10) of real;
TYPE data_bus IS ARRAY(0 TO 31) OF BIT;TYPE data_bus IS ARRAY(0 TO 31) OF BIT;
VARIABLE X: data_bus;VARIABLE Y: BIT;Y := X(0);Y := X(15);
164
@ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:KKiểu biểu bản ghi recordản ghi record
TYPE optype IS ( add, sub, mpy, div, jmp );
TYPE instruction ISPROCESS(X)
TYPE instruction ISRECORD
opcode : optype;src : INTEGER;dst : INTEGER;
END RECORD;
PROCESS(X)VARIABLE inst : instruction;VARIABLE source, dest : INTEGER;VARIABLE operator : optype;BEGIN
source := inst.src; --Ok line 1dest := inst.src; --Ok line 2source := inst.opcode; --error line 3
165
source := inst.opcode; --error line 3operator := inst.opcode; --Ok line 4inst.src := dest; --Ok line 5inst.dst := dest; --Ok line 6inst := (add, dest, 2); --Ok line 7inst := (source); --error line 8
END PROCESS;@
ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:Standard logicStandard logic
library IEEE;
use IEEE.Std_logic_1164.All;
type std_logic is (type std_logic is (
‘U’, -- uninitialized e.g. after power-up
‘X’, -- strongly driven unknown e.g. after setup violation
‘0’, -- strongly driven logic zero
‘1’, -- strongly driven logic one
‘Z’, -- high impedance e.g. not driven at all
‘W’, -- weakly driven unknown
‘L’, -- weakly driven logic zero
‘H’, -- weakly driven logic one
‘-’); -- don’t care
166
‘-’); -- don’t care
@ETEDUT
LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;PACKAGE memory IS
CONSTANT width : INTEGER := 3;
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:Standard logicStandard logic
CONSTANT width : INTEGER := 3;CONSTANT memsize : INTEGER := 7;TYPE data_out IS ARRAY(0 TO width) OF std_logic;TYPE mem_data IS ARRAY(0 TO memsize) OF data_out;
END memory;
LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE WORK.memory.ALL;
167
USE WORK.memory.ALL;ENTITY rom IS
PORT( addr : IN INTEGER;data : OUT data_out;cs : IN std_logic);
END rom;
@ETEDUT
ARCHITECTURE basic OF rom ISCONSTANT z_state : data_out := (‘Z’, ‘Z’, ‘Z’, ‘Z’);CONSTANT x_state : data_out := (‘X’, ‘X’, ‘X’, ‘X’);CONSTANT rom_data : mem_data :=
( ( ‘0’, ‘0’, ‘0’, ‘0’),
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:Standard logicStandard logic
( ( ‘0’, ‘0’, ‘0’, ‘0’),( ( ‘0’, ‘0’, ‘0’, ‘1’),( ( ‘0’, ‘0’, ‘1’, ‘0’),( ( ‘0’, ‘0’, ‘1’, ‘1’),( ( ‘0’, ‘1’, ‘0’, ‘0’),( ( ‘0’, ‘1’, ‘0’, ‘1’),( ( ‘0’, ‘1’, ‘1’, ‘0’),( ( ‘0’, ‘1’, ‘1’, ‘1’) );
BEGIN
168
BEGINASSERT addr <= memsizeREPORT “addr out of range”SEVERITY ERROR;data <= rom_data(addr) AFTER 10 ns WHEN cs = ‘1’ ELSEdata <= z_state AFTER 20 ns WHEN cs = ‘0’ ELSEdata <= x_state AFTER 10 ns;
END basic;@
ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:GGán tín hiệuán tín hiệu
• Gán theo vị trí, không gán theo chỉ số của mảng
signal Down: std_logic_vector (3 downto 0);
signal Up: std_logic_vector (0 to 3);
Up <= Down;
Phương án nào sau đây là phương án đúng?
169
Up(0)
Up(1)
Up(2)
Up(3)
Down(3)
Down(2)
Down(1)
Down(0)
OR
Up(0)
Up(1)
Up(2)
Up(3)
Down(0)
Down(1)
Down(2)
Down(3)
Tương ứng theo vị trí
@ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:GGán tín hiệuán tín hiệu
• Có thể gán biến cho một phần của mảng
• Chú ý chiều (to hoặc downto) phải giống nhau trong cácphép khai báophép khai báo
signal Bus: std_logic_vector (7 downto 0);
signal A: std_logic_vector (0 to 3);
Câu lệnh nào sau đây đúng?
Bus(0 to 3) <= A; Chiều bus không giống như khai báo
Kích thứơc mảng khác nhau
170
Bus <= A;
Bus(3 downto 0) <= A;
Bus(5 downto 4) <= A(0 to 1);
Kích thứơc mảng khác nhau
OK! Bus(3) is driven by A(0)
OK! Bus(5) is driven by A(0)
@ETEDUT
Tín hiệu và các kiểu dữ liệu: Tín hiệu và các kiểu dữ liệu: GGán tín hiệuán tín hiệu
• Có thể kết hợp hai mảng khác nhau
signal Byte_bus: std_logic_vector(7 downto 0);
signal Nibble_busA, Nibble_busB: std_logic_vector(3 downto 0);signal Nibble_busA, Nibble_busB: std_logic_vector(3 downto 0);
Byte_bus <= Nibble_busA & Nibble_busB;
Byte_bus(7)
Byte_bus(6)
Byte_bus(5)
Byte_bus(4)
Nibble_busA(3)
Nibble_busA(2)
Nibble_busA(1)
Nibble_busA(0)
171
Byte_bus(4)
Byte_bus(3)
Byte_bus(2)
Byte_bus(1)
Byte_bus(0)
Nibble_busB(3)
Nibble_busB(2)
Nibble_busB(1)
Nibble_busB(0)@
ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:GGán tín hiệuán tín hiệu
• Not supported by all synthesis tools!!
signal X,Y,Z,T: std_logic_vector(3 downto 0);
signal A,B,C: std_logic;
X <= (A,B,C,C); -- correspondence by position
Y <= (3 => A, 1 downto 0 => C, 2 => B);
172
Z <= (3 => A, 2 => B, others => C);
T <= (others => ‘0’); -- initialization irrespective of width of T
@ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:Tham số dùng chung (Generic)Tham số dùng chung (Generic)
•Dùng để truyền tham số từ entity tới các bản copy của nó•Các bản copy có thể có các giá trị tham số khác nhau
entity General_mux is
generic (width : integer);
port ( Input : in std_logic_vector (width - 1 downto 0);
Select : in integer range 0 to width - 1;
Output : out std_logic);
end entity General_mux;
173
@ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:Tham số dùng chung (Generic)Tham số dùng chung (Generic)
LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;
ENTITY test ISGENERIC(rise, fall : TIME; load : INTEGER);GENERIC(rise, fall : TIME; load : INTEGER);PORT ( ina, inb, inc, ind : IN std_logic;
out1, out2 : OUT std_logic);END test;
ARCHITECTURE test_arch OF test ISCOMPONENT AND2
GENERIC(rise, fall : TIME; load : INTEGER);PORT ( a, b : IN std_logic;
c : OUT std_logic);
174
c : OUT std_logic);END COMPONENT;
BEGINU1: AND2 GENERIC MAP(10 ns, 12 ns, 3 )
PORT MAP (ina, inb, out1 );U2: AND2 GENERIC MAP(9 ns, 11 ns, 5 )
PORT MAP (inc, ind, out2 );END test_arch;
@ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:Tham số dùng chung (Generic)Tham số dùng chung (Generic)
LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY test IS
GENERIC(rise, fall : TIME;GENERIC(rise, fall : TIME;GENERIC(load : INTEGER);PORT ( ina, inb, inc, ind : IN std_logic;PORT ( out1, out2 : OUT std_logic);
END test;ARCHITECTURE test_arch OF test ISCOMPONENT and2GENERIC(rise, fall : TIME := 10 NS;
GENERIC(load : INTEGER := 0);PORT ( a, b : IN std_logic;PORT ( c : OUT std_logic);END COMPONENT;
175
END COMPONENT;BEGIN
U1: and2 GENERIC MAP(10 ns, 12 ns, 3 )PORT MAP (ina, inb, out1 );U2: and2 PORT MAP (inc, ind, out2 );END test_arch;
@ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:ThuThuộc tính (attributes)ộc tính (attributes)
TYPE state IS (0 TO 7);
4 thuộc tính (attributes) được định nghĩa sẵn
_ T’LEFT, which returns the left bound of a type or subtype_ T’RIGHT, which returns the right bound of a type or subtype_ T’HIGH, which returns the upper bound of a type or subtype_ T’LOW, which returns the lower bound of a type or subtype
176
PROCESS(x)SUBTYPE smallreal IS REAL RANGE -1.0E6 TO 1.0E6;VARIABLE q : real;BEGIN
q := smallreal’LEFT; -- use of ’left returns 1.0E6END PROCESS;
@ETEDUT
Tín hiệu và các kiểu dữ liệu:Tín hiệu và các kiểu dữ liệu:ThuThuộc tính (attributes)ộc tính (attributes)
PROCESS(a)PROCESS(a)TYPE bit4 IS ARRAY(0 TO 3) of BIT;TYPE bit_strange IS ARRAY(10 TO 20) OF BIT;VARIABLE len1, len2 : INTEGER;
BEGINlen1 := bit4’LENGTH; -- returns 4len2 := bit_strange’LENGTH; -- returns 11
END PROCESS;
177
END PROCESS;
Xem “VHDL programming by example” để biết chi tiết hơn về thuộc tính@
ETEDUT
Các phép toán số học và logic:Các phép toán số học và logic:CCác phép toán logicác phép toán logic
• Các phép toán logic gồm: not, and, or, xor, nand, nor
• Thứ tự ưu tiên:�‘not’ được thực hiện đầu tiên
�Các lệnh còn lại có cùng mức ưu tiên
• Các phép toán logic được dùng cho các kiểu dữ liệu sau :bit, bit_vector, boolean, std_logic, std_logic_vector,std_ulogic, std_ulogic_vector
• Các phép toán logic có thể được dùng với mảng:
178
• Các phép toán logic có thể được dùng với mảng:�Các mảng phải có cùng kích thước
�Các phần tử của mảng tương ứng theo vị trí
@ETEDUT
Các phép toán số học và logic:Các phép toán số học và logic:CCác phép toán logicác phép toán logic
library IEEE;
use IEEE.Std_Logic_1164.All;use IEEE.Std_Logic_1164.All;
entity Gate is
port(A,B,C: in std_logic;
Z: out std_logic);
end Gate;
architecture Logical of Gate is
begin
Z <= A and not(B or C);
end Logical;
179
end Logical;
@ETEDUT
Các phép toán số học và logic:Các phép toán số học và logic:CCác phép toán logicác phép toán logic
library IEEE;
use IEEE.Std_Logic_1164.All;
entity Gate is
generic(width : integer range 0 to 31);
port(A,B,C: in std_logic_vector(width-1 downto 0);
Z: out std_logic_vector(width-1 downto 0));
end Gate;
architecture Logical of Gate is
begin
Z <= A and not(B or C);
180
Z <= A and not(B or C);
end Logical;@ETEDUT
Các phép toán số học và logic:Các phép toán số học và logic:CCác phép toán so sánhác phép toán so sánh
• Các phép toán so sánh gồm: <, <=, =>, >, =, /=
• Kết quả của phép so sánh là kiểu boolean
• Hai toán hạng phải có cùng kiểu dữ liêụ
• Phép toán so sánh có thể được dùng cho mảng�Mảng có thể có kích thước khác nhau!
�Các phần tử của mảng sẽ được so sánh từng bit, từ trái sang phải
�Bit vector có thể được so sánh nếu như có cùng độ dài và khi sosánh giá trị của bit vector sẽ được đổi sang số nguyên không dấu
181
sánh giá trị của bit vector sẽ được đổi sang số nguyên không dấuđể so sánh @
ETEDUT
CCác phép toán so sánhác phép toán so sánhlibrary IEEEuse IEEE.Std_Logic_1164.All;
entity Compare isport( A: in std_logic_vector(3 downto 0);
B: in std_logic_vector(0 to 4);Z: out boolean);
What is the
value of Z?
TRUE?
FALSE?Z: out boolean);
end Compare;
architecture Relational of Compare isbegin
Z <= TRUE when A<B else FALSE;end Relational;
entity Testbenchend entity Testbench;
FALSE?
1110
is compared to
1011
by bit position
from left to
right;
in the 2nd
182
architecture Build1 of Testbench issignal A: std_logic_vector(3 downto 0) := “1110”;signal B: std_logic_vector(0 to 4) := “10111”;signal Z: boolean;begin
DUT: entity Compare(Relational)port map (A => A, B => B, Z => Z);
end Build1;
in the 2nd
position
A(2) > B(1)
hence (A<B)
is FALSE
@ETEDUT
Các phép toán số học và logic:Các phép toán số học và logic:CCác phép toán số họcác phép toán số học
• Các phép toán số học gồm: +, -, *, /, ** (exponential), abs(absolute value), mod (modulus), rem (remainder)
• Các phép toán này dùng cho kiểu số nguyên và số thực• Các phép toán này dùng cho kiểu số nguyên và số thực(trừ mod and rem không dùng cho số thực), không dùngcho kiểu bit vector
• Cả hai toán hạng phải có cùng kiểu dữ liệu và có thể códải giá trị khác nhau
• Một biến kiểu vật lý (ví dụ: time) có thể nhân với một số
183
• Một biến kiểu vật lý (ví dụ: time) có thể nhân với một sốnguyên và một số thực, kết quả sẽ vẫn là kiểu vật lý@
ETEDUT
Các phép toán số học và logic:Các phép toán số học và logic:CCác phép toán số họcác phép toán số học
entity Add is
port ( A,B: in integer range 0 to 7;
Z: out integer range 0 to 14);
end Add;
architecture Behav of Add is
begin
Z <= A + B;
end Behav;
184
@ETEDUT
Các lệnh song song và tuần tự :Các lệnh song song và tuần tự :CCác lệnh song songác lệnh song song
• Tất cả các lệnh trong architecture đều được thực hiện đồngthời (song song) giống như trong phần cứng, các cổnglogic hoạt động đồng thờilogic hoạt động đồng thời
entity Concurrent is
port ( A,B,C,D: in std_logic;
Y,Z: out std_logic);
end Concurrent;
architecture Struct of Concurrent is
begin
A
BY
Schematic:
185
begin
GATE1: entity NAND2 port map (A,B,Y);
GATE2: entity NAND2 port map (C,D,Z);
end Struct;
B
C
DZ
Mạch sẽ hoạt động thế nào nếu như khai báo GATE1 sau GATE2?@
ETEDUT
Các lệnh song song và tuần tự :Các lệnh song song và tuần tự :CCác lệnh song songác lệnh song song
entity Concurrent is
port ( A,B,C,D: in std_logic;
Y,Z: out std_logic);
end Concurrent;
architecture Struct of Concurrent is
begin
A
BY
Schematic:
186
begin
GATE2: entity NAND2 port map (C,D,Z);
GATE1: entity NAND2 port map (A,B,Y);
end Struct;
B
C
DZ
Mạch vẫn hoạt động như cũ!!!@
ETEDUT
Các lệnh song song và tuần tự :Các lệnh song song và tuần tự :CCác lệnh song songác lệnh song song
A
Schematic:
A
B
DZ
T1entity Concurrent is
port ( A,B, D: in std_logic;
Z: out std_logic);
end Concurrent;
architecture Struct of Concurrent is
signal T1: std_logic;
begin
GATE2: entity NAND2 port map (T1,D,Z);
187
GATE2: entity NAND2 port map (T1,D,Z);
GATE1: entity NAND2 port map (A,B,T1);
end Struct; @ETEDUT
Các lệnh song song và tuần tự : Các lệnh song song và tuần tự : ProcessProcess
• Nhiều khi phương trình tổ hợp trong một câu lệnh rất phứctạp, ví dụ:
A
entity Complex is
port(A,B,C,D,E,F,G,H,I,J,S:
in std_logic;
Y,Z: out std_logic);
end Complex;
architecture Struct of Complex is
begin
Y <= ((A nand B) nand (C nand D))
A
B
C
D
E
F
G
H
S
Y
I Z
188
Y <= ((A nand B) nand (C nand D))
when (S = ‘1’) else
((E nand F) nand (G nand H));
Z <= I nand J;
end Struct;
I
J
Z@ETEDUT
Các lệnh song song và tuần tự : Các lệnh song song và tuần tự : ProcessProcess
• Vì vậy người ta đưa ra khái niệm process:�Một process hoạt động như một câu lệnh và được thực hiện đồng
thời với các câu lệnh khácthời với các câu lệnh khác
� Bên trong một process, các lệnh được thực hiện tuần tự theo thứtự từ trên xuống dưới. Điều này giúp cho việc chia nhỏ một lệnhrất phức tạp thành các lệnh đơn giản hơn.
� Để truyền dữ liệu giữa các lệnh trong một process chúng ta cóthể dùng các biến tạm thời variables. Các biến này không nhấtthiết phải là một tín hiệu vật lý nào.
189
thiết phải là một tín hiệu vật lý nào.
� process sẽ được thực hiện lại mỗi khi có một sự kiện (event) xảyra đối với một tín hiệu (signal) nào đó trong danh sách tín hiệunhạy cảm (sensitivity list).
@ETEDUT
Các lệnh song song và tuần tự : Các lệnh song song và tuần tự : ProcessProcess
Cú pháp khai báo Process:
Process_name: process (sensitivity_list) is
-- variable declarations;
begin
-- variable declarations;
begin
-- sequential commands
end process;
Cú pháp khai báo biến:
variable Variable_name: type;
190
Cú pháp gán giá cho một biến:
Variable_name := expression;
Gán biến → :=Gán tín hiệu → <=
@ETEDUT
Các lệnh song song và tuần tự : Các lệnh song song và tuần tự : ProcessProcess
entity Complex is
port(A,B,C,D,E,F,G,H,I,J,S:
in std_logic;
Y,Z: out std_logic);
end Complex;
T1 and T2 have no
physical meaning since
each refers to 2 different
physical wiresend Complex;
architecture Struct of Complex is
begin
Y_process: process (A,B,C,D,E,F,G,H,S) is
variable T1,T2: std_logic;
begin
if (S=‘1’) then
T1 := A nand B;
T2 := C nand D;
else
A
B
C
physical wires
T1 T2Sensitivity list
191
T2 := C nand D;
else
T1 := E nand F;
T2 := G nand H;
end if;
Y <= T1 nand T2;
end process;
Z <= I nand J;
end Struct;
C
D
E
F
G
H
S
Y
I
J
Z@
ETEDUT
ProcessProcess
• Xét ví dụ sau:
Example: process (A,B,M) is
beginbegin
Y <= A;
M <= B;
Z <= M;
end process;
1. Giả thiết B có giá trị mới B’
2. Process Example được thực hiện. Các tín hiệu ra được ghi nhớ:Y’ <= A; M’ <= B’; Z’ <= M;
Giá trị M cũ !!! M chỉ nhận giá trị mới ở cuối process
192
3. Process Example tạm dừngY, M và Z nhận các giá trị mới Y’, M’, Z’.
4. Vì M ở trong sensitivity list, process Example lại đựơc thực hiện
5. Process Example thực hiện: Y” <= A; M” <= B’; Z” <= M’;
6. Y, M and Z nhận giá trị mới Y”, M”, Z”.
7. Không có tín hiệu nào trong sensitivity list thay đổi, process dừng
@ETEDUT
Các cCác cấu trúc tuần tựấu trúc tuần tự
• Các cấu trúc tuần tự chỉ được sử dụng trong process vàchương trình con!!!
• Các cấu trúc tuần tự bao gồm: IF, CASE, FOR, NEXT,• Các cấu trúc tuần tự bao gồm: IF, CASE, FOR, NEXT,EXIT, WAIT, ASSERT
IF statement:
if condition then
-- sequential statements
multiple IF statements:
if condition1 then
-- sequential statements
193
-- sequential statements
else
-- sequential statements
end if;
-- sequential statements
elsif condition2 then
-- sequential statements
elsif condition3 then
-- sequential statements
else
-- sequential statements
end if;@
ETEDUT
Các cCác cấu trúc tuần tựấu trúc tuần tựcase Expression is
when Value_1 =>
-- sequential statements
when Value_2 =>
-- sequential statements-- sequential statements
-- etc.
end case;
Example: process (A,B,C,X) is
begin
case X is
when 0 to 4 =>
Z <= B;
Yêu cầu:
1. Tất cả các trường hợpphải đựơc xác định2. Giá trị value phải là hằng sốvà phải biết khi thiết kế
194
Z <= B;
when 5 =>
Z <= C;
when 7 | 9 =>
Z <= A;
when others =>
Z <= ‘0’;
end process;
3. Giá trị phải có cùng kiểu với expression@
ETEDUT
Các cCác cấu trúc tuần tựấu trúc tuần tự
TYPE vectype IS ARRAY(0 TO 1) OF BIT;VARIABLE bit_vec : vectype;
CASE bit_vec ISWHEN “00” =>
RETURN 0;WHEN “01” =>
RETURN 1;
195
RETURN 1;WHEN “10” =>
RETURN 2;WHEN “11” =>
RETURN 3;END CASE;
@ETEDUT
Các cCác cấu trúc tuần tựấu trúc tuần tự
for I in 0 to 3 loop
-- sequential statements
end loop;
1. Không được khai báo biến dùng trong vòng for và khôngđược gán giá trị cho biến đó
Chú ý:
FOR i IN 1 to 10 LOOPi_squared(i) := i * i;
196
i_squared(i) := i * i;END LOOP;@
ETEDUT
Các cCác cấu trúc tuần tựấu trúc tuần tự
entity General_mux is
generic (width : integer);
port ( Input : in std_logic_vector (width - 1 downto 0);
Select : in integer range 0 to width - 1;Select : in integer range 0 to width - 1;
Output : out std_logic);
end General_mux;
architecture Behav of General_mux is
begin
Selector: process (Input, Select) is
begin
for I in 0 to width-1 loop
if Select=I then
Output <= Input(I);
197
if Select=I then
Output <= Input(I);
end if;
end loop;
end process;
end Behav;
@ETEDUT
Các cCác cấu trúc tuần tựấu trúc tuần tựPROCESS(A, B)
CONSTANT max_limit : INTEGER := 255;BEGIN
FOR i IN 0 TO max_limit LOOPFOR i IN 0 TO max_limit LOOPIF (done(i) = TRUE) THEN
NEXT;ELSE
done(i) := TRUE;END IF;q(i) <= a(i) AND b(i);
198
q(i) <= a(i) AND b(i);END LOOP;
END PROCESS;
Cấu trúc NEXT được dùng để bỏ qua vòng lặp hiện tại để nhảy tớivòng lặp tiếp theo
@ETEDUT
Các cCác cấu trúc tuần tựấu trúc tuần tựPROCESS(a)
variable int_a : integer;BEGIN
int_a := a;int_a := a;FOR i IN 0 TO max_limit LOOP
IF (int_a <= 0) THEN -- less than orEXIT; -- equal to
ELSEint_a := int_a -1;q(i) <= 3.1416 / REAL(int_a * i); -- signal
END IF; -- assignEND LOOP;
199
Cấu trúc EXIT được dùng để thoát ra khỏi vòng lặp for
END LOOP;y <= q;
END PROCESS;@ETEDUT
Các cCác cấu trúc tuần tựấu trúc tuần tự
PROCESSBEGIN
WAIT UNTIL clock = ‘1’ AND clock’EVENT;q <= d;q <= d;
END PROCESS;
PROCESSBEGIN
WAIT ON a; -- 1..WAIT ON b; -- 2.
200
WAIT ON b; -- 2..
END PROCESS;
WAIT FOR 10 ns;WAIT FOR ( a * ( b + c ));
@ETEDUT
Biến (Variables)Biến (Variables)
• Variable chỉ được sử dụng trong process hoặc chươngtrình con
• Giá trị của variable được cập nhật ngay lập tức trong khi• Giá trị của variable được cập nhật ngay lập tức trong khigiá trị của tín hiệu signal sẽ được cập nhật khi process kếtthúc
• Biến và tín hiệu có thể đựơc gán giá trị cho nhau
• Biến chỉ được dùng tạm thời trong process, nếu giá trị củanó muốn được truy cập ngoài process ta phải gán giá trị đó
201
nó muốn được truy cập ngoài process ta phải gán giá trị đócho một tín hiệu @
ETEDUT
Biến (Variables)Biến (Variables)• LIBRARY IEEE;• USE IEEE.std_logic_1164ALL;
• ENTITY mux IS• PORT (I0, I1, I2, I3, A, B : IN std_logic;
Q : OUT std_logic);
Tìm chỗ sai trong đoạn mã !Q : OUT std_logic);
• END mux;
• ARCHITECTURE mux_behave OF mux IS• SIGNAL sel : INTEGER RANGE 0 TO 3;• BEGIN• B : PROCESS(A, B, I0, I1, I2, I3)• BEGIN• sel <= 0;• IF (A = ‘1’) THEN sel <= sel + 1; END IF;• IF (B = ‘1’) THEN sel <= sel + 2; END IF;• CASE sel IS
202
• WHEN 0 =>• Q <= I0;• WHEN 1 =>• Q <= I1;• WHEN 2 =>• Q <= I2;• WHEN 3 =>• Q <= I3;• END CASE;• END PROCESS;• END mux_behave;
@ETEDUT
Biểu diễn sườn lên của xung nhịpBiểu diễn sườn lên của xung nhịp
Tìm chức năng của entity What
entity What is
port (D,Clk: in std_logic;
Q: out std_logic);Q: out std_logic);
end What;
architecture RTL of What is
begin
process (D, Clk) is
begin
if (Clk=‘1’) then
Q <= D;
end if;
end process;
Since there is no ELSE part
the previous Q value has
to be remembered for the case
where Clk=‘0’.
The synthesis tool will hence
infer a latch instead of just
combinatorial logic!!!
Beware of unintended latches
when ELSE parts are omitted
203
end process;
end RTL;With a latch, not with a D-flip-flop!!
When a Clk-event occurs and Clk is low, nothing happens
When a Clk-event occurs and Clk is high, the D input is copied
to the Q output
When a D-event occurs and Clk is high, the D input is copied to
the Q output => hence a latch: when Clk is high, Q follows D
Beware of unintended latches
when ELSE parts are omitted@ETEDUT
Biểu diễn sườn lên của xung nhịpBiểu diễn sườn lên của xung nhịp
Cách 1: WAIT UNTIL
entity DFlipFlop isentity DFlipFlop is
port (D,Clk: in std_logic;
Q: out std_logic);
end DFlipFlop;
architecture RTL of DFlipFlop is
begin
process is
begin
wait until Clk’event and Clk=‘1’; --- suon len
Q <= D;
This is not synthesisable
204
wait until Clk’event and Clk=‘1’; --- suon len
Q <= D;
end process;
end RTL; @ETEDUT
Biểu diễn sườn lên của xung nhịpBiểu diễn sườn lên của xung nhịp
Cách 2: Sensitivity list
entity DFlipFlop is
port (D,Clk: in std_logic;port (D,Clk: in std_logic;
Q: out std_logic);
end entity DFlipFlop;
architecture RTL of DFlipFlop is
begin
process (D,Clk) is
begin
if (Clk’event and Clk=‘1’) then
Q <= D;
end if;
205
Q <= D;
end if;
end process;
end architecture RTL;@ETEDUT
Biểu diễn Finite State MachineBiểu diễn Finite State Machine
Wait
Start=0
- Start : Count Enable
- Up : Count DirectionWait
00
Up1
01
Up2
Down3
11
Down2
Start=1
Up=0
Start=1
Up=1Out
put
logic
State
Reg
ResetOutput
CurrentState
206
Up2
10
Up3
11
Down2
10
Down1
01
UpStart
Next
state
logic
NextState
Clk
@ETEDUT
Biểu diễn Finite State MachineBiểu diễn Finite State Machine
Wait
00
Start=0
Start=1Start=1
entity FSM isport ( Start, Up, Reset, Clk: in std_logic;
Output: out std_logic_vector(0 to 1));end FSM;
architecture Behav of FSM is00
Up1
01
Up2
10
Down3
11
Down2
10
Start=1
Up=0
Start=1
Up=1architecture Behav of FSM istype FSM_States is (Wait,Up1,Up2,Up3,Down1,Down2,Down3);signal CurrentState, NextState : FSM_States;
beginOutputLogic:process(CurrentState) isend process;
NextStateLogic:process(CurrentState,Start,Up) is
207
10
Up3
11
10
Down1
01
process(CurrentState,Start,Up) is…
end process;
StateRegister:process(NextState,Clk,Reset) is
…end process;
end Behav;@
ETEDUT
Biểu diễn Finite State MachineBiểu diễn Finite State Machine
Wait
00
Start=0
Start=1Start=1OutputLogic:00
Up1
01
Up2
10
Down3
11
Down2
10
Start=1
Up=0
Start=1
Up=1OutputLogic:
process(CurrentState) is
begin
case CurrentState is
when Wait =>
Output <= “00”;
when Up1|Down1 =>
Output <= “01”;
when Up2|Down2 =>
Output <= “10”;
208
10
Up3
11
10
Down1
01
Output <= “10”;
when Up3|Down3 =>
Output <= “11”;
end case;
end process;
@ETEDUT
Biểu diễn Finite State MachineBiểu diễn Finite State Machine
Wait
00
Start=0
Start=1Start=1
NextStateLogic:
process(CurrentState,Start,Up) is
begin
case CurrentState is
when Wait =>
if (Start=‘0’) then00
Up1
01
Up2
10
Down3
11
Down2
10
Start=1
Up=0
Start=1
Up=1if (Start=‘0’) then
NextState <= Wait;
elsif (Up=‘1’) then
NextState <= Up1;
else
NextState <= Down3;
end if;
when Up1 =>
NextState <= Up2;
when Up2 =>
209
10
Up3
11
10
Down1
01
when Up2 =>
NextState <= Up3;
when Up3|Down1 =>
NextState <= Wait;
when Down3 =>
NextState <= Down2;
when Down2 =>
NextState <= Down1;
end case;
end process;
@ETEDUT
Biểu diễn Finite State MachineBiểu diễn Finite State Machine
Wait
00
Start=0
Start=1Start=1 00
Up1
01
Up2
10
Down3
11
Down2
10
Start=1
Up=0
Start=1
Up=1
StateRegister:
process(NextState,Clk,Reset) is
begin
if Reset=‘1’ then
CurrentState <= Wait;
elsif (Clk’event and Clk=‘1’) then
CurrentState <= NextState;
end if;
210
10
Up3
11
10
Down1
01
end if;
end process;@ETEDUT
Chương trình conChương trình con
• Gồm 2 loại: thủ tục (procedure) và hàm (function)
• Thủ tục: có thể trả về nhiều giá trị, có thể có các biến số làcác tín hiệu vào, ra hoặc vào\racác tín hiệu vào, ra hoặc vào\ra
• Hàm: chỉ trả về một giá trị và tất cả các biến số chỉ có thểlà tín hiệu vào
• Thủ tục và hàm có 2 loại: song song và tuần tự. Thủ tụchoặc hàm song song được đặt ngoài process và thủ tụchoặc hàm tuần tự chỉ được đặt trong process
211
hoặc hàm tuần tự chỉ được đặt trong process
• Các lệnh trong chương trình con được thực hiện tuần tựgiống như process
@ETEDUT
Chương trình conChương trình con
• ENTITY convert IS• PORT(I1 : IN log8; --line 2
O1 : OUT INTEGER); --line 3• END convert;• END convert;• ARCHITECTURE behave OF convert IS• FUNCTION vector_to_int(S : log8) --line 4• RETURN INTEGER is --line 5• VARIABLE result : INTEGER := 0; --line 6• BEGIN• FOR i IN 0 TO 7 LOOP --line 7• result := result * 2; --line 8• IF S(i) = ‘1’ THEN --line 9
212
• IF S(i) = ‘1’ THEN --line 9• result := result + 1; --line 10• END IF;• END LOOP;• RETURN result; --line 11• END vector_to_int;• BEGIN• O1 <= vector_to_int(I1); --line 12• END behave;
@ETEDUT
Chương trình conChương trình con
Ví dụ khai báo thủ tục:
procedure increment_reg (variable reg : inout word_32; constantprocedure increment_reg (variable reg : inout word_32; constantincr : in integer := 1);
Ví dụ gọi thủ tục:
increment_reg(index_reg, offset–2); -- add value to index_reg
213
increment_reg(index_reg, offset–2); -- add value to index_reg
increment_reg(prog_counter); -- add 1 (default) to prog_counter@ETEDUT
CácCác họhọ FPGA/CPLD FPGA/CPLD củacủa XilinxXilinx
@ETEDUT
Các họ CPLD/FPGA của XilinxCác họ CPLD/FPGA của Xilinx
215
@ETEDUT
Các họ CPLD/FPGA của XilinxCác họ CPLD/FPGA của Xilinx
216
@ETEDUT
A Decade of ProgressA Decade of Progress
• 200x More Logic
�Plus memory,
1000x
Virtex-4XC4000 &
�Plus memory,
µP etc.
• 40x Faster
• 50x Lower Power
• 500x Lower Cost
CLB Capacity
Speed
Power per MHz
Price
Virtex &
Virtex-E
100x
10x
Virtex-II &
Virtex-II Pro
Virtex-4XC4000 &
Spartan
217
XC4000
1x
Spartan-2
Spartan-3
'91 '92 '93 '94 '95 '96 '97 '98 '99 '00 '01 '02 '03 '04
Year
Courtesy: Richard Sevcik, Xilinx
@ETEDUT
Các họ CPLD/FPGA của XilinxCác họ CPLD/FPGA của Xilinx
• Họ Virtex:�Virtex-4:
�2004, 1.2 V, 90nm�2004, 1.2 V, 90nm
� 500 MHz, low power
�200.000 logic cells, DSP, PowerPC
�Thay thế ASIC, ASSP
�Virtex-II Pro /X�2002, 1.5 V, 130nm
�400 MHz
218
�400 MHz
�3K to 99K logic cells + DSP, PowerPC@ETEDUT
Các họ CPLD/FPGA của XilinxCác họ CPLD/FPGA của Xilinx
• Họ Virtex:�Virtex-II
�2001, 1.5 V, 150nm�2001, 1.5 V, 150nm
�300 MHz
�3K to 99K logic cells
�Virtex /E�1998/1999, 2.5 /1.8 V, 220 / 180 nm
�150/ 200 MHz
�3K to 70K logic cells
219
�3K to 70K logic cells@ETEDUT
Các họ CPLD/FPGA của XilinxCác họ CPLD/FPGA của Xilinx
• Họ Spartan:�Spartan-3/E /L
�2003, 1.5 V, 90nm�2003, 1.5 V, 90nm
�300 MHz
�5M gates
220
@ETEDUT
Các họ CPLD/FPGA của XilinxCác họ CPLD/FPGA của Xilinx
• CPLD- Họ Coolrunner�CoolRunner-II
�1.8V, 180 nm�1.8V, 180 nm
�303 MHz
�32-512 macrocells
�Ultra Low power
�CoolRunner-XPLA3�3.3 V
�200 MHz
221
�200 MHz
�32-512 macrocells
�Low power @ETEDUT
Các họ CPLD/FPGA của XilinxCác họ CPLD/FPGA của Xilinx
• CPLD- Họ XC9500�XC9500XV
�2.5 V�2.5 V
�250 MHz
�36-288 macrocells
�Low cost
�XC9500XL�3.3 V
�200 MHz
222
�200 MHz
�36-288 macrocells
�Low cost
�XC9500�5 V, 200 MHz
�36-288 macrocells
�Low cost
@ETEDUT
FPGA Design FlowFPGA Design Flow
@ETEDUT
CPLD/FPGA design flowCPLD/FPGA design flow
• Design Flow
224
@ETEDUT
Design EntryDesign Entry
• Using schematic editor:�Works well with small designs: 5k to 10 k gates
�Schematic can be compiled to HDL�Schematic can be compiled to HDL
• Using HDL (Hardware Description Language)�VHDL, Verilog
�Others: Abel
�Works with large design: > 100 k gates
• Using State Editor:
225
• Using State Editor:�Mostly for controller
�FSM can be compiled to HDL
• Higher level design language�System C: C based
�Ocapi-xl: C and C++ based@
ETEDUT
Design EntryDesign Entry
• Design tools:�Webpack ISE (miễn phí)
�Thiết kế cho CPLD, FPGA�Thiết kế cho CPLD, FPGA
�Có công cụ thiết kế dùng schematic, ngôn ngữ mô tả phần cứng, côngcụ tổng hợp, mô phỏng và vật lý
�http://www.xilinx.com/ise/logic_design_prod/webpack.htm
�ISE Foundation™ (không miễn phí)�chức năng tương tự như Webpack
�EDK and Platform studio
226
�EDK and Platform studio�Dùng để thiết kế hệ thống nhúng với FPGA@
ETEDUT
Schematic diagram: exampleSchematic diagram: example
227
Language based
refinement:
VHDL editor@
ETEDUT
VHDL: ExampleVHDL: Example
228
@ETEDUT
Design SynthesisDesign Synthesis
• Synthesis process:�Check code syntax�Analyze the hierarchy of the design�Analyze the hierarchy of the design�Compile RTL to gate level�Create netlist of the design�Take into account the architecture of the target FPGA
• Synthesis tools:�XST (Xilinx synthesis technology)
229
�Generate a NGC file
�LeonardoSpectrum from Mentor Graphics, Inc�Synplify and Synplify Pro from Synplicity Inc.
@ETEDUT
Design ImplementationDesign Implementation
• Translate:�Translate the design netlist and constraints into (Xilinx) primitives
� Input: NGC file, Output: NGD file (Native Generic Database)� Input: NGC file, Output: NGD file (Native Generic Database)
• Map:�Map the primitives to the actual physic circuit of the device
� Input: NGD file, Output: NCD file ( Native Circuit Description)
• Place and Route (PAR):�Place the circuits on the CLB and find a good route to connect them
230
�Place the circuits on the CLB and find a good route to connect them
� Input: NCD file, Output: NCD file@ETEDUT
Xilinx device programmingXilinx device programming
• Create a bitstream to program the device
• Input: NCD file, Output: bit file
• Programming tools:�Download software + download cable
231
@ETEDUT
Design verificationDesign verification
• Mô phỏng chức năng với behavioral simulation
• Mô phỏng về thời gian với timing simulation
• Kiểm tra phần cứng
• Verification tools:�ModelSim
�ChipScope Pro
�ISE Simulator
232
@ETEDUT
BàiBài tậptập
@ETEDUT
Bài tập 1: Thiết kế các mạch số cơ bảnBài tập 1: Thiết kế các mạch số cơ bản
Thiết kế các mạch tổ hợp sau đây bằng ngôn ngữ mô tả phần cứng VHDL
a) Mạch MUX 8 sang 1
b) Mạch MUX 8 sang 1 với các đường dữ liệu vào có độ rộng là 8 bítb) Mạch MUX 8 sang 1 với các đường dữ liệu vào có độ rộng là 8 bít
c) Mạch DEMUX 1 sang 8
d) Mạch DEMUX 1 sang 8 với các đường dữ liệu ra có độ rộng là 8 bít
e) Mạch mã hóa có ưu tiên từ 8 sang 3, với mức tích cực ngõ vào là logic thấp, ngõvào x0 có mức ưu tiên cao nhất, ngõ vào x7 có mức ưu tiên thấp nhất (tương tựchức năng của vi mạch 74LS148).
f) Mạch giải mã từ 3 sang 8, mức tích cực ngõ ra là logic thấp, và có một đường tínhiệu vào EN cho phép mạch hoạt động với EN tích cực mức cao (tương tự chứchiệu vào EN cho phép mạch hoạt động với EN tích cực mức cao (tương tự chứcnăng vi mạch 74LS138).
g) Mạch giải mã LED 7 đoạn cho LED loại Anode chung (vi mạch 7447)
h) Mạch giải mã LED 7 đoạn cho LED loại Kathode chung (vi mạch 4511)
i) Mạch cộng/trừ 2 số nhị phân 4 bít
234
@ETEDUT
Bài tập Bài tập 22: Thiết kế FF: Thiết kế FF
Thực hiện các Flip Flop đã học (D, T, RS, JK) bằng VHDLtrong các trường hợp
� Xung Clk tác động sườn lên� Xung Clk tác động sườn lên
� Xung Clk tác động sườn xuống
� FF có thêm các ngõ vào Preset (Pr) và Clear (Clr)
235
@ETEDUT
Bài tập 3 (FSM)Bài tập 3 (FSM)
• Thiết kế mạch có một đầu vào X, một đầu ra Z thực hiện việcphát hiện một chuỗi bít vào:
�Nếu chuỗi bít vào là 1001 hoặc 101 thì ngõ ra Z = 1�Nếu chuỗi bít vào là 1001 hoặc 101 thì ngõ ra Z = 1
�Ngược lại ngõ ra Z = 0
• Ví dụ�X = 111001010000100101011100010100
�Z = 000001010000000101010000000100
• Yêu cầu: Vẽ giản đồ trạng thái của FSM loại Moore
236
• Yêu cầu: Vẽ giản đồ trạng thái của FSM loại Moore
X Z
Clock@
ETEDUT
Bài tập 4 (FSM)Bài tập 4 (FSM)
• Thiết kế mạch điều khiển đèn giao thông theo yêu cầu sauđây:�Thời gian đèn đỏ: 25 s = t + t�Thời gian đèn đỏ: 25 s = txanh + tvàng
�Thời gian đèn vàng: tvàng = 5 s
�Thời gian đèn xanh: txanh = 20 s
237
@ETEDUT
Bài tập Bài tập 5 5 (FSM)(FSM)
A. Sử dụng VHDL Thiết kế mạch đếm đồng bộ đếm 10 (đếm từ0 đến 9) cho phép đếm lên/xuống với các tín hiệu vào ra được môtả như sau:tả như sau:� Clk: xung Clock tác động theo sườn lên, mỗi khi có một sườn lên của xung clock
mạch sẽ đếm lên hay xuống tùy thuộc vào tín hiệu DIR.
� RESET: tín hiệu xóa bộ đếm về 0, tích cực mức 1
� DIR: tín hiệu điều khiển chiều đếm, DIR = 0: đếm lên, DIR = 1: đếm xuống
� Q : tín hiệu ra, lưu giữ giá trị đếm (std_logic_vector (3 downto 0))
� CARRY: tín hiệu ra báo cho biết bộ đếm tràn khi đếm lên, CARRY = 1 khi bộđếm đang đếm lên và giá trị bộ đếm chuyển từ 9 sang 0, ngược lại CARRY = 0.
� BORROW: tín hiệu ra báo cho biết bộ đếm tràn khi đếm xuống, BORROW = 1khi bộ đếm đang đếm xuống và giá trị bộ đếm chuyển từ 0 sang 9, ngược lạiBORROW = 0.
B. Thiết kế bộ đếm 100 (đếm từ 0 đến 99) trên cơ sở ghép nốitiếp 2 bộ đếm 10 đã thực hiện ở phần A.
238
@ETEDUT
Bài tập 6 (FSM)Bài tập 6 (FSM)
Thiết kế mạch điều khiển dây chuyền đếm và đóng gói sảnphẩm:
� Mỗi khi có một sản phẩm đi qua cảm biến hồng ngoại sẽ cho tín hiệu cảm biến� Mỗi khi có một sản phẩm đi qua cảm biến hồng ngoại sẽ cho tín hiệu cảm biếnX = 0 và bộ đếm đếm lên 1 đơn vị.
� Khi bộ đếm đếm đủ 5 sản phẩm sẽ xuất tín hiệu ra Z = 1 để điều khiển mạchđóng gói sản phẩm, đồng thời sẽ dừng đếm để đợi tín hiệu PACKED = 1 từmạch điều khiển đóng gói báo đã đóng gói xong.
� Khi PACKED = 1 (đóng gói xong) mạch đếm bị xóa về 0, lúc này tín hiệuPACKED bị xóa và dây chuyền tiếp tục hoạt động đếm sản phẩm như cũ.
� Hiển thị số lượng sản phẩm đếm S (từ 0 đến 5) trên một LED 7 đoạn loại� Hiển thị số lượng sản phẩm đếm S (từ 0 đến 5) trên một LED 7 đoạn loạiAnode chung.
Yêu cầu: Vẽ sơ đồ khối, giản đồ FSM, sau đó thiết kế bằng VHDL và viếttestbench để mô phỏng/kiểm tra với ModelSIM hoặc ISIM.
-- The End --239
@ETEDUT