You are on page 1of 320

Thiết kế số với vi mạch

logic khả trình FPGA

Giảng viên: TS. Huỳnh Việt Thắng

Đà Nẵng, 05/2019
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. Các vấn đề khác
7. Tổng kết

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)

System Specification Circuit Design

Architectural Design Physical Design

Functional Design Fabrication

Logic Design Packaging

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

System Specification Netlist


Architectural Physical
Design Design

Architectural Layout
Specification Circuit Design
or Fabrication
Functional
Logic Synthesis
Design
Chips
Timing & relationship
between functional units Packaging

Logic Packaged and


Design tested chips
RTL in HDL

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

Floorplanning & Placement

Routing

Layout Compaction

Extraction and Verification

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

CLB CLB CLB


I/O

SM SM SM SM

CLB CLB CLB


I/O

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

Total cost FPGA .09µ


FPGA .13µ
ASIC .09µ ASIC cost/part
is lower
ASIC Design
Cost is much ASIC .13µ
higher
(and increasing)!!

For each technology advance,


Volume
crossover volume moves higher Courtesy: Richard Sevcik, Xilinx

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

• Thử nghiệm ý tưởng, phát triển sản phẩm mẫu (prototyping)


 giảm chi phí thiết kế và chế tạo trước khi thực hiện trên ASIC

• Tính toán hiệu năng cao (High Performance Computing)


 Hardware Accelerator (tăng tốc phần cứng) with high parallelism

• Thực thi các thuật toán DSP tốc độ cao


• Thực hiện hệ thống nhúng với các tính năng đặc biệt
• Ứng dụng phải cấu hình lại phần cứng khi chạy (runtime)
• v..v…

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

• 200x More Logic


XC4000 & Virtex-4
 Plus memory, Spartan
µP etc. 100x

• 40x Faster CLB Capacity Virtex-II &


Speed Virtex-II Pro
• 50x Lower Power Power per MHz Virtex &
Price
• 500x Lower Cost Virtex-E
10x

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

Block SelectRAM™ I/O Blocks (IOBs)


resource

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

Slice S0 Local Routing

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

with each CLB, accessible PRE


LUT Carry D Q
by all 16 CLB outputs CE

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

MUXF8 combines the two


CLB

F8
MUXF7 outputs (from the CLB

F5
above or below)
Slice S3
MUXF6 combines slices S2

F6
and S3

F5
Slice S2

MUXF7 combines the two


F7

MUXF6 outputs
Slice S1
F5

MUXF6 combines slices S0 and S1


F6

Slice S0
F5

MUXF5 combines LUTs in each slice

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

• Inputs come from LUTs or from an D S Q


CE
independent CLB input
R
• Separate set and reset controls
FDCPE
Can be synchronous or
D PRE Q
asynchronous CE

• All controls are shared within a slice CLR

Control signals can be inverted LDCPE

locally within a slice D PRE Q


CE
G
CLR

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

Q15 to D input of the next


SRL16CE D Q Q
CE
 Shift register length can
be changed asynchronously
by toggling address A

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

• Separate clocks and


clock enables for I and O Reg DDR MUX
OCK1
PAD
• Set and reset
Reg
signals
are shared OCK2 Output

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

• RAM and ROM are initialized D


WE
D
WE

during Slice A0
WCLK
O A0
WCLK
SPO

configuration A1
A2
A1
A2
LUT A3 A3

Data can be written to RAM A4 DPRA0 DPO


DPRA1

after configuration DPRA2


DPRA3

• Emulated dual-port RAM LUT

One read/write port


One read-only port
89
2.2 Cấu trúc PLD của Xilinx
Block SelectRAM Resources
• Up to 3.5 Mb of RAM in 18-kb
blocks
18-kb block SelectRAM memory
Synchronous read and write DIA
DIPA
• True dual-port memory ADDRA
WEA
Each port has synchronous read ENA
SSRA
and write capability CLKA
DOA
DOPA

Different clocks for each port DIB


• Supports initial values DIPB
ADDRB
WEB
• Synchronous reset on output ENB
SSRB DOB
latches CLKB DOPB

• Supports parity bits


One parity bit per eight data bits

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

=> Cổng AND

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

S selects the function to be executed:


