Professional Documents
Culture Documents
Đà Nẵng, 05/2019
Nội dung môn học
2
Tài liệu tham khảo
Tham khảo chính:
1) 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
Có thể đọc thêm:
3) Peter J. Ashenden, The VHDL Cookbook
4) Douglas L. Perry, VHDL Programming by Example, 4th Edition (2002)
5) Học viện KTQS, Thiết kế logic số, Tài liệu lưu hành nội bộ, 2011
6) 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
7) 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
8) 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ép tham khảo và sử dụng bài giảng của Thầy!
3
About your lecturer
• Bộ môn Kỹ thuật Điện Tử, khoa ĐTVT, Đại học Bách Khoa Đà Nẵng
Office: Khu C, ĐHBK ĐN; Email: thanghv@dut.udn.vn; (thang143@gmail.com)
• Research Interests
Reconfigurable computing (computing with FPGA)
Machine learning (Neural Network) & DSP applications
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ử, ĐHBK - ĐHĐN
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
4
Nội dung môn học
1. Giới thiệu chung về công nghệ IC khả trình
2. Thiết kế dùng IC khả trình của Xilinx
3. Cơ sở về thiết kế mạch số và hệ thống số
4. Ngôn ngữ mô tả phần cứng VHDL
5. Các bài thực hành trên kit FPGA của Xilinx
6. Giới thiệu một vài ứng dụng trong lĩnh vực tính toán cấu
hình lại (Reconfigurable Computing)
7. Các vấn đề khác
5
Nội dung môn học
1. Giới thiệu chung về công nghệ IC khả trình
• Các bước thiết kế VLSI
• Các bước thiết kế vật lý
• Các công nghệ dùng trong thiết kế
• Công nghệ IC khả trình
• Ứng dụng của công nghệ IC khả trình
2. Thiết kế dùng IC khả trình của Xilinx
3. Thiết kế số
4. Ngôn ngữ mô tả phần cứng VHDL
5. Giới thiệu một vài ứng dụng trong lĩnh vực tính toán cấu
hình lại (Reconfigurable Computing)
6
Nội dung môn học
1. Giới thiệu chung về công nghệ IC khả trình
• Các bước thiết kế VLSI
• Các bước thiết kế vật lý
• Các công nghệ dùng trong thiết kế
• Công nghệ IC khả trình
• Ứng dụng của công nghệ IC khả trình
2. Thiết kế dùng IC khả trình của Xilinx
3. Thiết kế số
4. Ngôn ngữ mô tả phần cứng VHDL
5. Giới thiệu một vài ứng dụng trong lĩnh vực tính toán cấu
hình lại (Reconfigurable Computing)
7
Đặt vấn đề
• Ví dụ: Thiết kế bộ chạy đĩa DVD
8
Các bước thiết kế VLSI (1/9)
9
Các bước thiết kế VLSI (2/9)
System Specification – Xác định kích thước, tốc độ, công
suấ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í
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ụ …
10
Các bước thiết kế VLSI (3/9)
Functional Design – Xác định các khối chức năng chính
và kết nối giữa các khối. Chưa cần xác định chi tiết cách
thức thực hiện các khối này.
11
Các bước thiết kế VLSI (4/9)
Logic Design – Thiết kế logic, ví dụ: thiết kế mạch logic
tổ hợp, logic dãy, ALU, khối điều khiển…. Kết quả của
bướ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ần
cứng HDL (Hardware Description Language), e.g.,
VHDL and Verilog.
X = (AB+CD)(E+F)
Y= (A(B+C) + Z + D)
12
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ết
kế này là một netlist.
13
Các bước thiết kế VLSI (6/9)
• Net list: • Component list:
net1: top.in1 i1.in top: in1=net1 n1=topin1 n2=topin2
net2: i1.out xxx.B n3=botin1 out=outnet
topin1: top.n1 xxx.xin1 i1: in=net1 out=net2
topin2: top.n2 xxx.xin2 xxx: xin1=topin1 xin2=topin2
botin1: top.n3 xxx.xin3 xin3=botin1 B=net2 out=net3
net3: xxx.out i2.in i2: in=net3 out=outnet
outnet: i2.out top.out
14
Các bước thiết kế VLSI (7/9)
Component hierarchy
top
i1 xxx i2
15
Các bước thiết kế VLSI (8/9)
Physical Design – Chuyển từ netlist sang dạng biểu diễn
hình học. Cách biểu diễn hình học này được gọi là layout.
16
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 PCB
(Printed Circuit Board) hoặc trên một module đa chíp
MCM (Multi-Chip Module)
17
Các bước thiết kế VLSI
Architectural Layout
Specification Circuit Design
or Fabrication
Functional
Logic Synthesis
Design
Chips
Timing & relationship
between functional units Packaging
18
Nội dung môn học
1. Giới thiệu chung về công nghệ IC khả trình
• Các bước thiết kế VLSI
• Các bước thiết kế vật lý
• Các công nghệ dùng trong thiết kế
• Công nghệ IC khả trình
• Ứng dụng của công nghệ IC khả trình
2. Thiết kế dùng IC khả trình của Xilinx
3. Thiết kế số
4. Ngôn ngữ mô tả phần cứng VHDL
5. Giới thiệu một vài ứng dụng trong lĩnh vực tính toán cấu
hình lại (Reconfigurable Computing)
19
Các bước thiết kế vật lý (1/6)
Circuit Partitioning
Routing
Layout Compaction
20
Các bước thiết kế vật lý (2/6)
Circuit Partitioning – Chia một mạch lớn thành các mạch
nhỏ hơn
21
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ên
layout 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.
Deadspace
22
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ết
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.
Feedthrough
Standard cell type 1
Standard cell type 2
v
23
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.
Feedthrough
Type 1 standard cel1
v
Type 2 standard cell
24
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ùng
layout để giảm kích thước chip
Verification – Kiểm tra layout bao gồm kiểm tra luật thiết
kế DRC (Design Rule Checking), tạo ngược lại mạch điện
từ layout (circuit extraction) để so sánh với netlist ban đầu,
kiểm tra hoạt động (performance verification ) bằng cách
lấy thông tin hình học để tính toán các giá trị điện trở, điện
dung, trễ…
25
VLSI design flow
26
Nội dung môn học
1. Giới thiệu chung về công nghệ IC khả trình
• Các bước thiết kế VLSI
• Các bước thiết kế vật lý
• Các công nghệ dùng trong thiết kế
• Công nghệ IC khả trình
• Ứng dụng của công nghệ IC khả trình
2. Thiết kế dùng IC khả trình của Xilinx
3. Thiết kế số
4. Ngôn ngữ mô tả phần cứng VHDL
5. Giới thiệu một vài ứng dụng trong lĩnh vực tính toán cấu
hình lại (Reconfigurable Computing)
27
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ế
• 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)
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
Phân loại:
PLD (Programmable Logic Device)
FPGA (Field Programmable Gate Array)
28
Các công nghệ dùng trong thiết kế
Full-Custom ASIC
• Full-Custom ASICs
Đối với mỗi một chip ASIC, người thiết kế phải thiết kế toàn bộ
các khối logic, mạch điện, layout
Full-custom ICs là loại đắt nhất để chế tạo và thiết kế
Thời gian chế tạo 1 IC (không kể thời gian thiết kế) là 8 tuần
Dùng khi:
Không có các khối logic có sẵn trong thư viện
Các khối logic hiện có không đủ nhanh
Các khối logic hiện có có kích thước lớn
Các khối logic hiện có tiêu thụ công suất lớn
Chíp ASIC cần thiết kế quá đặc biệt dẫn tới nhiều mạch phải được thiết
kế một cách tuỳ biến
29
Các công nghệ dùng trong thiết kế
Full-Custom ASIC
30
Các công nghệ dùng trong thiết kế
Cell-based ASIC
• Cell-Based ASIC (CBIC) sử dụng các khối logic được
thiết kế sẵn (cổng AND, OR gates, multiplexers, flip-
flops, ...)
Vùng khối logic chuẩn bao gồm các hàng khối logic chuẩn
Vùng khối logic chuẩn có thể kết hợp với các khối khác lớn hơn
cũng được thiết kế sẵn như vi điều khiển, vi xử lý, các khối này
được gọi là megacell
31
Các công nghệ dùng trong thiết kế
Cell-based ASIC
• Đặc điểm:
Các khối tuỳ biến có thể được nhúng vào chip ASIC. Người thiết
kế ASIC chỉ phải định nghĩa vị trí đặt các khối logic chuẩn và kết
nối giữa các khối
Các khối chuẩn có thể được đặt bất kỳ chỗ nào trên phiến silicon
nên tất cả các lớp mặt nạ của CBIC có thể được tự do thiết kế
Thời gian chế tạo là 8 tuần
32
Các công nghệ dùng trong thiết kế
Gate-Array-Based ASICs
• Bao gồm một mảng 2 chiều các cổng logic giống hệt nhau
(ví dụ các cổng NAND) được xác định sẵn trên phiến silic
• Các cổng logic được nối với nhau bới các lớp kết nối. Việc
kết nối giữa các cổng được thực hiện bới mặt nạ do người
thiết kế tạo ra.
• Thời gian chế tạo từ vài ngày đến 2 tuần
• Giá thành rẻ hơn các loại ASIC khác
33
Nội dung môn học
1. Giới thiệu chung về công nghệ IC khả trình
• Các bước thiết kế VLSI
• Các bước thiết kế vật lý
• Các công nghệ dùng trong thiết kế
• Công nghệ IC khả trình
• Ứng dụng của công nghệ IC khả trình
2. Thiết kế dùng IC khả trình của Xilinx
3. Thiết kế số
4. Ngôn ngữ mô tả phần cứng VHDL
5. Giới thiệu một vài ứng dụng trong lĩnh vực tính toán cấu
hình lại (Reconfigurable Computing)
34
Công nghệ IC khả trình
• Realisation as AND-OR: • Realisation as OR-AND:
F1=xy+xy’z+x’yz F1=((x’+y’) (x’+y+z’)
(x+y’+z’))’
x y z x y z
F1 F1
35
Công nghệ IC khả trình
Programmable logic array
• PLA
Programmable
And
Input
plane
Or Output
plane
36
Công nghệ IC khả trình
Programmable logic array
• PLA
37
Công nghệ IC khả trình
Programmable Array Logic
• PAL
Programmable
And
Input
plane
Fixed
Or Output
plane
38
Công nghệ IC khả trình
Programmable Array Logic
39
Công nghệ IC khả trình
Complex Programmable Logic Devices
• CPLD
40
Công nghệ IC khả trình
Complex 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
Non-volatile
41
Ví dụ: PROM
Vcc Vcc Vcc Vcc Fuse
After manufacturing
Address
2-to-4 Decoder
2
MSB
2
LSB
4-1 Mux
42 Data
Ví dụ: PROM
Vcc Vcc Vcc Vcc
After programming
Address
2-to-4 Decoder
2
MSB
2
LSB
2-to-4 Mux
43 Data
Công nghệ IC khả trình
Field-programmable Gate Array
Routing viaLong
switching
lines matrices
• FPGA: XC40xx
I/O I/O I/O I/O
I/O
SM SM SM SM
SM SM SM SM
SM SM SM SM
44
Thực hiện hàm tổ hợp bằng tra bảng
45
Công nghệ IC khả trình
Field-programmable Gate Array
• Cấu tạo của một CLB (Configurable Logic Block)
16x1 G
LUT: GQ
FF
Bool-function
of 4
G
variables
16x1
F
LUT: FQ
FF
Bool-function
of 4
variables F
46
Công nghệ IC khả trình
Field-programmable Gate Array
• FPGA: Switching Matrix SM
Pass
TOR
47
Công nghệ IC khả trình
Field-programmable Gate Array
• Các loại kết nối:
48
Công nghệ IC khả trình
Field-programmable Gate Array
• Công nghệ lập trình:
SRAM-based:
Volatile
Reprogrammble
Antifuse
Non-volatile
Programmed only-one
IP security
49
Công nghệ IC khả trình
Field-programmable Gate Array
• 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 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/
50
Công nghệ IC khả trình
Ưu điểm
51
Công nghệ IC khả trình
Ưu điểm
• FPGA vs Custom ASIC
FPGAs are more flexible
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
52
Nhắc lại: phân loại ASIC
53
FPGA vs. ASIC (1)
54
Nguồn: http://www.xilinx.com/fpga/asic.htm
FPGA vs. ASIC Cost
ASIC: High volumes needed to recover design cost
55
Khi nào nên dùng FPGA?
• IC tùy biến theo yêu cầu (custom IC, custom IP core)
thiết kế IC với những chức năng chuyên biệt cần thiết
56
Nội dung môn học
1. Giới thiệu chung về công nghệ IC khả trình
• Các bước thiết kế VLSI
• Các bước thiết kế vật lý
• Các công nghệ dùng trong thiết kế
• Công nghệ IC khả trình
• Ứng dụng của công nghệ IC khả trình
2. Thiết kế dùng IC khả trình của Xilinx
3. Thiết kế số
4. Ngôn ngữ mô tả phần cứng VHDL
5. Giới thiệu một vài ứng dụng trong lĩnh vực tính toán cấu
hình lại (Reconfigurable Computing)
57
Ứ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
• Wireless Communications
58
Ứng dụng của công nghệ IC khả
trình
59
Ứng dụng của công nghệ IC khả
trình
60
Ứng dụng của công nghệ IC khả
trình
61
Ứng dụng của công nghệ IC khả
trình
62
Ứng dụng của công nghệ IC khả
trình
63
Ứng dụng của công nghệ IC khả
trình
64
Ứng dụng của công nghệ IC khả
trình
65
Ứng dụng của công nghệ IC khả
trình
66
Ứng dụng của công nghệ IC khả
trình
67
Chương 2: Thiết kế dùng IC
khả trình của Xilinx
2.1 Các họ PLD của Xilinx
2.2 Cấu trúc PLD của Xilinx
2.3 Các bước thiết kế với PLD của Xilinx
68
2.1 Các họ PLD của Xilinx
69
2.1 Các họ PLD của Xilinx
70
2.1 Các họ PLD của Xilinx
A Decade of Progress
1000x
Spartan-2
XC4000 Spartan-3
1x
'91 '92 '93 '94 '95 '96 '97 '98 '99 '00 '01 '02 '03 '04
Year
Courtesy: Richard Sevcik, Xilinx
71
2.1 Các họ PLD của Xilinx
• Họ Virtex:
Virtex-5
2006, 1 V, 65 nm
550 MHz, low power
330,000 logic cells, DSP, PowerPC
1200 I/O pins
Virtex-4:
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
3K to 99K logic cells + DSP, PowerPC
72
2.1 Các họ PLD của Xilinx
• Họ Virtex:
Virtex-II
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
73
2.1 Các họ PLD của Xilinx
• Họ Spartan:
Spartan-3A DSP/AN/A/E /L
2003, 1.5 V, 90nm
300 MHz
5M gates
74
2.1 Các họ PLD của Xilinx
• CPLD- Họ Coolrunner
CoolRunner-II
1.8V, 180 nm
303 MHz
32-512 macrocells
Ultra Low power
CoolRunner-XPLA3
3.3 V
200 MHz
32-512 macrocells
Low power
75
2.1 Các họ PLD của Xilinx
• CPLD- Họ XC9500
XC9500XV
2.5 V
250 MHz
36-288 macrocells
Low cost
XC9500XL
3.3 V
200 MHz
36-288 macrocells
Low cost
XC9500
5 V, 200 MHz
36-288 macrocells
76 Low cost
2.2 Cấu trúc PLD của Xilinx
• All Xilinx FPGAs contain the same basic resources
Slices (grouped into CLBs)
Contain combinatorial logic and register resources
IOBs
Interface between the FPGA and the outside world
Programmable interconnect
Other resources
Memory
Multipliers
Global clock buffers
Boundary scan logic
77
2.2 Cấu trúc PLD của Xilinx
Virtex-II Architecture
Programmable
interconnect
Dedicated
multipliers
Configurable
Logic Blocks
(CLBs)
• Virtex™-II
Clock Management
architecture’s core (DCMs, BUFGMUXes)
voltage
operates at 1.5V
78
2.2 Cấu trúc PLD của Xilinx
Slices and CLBs
• Each Virtex-II CLB contains
four slices COUT COUT
BUFT
Local routing provides feedback BUF T
between slices in the same CLB, Slice S3
and it provides routing to
neighboring CLBs Slice S2
Switch SHIFT
A switch matrix provides access Matrix
to general routing resources Slice S1
CIN CIN
79
2.2 Cấu trúc PLD của Xilinx
Simplified Slice Structure
• Each slice has four outputs
Two registered outputs,
two non-registered outputs
Two BUFTs associated Slice 0
CLR
• Carry logic runs vertically,
up only
Two independent LUT Carry D PRE
CE Q
carry chains per CLB
CLR
80
2.2 Cấu trúc PLD của Xilinx
Detailed Slice Structure
LUTs
MUXF5, MUXF6,
MUXF7, MUXF8
(only the F5 and
F6 MUX are shown
in this diagram)
Carry Logic
MULT_ANDs
Sequential Elements
81
2.2 Cấu trúc PLD của Xilinx
Look-Up Tables
• Combinatorial logic is stored in Look-Up
Tables (LUTs) A B C D Z
Also called Function Generators (FGs) 0 0 0 0 0
Capacity is limited by the number of inputs, not 0 0 0 1 0
by the complexity 0 0 1 0 0
0 0 1 1 1
• Delay through the LUT is constant
0 1 0 0 1
0 1 0 1 1
Combinatorial Logic
. . .
A
B 1 1 0 0 0
Z
C 1 1 0 1 0
D
1 1 1 0 0
1 1 1 1 1
82
2.2 Cấu trúc PLD của Xilinx
Connecting Look-Up Tables
F8
MUXF7 outputs (from the CLB
F5
above or below)
Slice S3
MUXF6 combines slices S2
F6
and S3
F5
Slice S2
MUXF6 outputs
Slice S1
F5
Slice S0
F5
83
2.2 Cấu trúc PLD của Xilinx
Flexible Sequential Elements
• Either flip-flops or latches
• Two in each slice; eight in each CLB FDRSE_1
84
2.2 Cấu trúc PLD của Xilinx
Shift Register LUT (SRL16CE)
• Dynamically addressable serial shift
registers
Maximum delay of 16 clock cycles LUT
per LUT (128 per CLB) D D Q
CE CE
Cascadable to other LUTs or CLK
CLBs for longer shift registers
D Q
Dedicated connection from CE
D Q
LUT CE
A[3:0]
Q15 (cascade out)
85
2.2 Cấu trúc PLD của Xilinx
IOB Element
• Input path
Two DDR registers IOB
Input
• Output path Reg DDR MUX
OCK1 Reg
Two DDR registers ICK1
Two 3-state
Reg enable
OCK2 3-state Reg
DDR registers ICK2
86
2.2 Cấu trúc PLD của Xilinx
SelectIO Standard
• Allows direct connections to external signals of varied
voltages and thresholds
Optimizes the speed/noise tradeoff
Saves having to place interface components onto your board
• Differential signaling standards
LVDS, BLVDS, ULVDS
LDT
LVPECL
• Single-ended I/O standards
LVTTL, LVCMOS (3.3V, 2.5V, 1.8V, and 1.5V)
PCI-X at 133 MHz, PCI (3.3V at 33 MHz and 66 MHz)
GTL, GTLP
and more!
87
2.2 Cấu trúc PLD của Xilinx
Other Virtex-II Features
• Distributed RAM and block RAM
Distributed RAM uses the CLB resources (1 LUT = 16 RAM
bits)
Block RAM is a dedicated resources on the device (18-kb
blocks)
• Dedicated 18 x 18 multipliers next to block RAMs
• Clock management resources
Sixteen dedicated global clock multiplexers
Digital Clock Managers (DCMs)
88
2.2 Cấu trúc PLD của Xilinx
Distributed SelectRAM Resources
• Uses a LUT in a slice as memory
• Synchronous write RAM16X1S
D
• Asynchronous read WE
WCLK
LUT
Accompanying flip-flops A0
A1
O
A2
can be used to create A3
synchronous read
RAM32X1S RAM16X1D
during Slice A0
WCLK
O A0
WCLK
SPO
configuration A1
A2
A1
A2
LUT A3 A3
90
2.2 Cấu trúc PLD của Xilinx
Dedicated Multiplier Blocks
• 18-bit twos complement signed operation
• Optimized to implement Multiply and Accumulate functions
• Multipliers are physically located next to block SelectRAM™
memory
Data_A
(18 bits) 4 x 4 signed
8 x 8 signed
18 x 18 Output
Multiplier (36 bits) 12 x 12 signed
18 x 18 signed
Data_B
(18 bits)
91
2.2 Cấu trúc PLD của Xilinx
Global Clock Routing Resources
• Sixteen dedicated global clock multiplexers
Eight on the top-center of the die, eight on the bottom-center
Driven by a clock input pad, a DCM, or local routing
• Global clock multiplexers provide the following:
Traditional clock buffer (BUFG) function
Global clock enable capability (BUFGCE)
Glitch-free switching between clock signals (BUFGMUX)
• Up to eight clock nets can be used in each clock region of
the device
Each device contains four or more clock regions
92
2.2 Cấu trúc PLD của Xilinx
Digital Clock Manager (DCM)
• Up to twelve DCMs per device
Located on the top and bottom edges of the die
Driven by clock input pads
• DCMs provide the following:
Delay-Locked Loop (DLL)
Digital Frequency Synthesizer (DFS)
Digital Phase Shifter (DPS)
• Up to four outputs of each DCM can drive onto global
clock buffers
All DCM outputs can drive general routing
93
2.3 Các bước thiết kế với PLD của Xilinx
CPLD/FPGA design flow
• Design Flow
94
2.3 Các bước thiết kế với PLD của Xilinx
Design Entry
• Using schematic editor:
Works well with small designs: 5k to 10 k gates
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:
Mostly for controller
FSM can be compiled to HDL
• Higher level design language
System C: C based
95
Ocapi-xl: C and C++ based
2.3 Các bước thiết kế với PLD của Xilinx
Design Entry
• Design tools:
Webpack ISE (miễn phí)
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ông
cụ tổng hợp, mô phỏng và vật lý
http://www.xilinx.com/ise/logic_design_prod/webpack.htm
ISE Design Suite
chức năng tương tự như Webpack
Vivado Design Suite
dùng cho một số họ FPGA mới của Xilinx
EDK and Platform studio
Dùng để thiết kế hệ thống nhúng với FPGA
96
Schematic diagram: example
Language based
refinement:
VHDL editor
97
VHDL: Example
98
2.3 Các bước thiết kế với PLD của Xilinx
Design Synthesis
• Synthesis process:
Check code syntax
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)
Generate a NGC file
LeonardoSpectrum from Mentor Graphics, Inc
Synplify and Synplify Pro from Synplicity Inc.
99
2.3 Các bước thiết kế với PLD của Xilinx
Design Implementation
• Translate:
Translate the design netlist and constraints into (Xilinx) primitives
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
Input: NCD file, Output: NCD file
100
2.3 Các bước thiết kế với PLD của Xilinx
Xilinx device programming
• Create a bitstream to program the device
• Input: NCD file, Output: bit file
• Programming tools:
Download software + download cable
101
2.3 Các bước thiết kế với PLD của Xilinx
Design 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
102
Nội dung môn học
1. Giới thiệu chung về công nghệ IC khả trình
2. Thiết kế dùng IC khả trình của Xilinx
3. Thiết kế số
• Các mức thiết kế
• Thiết kế mạch số tổ hợp
• Thiết kế mạch số tuần tự
4. Ngôn ngữ mô tả phần cứng VHDL
5. Giới thiệu một vài ứng dụng trong lĩnh vực tính toán cấu
hình lại (Reconfigurable Computing)
103
Nội dung môn học
1. Giới thiệu chung về công nghệ IC khả trình
2. Thiết kế dùng IC khả trình của Xilinx
3. Thiết kế số
• Các mức thiết kế
• Thiết kế mạch số tổ hợp
• Thiết kế mạch số tuần tự
4. Ngôn ngữ mô tả phần cứng VHDL
5. Giới thiệu một vài ứng dụng trong lĩnh vực tính toán cấu
hình lại (Reconfigurable Computing)
104
Các mức thiết kế
• 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 của tích, bộ đếm…
Kết quả: module
• Thiết kế dùng các thanh ghi và các module số (RTL:
register transfer 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 kế 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)
105
Các mức thiết kế
• 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ố …
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
106
Nội dung môn học
1. Giới thiệu chung về công nghệ IC khả trình
2. Thiết kế dùng IC khả trình của Xilinx
3. Thiết kế số
• Các mức thiết kế
• Thiết kế mạch số tổ hợp
• Thiết kế mạch số tuần tự
4. Ngôn ngữ mô tả phần cứng VHDL
5. Giới thiệu một vài ứng dụng trong lĩnh vực tính toán cấu
hình lại (Reconfigurable Computing)
107
Thiết kế mạch số tổ hợp
Bìa Karnaugh
• Mục đích: dùng để tối thiểu hoá hàm Boole để thực hiện
mạch một cách tối ưu
Ví du: F=xy’z+xy’z’ =xy’(z+z’) =xy’
x y z
x y z
F=xy’z+xy’z’ F
Tối thiểu hoá dùng cách biến đổi hàm boole rất phức tạp và
không có lý thuyết nào chứng minh kết quả tối thiểu hoá lá tối ưu
108
Thiết kế mạch số tổ hợp
Các mạch logic tổ hợp cơ bản
•Ripple-carry adders
•Adder/subtractors
•Multipliers
•Logic units
•Arithmetic-logic units
•Decoders
•Selectors
•Buses
•Magnitude comparators
109
Ripple-carry adders
• Bộ nửa tổng (Half Adder):
ci+1 yi si yi
0 0 0 1
xi 0 1 xi 1 0
xi yi
xi yi
ci+1
HA
ci+1 si
si
110
Ripple-carry adders
• Bộ tổng đầy đủ (Full Adder)
yi yi
ci+1 xi si xi
1 1 1
ci 1 1 1 ci 1 1
xi
yi
ci
xi yi
ci+1 ci
FA
si ci+1 si
111
Ripple-carry adders
• 4-bit ripple-carry adder
x3 y3 x2 y2 x1 y1 x0 y0
c4 c3 c2 c1 c0=0
FA FA FA FA
s3 s2 s1 s0
112
Adder-subtractors
X Y
Cout Adder/ S
subtractor
x3 y3 x2 y2 x1 y1 x0 y0
c4 c3 c2 c1 c0
FA FA FA FA
f3 f2 f1 f0
overflow
Chỉ dùng cho số bù 2
113
Multipliers
• Bộ nhân 1bit x 1bit C = B • A
b0
a0
a0b0
a0 b0
c0
114
Multipliers
• Bộ nhân 2bit x 2bit C = B • A
a0
b1 b0 b1 b0
a1 a0
a1 b0
a0b1 a0b0 b1
a1b1 a1b0
c3 c2 c1 c0
HA HA
c3 c2 c1 c0
115
Multipliers
• Bộ nhân 4bit x 3 bit
a0 b0
b3 b2 b1
a1 b0
b3 b2 b1
0
4-bit adder
cout s3 s2 s1 s0
a2 b0
b3 b2 b1
4-bit adder
cout s3 s2 s1 s0
c6 c5 c4 c3 c2 c1 c0
116
Logic units
117
Logic units
xi
yi
S0
S1
S2 xi yi
S3
S0..3 LU
fi
fi
118
Arithmetic-logic units
a4 b4 a3 b3 a2 b2 a1 b1 a0 b0
FA FA FA FA FA
Cout
f4 f3 f2 f1 f0
S01
FA FA FA FA FA
Cout
f4 f3 f2 f1 f0
121
Arithmetic-logic units
S0
c0 M S1
S1
M 1 1
c0
122
Arithmetic-logic units
a
M b
S0 S0 S0
X S1 S1 S1
M
1
1 1
bi
1 1 1 1 1 1 1
ai
1 1 1 1 1 1
123 X
Arithmetic-logic units
a
M b
S0 S0 S0
Y S1 S1 S1
M
1 1
1 1
bi
1 1
ai
1 1
Y
124
Arithmetic-logic units
a4 b4 a3 b3 a2 b2 a1 b1 a0 b0
S01
FA FA FA FA FA
Cout
f4 f3 f2 f1 f0
125
Decoders
E
A1
A0
C3 C2 C1 C0
A1..0
E
Decoder
C3..0
126
Decoders
A3..2
E
Decoder
E E E E
Decoder Decoder Decoder Decoder
127
Selectors
D3 D2 D1 D0
S1
S0
D3..0
S1..0 4-to-1
MUX
Y
128
Selectors
D3 D2 D1 D0
Decoder
S1
S0
129
Selectors
S3..2
4-to-1
selector
Y
130
Buses
• Bus với mạch điều khiển 3 trạng thái
D3 D2 D1 D0 S1 S0
Decoder
Y
131
Magnitude comparators
y0
G x0
1
y1
1
x1
1 1 1 1
y0
L x0
1
1 1 1 1
y1
1
x1
132
Magnitude comparators
y0
G x0
x1
x0 1
y1
y0 y1
1
x1
1 1 1 1
y0
L x0
1
G L 1 1 1 1
y1
Xi Yi 1
x1
Gi+1 Gi
Comp
Li+1 Li
133
Magnitude comparators
x7 y7 x6 y6 x5 y5 x4 y4 x3 y3 x2 y2 x1 y1 x0 y0
G
Comp Comp Comp Comp Comp Comp Comp
L
x7 y7 x6 y6 x5 y5 x4 y4 x3 y3 x2 y2 x1 y1 x0 y0
Comp Comp
Comp
G L
134
Magnitude comparators
• Các bộ so sánh với hằng số đơn giản
X X
x7 x6
X is
8 bits
y
y=1 when X>=64
y y x7 x6
x0
y
136
Thiết kế mạch số tuần tự
Các loại flip-flop
• 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 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ủa cá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 đổi
khi 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 0
của tín hiệu xung nhịp
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ừ 01
Sườn xuống: tín hiệu xung nhịp chuyển từ 10
137
Thiết kế mạch số tuần tự
Các loại flip-flop
SR flip-flop Symbol Characteristic table
(for design of SR flip-flop)
S Q
Clk
R Q’
138
Thiết kế mạch số tuần tự
Các loại flip-flop
JK flip-flop Symbol Characteristic table
(for design of JK flip-flop)
J Q
Clk
K Q’
Excitation table
(for design with JK flip-flop)
139
Thiết kế mạch số tuần tự
Các loại flip-flop
D flip-flop Symbol Characteristic table
(for design of D flip-flop)
D Q
Clk
Q’
Excitation table
(for design with D flip-flop)
140
Thiết kế mạch số tuần tự
Các loại flip-flop
Symbol Characteristic table
T flip-flop
(for design of T flip-flop)
T Q
Clk
Q’
Excitation table
(for design with T flip-flop)
T D Q
Clk
Q’
141
Thiết kế mạch số tuần tự
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
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
142
Finite State Machine
• Ví dụ: Thiết kế một bộ đếm từ 0 đến 3. 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
CE=0 CE=0
CE=1
Count=0 Count=1
CE=1 CE=1
CE=1
143
Finite State Machine
Chỉ chuyển trạng thái tại sườn lên của xung nhịp
Tạ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
CE=0 CE=0
CE=1
Count=0 Count=1
CE=1 CE=1
CE=1
CE=0 CE=0
CE=1
Q1Q0=00 Q1Q0=01
CE=1 CE=1
CE=1
145
Finite State Machine
• Bước 4: Chọn loại flip-flop. Ở đây để đơn giản ta chọn
loại D
• Bước 5: Thực hiện mạch
146
Finite State Machine
• Chuyển FSM sang bảng trạng thái kế tiếp
CE=0 CE=0
CE=1
Q1Q0=00 Q1Q0=01
CE=1 CE=1
147
Finite State Machine
• Xác định các hàm đầu vào flip-flop D
Excitation table
for D flip-flop Q0 Q0
Q1n=D1 Q1 Q0n=D0 Q1
0 0 1 1 0 1 1 0
CE 0 1 0 1 CE 1 0 0 1
D to be applied
148 is identical to Qn
Finite State Machine
• Thực hiện:
Q0 Q0
Q1n=D1 Q1 Q0n=D0 Q1
0 0 1 1 0 1 1 0
CE 0 1 0 1 CE 1 0 0 1
CE Q1 Q0
Q1
Q1n
D1
Q’
Q0
Q0n
D0
Q’
149
Finite State Machine
• Bước 6: Phân tích tín hiệu theo thời gian
CE Q1 Q0
Q1
Q1n
D1
Q’
Q0
Q0n
D0
Q’
Clk
CE
Q1
Q0
150
FSM 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:
CE=0 CE=0
CE=1 CE=1
152
FSM 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
CE=0 CE=0
CE=1 CE=1
153
FSM loại Moore
• Bước 4: Chọn loại flip-flop. Ở đây để đơn giản ta chọn
loại D
• Bước 5: Thực hiện mạch
154
FSM loại Moore
• Chuyển FSM sang bảng trạng thái kế tiếp
CE=0 CE=0
Q1Q0=00 CE=1 Q1Q0=01
Y=0 Y=0
CE=1 CE=1
155
FSM loại Moore
• Xác định các hàm đầu vào flip-flop D
Q0 Q0
Excitation table
for D flip-flop Q1n=D1 Q1 Q0n=D0 Q1
0 0 1 1 0 1 1 0
CE 0 1 0 1 CE 1 0 0 1
Q0
Y
0 0
D to be applied
156 is identical to Qn Q1 0 1
FSM loại Moore
• Thực hiện mạch:
Q0 Q0
Q1n=D1 Q1 Q0n=D0 Q1 Q0
Y
0 0 1 1 0 1 1 0 0 0
CE 0 1 0 1 CE 1 0 0 1 Q1 0 1
CE Q1 Q0
Q1 Y
Q1n
D1
Q’
Q0
Q0n
D0
Q’
157
FSM loại Moore
• Bước 6: Phân tích tín hiệu theo thời gian
CE Q1 Q0
Q1 Y
Q1n
D1
Q’
Q0
Q0n
D0
Q’
Clk
CE
Q1 Danger for
Q0 Glitch!
158 Y
FSM 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:
CE=0/Y=0 CE=0/Y=0
CE=1/Y=0
Count=0 Count=1
CE=1/Y=1 CE=1/Y=0
160
FSM 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
CE=0/Y=0 CE=0/Y=0
CE=1/Y=0
Q1Q0=00 Q1Q0=01
CE=1/Y=1 CE=1/Y=0
161
FSM loại Mealy
• Bước 4: Chọn loại flip-flop. Ở đây để đơn giản ta chọn
loại D
• Bước 5: Thực hiện mạch
162
FSM loại Mealy
• Chuyển FSM sang bảng trạng thái kế tiếp
CE=0/Y=0 CE=0/Y=0
CE=1/Y=0
Q1Q0=00 Q1Q0=01
CE=1/Y=1 CE=1/Y=0
163
FSM loại Mealy
• Xác định các hàm đầu vào flip-flop D
Q0 Q0
Excitation table Q1n=D1 Q1 Q0n=D0 Q1
for D flip-flop
0 0 1 1 0 1 1 0
CE 0 1 0 1 CE 1 0 0 1
Q0
Y Q1
0 0 0 0
D to be applied
164 is identical to Qn CE 0 0 1 0
FSM loại Mealy
• Thực hiện mạch:
Q0 Q0 Q0
Q1n=D1 Q1 Q0n=D0 Q1 Y Q1
0 0 1 1 0 1 1 0 0 0 0 0
CE 0 1 0 1 CE 1 0 0 1 CE 0 0 1 0
CE Q1 Q0
Q1 Y
Q1n
D1
Q’
Q0
Q0n
D0
Q’
165
FSM loại Mealy
• Bước 6: Phân tích
CE Q Q
tín hiệu theo thời gian
1 0
Q1 Y
Q1n
D1
Q’
Q0
Q0n
D0
Q’
Clk
CE
Q1 Danger for
Q0 Glitch!
166 Y
Mô hình FSM loại Moore
Next Current
Inputs I Clock
State S* State S
D Q
Clk
Outputs
O
S*=F(S,I) D Q O=H(S)
Mạch logic Clk
Mạch logic
tổ hợp
tổ hợp
cho trạng
cho tín
thái kế
hiệu ra
tiếp
D Q
Clk
167
Mô hình FSM loại Mealy
Clock Next State S* Current
Inputs I State S
D Q
Clk
Outputs
O
S*=F(S,I)
D Q O=H(S,I)
Mạch logic Clk
tổ hợp Mạch logic
cho trạng tổ hợp
thái kế cho tín
tiếp hiệu ra
D Q
Clk
168
Ví dụ
Thiết kế mạch phát hiện chuỗi bít (Sequence Detector);
mạch có 1 tín hiệu vào X và 1 tín hiệu ra Z;
169
Bướ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
điều kiện chuyển trạng thái ...
170
Bước 2: Tối thiểu hoá số lượng trạ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ạng
thái nếu như 2 trạng thái đó có cùng tín hiệu ra đồng thời có cùng
trạ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
thá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ệu
vào
171
Bước 2: Tối thiểu hoá số lượng trạng
thái
• Ví dụ:
172
Bước 2: Tối thiểu hoá số lượng trạng
thái
• Xây dựng bảng như sau:
s1
s2
s3
s4
s5
s0 s1 s2 s3 s4
173
Bước 2: Tối thiểu hoá số lượng trạng
thái
• Xoá tất cả các tổ hợp trạng thái có tín hiệu ra khác nhau cho
cùng tín hiệu vào
s1
s2
s3
s4
s5
s0 s1 s2 s3 s4
174
Bước 2: Tối thiểu hoá số lượng trạ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
s1
1-4
s2 1-3
s3 OK
0-2
s4 0-2
1-4
4-5 4-5 0-2, 4-5
s5 2-4 2-4 1-2
175 s0 s1 s2 s3 s4
Bước 2: Tối thiểu hoá số lượng trạng
thái
• Xoá những cặp trạng thái mà không thể có cặp trạng thái kế
tiếp tương đương
s1
1-4:
1-4?
s2 1-3:OK
1-3
s3 OK
0-2:
0-2?
s4 0-2:
0-2?
1-4:
1-4?
4-5 4-5 0-2, 4-5
s5 2-4 2-4 1-2
176 s0 s1 s2 s3 s4
Bước 2: Tối thiểu hoá số lượng trạng
thái
• Lặp lại cho đến khi không còn xoá được cặp trạng thái nào
nữa thì dừng
s1
1-4: ?
s2 1-3:OK
177 s0 s1 s2 s3 s4
Bước 2: Tối thiểu hoá số lượng trạng
thái
• Xây dựng bảng trạng thái mới
178
Bướ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 ...)
179
Bướ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ạch
• Các kiểu mã hoá thường dùng:
Straightforward
Minimum-bit-change
One-hot / One-cold
180
Bước 3: Mã hoá trạng thái
Straightforward
• Kiểu mã hoá này sử dụng giá trị nhị phân của thứ tự trạng
thái để làm mã cho trạng thái đó (s0000, s5101, …)
181
Bước 3: Mã hoá trạng thái Minimum-
bit-change
• Mã sẽ được gán cho trạng thái sao cho tổng số bít thay đổi
khi 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
thiểu hoá kích thước chip cũng như công suất tiêu thụ
00 1 01 00 1 01
Gray code
counter
2 2 1 1
1 1
11 10 10 11
0 1
Possible
encoding:
s0=00
s1=10
s2=11
183
Bước 3: Mã hoá trạng thái
One-hot
• Mỗi trạng thái ứng với một flip-flop, Q của 1 FF =1, Q
của các FF khác =0
• 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
184
Bước 3: Mã hoá trạng thái
One-hot
One-hot encoding
s0=001
s1=010
s2=100
185
Bước 3: Mã hoá trạng thái
One-hot
CD=0X CD=0X CD=0X
CD=10 Y=0 Y=0 Y=0
Y=1 CD=10 CD=10
Y=0 Y=0
s0 s1 s2
CD=11 CD=11 CD=11
Y=1 Y=0 Y=0
P Q0 Q1 C Q2 C
D D D Y
C
186 D
Bước 3: Mã hoá trạng thái
One-hot
• 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 AND
187
Bước 3: Mã hoá trạng thái
One-hot
CD=0X CD=0X CD=0X
CD=10 Y=0 Y=0 Y=0
Y=1 CD=10 CD=10
Y=0 Y=0
s0 s1 s2
CD=11 CD=11 CD=11
Y=1 Y=0 Y=0
P Q0 Q1 C Q2 C
S R S R S R Y
C
188 D
Bước 3: Mã hoá trạng thái
One-hot
• 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 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 AND
tại đầu vào R
189
Bước 4: Lựa chọn loại Flip-flop
• JK flip-flop
Đây là loại flip-flop đắt 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ế
190
Bước 4: Lựa chọn loại Flip-flop
• D flip-flop
flip-flop rẻ
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
Thường đựơc dùng để thiết kế bộ đếm và bộ chia tần
191
Bước 5: Thực hiện mạch logic tổ hợp
D flip-flop
• Xác định các hàm đầu vào flip-flop D
Q0
Y Q1
0 0 x 0
0 0 x 0
D
1 0 x 0
C
0 0 x 1
Excitation table Q0 Q0
for D flip-flop Q1n=D1 Q1 Q0n=D0 Q1
0 0 x 1 0 1 x 0
0 0 x 1 0 1 x 0
D D
1 0 x 0 0 0 x 1
C C
0 1 x 0 1 0 x 0
D to be applied
192 is identical to Qn
Bước 5: Thực hiện mạch logic tổ
hợp
Q
D flip-flop
Q Q
0 0 0
Q1n=D1 Q1 Q0n=D0 Q1 Y Q1
0 0 x 1 0 1 x 0 0 0 x 0
0 0 x 1 0 1 x 0 0 0 x 0
D D D
1 0 x 0 0 0 x 1 1 0 x 0
C C C
0 1 x 0 1 0 x 0 0 0 x 1
Q1 Clr Q0 Clr
D D Y
C
D
193
Bước 5: Thực hiện mạch logic tổ hợp
T flip-flop
• Xác định các hàm đầu vào T
Q0
Y Q1
0 0 x 0
0 0 x 0
D
1 0 x 0
C
0 0 x 1
Excitation table Q0 Q0
for T flip-flop T1 Q1 T0 Q1
0 0 x 0 0 0 x 0
0 0 x 0 0 0 x 0
D D
1 0 x 1 0 1 x 1
C C
0 1 x 1 1 1 x 0
194
Bước 5: Thực hiện mạch logic tổ
hợp
Q
T flip-flop
Q Q
0 0 0
T1 Q1 T0 Q1 Y Q1
0 0 x 0 0 0 x 0 0 0 x 0
0 0 x 0 0 0 x 0 0 0 x 0
D D D
1 0 x 1 0 1 x 1 1 0 x 0
C C C
0 1 x 1 1 1 x 0 0 0 x 1
Q1 Clr Q0 Clr
Cost: 32
T T Y
C
D
195
Bước 5: Thực hiện mạch logic tổ hợp
SR flip-flop
• Xác định các hàm đầu vào S và R
Excitation table Q0 Q0
for SR flip-flop S1 Q1 R1 Q1
0 0 x x x x x 0
0 0 x x x x x 0
D D
1 0 x 0 0 x x 1
C C
0 1 x 0 x 0 x 1
196
Bước 5: Thực hiện mạch logic tổ hợp
SR flip-flop
Q0
Y Q1
0 0 x 0
0 0 x 0
D
1 0 x 0
C
0 0 x 1
Excitation table Q0 Q0
for SR flip-flop S0 Q1 R0 Q1
0 x x 0 x 0 x x
0 x x 0 x 0 x x
D D
0 0 x 1 x 1 x 0
C C
1 0 x 0 0 1 x x
197
Bước 5: Thực hiện mạch logic tổ
hợp
Q
SR flip-flop
Q 0 0
S1 Q1 R1 Q1
0 0 x x x x x 0
0 0 x x x x x 0
D D
1 0 x 0 0 x x 1
C C
0 1 x 0 x 0 x 1
Q1 C Q0 C
S R S R
C
198 D
Bước 5: Thực hiện mạch logic tổ
hợp
Q
SR flip-flop
Q 0 0
S0 Q1 R0 Q1
0 x x 0 x 0 x x
0 x x 0 x 0 x x
D D
0 0 x 1 x 1 x 0
C C
1 0 x 0 0 1 x x
Q1 C Q0 C
S R S R
C
199 D
Bước 5: Thực hiện mạch logic tổ
hợp
Q
SR flip-flop
Q 0 Q 0 0
S0 Q1 R0 Q1 Y Q1
0 x x 0 x 0 x x 0 0 x 0
0 x x 0 x 0 x x 0 0 x 0
D D D
0 0 x 1 x 1 x 0 1 0 x 0
C C C
1 0 x 0 0 1 x x 0 0 x 1
Q1 C Q0 C
S R S R Y
C
200 D
Bước 5: Thực hiện mạch logic tổ hợp
JK flip-flop
• Xác định các hàm đầu vào J và K
Excitation table Q0 Q0
for JK flip-flop J1 Q1 K1 Q1
0 0 x x x x x 0
0 0 x x x x x 0
D D
1 0 x x x x x 1
C C
0 1 x x x x x 1
201
Bước 5: Thực hiện mạch logic tổ hợp
JK flip-flop
Q0
Y Q1
0 0 x 0
0 0 x 0
D
1 0 x 0
C
0 0 x 1
Excitation table Q0 Q0
for JK flip-flop J0 Q1 K0 Q1
0 x x 0 x 0 x x
0 x x 0 x 0 x x
D D
0 x x 1 x 1 x x
C C
1 x x 0 x 1 x x
202
Bước 5: Thực hiện mạch logic tổ
hợp
Q
JK flip-flop
Q 0 0
J1 Q1 K1 Q1
0 0 x x x x x 0
0 0 x x x x x 0
D D
1 0 x x x x x 1
C C
0 1 x x x x x 1
Q1 C Q0 C
J K J K
C
203 D
Bước 5: Thực hiện mạch logic tổ
hợp
Q
JK flip-flop
Q 0 Q 0 0
J0 Q1 K0 Q1 Y Q1
0 x x 0 x 0 x x 0 0 x 0
0 x x 0 x 0 x x 0 0 x 0
D D D
0 x x 1 x 1 x x 1 0 x 0
C C C
1 x x 0 x 1 x x 0 0 x 1
Q1 C Q0 C
J K J K Y
C
204 D
Bước 6: Phân tích tín hiệu theo thờ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
sườn xung nhịp
Ví dụ:
Q1 Clr Q0 Clr
D D Y
C
D
205
Thiết kế mạch số tuần tự
Cá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
206
Registers
• Register
I3 I2 I1 I0
D Q D Q D Q D Q
Clk
Q3 Q2 Q1 Q0
I3 I2 I1 I0
Register Symbol
207 Q3Q2 Q1 Q0
Registers
• Thanh ghi có thể nạp dữ liệu
I3 I2 I1 I0
1 0 1 0 1 0 1 0
S S S S
Load
D Q D Q D Q D Q
Clk
Q3 Q2 Q1 Q0
I3 I2 I1 I0
Load
Register Symbol
208 Q3Q2Q1Q0
Shift registers
• Thanh ghi dịch vào nối tiếp ra song song (SIPO)
IL
1 0 1 0 1 0 1 0
S S S S
SE
D Q D Q D Q D Q
Clk
Q3 Q2 Q1 Q0
209
Shift registers
• Thanh ghi dịch vào nối tiếp ra song song (SIPO)
IL
Shift Register Symbol
SE
Q3Q2 Q1 Q0
210
Shift registers
• Thanh ghi dịch vào song song, ra nối tiếp (PISO)
IL I3 I2 I1 I0
1 0 1 0 1 0 1 0
S S S S
Sh/Ld
D Q D Q D Q D Q
Clk
CE
I3 I2 I1 I0 Q0
IL
Shift Symbol
CE Register
Sh/Ld’
211
Q0
Counters
• Bộ đếm tăng đồng bộ
E
HA HA HA
D Q D Q D Q
Clear
Clk Output Q2 Q1 Q0
carry
212
VHDL
213
Chương 4. Ngôn ngữ mô tả phần
cứng VHDL
4.1 Giới thiệu về VHDL
4.2 Tín hiệu và các kiểu dữ liệu
4.3 Các phép toán số học và logic
4.4 Các lệnh song song và tuần tự
4.5 Các cấu trúc tuần tự
4.6 Chương trình con
4.7 GENERATE statement
4.8 Test Bench
214
4.1 Giớ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
Abel
215
library IEEE; -- Su dung thu vien chuan IEEE
use IEEE.STD_LOGIC_1164.ALL; --Su dung tat ca cac thanh phan trong goi STD_LOGIC_1164
entity hex2led is
Port ( HEX : in std_logic_vector(3 downto 0);
LED : out std_logic_vector(6 downto 0));
end hex2led;
-- Khai bao hoat dong cua hex2Led
architecture Behavioral of hex2led is
begin
with 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
"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;
216
4.1 Giới thiệu về VHDL
Ví 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 = In3
Test
Compare
In1 Out1
A
EQ
B
In2
Compare
A
In3 EQ Out2
B
217 Test là một khối gồm 2 bản copy của khối compare
4.1 Giới thiệu về VHDL
Ví dụ 1
Thiết kế khối compare dùng mạch tổ hợp
Compare
A[0] XNOR
A
B[0]
A[1] AND
EQ
B[1] EQ
B
A[7]
B[7]
218
4.1 Giới thiệu về VHDL
Ví dụ 1
• Thiết kế khối Comparator dùng VHDL ‘Entity’ xác định giao diện
với bên ngoài của khối cần thiết kế
Chú ý:
-Một entity có thể có nhiều architecture, mỗi architecture là một
cá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)
219
4.1 Giới thiệu về VHDL
Component và Instantiation
• Biểu diễn Test bằng VHDL
entity Test is
port( In1,In2,In3: in bit_vector(0 to 7);
Out1,Out2: out bit);
end Test;
221
4.1 Giới thiệu về VHDL
Khai báo Entity và Architecture
ENTITY:
entity Entity_name is
port(Signal_name: in Signal_type;
Signal_name: out Signal_type);
end Entity_name;
ARCHITECTURE:
Instance_name: Component_name
port map (Signal_list);
Instance_name: Entity_name(Architecture_name)
port map (Signal_list);
223
4.1 Giới thiệu về VHDL
Ví dụ 2
• Biểu diễn cổng AND bằng VHDL
A
Y
B
C
entity AND3 is
port ( A,B,C: in bit;
Y: out bit);
end AND3;
224
4.1 Giới thiệu về VHDL
Ví dụ 2
• Biểu diễn cổng OR bằng VHDL
A
Y
B
C
-- 3-input OR gate
entity OR3 is
port ( A,B,C: in bit;
Y: out bit);
end OR3;
225
4.1 Giới thiệu về VHDL
Ví 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;
226
4.1 Giới thiệu về VHDL
Ví dụ 3
• Thiết kế bộ MUX 2-1 dùng VHDL
A
Y
B
S
entity MUX21 is
port ( A,B,S: in bit;
Y: out bit);
end MUX21;
227
Ví dụ 3 (Quan trọng)
Mô tả bộ MUX theo kiểu cấu trúc
entity MUX21 is
port (A,B,S: in bit;
Y: out bit); A
Y
end MUX21;
B
architecture Struct of MUX21 is
signal U,V,W : bit;
S
component AND2
port ( X,Y: in bit;
Z: out bit);
end component;
component OR2 A
port ( X,Y: in bit; W
Z: out bit);
S Y
end component;
component INV V
U
port ( X: in bit;
Z: out bit); B
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;
228
4.1 Giới thiệu về VHDL
Ví dụ 3
• Giả sử ta muốn sử dụng các cổng AND, OR và INV ở ví dụ
2 trong MUX21
230
4.1 Giới thiệu về VHDL
Tạo Testbench
• Testbench là entity dùng để mô phỏng và kiểm tra thiết kế
entity Testbench is A
end Testbench; Y
B MUX21
231
4.1 Giới thiệu về VHDL
Sử dụng lại
• Thông thường, các bộ phận của thiết kế này có thể được
dù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
dù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áo
component, các kiểu dữ liệu của người sử dụng, các
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
232
4.1 Giới thiệu về VHDL
Sử dụng lại
Package interface declaration:
package Package_name is
-- constants
-- user defined types
-- component declarations
-- sub programs
end Package_name;
use Library_name.Package_name.all;
233
4.2 Tín hiệu và các kiểu dữ liệu:
Các kiểu dữ liệu đã được định nghĩa
package Standard is
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;
234
4.2 Tín hiệu và các kiểu dữ liệu:
Cá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;
Khai báo bit_vector, giá trị được đặt trong dấu nháy kép
constant State1: bit_vector(4 downto 0) := “00100”;
236
4.2 Tín hiệu và các kiểu dữ liệu:
Cá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:
ps = 1000 fs; resolution limit
ns = 1000 ps;
us = 1000 ns;
ms = 1000 us; Secondary units
sec = 1000 ms;
min = 60 sec;
hr = 60 min;
end units;
237
4.2 Tín hiệu và các kiểu dữ liệu:
Các kiểu dữ liệu củ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 Primary unit:
um; resolution limit
mm = 1000 um;
m = 1000 mm; Metric secondary units
km = 1000 m;
mil = 254 um;
inch = 1000 mil;
foot = 12 inch; Imperial secondary units
yard = 3 foot;
end units;
238
4.2 Tín hiệu và các kiểu dữ liệu:
Kiểu liệt kê của người sử dụng
Người sử dụng có thể định nghĩa kỉêu liệt kê như sau:
239
PACKAGE example IS
TYPE current IS RANGE 0 TO 1000000000
UNITS
na; --nano amps
ua = 1000 na; --micro amps
ma = 1000 ua; --milli amps
a = 1000 ma; --amps
END UNITS;
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 IS
BEGIN
delay <= 10 ns WHEN (load = small) ELSE
delay <= 20 ns WHEN (load = med) ELSE
delay <= 30 ns WHEN (load = big) ELSE
delay <= 10 ns;
out_current <= 100 ua WHEN (load = small)ELSE
out_current <= 1 ma WHEN (load = med) ELSE
out_current <= 10 ma WHEN (load = big) ELSE
out_current <= 100 ua;
240 END delay_calc;
4.2 Tín hiệu và các kiểu dữ liệu:
Kiểu mả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;
VARIABLE X: data_bus;
VARIABLE Y: BIT;
Y := X(0);
Y := X(15);
241
4.2 Tín hiệu và các kiểu dữ liệu:
Kiểu bản ghi record
TYPE optype IS ( add, sub, mpy, div, jmp );
TYPE instruction IS
PROCESS(X)
RECORD
VARIABLE inst : instruction;
opcode : optype; VARIABLE source, dest : INTEGER;
src : INTEGER; VARIABLE operator : optype;
dst : INTEGER; BEGIN
END RECORD; source := inst.src; --Ok line 1
dest := inst.src; --Ok line 2
source := inst.opcode; --error line 3
operator := inst.opcode; --Ok line 4
inst.src := dest; --Ok line 5
inst.dst := dest; --Ok line 6
inst := (add, dest, 2); --Ok line 7
inst := (source); --error line 8
END PROCESS;
242
4.2 Tín hiệu và các kiểu dữ liệu:
Standard logic
library IEEE;
use IEEE.Std_logic_1164.All;
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
243
4.2 Tín hiệu và các kiểu dữ liệu:
Standard logic
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
PACKAGE memory IS
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;
ENTITY rom IS
PORT( addr : IN INTEGER;
data : OUT data_out;
cs : IN std_logic);
END rom;
244
4.2 Tín hiệu và các kiểu dữ liệu:
Standard logic
ARCHITECTURE basic OF rom IS
CONSTANT 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’),
( ‘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
ASSERT addr <= memsize
REPORT “addr out of range”
SEVERITY ERROR;
data <= rom_data(addr) AFTER 10 ns WHEN cs = ‘1’ ELSE
data <= z_state AFTER 20 ns WHEN cs = ‘0’ ELSE
data <= x_state AFTER 10 ns;
END basic;
245
4.2 Tín hiệu và các kiểu dữ liệu:
Gán tín hiệu
• Gán theo vị trí, không gán theo chỉ số của mảng
Up <= Down;
247
4.2 Tín hiệu và các kiểu dữ liệu:
Gán tín hiệu
• Có thể kết hợp hai mảng khác nhau
Nibble_busA(3)
Nibble_busA(2)
Byte_bus(7) Nibble_busA(1)
Byte_bus(6) Nibble_busA(0)
Byte_bus(5)
Byte_bus(4)
Byte_bus(3)
Byte_bus(2)
Byte_bus(1) Nibble_busB(3)
Byte_bus(0) Nibble_busB(2)
Nibble_busB(1)
Nibble_busB(0)
248
4.2 Tín hiệu và các kiểu dữ liệu:
Gán tín hiệu
• Not supported by all synthesis tools!!
249
4.2 Tín hiệu và các kiểu dữ liệu:
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 General_mux;
250
4.2 Tín hiệu và các kiểu dữ liệu:
Tham số dùng chung (Generic)
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY test IS
GENERIC(rise, fall : TIME; load : INTEGER);
PORT ( ina, inb, inc, ind : IN std_logic;
out1, out2 : OUT std_logic);
END test;
251
4.2 Tín hiệu và các kiểu dữ liệu:
Tham số dùng chung (Generic)
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY test IS
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 IS
COMPONENT and2
GENERIC(rise, fall : TIME := 10 NS;
GENERIC(load : INTEGER := 0);
PORT ( a, b : IN std_logic;
PORT ( c : OUT std_logic);
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;
252
4.2 Tín hiệu và các kiểu dữ liệu:
Thuộc tính (attributes)
TYPE state IS (0 TO 7);
PROCESS(x)
SUBTYPE smallreal IS REAL RANGE -1.0E6 TO 1.0E6;
VARIABLE q : real;
BEGIN
q := smallreal’LEFT; -- use of ’left returns 1.0E6
END PROCESS;
253
4.2 Tín hiệu và các kiểu dữ liệu:
Thuộc tính (attributes)
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;
BEGIN
len1 := bit4’LENGTH; -- returns 4
len2 := bit_strange’LENGTH; -- returns 11
END PROCESS;
Xem “VHDL programming by example” để biết chi tiết hơn về thuộc tính
254
4.3 Các phép toán số học và logic:
Cá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:
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í
255
4.3 Các phép toán số học và logic:
Các phép toán logic
library IEEE;
use IEEE.Std_Logic_1164.All;
entity Gate is
port( A,B,C: in std_logic;
Z: out std_logic);
end Gate;
256
4.3 Các phép toán số học và logic:
Cá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;
257
Các phép toán số học và logic:
Cá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 so
sánh giá trị của bit vector sẽ được đổi sang số nguyên không dấu
để so sánh
258
Các phép toán so sánh
library IEEE
use IEEE.Std_Logic_1164.All;
What is the
entity Compare is
value of Z?
port( A: in std_logic_vector(3 downto 0);
B: in std_logic_vector(0 to 4); TRUE?
Z: out boolean);
end Compare; FALSE?
260
4.3 Các phép toán số học và logic:
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;
261
4.4 Các lệnh song song và tuần tự :
Các lệnh song song
• Tất cả các lệnh trong architecture đều được thực hiện đồng
thời (song song) giống như trong phần cứng, các cổng logic
hoạt động đồng thời
entity Concurrent is
port ( A,B,C,D: in std_logic; Schematic:
Y,Z: out std_logic);
end Concurrent;
A
architecture Struct of Concurrent is Y
B
begin
NAND1: entity NAND2 port map (A,B,Y); C
Z
NAND2: entity NAND2 port map (C,D,Z); D
end Struct;
Mạch sẽ hoạt động thế nào nếu như khai báo NAND1 sau NAND2?
262
4.4 Các lệnh song song và tuần tự :
Các lệnh song song
entity Concurrent is
port ( A,B,C,D: in std_logic; Schematic:
Y,Z: out std_logic);
end Concurrent;
A
architecture Struct of Concurrent is Y
B
begin
NAND2: entity NAND2 port map (C,D,Z); C
Z
NAND1: entity NAND2 port map (A,B,Y); D
end Struct;
A
entity Concurrent is B T1
port ( A,B, D: in std_logic;
Z: out std_logic); Z
end Concurrent; D
264
4.4 Các lệnh song song và tuần tự :
Process
• Nhiều khi phương trình tổ hợp trong một câu lệnh rất phức
tạp, ví dụ:
A
B
C
D Y
entity Complex is E
port( A,B,C,D,E,F,G,H,I,J: F S
in std_logic; G
Y,Z: out std_logic);
H
end Complex;
I Z
architecture Struct of Complex is J
begin
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;
265
4.4 Các lệnh song song và tuần tự :
Process
• 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á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ệnh
rấ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ất
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ảy
ra đối với một tín hiệu (signal) nào đó trong danh sách tín hiệu
nhạy cảm (sensitivity list).
266
4.4 Các lệnh song song và tuần tự :
Process
Cú pháp khai báo Process:
Variable_name := expression;
Gán biến :=
267 Gán tín hiệu <=
4.4 Các lệnh song song và tuần tự :
Process
entity Complex is
port( A,B,C,D,E,F,G,H,I,J: T1 and T2 have no
in std_logic; physical meaning since
Y,Z: out std_logic); each refers to 2 different
end Complex; physical wires
269 7. Không có tín hiệu nào trong sensitivity list thay đổi, process dừng
4.5 Các cấ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,
EXIT, WAIT, ASSERT
IF statement:
if condition then
-- sequential statements multiple IF statements:
else
-- sequential statements if condition1 then
end if; -- sequential statements
elsif condition2 then
-- sequential statements
elsif condition3 then
-- sequential statements
else
-- sequential statements
end if;
270
4.5 Các cấu trúc tuần tự
case Expression is
when Value_1 =>
-- sequential statements
when Value_2 =>
-- sequential statements
-- etc.
end case;
Yêu cầu:
1. Tất cả các trường hợp
Example: process (A,B,C,X) is phải đựơc xác định
begin
case X is 2. Giá trị value phải là hằng số
when 0 to 4 => và phải biết khi thiết kế
Z <= B;
when 5 => 3. Giá trị phải có cùng kiểu với
Z <= C;
when 7 | 9 => expression
Z <= A;
when others =>
Z <= ‘0’;
end case;
end process;
271
4.5 Các cấu trúc tuần tự
CASE bit_vec IS
WHEN “00” =>
RETURN 0;
WHEN “01” =>
RETURN 1;
WHEN “10” =>
RETURN 2;
WHEN “11” =>
RETURN 3;
END CASE;
272
4.5 Các cấu trúc tuần tự
for I in 0 to 3 loop
-- sequential statements
end loop;
Chú ý:
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 đó
FOR i IN 1 to 10 LOOP
i_squared(i) := i * i;
END LOOP;
273
4.5 Các cấ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;
Output : out std_logic);
end General_mux;
274
4.5 Các cấu trúc tuần tự
PROCESS(A, B)
CONSTANT max_limit : INTEGER := 255;
BEGIN
FOR i IN 0 TO max_limit LOOP
IF (done(i) = TRUE) THEN
NEXT;
ELSE
done(i) := TRUE;
END IF;
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ới
vòng lặp tiếp theo
275
4.5 Các cấu trúc tuần tự
PROCESS(a)
variable int_a : integer;
BEGIN
int_a := a;
FOR i IN 0 TO max_limit LOOP
IF (int_a <= 0) THEN -- less than or
EXIT; -- equal to
ELSE
int_a := int_a -1;
q(i) <= 3.1416 / REAL(int_a * i); -- signal
END IF; -- assign
END LOOP;
y <= q;
END PROCESS;
Cấu trúc EXIT được dùng để thoát ra khỏi vòng lặp for
276
4.5 Các cấu trúc tuần tự
PROCESS
BEGIN
WAIT UNTIL clock = ‘1’ AND clock’EVENT;
q <= d;
END PROCESS;
PROCESS
BEGIN
WAIT ON a; -- 1.
.
WAIT ON b; -- 2.
.
END PROCESS;
277
4.5 Các cấu trúc tuần tự
Biến (Variables)
• Variable chỉ được sử dụng trong process hoặc chương
trình con
• Giá trị của variable được cập nhật ngay lập tức trong khi
giá trị của tín hiệu signal sẽ được cập nhật khi process kết
thú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ủa
nó muốn được truy cập ngoài process ta phải gán giá trị đó
cho một tín hiệu
278
4.5 Các cấu trúc tuần tự
Biến (Variables)
• LIBRARY IEEE;
• USE IEEE.std_logic_1164ALL;
•
•
ENTITY mux IS
PORT (I0, I1, I2, I3, A, B : IN std_logic;
Tìm chỗ sai trong đoạn mã !
Q : OUT std_logic);
• END mux;
entity DFlipFlop is
port (D,Clk: in std_logic;
Q: out std_logic);
end DFlipFlop;
281
4.5 Các cấu trúc tuần tự
Biể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;
Q: out std_logic);
end entity DFlipFlop;
282
Nhắc lại: Mô hình FSM
Clock Next State S* Current
Inputs I State S
D Q
Clk
Outputs
O
S*=F(S,I)
D Q O=H(S,I)
Mạch logic Clk
tổ hợp Mạch logic
cho trạng tổ hợp
thái kế cho tín
tiếp hiệu ra
D Q
Clk
283
4.5 Các cấu trúc tuần tự
Biểu diễn Finite State Machine
Start=0
Waits
Reset Start=1 00
Out Output Start=1
Up=1 Up=0
put
logic
Up1 Down3
State 01 11
Reg CurrentState
Up3 Down1
11 01
Start Up
284
4.5 Các cấu trúc tuần tự
Biểu diễn Finite State Machine
Start=0
entity FSM is
port ( Start, Up, Reset, Clk: in std_logic; Wait
Output: out std_logic_vector(0 to 1)); 00
Start=1 Start=1
end FSM;
Up=1 Up=0
architecture Behav of FSM is
type FSM_States is (Wait,Up1,Up2,Up3,Down1,Down2,Down3); Up1 Down3
signal CurrentState, NextState : FSM_States; 01 11
begin
OutputLogic:
process(CurrentState) is
end process; Up2 Down2
NextStateLogic: 10 10
process(CurrentState,Start,Up) is
…
end process;
StateRegister: Up3 Down1
process(NextState,Clk,Reset) is 11 01
…
end process;
end Behav;
285
4.5 Các cấu trúc tuần tự
Biểu diễn Finite State Machine
Start=0
Wait
Start=1 00 Start=1
OutputLogic:
process(CurrentState) is Up=1 Up=0
begin
case CurrentState is Up1 Down3
when Wait => 01 11
Output <= “00”;
when Up1|Down1 =>
Output <= “01”;
when Up2|Down2 => Up2 Down2
Output <= “10”; 10 10
when Up3|Down3 =>
Output <= “11”;
end case;
end process; Up3 Down1
11 01
286
4.5 Các cấu trúc tuần tự
Biểu diễn Finite State Machine
NextStateLogic: Start=0
process(CurrentState,Start,Up) is
begin
case CurrentState is Wait
when Wait => Start=1 00 Start=1
if (Start=‘0’) then Up=1 Up=0
NextState <= Wait;
elsif (Up=‘1’) then
NextState <= Up1; Up1 Down3
else 01 11
NextState <= Down3;
end if;
when Up1 =>
NextState <= Up2; Up2 Down2
when Up2 => 10 10
NextState <= Up3;
when Up3|Down1 =>
NextState <= Wait;
when Down3 => Up3 Down1
NextState <= Down2; 11 01
when Down2 =>
NextState <= Down1;
end case;
end process;
287
4.5 Các cấu trúc tuần tự
Biểu diễn Finite State Machine
Start=0
Wait
Start=1 00 Start=1
Up=1 Up=0
StateRegister:
process(NextState,Clk,Reset) is Up1 Down3
begin 01 11
if Reset=‘1’ then
CurrentState <= Wait;
elsif (Clk’event and Clk=‘1’) then
CurrentState <= NextState; Up2 Down2
end if; 10 10
end process;
Up3 Down1
11 01
288
4.6 Chươ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\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ục
hoặc hàm song song được đặt ngoài process và thủ tục
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
289
4.6 Chương trình con
• ENTITY convert IS
• PORT(I1 : IN log8; --line 2
O1 : OUT INTEGER); --line 3
• 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
• 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
290
• END behave;
4.6 Chương trình con
Ví dụ khai báo thủ tục:
291
4.7 GENERATE statements
• GENERATE statements give the designer the ability to
create replicated structures, or select between multiple
representations of a model.
• Generate statements can contain IF-THEN and looping
constructs, nested to any level, that create concurrent
statements.
• Typical applications include memory arrays, registers,
and so on.
• Another application is to emulate a conditional
compilation mechanism found in other languages such as
C.
292
4.7 GENERATE statements (cont.)
• Example: 4-bit SHIFT REGISTER
long_way_shift
293
4.7 GENERATE statements (cont.)
• 4-bit SHIFT REGISTER with GENERATE
gen_shift
294
4.7 GENERATE statements (cont.)
295
4.7 GENERATE statements (cont.)
Irregular GENERATE
• This example uses a shift register that has a configurable
size.
296
4.8 Testbench
297
4.8 Testbench:
Kinds of Testbenches
• Stimulus only — Contains only the stimulus driver and
DUT; does not contain any results verification.
• Full testbench — Contains stimulus driver, known
good results, and results comparison.
• Simulator specific — Testbench is written in a
simulator-specific format.
• Hybrid testbench — Combines techniques from more
than one testbench style.
• Fast testbench — Testbench written to get ultimate
speed from simulation.
298
4.8 Testbench: TextIO
• The Textual Input and Output (TextIO) package contains
procedures and functions that give the designer the ability
to read from and write to formatted text files.
• TextIO treats these ASCII files as files of lines, where a
line is a string, terminated by a carriage return (CR).
• There are procedures to read a line and write a line and a
function that checks for end of file.
299
4.8 Testbench: TextIO (cont.)
300
4.8 Testbench: Tham khảo
Đọc thêm ở các tài liệu tham khảo
301
Các vấn đề khác
302
5. Interesting topics in the field of
Reconfigurable Computing (FPGA)
• FPGA-based Embedded System Design
Xilinx MicroBlaze: 32-bit soft core configurable processor
EDK (Embedded Development KIT)
• Partial Reconfiguration
• Dynamically Reconfiguration
• High Performance Computing (HPC)
Tính toán hiệu năng cao
• Network-on-Chip (NoC) implementation on FPGA
• Machine Learning & Signal Processing Algorithms on FPGAs
Artificial Neural Networks
Support Vector Machines
• Hybrid Reconfigurable Processors
303
MicroBlaze
304
MicroBlaze (cont.)
305
Partial Reconfiguration
306
Xilinx User Guide: UG702 Partial Reconfiguration
Partial Reconfiguration (cont.)
• Example: Network Multiport Interface
307
Xilinx User Guide: UG702 Partial Reconfiguration
Partial Reconfiguration (cont.)
• Network Multiport Interface with Partial Reconfiguration
308
Xilinx User Guide: UG702 Partial Reconfiguration
Network-on-Chip:
Bối cảnh ra đời
• SoC (System on Chip) và MPSoC (Multi
Processor SoC) khiến cho lượng dữ liệu
trao đổi tăng lên nhanh chóng
• Các kiến trúc truyền dữ liệu truyền thống
(Point-to-Point, Bus, Multi-Bus) bộc lộ
nhiều hạn chế
• Cần một kiến trúc truyền thông hiệu quả
cho các thiết kế SoC và MPSoC ?
309
Network-on-Chip:
BASIC NoC (2007)
• BASIC NoC thực hiện trên KIT Spartan-3E XC3S500E (60% tài nguyên)
• Xung clock: 50 MHz; Băng thông của 1 link: 100 Mbps
• Tham khảo: Huynh Viet Thang; Pham Ngoc Nam, "Prototyping of a
Network-on-Chip on Spartan 3E FPGA,“ IEEE-ICCE 2008
310
Signal Processing & Machine
Learning Applications on FPGA
• High performance floating-point operators on FPGA
• Image Processing Algorithms on FPGA
• Neural Network on FPGA
• Support Vector Machine
311
Hybrid Reconfigurable CPUs
312
Một vài ứng dụng trên FPGA
• Chuyển đổi không gian màu (RGB-YCbCr conversion)
• Tách biên ảnh (Edge detection)
• Nhận dạng chữ số viết tay bằng Artificial Neural Network
(mạng nơ-ron nhân tạo) trên FPGA
• Thiết kế và thực thi mạng nơ-ron sâu (Deep Neural
Network) trên FPGA
31
3
Biến đổi không gian màu
(RGB-YCbCr conversion)
với FPGA
+ nhanh hơn 75x
+ chất lượng chấp
nhận được
31
4
Tách biên ảnh
(Edge Detection)
MATLAB Simulink + Xilinx System Generator (XSG) for DSP
XSG
31
5
Mạng nơ-ron nhân tạo trên FPGA
ứng dụng trong nhận dạng
ANN IP core
2-layer feedforward neural network, 22 neurons, for
Handwritten Digit Recognition with MNIST database31
6
Lõi IP ANN
• Mạng neural lan truyền thẳng 2 lớp
20 đầu vào, 12 neuron ở lớp ẩn, 10 neuron ở lớp ra
• Ứng dụng nhận dạng chữ số viết tay
• Huấn luyện với CSDL MNIST
60.000 mẫu huấn luyện, 10.000 mẫu kiểm tra
• Tổng hợp và kiểm tra trên FPGA Virtex-5 XC5VLX-110T
Tần số tối đa: fmax = 205 MHz
Sử dụng 28.340 slices / 69.120 (41%) tài nguyên phần cứng FPGA
• Định dạng dữ liệu: số thực dấu phẩy động bán chính xác (16-bit)
• Cho tỉ lệ nhận dạng đúng > 90%
• Tốc độ nhận dạng: ~ 8.0 micro-second / mẫu
• Khả năng học: đang phát triển.
317
Lõi IP ANN 2017
(https://sites.google.com/site/hvthangete/research/ann)
A customizable hardware architecture for multilayer ANNs on FPGAs
+ Design and develop the ANN IP core architecture with VHDL
+ Design on PC the ANN model, then train the handwritten digit images (using MNIST database) off-line with MATLAB
to have the optimal weights
+ Map the designed ANN (VHDL) with (hard-coded on-chip) optimal weights onto FPGA and synthesize to have the
ANN IP core
+ Connect the ANN IP core to the 32-bit MicroBlaze embedded processor via PLB and perform recognition with input
data fed from PC via UART interface
+ ANN IP core architecture: 784-12-12-10 (1 input layer, 2 hidden layers, 1 output layer)
+ Number format used for weight storage and ANN computation: IEEE-compliant 16-bit half precision floating-point
format
319
Lời cảm ơn
Chân thành cảm ơn các sinh viên và học viên cao học
đã tham gia thực hiện các đề tài liên quan:
32
0