0=addition, 1=subtraction
119
Arithmetic-logic units
a4 b4 a3 b3 a2 b2 a1 b1 a0 b0

S01

ALE ALE ALE ALE ALE


X Y

FA FA FA FA FA
Cout

f4 f3 f2 f1 f0

M selects the type of operation: 0=logic, 1=arithmetic


S0 and S1 select the operation
120
Arithmetic-logic units

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

ALE ALE ALE ALE ALE


X Y

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

A1..0 A1..0 A1..0 A1..0

E E E E
Decoder Decoder Decoder Decoder

C15..12 C11..8 C7..4 C3..0

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

Cách thực hiện khác

129
Selectors

D15..12 D11..8 D7..4 D3..0

S1..0 S1..0 S1..0 S1..0


4-to-1 4-to-1 4-to-1 4-to-1
selector selector selector selector

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 Comp

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

y=1 when X=0 y=1 when X=255

x0
y

y y=1 when X<192


y=1 when X is even
135
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)

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ừ 01
 Sườn xuống: tín hiệu xung nhịp chuyển từ 10
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’

Tam giác có nghĩa là tác động sườn lên

Tác động sườn xuống


Excitation table
Tác động mức 1 (for design with SR flip-flop)

Tác động mức 0

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)

Circuits that use


JK flip-flops are cheaper
than those using SR flip-flops:
more don’t cares

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)

Designing with D flip-flop


is easy

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=0 Count=3 Count=2 CE=0

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=0 Count=3 Count=2 CE=0

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ịp
3. CE=1: đợi ở chân của 1 sườn lên khác nhưng chưa đếm
4. Sườn lên của xung nhịp: chuyển sang trạng thái “Count=1”, CE vẫn =1
5. 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
144
Finite 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

CE=0 CE=0
CE=1
Q1Q0=00 Q1Q0=01

CE=1 CE=1

CE=0 Q1Q0=11 Q1Q0=10 CE=0

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

CE=0 Q1Q0=11 Q1Q0=10 CE=0


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

Count=0 CE=1 Count=1


Y=0 Y=0

CE=1 CE=1

CE=0 Count=3 Count=2 CE=0


Y=1 Y=0
CE=1
151
FSM 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ụ
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ểu
diễn trạng thái

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

Q1Q0=00 CE=1 Q1Q0=01


Y=0 Y=0

CE=1 CE=1

CE=0 Q1Q0=11 Q1Q0=10 CE=0


Y=1 Y=0
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

CE=0 Q1Q0=11 Q1Q0=10 CE=0


Y=1 Y=0
CE=1

Y chỉ phụ thuộc trạng thái


hiện tại, không phụ
thuộc vào tín hiệu vào

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

CE=0/Y=0 Count=3 Count=2 CE=0/Y=0


CE=1/Y=0
159
FSM 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í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

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

CE=0/Y=0 Q1Q0=11 Q1Q0=10 CE=0/Y=0


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

CE=0/Y=0 Q1Q0=11 Q1Q0=10 CE=0/Y=0


CE=1/Y=0

Y phụ thuộc vào trạng thái


hiện tại, và phụ
thuộc vào cả tín hiệu vào

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;

+ nếu X="101" hoặc X="1001" thì tín hiệu ra Z=1;


+ ngược lại Z=0

Yêu cầu: vẽ sơ đồ máy trạng thái FSM?

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

s3 OK Sô lượng trạng thái tối thiểu : 3


0-2: ? {s0,s2}=u0
s4 0-2: ?
1-4: ? {s1,s3,s4}=u1
4-5 4-5 0-2, 4-5 {s5}=u2
s5 2-4 2-4 1-2

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

Sô lượng trạng thái tối thiểu : 3


{s0,s2}=u0
{s1,s3,s4}=u1
{s5}=u2

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 đó (s0000, s5101, …)

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

182 Straightforward Minimum-bit-change


Bước 3: Mã hoá trạng thái
Minimum-bit-change

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ế

- -Eight bit comparator


entity Comparator is
port( A,B: in bit_vector(0 to 7);
EQ: out bit);
end Comparator; đầu vào và ra được gọi là port
architecture Behav1 of Comparator is
begin ‘Architecture’ miêu tả hoạt động
EQ <= ‘1’ when (A=B) else ‘0’; và cấu trúc bên trong của
end Behav1;
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;

architecture Struct1 of Test is


component Comparator is
port( A,B: in bit_vector(0 to 7); 2 bản copy của cùng một
EQ: out bit); component
end component; ‘Comparator’
begin
Compare1: Comparator port map (A=>In1,B=>In2,EQ=>Out1);
Compare2: Comparator port map (A=>In1,B=>In3,EQ=>Out2);
end Struct1;
Chú ý:
- Hai bản comparator chạy song song với nhau !!!
220 - Đây là architecture miêu tả cấu trúc của entity Test
4.1 Giới thiệu về VHDL
Cấu hình (Configuration)
• Khi một entity có nhiều architectures, ta sẽ xử dụng
architecture nào?
• 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);
end for;
for others: Comparator use entity Compare(Behav1)
port map (A => X, B => Y, EQ => Z);
end for;
end for;
end Build1;

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:

architecture Architecture_name of Entity_name is


Khai báo các tín hiệu cục bộ;
Khai báo các components;
begin
Các câu lệnh;
end Architecture_name;
222
4.1 Giới thiệu về VHDL
Khai báo component
COMPONENT:
component Component_name is
port( Signal_name: in Signal_type;
Signal_name: out Signal_type);
end component;

Khai báo copy của COMPONENT :

Instance_name: Component_name
port map (Signal_list);

Hoặc cách thứ 2, copy trực tiếp:

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

-- 3-input AND gate

entity AND3 is
port ( A,B,C: in bit;
Y: out bit);
end AND3;

architecture RTL of AND3 is


begin
Y <= ‘1’ when ((A=‘1’) and (B=‘1’) and (C=‘1’)) else ‘0’;
end RTL;

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;

architecture RTL of OR3 is


begin
Y <= ‘0’ when ((A=‘0’) and (B=‘0’) and (C=‘0’)) else ‘1’;
end RTL;

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;

architecture RTL of INV is


begin
Y <= ‘1’ when (A=‘0’) else ‘0’;
end RTL;

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;

architecture Behav of MUX21 is


begin
Y <= A when (S=‘1’) else B;
end Behav;

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

configuration Use3InputGates of MUX21 is


for Behav Entities
end for; A
Y
for Struct B
for Gate1:INV use entity INV(RTL) C
port map (A=>X,Y=>Z);
end for; A Y
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) Components
port map (A=>X,B=>Y,C=>’0’,Y=>Z);
X
end for; Z
end for;
Y
end Use3InputGates;
X Z
229
Ví dụ: Thiết kế bộ MUX 4-1 dùng các
bộ MUX 2-1

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

Testbench không có port S

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
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;

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;

How to use a package?

use Library_name.Package_name.all;

U1: entity Package_name.Entity_name(Architecture_name);

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;

Bit, Boolean và Character là kiểu dữ liệu liệt kê

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;

Ví dụ về khai báo các kiểu số thực


type 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ép
constant State1: bit_vector(4 downto 0) := “00100”;

MSB, bit 4 LSB

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”;
235
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

ARCHITECTURE test OF test IS


ARCHITECTURE test OF test IS
BEGIN
SIGNAL a : REAL;
PROCESS(X)
BEGIN
VARIABLE a : INTEGER;
a <= 1.0; --Ok 1
BEGIN
a <= 1; --error 2
a := 1; --Ok 1
a <= -1.0E10; --Ok 3
a := -1; --Ok 2
a <= 1.5E-20; --Ok 4
a := 1.0; --error 3
a <= 5.3 ns; --error 5
END PROCESS;
END test;
END test;

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;

Được sử dụng rất nhiều trong chạy mô phỏng


wait for 20 ns;
constant Sample_period: time := 2 ms;
constant Clock_period: time := 50 ns;

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:

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”;

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;

TYPE data_bus IS ARRAY(0 TO 31) OF BIT;

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

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?

Up(0) Down(3) Up(0) Down(0)

Up(1) Down(2) Up(1) Down(1)


OR
Up(2) Down(1) Up(2) Down(2)

Up(3) Down(0) Up(3) Down(3)

246 Tương ứng theo vị trí


4.2 Tín hiệu và các kiểu dữ liệu:
Gá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ác
phé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
Bus <= A; Kích thứơc mảng khác nhau
Bus(3 downto 0) <= A; OK! Bus(3) is driven by A(0)

Bus(5 downto 4) <= A(0 to 1); OK! Bus(5) is driven by A(0)

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

signal Byte_bus: std_logic_vector(7 downto 0);


signal Nibble_busA, Nibble_busB: std_logic_vector(3 downto 0);

Byte_bus <= Nibble_busA & Nibble_busB;

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!!

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);

Z <= (3 => A, 2 => B, others => C);

T <= (others => ‘0’); -- initialization irrespective of width of T

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;

ARCHITECTURE test_arch OF test IS


COMPONENT AND2
GENERIC(rise, fall : TIME; load : INTEGER);
PORT ( a, b : IN std_logic;
c : OUT std_logic);
END COMPONENT;
BEGIN
U1: 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;

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);

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

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;

architecture Logical of Gate is


begin
Z <= A and not(B or C);
end Logical;

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;

architecture Logical of Gate is


begin
Z <= A and not(B or C);
end Logical;

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?

architecture Relational of Compare is


1110
begin
is compared to
Z <= TRUE when A<B else FALSE;
1011
end Relational;
by bit position
from left to
entity Testbench
right;
end entity Testbench;
in the 2nd
position
architecture Build1 of Testbench is
A(2) > B(1)
signal A: std_logic_vector(3 downto 0) := “1110”;
hence (A<B)
signal B: std_logic_vector(0 to 4) := “10111”;
is FALSE
signal Z: boolean;
begin
DUT: entity Compare(Relational)
port map (A => A, B => B, Z => Z);
end Build1;
259
4.3 Các phép toán số học và logic:
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
(trừ mod and rem không dùng cho số thực), không dùng
cho 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ố
nguyên và một số thực, kết quả sẽ vẫn là kiểu vật lý

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;

architecture Behav of Add is


begin
Z <= A + B;
end Behav;

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;

Mạch vần hoạt động như cũ!!!


263
4.4 Các lệnh song song và tuần tự :
Các lệnh song song
Schematic:

A
entity Concurrent is B T1
port ( A,B, D: in std_logic;
Z: out std_logic); Z
end Concurrent; D

architecture Struct of Concurrent is


signal T1: std_logic;
begin
NAND2: entity NAND2 port map (T1,D,Z);
NAND1: entity NAND2 port map (A,B,T1);
end Struct;

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:

Process_name: process (sensitivity_list) is


-- variable declarations;
begin
-- sequential commands
end process;

Cú pháp khai báo biến:

variable Variable_name: type;

Cú pháp gán giá cho một biến:

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

architecture Struct of Complex is T1 T2


Sensitivity list
begin
Y_process: process (A,B,C,D,E,F,G,H,S) is
variable T1,T2: std_logic;
begin
if (S=‘1’) then A
T1 := A nand B; B
T2 := C nand D; C
else Y
T1 := E nand F; D
T2 := G nand H; E
end if; F S
Y <= T1 nand T2; G
end process;
Z <= I nand J; H
end Struct; I Z
268 J
4.4 Các lệnh song song và tuần tự :
Process
• Xét ví dụ sau:
Example: process (A,B,M) is
begin
Y <= A; Giá trị M cũ !!! M chỉ nhận
M <= B;
Z <= M;
giá trị mới ở cuối process
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;
3. Process Example tạm dừng
Y, 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”.

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ự

TYPE vectype IS ARRAY(0 TO 1) OF BIT;


VARIABLE bit_vec : vectype;

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;

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);
end if;
end loop;
end process;
end Behav;

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;

WAIT FOR 10 ns;


WAIT FOR ( a * ( b + c ));

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;

• 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
• WHEN 0 =>
• Q <= I0;
• WHEN 1 =>
• Q <= I1;
• WHEN 2 =>
• Q <= I2;
• WHEN 3 =>
• Q <= I3;
• END CASE;
• END PROCESS;

279 END mux_behave;
4.5 Các cấu trúc tuần tự
Biể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);
end What; Since there is no ELSE part
the previous Q value has
architecture RTL of What is to be remembered for the case
begin where Clk=‘0’.
process (D, Clk) is The synthesis tool will hence
begin infer a latch instead of just
if (Clk=‘1’) then combinatorial logic!!!
Q <= D;
end if; Beware of unintended latches
end process; when ELSE parts are omitted
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
280 the Q output => hence a latch: when Clk is high, Q follows D
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 1: WAIT UNTIL

entity DFlipFlop is
port (D,Clk: in std_logic;
Q: out std_logic);
end DFlipFlop;

architecture RTL of DFlipFlop is


begin This is not synthesisable
process is
begin
wait until Clk’event and Clk=‘1’;
Q <= D;
end process;
end RTL;

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;

architecture RTL of DFlipFlop is


begin
process (D,Clk) is
begin
if (Clk’event and Clk=‘1’) then
Q <= D;
end if;
end process;
end architecture RTL;

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

Next NextState Up2 Down2


state 10 10
logic

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:

procedure increment_reg (variable reg : inout word_32; constant


incr : in integer := 1);

Ví dụ gọi thủ tục:

increment_reg(index_reg, offset–2); -- add value to index_reg


increment_reg(prog_counter); -- add 1 (default) to prog_counter

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.)

• The for ... generate statement is particularily


powerful when used with integer generic.
• The difference between the two architectures
 Architecture gen_shift could be specified with
generic parameters such that different-sized shift
registers could be generated based on the value of
the generic parameters.
 Architecture long_way_shift is fixed in size and
cannot be changed.

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

1) Douglas L. Perry, VHDL Programming by Example, 4th


Edition (2002) : Chapter 8, Chapter 14
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

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 ?

 Network-on-Chip (Mạng trên Chíp)


 Ứng dụng mô hình mạng máy tính trong thiết kế kiến trúc truyền
thông cho chíp
 Thực hiện thử nghiệm trên FPGA

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

Database and Recognition rate


+ MNIST database [1]: 60.000 images for training, 10.000 images for testing, 28x28 grayscale image
+ Recognition rate: 94.13% (9413/10000)

Hardware platform and Execution Performance


+ Platform: Xilinx Virtex-5 XC5VLX-110T, MicroBlaze with PLB
+ fmax = 193 MHz (ISE synthesis report)
+ IP core Latency = 10643 clock cycles per MNIST image (28x28 = 784 pixels)
+ Running on MicroBlaze at a clock rate of 100MHz
318
Các bài báo tham khảo
• Trần Nhật Tin, Lê Thanh Lâm, Huỳnh Việt Thắng, “Implementation of an edge
detection module on FPGA”, UDN Journal of Science and Technology, vol. 82, no. 1,
pp. 25-28, 2014.
• Huynh, Thang Viet, "Design space exploration for a single-FPGA handwritten digit
recognition system," 2014 IEEE Fifth International Conference on Communications
and Electronics (ICCE), pp.291-296, July 30 2014 - Aug.1 2014.
• Nguyễn Thị Kim Anh, Nguyễn Trường Thọ, Huỳnh Việt Thắng, “Về một kiến trúc
mạng nơ-ron nhân tạo trên FPGA ứng dụng trong nhận dạng chữ số viết tay”, Hội
thảo Quốc gia về Điện tử, Truyền thông và CNTT - REV-ECIT, 10-11/12/2015, trang
253-256, ISBN: 978-604-67-0635-9.
• Huynh Minh Vu, Huynh Viet Thang, “A Customized Hardware Architecture for
Multi-Layer Artificial Neural Networks on FPGA”, 4th International Conference on
Information System Design and Intelligent Applications (Springer), 2017
• Thang Viet Huynh, “Deep Neural Network Accelerator based on FPGA”, in
Proceeding of the 4th NAFOSTED Conference on Information and Computer Science
(NICS) 2017, IEEE, p. 254-257, Hanoi, Vietnam.

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:

•Trần Nhật Tin (09ĐT), Lê Thanh Lâm (09ĐT), năm 2014


•Nguyễn Trường Thọ (10ĐT), Nguyễn Minh Hùng (10ĐT), năm 2015
•Nguyễn Thị Kim Anh (CH KTĐT K28), năm 2015
•Huỳnh Minh Vũ (CH KTĐT K31), năm 2017

32
0

You might also like