SlideShare a Scribd company logo
1 of 324
Download to read offline
Bộ môn Kỹ thuật Máy tính
Viện Công nghệ thông tin và Truyền thông, ĐHBKHN

IC
Msc. Nguyễn Đức Tiến
tiennd@soict.hut.edu.vn
+84-91-313-7399
Nắm bắt được kiến thức cơ bản và ứng dụng của
các IC lập trình mô tả phần cứng được.
Nắm bắt được các nguyên lý lập trình mô tả phần
cứng và các cấu trúc lập trình cơ bản, minh họa
bằng ngôn ngữ VHDL..
Có kiến thức và kỹ năng thiết kế mạch số
Hiểu biết về nguyên lý hoạt động phần cứng của
bộ vi điều khiển và có khả năng thiết kế bộ vi điều
khiển.
http://dce.hut.edu.vn

2
http://dce.hut.edu.vn

3
1/2

Cứng hóa các ứng dụng
mềm, tạo sản phầm ưu việt
về tốc độ.

>>
NVIDIA Tegra
INTEL Core i7
Đồ họa(Tính toán vector)

Hiểu rõ nguyên tắc hoạt động
của bộ xử lý, làm căn bản
giúp việc lập trình phần mềm,
lập trình hệ thống trở nên
hợp lý, logic hơn.

http://dce.hut.edu.vn

4
2/2

Dễ dàng thiết kế các bo
mạch xử lý số.
Nhanh chóng tạo ra các bộ
xử lý mới, mạch số chuyên
dụng dựa trên mã nguồn mở
và tùy biến theo nhu cầu.
Khuynh hướng tạo ra các giải
pháp tổng thể hardware/soft
ware (Oracle & Sun, Google&
Motorola Mobility), và các
khối xử lý tăng tốc.
http://dce.hut.edu.vn

QuadPort H/I
HDMI2SDI

Chipset
chuyên
dụng

Card tăng tốc chuyên dụng

5
1/2

Nguyên lý mạch tích hợp. Tống Văn
On. NXB Lao động xã hội. 2007.
Thiết kế mạch số với VHDL & Verilog.
Tống Văn On. NXB Lao động xã hội.
2007.
Digital VLSI Systems Design. Dr. S.
Ramachandran. Springer. 2007.
Digital Integrated Circuits - A Design
Perspective. Jan M. Rabaey, Anantha
Chandrakasan, Borivoje Nikolic. Mc
Graw Hill.
http://dce.hut.edu.vn

6
2/2

Analysis and Design of Digital IC. David
A.Hodges, Horace G.jackson, Resve A.Saleh. Mc
Graw Hill.
The Design Warrior‟s Guide to FPGA. Clive Max
Maxfield. 2004.
Circuit Design with VHDL. Volnei A. Pedroni. MIT
Press. 2006.
Fundamentals Of Digital Logic With VHDL Design
2nd Edition. Stephen Brown, Zvonko Vranesic.
McGraw Hill. 2005.
http://dce.hut.edu.vn

7
FPGA4U, kit, usb-powered, altera, niosII & linux,
http://fpga4u.epfl.ch/wiki/Main_Page
SecretBlaze, bộ xử lý RISC 32bit dựa trên
MicroBlaze, Xilinx, mã mở VHDL, 5 công đoạn,
cache, ngắt.
http://www.lirmm.fr/~barthe/index.php/page/Secret
Blaze.html
Các project và module mã nguồn mở
http://www.opencores.org/
Các thủ thuật trên VHDL
http://vhdlguru.blogspot.com/
http://dce.hut.edu.vn

8
Phần I:

• Các linh kiện để thiết kế IC (3)
• Các qui trình sản xuất IC (1)
IC, Integrated Circuit, là một mạch điện tử mà tất
cả các thành phần đều được đặt trên một đế bán
dẫn, không thể tách rời nhau được.

Vi điều khiển Intel 8742: CPU 12MHz, RAM 128B, EPROM 2KB.
http://dce.hut.edu.vn/

10
Thực hiện một / vài chức năng điện tử cụ thể.

Chức năng có thể lập trình được.
Thiết kế = IC chuẩn + custom IC (glue logic)
http://dce.hut.edu.vn/

11
Tất cả các thành phần của IC được sản xuất đồng
thời và hàng loạt, chứ không phải từng IC đơn lẻ.
Ít tốn linh kiện.
Được tối ưu về không gian, 1 triệu transitor/mm2
Module hóa quá trình thiết kế mạch điện tử.

Giảm chi phí nghiên cứu, triển khai, nâng cấp...
Giảm giá thành thiết bị, chức năng.
http://dce.hut.edu.vn/

12
Tiêu thụ ít năng lượng.
Được tối ưu hóa về tốc độ...
Đồng bộ và tin cậy.
Được kiểm thử bởi nhà sản xuất.
Tuổi thọ cao.

http://dce.hut.edu.vn

13
1/2

Die: khuôn, chip sillicon.
Leadframe: khung dẫn, chứa các chân nối ra ngoài
 rắp ráp lên board dễ hơn
Wire: nối các chân IO trên die ra các chân tương
ứng trên leadframe.
Vỏ: phủ kín, đóng gói leadframe & die bằng
ceramic, plastic… bảo vệ, tản nhiệt.
http://dce.hut.edu.vn

14
2/2

Liên kết khung dẫn

Liên kết khung dẫn (2)

http://dce.hut.edu.vn

15
Vỏ - package - có nhiều hình dạng khác nhau.
Zigzag
Inline
Package

Dual
Inline
Package
Ball
Grid
Array
Plastic
Leader
Chip
Carrier

Small
Outline
Package

Tham khảo một số dạng vỏ
http://dce.hut.edu.vn

16
1/2

Độ dài mỗi cạnh chừng vài mm.
Kích thước IC được đo bằng số cổng
logic/transistor (cổng là đơn vị đo tương ứng
với cổng NAND 2 đầu vào).
Xilinx Spartan II XC2S200, 540k đ, 200k cổng.
Intel Core i7, 6.6m đ, >1 tỷ cổng.

Cấu thành bởi các transistor
CMOS. Một cổng NAND có
4 transistor.
http://dce.hut.edu.vn

17
2/2

Quy trình xử lý N nm sẽ cho transistor nhỏ nhất
có chiều dài N nm. Ví dụ, qui trình 28 nm.
Kích thước đặc trưng nhỏ nhất λ ≈ ½ chiều dài
transistor nhỏ nhất.
Các bộ phận chức năng cấu thành IC được
phân vùng rõ ràng. (FGPA hỗ trợ).

Intel Quad Core

Intel Core i7

Intel Pentium 5

AMD Quad Core
1/2

Sử dụng các transistor lưỡng cực, Bipolar

NPN

PNP

Sử dụng các transistor có cực cổng kim loại,
Metal Oxide Semiconductor

nMOS
http://dce.hut.edu.vn

Kênh N

Kênh P
19
2/2

CMOS,
Complementary MOS
Các lớp
liên kết nối

http://dce.hut.edu.vn

20
Transistor lưỡng cực

base
emitor

http://dce.hut.edu.vn

Transistor MOSFET

collector

21
Mật độ tích hợp: tăng với tốc
độ nhanh chóng
Cỡ nhỏ (Small Scale Integration)
Cỡ trung bình (Medium Scale
Integration)
Cỡ lớn (Large Scale Integration)
Cỡ rất lớn (Very Large Scale
Integration)

Hiệu năng:
Tần số xung clock nhân đôi sau
mỗi 3 năm

http://dce.hut.edu.vn

22
Nhu cầu từ thực tế, từ các
dự đoán trong tương lai. Ví
dụ, cần RAM gấp đôi.

Nhu cầu

Ứng dụng

Đặc tả

Kiểm thử

Đặc tả các nhu cầu trên
phương diện kỹ thuật. Ví
dụ, cần tăng độ rộng bus
địa chi.
Thiết kế

ASIC
Kiểm thử
prototype

Sản xuất

Tối ưu

http://dce.hut.edu.vn

Thiết kế: mức đỉnh – logic,
thiết kế mức RTL, Register
Transfer Level

Tối ưu: về tốc độ, không
gian, năng lượng, về công
nghệ sản xuất ns.
Ứng dụng: Release To
Menufacturer
23
1/2

Tạo thỏi silicon

In litô

Cắt thành wafer

Rửa bề mặt

Mài bóng wafer

Phủ kim loại

Oxi hóa wafer

Kiểm thử

Phủ cản quang

Đóng gói

http://dce.hut.edu.vn

24
Wafer thành phẩm
http://dce.hut.edu.vn

25
2/2

Tạo cắt mài wafer

Cát và siliicon

Bài dịch tham khảo

Nhà máy
Phần II:

Field Programmable Gate Array
Application Specific Integrated Circuit
• Tổng quan (1)
• Kiến trúc (2)
• Qui trình thiết kế FPGA, ASIC (1)
• Giới thiệu công cụ thiết kế và triển khai (4)
1/4

1980s, VLSI xuất hiện  thiết kế IC theo nhu cầu.

Độ phức
tạp tăng
40% mỗi
năm.
Nhu cầu
thiết kế
tăng 15%
mỗi năm

Mức độ tích hợp của PCB trên mỗi die
2/4
Mật độ
(Gb/cm2)

Tốc độ truy
xuất (ns)

DRAM

8.5

10

DRAM (logic)

2.5

10

SRAM (cache)

0.3

1.5

Silicon, 2010
Die Area: 2.5x2.5 cm
Voltage:
0.6 V
Technology: 0.07 m

Mật độ
(Mgate/cm2)

Năng lượng
(W/cm2)

Xung đồng hồ
(GHz)

Custom

25

54

3

Std. Cell

10

27

1.5

Gate

5

18

1

Single-Mask GA

2.5

12.5

0.7

FPGA

0.3

4.5

0.25

http://dce.hut.edu.vn

29
3/4
Intel 4004 (1971) - thiết kế thủ công

http://dce.hut.edu.vn

30
4/4

ASIC ra đời so nhu cầu về các hoạt động thiết kế
ngày càng tăng.
Hội nghị các vi mạch tùy biến theo khách hàng
của IEEE đưa ra các tài liệu hướng dẫn phát triển
custom IC.
Thiết kế = IC chuẩn + custom IC
Từ custom IC  thuật ngữ Application Specific IC

http://dce.hut.edu.vn

31
1/3

ASIC, IC chuyên dụng.
ASIC không đồng nhất với custom IC.
IC chuẩn: ROM, RAM, DRAM, Processor, etc.
ASIC: chip cho đồ chơi biết nói, chip cho 1 vệ tinh, chip
cho bộ xử lý dưới dạng cell cùng với mạch logic.

Qui tắc phổ biến: “Nếu một IC xuất hiện trong
sách tra cứu, thì đó không phải là ASIC”.

Application Specific Standard Product.
1/2

ASIC đem lại cơ hội sản xuất với số lượng lớn;
các bộ phận được tiêu chuẩn hóa để nhanh chóng
trở thành sản phẩm thương mại.
Giá thành giảm theo số lượng.
None Reducing Cost.
Quy trình Cost Down trong các nhà máy.

Hiệu quả kinh tế trong thiết kế
Thực hiện prototype nhanh với số lượng thấp.
Thiết kế theo nhu cầu, chuyên sâu, số lượng lớn.

http://dce.hut.edu.vn

33
2/2

Có công cụ CAD cần thiết để đạt được hiệu quả
trong chiến lược thiết kế:
Thiết kế mức hệ thống: VHDL
Thiết kế mức vật lý, từ VHDL tới silicon, timing closure
(Monterey, Magma, Synopsys, Cadence, Avant!)

Chiến lược thiết kế: Hierarchy - phân cấp;
Regularity; Modularity - mô đun; Locality.

http://dce.hut.edu.vn

34
Thiết kế là một quá trình liên tục cân đối các tham
số đầu vào, để đạt được hiệu quả mong đợi.
Hiệu năng

• chức năng, thời gian, tốc độ, năng lượng
Kích thước die
• chi phí sản xuất

Thời gian thiết kế
• lập lịch và chi phí nghiên cứu
Test và Stability Test
• lập lịch, chi phí nguồn lực, chi phí sản xuất
http://dce.hut.edu.vn

35
Ý tưởng thiết kế

Simulink
c := a + b;
if (c = 1) then cf := 1;

Đặc tả thiết kế
Thiết kế hệ thống
HDL
Giả lập
Thiết kế mức cổng

Synopsys

Thư viện
cell

Tổng hợp
Giả lập

Cadence

Layout
Kiểm tra Layout
Sản xuất

Novelus

Kiểm thử chip
Sản phẩm

http://dce.hut.edu.vn

36
Mức hệ thống
Mức mô-đun
chức năng

Mức cổng
Mức mạch

Mức thiết bị

http://dce.hut.edu.vn

37
1/2

• Phải sản
xuất với số
lượng cực
lớn mới

• Sản xuất
với số
lượng 100k
sản phẩm/
năm

• Dựa trên
công nghệ
ROM/PROM,
cấu tạo chỉ
gồm các lớp
cổng AND,
OR và một số
Flip Flop.
• Sản phẩm
khá đơn giản
với khoảng
1K gate.
• Sản xuất đơn
lẻ được

http://dce.hut.edu.vn

FPGA
Gate Array

• ~ 25M gate

• Các cell là
Flip-Flop,
gate, hoặc
bộ xử lý đã
được định
nghĩa trước,
được tái sử
dụng lại,

Programable Logic Device

• Thiết kế rất
phức tạp,
hàng trăm
man-year

Cell Base IC

Full Custom IC

CPLD

• Các trans tạo
sẵn thảnh
mảng, và
nhà thiết kế
thực hiện
việc tạo các
liên kết nối
giữa chúng
bằng cách
sử dụng các
thư viện cell
và CAD.
• Sản xuất đơn
lẻ được.

38
2/2

FPGA, PLD,
CPLD được
xếp vào nhóm
các IC lập trình
được bởi
người dùng

http://dce.hut.edu.vn

39
1/4

Phát sinh thứ 1:
Một khi chip ASIC càng mạnh thì thiết kế càng
tinh vi, phức tạp, càng tiềm tàng những sai sót
lớn.
Các phần mềm hỗ trợ, giả lập chưa thực sự
phản ánh hết được hoạt động thực tế của hệ
thống.
Để kiểm tra thiết kế, người kĩ sư buộc phải đặt
các nhà sản xuất sản xuất chip đơn lẻ và kiểm
tra trên các ứng dụng, môi trường thực  tốn
thời gian, và tiền bạc.
 cần hệ nền kiểm thử phần cứng nhanh chóng.
http://dce.hut.edu.vn

40
2/4

Năm 1984, Ross Freeman, Bernard
Vonderschmitt, đồng sáng lập công ty Xillinx.
Năm 1985, Xilinx đưa ra dòng FPGA thương mại
đầu tiên, XC2064. Năm 2006, Freeman được
vinh danh tại National Inventors Hall of Fame vì
sáng chế này.
FPGA dựa trên các công nghệ nền tảng như
PROM và PLD, nhưng với kiến trúc mới hiệu
quả hơn.
Các thiết kế IC được thử nghiệm prototype trên
các chip FPGA ngay lập tức  tiết kiệm thời
gian và tiền bạc.
http://dce.hut.edu.vn

41
3/4

Phát sinh thứ 2:
Các nhà sản xuất lớn chỉ cung cấp các chip
thông dụng trên thị trường, với số lượng lớn.
 bỏ qua nhu cầu về các IC chuyên dụng có số
lượng thấp, nhưng tổng nhu cầu thì rất lớn.
Phát sinh thứ 3:
Ban đầu, các chip lập trình được có giá thành
khá cao và tốc độ chậm, chỉ sử dụng trong các
phòng thí nghiệm.
Khi công nghệ sản xuất phát triển vượt bậc, thì
các chip lập trình được ngày càng mạnh và rẻ
 ứng dụng đại trà.
http://dce.hut.edu.vn

42
4/4

Hệ quả: Chân trời mới
FPGA không chỉ là chip prototype trong các
phòng thí nghiệm, mà thực sự trở thành sản
phẩm thường mại đại chúng.
Thị trường phần cứng được cung cấp một dòng
sản phẩm có thể thiết kế và sử dụng được ngay.
Các công ty vừa nhỏ, các kỹ sư hoạt động độc
lập, không phải lệ thuộc vào các IC của các nhà
sản xuất lớn  tự do sáng tạo.

http://dce.hut.edu.vn

43
vs
CustomIC

FPGA

Chi phí chế tạo lớn

Chi phí chế tạo thấp

Tối ưu tốc độ, năng
lượng…

Tối ưu tính năng

Sản xuất lớn

Sản xuất nhỏ

http://dce.hut.edu.vn

44
1/2
Nguyên nhân sử dụng chip ASIC prototyping
Other
3%

Easiest to
use
4%
Quality,
Reliability
9%
Complete
Solution
18%

Lowest
Power
3%

http://dce.hut.edu.vn

Lowest Cost
17%

Flexibility &
Expandability
31%

Best
Performance
(thoughput
speed)
15%
45
1/2
System On Chip

Hard IP
Hard IP
Soft IP
Soft IP
Others

IP-based

...

EDA
Tools

...

Soft IP

EDA
Tools

Hard IP
Others

EDA
Tools

Application specific integration platform
http://dce.hut.edu.vn

EDA
Integrator

Platform-based

Derivative

46
Intel Core i7 die
http://dce.hut.edu.vn

47
RCC, Reconfigurable Computing. Ví dụ: RAM,
ROM, PLA, PAL.
Input: Địa chỉ
Output: Giá trị
Giá trị = f(Địa chỉ)
y = f(x)

FPGA với tính chất lập trình được cao, ưu việt, là
đại diện của RCC.

http://dce.hut.edu.vn

48
Programable
Array Logic (a)
Programable
ROM (b)
PAL thương mại

Lập
trình
A
http://dce.hut.edu.vn

B

C

Yêu cầu: F = AB = ABC + ABC
49
Programable Logic Array, cả ma trận AND và OR
đều lập trình được.
Tiết kiệm dung lượng ma trận.
Bị hạn chế bởi số lượng các cổng AND khi số đầu vào
của cổng OR lớn hơn số cổng AND.
Trễ truyền lan lớn hơn và mật độ tích hợp nhỏ.

http://dce.hut.edu.vn

50
Generic Array Logic nâng
cấp từ PAL, gồm một ma
trận AND lập trình được
(cấu tạo từ EEPROM) và
ma trận OR cố định.
Tuy nhiên, các cổng OR
nằm trong các macrocell
được nối với flip-flop và các
bộ dồn kênh để có thể chọn
tín hiệu ra.
Tên gọi chung của các thiết
bị như PAL, PLA, GAL… là
Programable Logic Device
http://dce.hut.edu.vn

Ví dụ: Dùng GAL điều khiển
đèn giao thông:

51
FPGA gồm 3 thành phần chính
Khối logic – Logic Block (LB): đơn vị xử lý.
Khối Vào ra – IO cell: giao tiếp với bên ngoài.
Liên kết nối – Interconnection: liên kết các đơn vị xử lý.
Configurable
Logic Block

Thành phần khác
Buffer
ClockDll
…

http://dce.hut.edu.vn

I/O Block

Connect
Connec
t

52
1/3

Cả 3 thành phần: khối logic, khối vào ra, liên kết
nối, đều lập trình được.
Lập trình cho khối logic là hành động: “có kết nối
hay không phần tử logic A với phần tử logic B?”
Lập trình cho khối vào ra là hành động: “có kết nối
hay không đầu ra logic A với chuẩn ngoại vi B?”
Lập trình cho liên kết nối là hành động: “có kết nối
hay không khối logic A với khối logic/vào ra B?”

http://dce.hut.edu.vn

53
2/3

Với FPGA, lập trình là quá trình định tuyến giữa
các phần tử logic, flipflop… đã được chế tạo cố
định sẵn, để thực thi một tác vụ nào đó.
Một tuyến đều được chế tạo sẵn, và đính kèm một
khóa đóng mở. Tuyến được thiết lập hoặc hủy,
tương ứng với trạng thái khóa đóng hay mở.
Mỗi trạng thái của khóa đóng/mở ứng với một bit
nhớ trạng thái 0/1 tương ứng.
Tập hợp các bít nhớ tạo thành bộ nhớ cấu hình
cho FPGA.
 Bảng định tuyến được lưu trữ trong bộ nhớ.
 Công cụ EDA sẽ dịch HDL thành bảng định tuyến.
3/3
Phân tích

Ánh xạ vào
FPGA cụ thể

HDL

RTL

BIT file

• c := a + b;
• if (c == 1) then cf := 1;

•

• 01000100
• 11010101
• 10001001

Bộ nhớ cấu hình

http://dce.hut.edu.vn

55
LB

Tất cả ASIC lập trình được, bao gồm FPGA, đều
chứa các khối logic (cell logic) cơ bản giống nhau
tạo thành dải.
Có 4 loại khối logic:
Dựa vào bảng tìm kiếm
(LUT – Lookup Table) Xilinx
Dựa vào bộ ghép kênh
(Multiplexers) Actel
Dựa vào PAL/PLA
Altera
Transistor Pairs
http://dce.hut.edu.vn

I/O Cell I/O Cell I/O Cell
I/O
Cell

LB

LB

LB

I/O
Cell

I/O
Cell

LB

LB

LB

I/O
Cell

I/O
Cell

LB

LB

LB

I/O
Cell

I/O Cell I/O Cell I/O Cell

56
A0

0 MUX

A1

1

S

Mux 2x1 có thể
thực hiện được
các hàm bên

Biểu diễn
mức
transistor

SA

Cấu trúc cell logic ACT 1 (đơn module)

Cell ACT 1 chỉ có
một module logic.
Cell ACT 2, 3 có
nhiều module
logic hơn và có
Flip Flop riêng.
Cấu tạo Flip Flop
http://dce.hut.edu.vn

57
1/3

Bảng tìm kiếm, LUT,
Look-Up Table, là một
SRAM có K đầu vào với
2K bit nhớ, thực hiện
được mọi hàm logic có
K biến.
Thông thường, K = 4.

RAM 16bit

G4
G3
G2
G1

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

0
0
0
1
1
1
1
1
0
0
1
0
0
0
0
1

WE
G4
G3
G2
G1

G
Func.
Gen.

1
G4
G3
G2
G1

Tín hiệu ra của một LUT có thể quay trở lại, thành
đầu vào của chính LUT đó, hoặc LUT khác.
Trong một LB, thường có 3 LUT và được gọi là bộ
thực hiện hàm F, G và H.
http://dce.hut.edu.vn

58
2/3

Các LUT F và G tương đương và độc lập với
nhau, thực thi các hàm 4 biến và đưa kết quả tính
toán ra ngoài CLB, hoặc nhớ vào FF.
Nếu phép toán có nhiều hơn 4 biến thì LUT F, G
sẽ đưa kết quả tới LUT H để mở rộng thêm.
Flip-Flop đóng vai trò:
• Bit nhớ hoặc
• Chốt dữ liệu
Hai FF có thể set/reset đồng
bộ/không đồng bộ, tích cực
theo sườn âm/dương…
Cấu trúc cơ bản của LB dạng LUT
http://dce.hut.edu.vn

59
3/3

Số liệu đưa vào LB có thể được xử lý bởi các hàm
4 đầu vào, có thể được chốt ở thanh ghi, có thể
được chọn kênh, hoặc bởi cả 3 thao tác trên.

Khối logic lập trình
được, CLB, của
XC4000 E/X

http://dce.hut.edu.vn

60
http://dce.hut.edu.vn
61

LE(LB) của Altera Cyclone II
Còn được gọi là CrossPoint FPGA.
Số lượng cổng ít, ~ 4000

http://dce.hut.edu.vn

62
FPGA kế thừa nhiều ý tưởng thiết kế của các sản
phẩm trước  sự quen thuộc trong kiến trúc.
Nhưng số chức năng, mức độ tích hợp, khả năng
tính toán của từng đơn vị xử lý trong FPGA có
khác nhau, gồm Coarse /kɔ:s/ , và Fine.
Coarse-grained: Đơn vị xử lý là một tập hợp của
các PLD, các khối cấu hình được CLB, thực thi
được hàm phức tạp, có yêu cầu tính toán lớn. Ví
dụ: Actel Mux, Xilinx LUT.
Fine-grained: Đơn vị xử lý chỉ gồm các khối cấu
hình được CLB nhỏ, thực thi các hàm logic đơn
giản. Ví dụ Transistor Pairs.
http://dce.hut.edu.vn

63
LB

LB

LB

LB

LB

Ma trận đối xứng
Symmetrical Array

LB

LB

LB

LB

LB

Sea-of-Gates

LB

LB

LB

LB

Cấu trúc dòng
Row-based

LB

LB

LB

LB

LB

LB

LB

LB

LB

LB

http://dce.hut.edu.vn

PLD

PLD

PLD phân cấp
Hierarchical
(CPLD)

PLD

PLD

PLD

PLD

PLD

PLD

64
1/3

Kết nối dài

Kết nối đa năng

LB

SM

Kết nối trực tiếp

LB

SM

SM

Ma trận
chuyển mạch

Liên kết nối dài, tín hiệu clk liên thông toàn bộ dải.
Liên kết nối trực tiếp giữa 2 khối LB.
Liên kết nối đa năng gồm nhiều kết nối và các
chuyển mạch.
http://dce.hut.edu.vn

65
2/3

Kết nối dài

Kết nối trực tiếp

http://dce.hut.edu.vn

Kết nối đa năng

66
3/3

Phần lớn các kết nối tạo thành các lưới kết nối
theo hàng và theo cột.
Giao cắt giữa các kết nối theo hàng và theo cột sẽ
tập trung các điểm cần lập trình kết nối, tạo thành
ma trận chuyển mạch (Switching Matrix), nằm
phân tán trong FPGA.

SM

http://dce.hut.edu.vn

67
Kết nối dài

LB

LB

LB

LB

http://dce.hut.edu.vn

LB

LB

68
Spartan
low end

Cyclone
low end

http://dce.hut.edu.vn

Arrix
middle end

Arria
middle end

Virtex
high end

Stratix
high end

69
QuickLogic
Cypress
Lucent 2%
2%
Lattice 6%
6%
Vantis
7%

Xilinx
36%

Actel
10%

Altera
31%

http://dce.hut.edu.vn

70
Ngôn ngữ HDL phù hợp.
Bộ công cụ CAD, EDA phù hợp.
Ước lượng được số lượng các CLB cần thiết
Dự kiến số lượng các chân I/O cần thiết.
Điện áp hoạt động. Các FPGA mới sử dụng mức
điện áp thấp LVTTL, LVCMOS, đòi hỏi phải
chuyển đổi điện áp để tương thích với điện áp
TTL, cung cấp một hoặc nhiều vùng sử dụng đồng
thời đa mức điện áp.
Tốc độ FPGA.
Khả năng tài chính.
http://dce.hut.edu.vn

71
1/4
Thiết kế hệ thống
(System Design)

Tích hợp vào ra
(I/O integration)
Đặc tả thiết kế
(Design Specification)
Tổng hợp
(Synthesis)
Kiểm tra thiết kế
(Design Verification)
Copyright (c) 10/2006 by NPB

72
2/4

Bước 1 - Thiết kế hệ thống
Phần chức năng thực hiện trên FPGA
Phần chức năng này tích hợp (kết hợp) với phần còn
lại của hệ thống như thế nào

Bước 2 - Tích hợp vào ra với phần còn lại của hệ
thống

Copyright (c) 10/2006 by NPB

73
3/4

Bước 3 - Đặc tả thiết kế
Mô tả chức năng của thiết kế bằng:
Các trình soạn sơ đồ logic
Các ngôn ngữ đặc tả phần cứng

Kết hợp mô phỏng

Bước 4 - Tổng hợp logic
Giống bước Tổng hợp logic trong quy trình đầy
đủ
Kết hợp tối ưu:
trễ
năng lượng hao phí
Copyright (c) 10/2006 by NPB

74
4/4

Bước 5 - Kiểm tra thiết kế
Thực hiện các mô phỏng, phân tích cuối cùng
(RTL, thời gian…)
Xác định các thông số của ASIC đã thiết kế
(tần số xung nhịp…)

Nạp chip và chạy thử trên hệ thống!
Copyright (c) 10/2006 by NPB

75
1/3

Spactan II 200

Userguide.pdf

Spactan II 300
PCI 32bits
RS232

http://dce.hut.edu.vn

76
2/3

ProASIC3 Evaluation Board

http://dce.hut.edu.vn

77
1/2

IDE của nhà sản xuất FPGA.

Atera

Xilinx

Actel

Chỉ có nhà sản xuất mới thấu hiểu nguyên tắc
hoạt động của FPGA của họ.
 chỉ có các IDE của nhà sản xuất mới routing,
timing, cấu hình được cho FPGA.
EDA của bên thứ 3 chỉ xử lý mức logic, rồi gọi IDE
của nhà sản xuất để đảm nhiệm mức vật lý.
http://dce.hut.edu.vn

78
2/2

Một số gói chương trình của bên thứ 3:
Leonardo Spectrum, CT tổng hợp của Mentor
Graphics
Synplify, CT tổng hợp của Synplicity
ModelSim , CT mô phỏng của Mentor Graphics.
Active-HDL, CT thiết kế và mô phỏng của Aldec Active

http://dce.hut.edu.vn

79
http://dce.hut.edu.vn

80
•
•
•
•
•

Tạo thực thể thiết kế bằng code mẫu, lấy từ Language Assistant.
Tạo thực thể thiết kế, bằng giao diện Block Diagram.
Tra cứu lỗi và xử lý “port mapping” trong quá trình thiết kế bằng Block
Diagram.
Chạy giả lập mức logic,
Cách đưa giá trị vào các tín hiệu để giả lập logic.

http://dce.hut.edu.vn

81
Phần III:

Very high speed integrated circuit Hardware Description Language

• Giới thiệu các ngôn ngữ HDL (2)
• Cấu trúc mã nguồn VHDL (2)
• Mô hình lập trình VHDL
• Các phương pháp thiết kế
1/3

Hardware Description Language, ngôn ngữ mô tả
phần cứng.
C = A and B
A <= B

rising_edge(CLK)
5V

C <= „1‟

Mọi kết cấu phần cứng đều có thể biểu diễn dưới
dạng các lệnh phần mềm, các hàm và thủ tục.
Full
Full
Adder
Full
Adder
Adder

A := B + C

Module1(A);
Module(B);
A<=B;

M1
M2
2/3

Mô tả được kiến trúc xử lý tương tranh (đặc trưng
riêng của phần cứng so với phần mềm).
C
L

X

C <= A and B;
L <= P and Q;
X <= C and L;

C <= A and B;
B <= C;

Sử dụng các lệnh tuần tự để mô phỏng xử lý song
song của phần cứng  dễ làm quen, dễ lập trình.
+

b b b
a a a

a a a

for (i=1; i<3; i++)
{
a[i]:= a[i] + b[i]
}

thay 3
bằng J?

Xử lý tuần tự của
phần cứng biểu
diễn thế nào?
3/3

Cho phép giả lập các điều kiện đầu vào để kiểm
thử thiết kế phần cứng -> thực hiện test-driven,
unitest.
001100010

Khi áp dụng source HDL lên 1 chip lập trình được
nào đó thì các trình giả lập có thể tính toán chính
xác độ trễ truyền lan, dạng sóng… tại mỗi điểm.
Gợi ý: nếu không chắc chắn về thiết kế mạch số
từ các phần từ logic, có thể viết bằng VHDL rồi
tham khảo phân tích RTL.
Có 2 ngôn ngữ, được sử dụng rộng rãi và công
nhận bởi IEEE:
VHDL
Verilog

Các ngôn ngữ khác như AHDL, JHDL, RHDL…

Ngoài HDL, còn có HVL – Hardware Verification
Language như OpenVera,Superlog

http://dce.hut.edu.vn

86
Là ngôn ngữ lập trình trừu
tượng, đối lập với thiết kế
mức logic, mức transistor.
Phù hợp với phương pháp
thiết kế top-down.
Giảm thời gian thiết kế, kiểm
thử, sản xuất…
Giảm chi phí kỹ thuật không
lặp lại None Recurring Enginnering.
Tái sử dụng thiết kế.
Dễ debug, tính tài nguyên.
http://dce.hut.edu.vn

C <= A + B

HDL

chi phí
? cell
? triger

? tốc độ
? phần tử logic
87
Mô tả phần cứng bằng HDL.
Kiểm thử nguyên lý bằng giả lập trên HDL.
Kiểm tra chi tiết bằng phân tích RTL.
Chọn IC lập trình được.
Gắn kết các chân IO của phần cứng HDL với IC.
Biên dịch phần cứng HDL theo IC.
Nạp phần cứng HDL lên IC.

http://dce.hut.edu.vn

88
1/3

Very high speed integrated circuit Hardware
Description Language
1980, ngôn ngữ HDL đầu tiên, VHDL được ra đời
theo mệnh lệnh của bộ quốc phòng Mỹ.
VHDL dùng để ghi nhận cách hoạt động của các
ASIC mà các công ty cung cấp sử dụng trong thiết
bị quân sự
 giống đặc tả cú pháp tài liệu.
Bộ QP yêu cầu VHDL phải kế thừa cú
pháp và các định nghĩa của ngôn ngữ
Ada (mở rộng của Pascal) để tái sử dụng.
http://dce.hut.edu.vn

89
2/3

1983,
,
, Intermetrics, góp kinh
nghiệm về ngôn ngữ bậc cao và thiết kế top-down
để phát triển VHDL.
1987, bộ QP tuyên bố: “Tất cả mạch điện tử số
đều được mô tả trong VHDL”.
VHDL cũng được công nhận là chuẩn IEEE 1076.
Mọi hệ thống con điện tử của máy bay F-22 đều
đặc tả bởi VHDL.
Lúc này, VHDL đã là một chuẩn
công nghiệp, nhưng ít công cụ hỗ trợ.
http://dce.hut.edu.vn

90
3/3

1996, các công cụ giả lập logic, có thể hiểu cú
pháp VHDL xuất hiện nhanh chóng.
Sau đó, các công cụ tổng hợp, với đầu vào là
VHDL, đầu ra là mô tả mạch phần cứng thực thi.

Chuẩn IEEE 1164 được bổ
sung,với nhiều kiểu logic đa
giá trị khác nhau (U, Z, X…)

VHDL
library IEEE;
IEEE.std_logic_1164.all;

(Sẽ được thường xuyên sử dụng trong code VHDL)

01/2009, VHDL 4.0, còn gọi là VHDL 2008, là
chuẩn IEEE 1076-2008
http://dce.hut.edu.vn

VHDL wiki
91
1/2

Có tính định kiểu mạnh.
Không phân biệt chữ hoa, thường.
Cho phép tạo mảng với index tăng dần hoặc giảm
dần. Ví dụ: bienx : out STD_LOGIC_VECTOR(2 downto 1)
Có thể đọc/ghi file, thường dùng để giả lập, tạo số
liệu vào, và thẩm định kết quả.
Một người ít kinh nghiệm cũng có thể viết VHDL
và giả lập thành công, nhưng không chắc đã tổng
hợp được lên một thiết bị vật lý, hoặc vượt quá
khả năng thực tế.
Người dùng có thể dùng các VHDL IDE như Altera
Quatus, Xilinx ISE… để tạo sơ đồ RTL.
http://dce.hut.edu.vn

92
2/2

Có thể chạy giả lập để xem dạng sóng tín hiệu với
các testbench tương ứng.
Khi source VHDL được dịch dưới dạng “cổng và
kết nối”, tức là đã được ánh xạ lên một thiết bị vật
lý như CPLD, FPGA, thì đó chính là một phần
cứng thực sự.
Phù hợp với thiết kế mức hệ thống, vì cho phép
kiểm tra hành vi của hệ thống, giả lập mà không
cần thông qua công cụ tổng hợp lên phần cứng.
Mô tả được tính tương tranh của phần cứng concurrent system.
1 mã nguồn VHDL phù hợp với nhiều phần cứng.
http://dce.hut.edu.vn

93
1/3

1983~1984, Phil Moorby và Prabhu Goel đã phát
triển xong một ngôn ngữ HDL, và được Gateway
Design Automation công bố với tên Verilog, cùng
trình mô phỏng Verilog.
1985, ra mắt bản nâng cấp của ngôn ngữ và trình
mô phỏng Verilog XL, có thể mô phỏng thiết kế
trên 1 triệu cổng, dễ dàng debug, mô phỏng phần
cứng và cả tác nhân kích thích.
1987, Verilog thỏa mãn mong đợi của các kỹ sư
thiết kế và ngày càng phổ biến.
1989,
mua lại Gateway.
http://dce.hut.edu.vn

94
2/3

1990, Cadence chia ngôn ngữ Verilog và trình mô
phỏng Verilog-XL thành các sản phẩm riêng biệt.
 công khai Verilog thành chuẩn mở, cạnh tranh
với VHDL.
 Hầu hết các xưởng chế tạo ASIC đều hỗ trợ
Verilog và sử dụng Verilog-XL làm trình mô phỏng.
1993, 85% thiết kế và thẩm tra ASIC dùng Verilog.
1995, trở thành chuẩn IEEE 1364, hay còn gọi là
Verilog-95
Cùng lúc, Cadence phát triển Verilog-A dành cho
mạch tương tự, và là một bộ phận của VerilogAMS (Analog and Mixed-Signal)
http://dce.hut.edu.vn

95
3/3

2005, là chuẩn IEEE 1634-2005, còn gọi là Verilog
2005.
SystemVerilog là tập bao quát hơn, gồm cả
Verilog 2005 bên trong, với nhiều tính năng mới
và khả năng hỗ trợ thẩm định thiết kế, mô hình
hóa thiết kế (nhờ tích hợp Hardware Verification
Language).
2009, SystemVerilog và Verilog đều được hợp
nhất lại trong IEEE 1800-2009, còn gọi là
SystemVerilog 2009.

http://dce.hut.edu.vn

96
vs
Khả năng trừu tượng

1/4
System
Algorithm

VHDL
Verilog

RTL
Logic
Gate
Khả năng mô hình hóa

Kiểu dữ liệu
• VHDL: có nhiều kiểu, hàm chuyển kiểu, người dùng tự
định nghĩa kiểu.
• Verilog: kiểu đơn giản, gần với phần cứng, người dùng
không tự định nghĩa kiểu được.
http://dce.hut.edu.vn

97
vs

2/4

Tái sử dụng thiết kế
VHDL: các procedure và function có thể đặt trong một
package và có thể được dùng lại trong thiết kế khác.
Verilog: các procedure và function phải đặt trong một
module, trong các file riêng rẽ và được bao gồm bằng
cách sử dụng chỉ dẫn biên dịch include.

Tính dễ học
VHDL: do tính định kiểu mạnh nên có lợi cho người
nhiều kinh nghiệm, và có nhiều cách để mô hình cùng
một mạch số.
Verilog: tương đối dễ học với người mới bắt đầu. Tuy
nhiên, các chỉ định biên dịch và ngôn ngữ PLI đính
kèm lại không đơn giản.
http://dce.hut.edu.vn

98
vs

3/4

Định thời
Verilog cho khả năng liên kết thông tin giữa công cụ
layout với công cụ tổng hợp/mô phỏng tốt hơn
VHDL,nên khả năng biểu diễn định thời chính xác hơn.

Thư viện
VHDL: thư viện là miền lưu trữ trong môi trường máy
chủ các thực thể (entity), kiến trúc (architecture), gói
(package) và cấu hình (configuration) biên dịch được.
Verilog: không tồn tại.

Tính dễ đọc
VHDL: giống ngôn ngữ Ada, Pascal.
Verilog: giống ngôn ngữ C (50%C + 50%Ada)
http://dce.hut.edu.vn

99
vs

4/4

Mô hình thông số hóa
VHDL,Verilog đều cho phép. Ví dụ, một đối tượng tổng
quát n-bit, rồi được cụ thể hóa với n = 8.

Sao chép cấu trúc
VHDL: phát biểu generate sẽ tạo ra bản sao của các
instance của cùng một đơn vị thiết kế hoặc một phần
của thiết kế và kết nối một cách thích hợp.
Verilog: không có phát biểu tương tương.

http://dce.hut.edu.vn

100
1/5

Thiết kế
FPGA
thường dùng
VHDL.

Thiết kế
None FPGA
thường dùng
Verilog hoặc
System
Verilog

06/2011, http://blogs.mentor.com/verificationhorizons/blog/tag/vhdl/
http://dce.hut.edu.vn

101
2/5

Ngoại trừ
System
Verilog, việc
sử dụng các
ngôn ngữ
HDL đang
giảm dần.

06/2011, http://blogs.mentor.com/verificationhorizons/blog/tag/vhdl/
http://dce.hut.edu.vn

102
3/5

Kiểm thử
thiết kế
FPGA
thường dùng
VHDL.

Thiết kế
None FPGA
thường dùng
System
Verilog hoặc
Verilog

06/2011, http://blogs.mentor.com/verificationhorizons/blog/tag/vhdl/
http://dce.hut.edu.vn

103
4/5

Duy nhất
System
Verilog đang
tăng dần
khuynh
hướng sử
dụng trong
thẩm định
thiết kế.

06/2011, http://blogs.mentor.com/verificationhorizons/blog/tag/vhdl/
http://dce.hut.edu.vn

104
vs

5/5

Số lượng tìm kiếm về VHDL nhiều hơn Verilog,
nhưng sự khác biệt đang giảm dần.

http://dce.hut.edu.vn

105
Viết trực tiếp mã
nguồn bằng VHDL,
Verilog.

Sơ đồ khối, sơ đồ
cấu trúc

Sơ đồ trạng thái

Kết hợp

Thiết kế bằng sơ đồ sẽ được sinh tự động ra ngôn
ngữ HDL, không đòi hỏi nhiều kỹ năng về HDL.
Thiết kế bằng sơ đồ mang tính trực quan hơn, khả
năng tổng hợp được lên phần cứng cao hơn.
http://dce.hut.edu.vn

106
library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity Mach_AND is
port(
a : in STD_LOGIC;
b : in STD_LOGIC;
o : out STD_LOGIC
);
end Mach_AND;

architecture Cach_Hoat_Dong_01 of Mach_AND is
begin
o <= a and b;
end Cach_Hoat_Dong_01;
http://dce.hut.edu.vn

107
http://dce.hut.edu.vn

108
http://dce.hut.edu.vn

109
Sơ đồ trạng thái

Sơ đồ khối

Viết mã nguồn HDL

• Thiết kế để xử lý một
thuật toán, ít thực
thể con.

• Thiết kế không có
tính thuật toán, nhiều
thực thể con.

• Thiết kế được mô tả
với nhiều mệnh đề
“nếu.. thì..”

• Thiết kế mang tính
”giao tiếp và phối
phép” thực thể.

• Thiết kế nhỏ, dễ
kiểm soát hoạt động;
hoặc thuật toán, thiết
kế có tính tuần tự
cao.

• Thiết kế thực thể
điều khiển, thực thể
trọng tài, thực thể
điều phối, phân xử.

• Thiết kế mạch tổ
hợp, thực thể xử lý
tại ngõ vào/ra,
schematic.

• Phù hợp với thiết kế
CU, phần xử ngắt,
điều phối pipeline
trong CPU.

• Phù hợp với thiết kế
ALU, thiết kế thanh
ghi đa năng/chuyên
dụng, thiết kể tổng
thể toàn bộ CPU

http://dce.hut.edu.vn

• Giả lập môi trường
hoạt động để test.
• Thiết kế tạm mức hệ
thống (không có khả
năng tổng hợp), sau
đó được thay thể
dần bằng các thiết
kế khả tổng hợp, với
tiếp cận top-down.
• Thiết kế FlipFlop,
Mux, ALU,

110
http://dce.hut.edu.vn

111
Khai báo thư viện

library IEEE;
use IEEE.STD_LOGIC_1164.all;

Phần vỏ bên ngoài

entity Mach_AND is
port(
a : in STD_LOGIC;
b : in STD_LOGIC;
o : out STD_LOGIC
);
end Mach_AND;

Hoạt
động
xử
lý
http://dce.hut.edu.vn

architecture Cach_Hoat_Dong_01 of Mach_AND is
begin
o <= a and b;
end Cach_Hoat_Dong_01;
Khai báo thư viện
#include <stdio.h>

Định nghĩa giao diện
void Mach_AND(
bool a,
bool b,
bool & o
);

Hoạt động xử lý
void Mach_AND(…..)
{
o = a & b;
}
http://dce.hut.edu.vn

library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity Mach_AND is
port(
a : in STD_LOGIC;
b : in STD_LOGIC;
o : out STD_LOGIC
);
end Mach_AND;

architecture Cach_Hoat_Dong_01 of Mach_AND is
begin
o <= a and b;
end Cach_Hoat_Dong_01;
library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity Mach_AND is
port(
a : in STD_LOGIC;
b : in STD_LOGIC;
o : out STD_LOGIC
);
end Mach_AND;

architecture Cach_Hoat_Dong_01 of Mach_AND is
begin
o <= a and b;
end Cach_Hoat_Dong_01;
http://dce.hut.edu.vn
Nem chua (entity):
•Thanh Hóa (archi),
•Hà Tây (archi) ,
•Lai Vung (archi),

Kiến trúc hoạt động thứ 1,
do công ty A phát triển.

Kiến trúc hoạt động thứ 2,
do công ty B phát triển.
http://dce.hut.edu.vn

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity Mach_AND is
port(
a : in STD_LOGIC;
b : in STD_LOGIC;
o : out STD_LOGIC
);
end Mach_AND;
architecture Cach_Hoat_Dong_01 of Mach_AND is
begin
o <= a and b;
end Cach_Hoat_Dong_01;

architecture Cach_Hoat_Dong_02 of Mach_AND is
begin
o <= not ( (not a) or (not b) );
end Cach_Hoat_Dong_01;
Package
Gói

Generic
Architecture
(Dataflow)
Dạng luồng
Lệnh song
song

Định nghĩa Entity
Định nghĩa Architecture, kiểu

Entity
Thực thể

Ports

Architecture
(Behavioral)
Dạng hoạt động
Lệnh song
song

Architecture
(Structural)
Dạng cấu trúc

Tôi mua túi
nhiều linh kiện,
trong đó có
6 con IC.
2 con IC có
14 chân vào ra
với 6 NOT TTL,
và 4 con IC có
8 chân vào ra
với
3 NOT CMOS.

Process

Lệnh tuần tự

Component
Thể hiện

Định nghĩa Process

http://dce.hut.edu.vn

116
http://dce.hut.edu.vn

117
2.1. Các đơn vị cơ bản của VHDL
Mã lệnh VHDL gồm 3 phần cơ bản sau:
Khai báo LIBRARY (thư viện): gồm danh sách các thư
viện sử dụng trong thiết kế (VD: ieee, std, work, …)
ENTITY (thực thể): mô tả các chân vào-ra của mạch
ARCHITECTURE (kiến trúc): mô tả hoạt động của
mạch

LIBRARY:
Tập hợp các đoạn lệnh thường được sử dụng
Cho phép sử dụng lại các đoạn mã lệnh và chia sẻ với
các ứng dụng khác
Mã lệnh được viết theo khuôn dạng của các
FUNCTION, PROCEDURE hay COMPONENT và
được đặt bên trong các PACKAGE.
Copyright (c) 10/2006 by NPB

118
Các đơn vị cơ bản của VHDL (tiếp)

Copyright (c) 10/2006 by NPB

119
Nội dung chương 2

2.1. Các đơn vị cơ bản của VHDL
2.2. Khai báo thư viện (Library)
2.3. Thực thể (Entity) và thể hiện (Component)
2.4. Kiến trúc (Architecture)
2.5. Các ví dụ

Copyright (c) 10/2006 by NPB

120
2.2. Khai báo thư viện (Library)
Cú pháp:
LIBRARY library_name;
USE library_name.package_name.package_parts;

Thường sử dụng các thư viện sau:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY std;
USE std.standard.all;
LIBRARY work;
USE work.all;

Copyright (c) 10/2006 by NPB

121
Khai báo thư viện (tiếp)
Các thư viện std và work ngầm định có sẵn, không cần
khai báo.
Sử dụng thư viện ieee khi dùng các kiểu dữ liệu
STD_LOGIC, STD_ULOGIC, …
Thư viện ieee gồm các gói (package):
std_logic_1164: các mức logic STD_LOGIC và STD_ULOGIC
std_logic_arith:
Các kiểu dữ liệu SIGNED và UNSIGNED
Các thuật toán xử lý dữ liệu và các phép toán so sánh
Các hàm chuyển đổi dữ liệu

std_logic_signed: cho phép xử lý dữ liệu STD_LOGIC_VECTOR
như là dữ liệu kiểu SIGNED
std_logic_unsigned: cho phép xử lý dữ liệu
STD_LOGIC_VECTOR như là dữ liệu kiểu UNSIGNED
Copyright (c) 10/2006 by NPB

122
Nội dung chương 2

2.1. Các đơn vị cơ bản của VHDL
2.2. Khai báo thư viện (Library)
2.3. Thực thể (Entity) và thể hiện (Component)
2.4. Kiến trúc (Architecture)
2.5. Các ví dụ

Copyright (c) 10/2006 by NPB

123
2.3. Thực thể (Entity)
Thực thể là một
khai báo, đặc tả
giao diện của đối
tượng thiết kế,
qua đó, thực thế
này trao đổi với
thực thế khác
trong cùng môi
trường.
Thực thể ổ cứng,
máy bay, điện
thoại di động …
Các thành phần đặc trưng của VHDL
2.3. Thực thể (Entity)
Giống định nghĩa giao diện của class trong C++
class Mach_And
{
int a;
int CachHoatDong(int);
};

Copyright (c) 10/2006 by NPB

125
2.3. Thực thể (Entity)
Mỗi thực thể bao gồm hai thành phần
Các thuộc tính, thông số (parameters)
Các đường kết nối vào, ra với bên ngoài
Thực thể (Entity)
Cú pháp:
ENTITY entity_name IS
GENERIC ( -generic_name : generic_type := <Giá trị mặc định>;
... );
PORT (
port_name : signal_mode signal_type;
port_name : signal_mode signal_type;
...);
END entity_name;

Trong đó:
Signal mode: IN, OUT, INOUT, BUFFER
Signal type: BIT, STD_LOGIC, INTEGER, …

generic type: integer, time…
Copyright (c) 10/2006 by NPB

127
Ví dụ 1

Copyright (c) 10/2006 by NPB

128
Ví dụ 2: Dùng khai báo generic

entity Eight_bit_register is
generic (
LENGTH : integer := 8 -- Giá trị mặc định
Fmax: integer := 50 -- Đơn vị MHz
);
port(
CLK : in STD_LOGIC;
DIN : in STD_LOGIC_VECTOR(LENGTH downto 0);
DOUT : out STD_LOGIC_VECTOR(LENGTH downto 0)
);
end Eight_bit_register;
Ví dụ 2: (tiếp)

-- Nếu tạo component từ entity với độ
-- rộng bus mặc định, 8 bit.
U1 : eight_bit_register
port map( CLK => NET2342 );

-- Nếu tạo component từ entity với độ
-- rộng bus 5 bit.
U1 : eight_bit_register
generic map ( LENGTH => 5 )
130
port map( CLK => NET2342);
Thể hiện (Component)
Thể hiện là một thực thể vật lý được đem vào sử
dụng, được nhúng vào một kiến trúc của một thực
thể khác.
Giống như khái niệm thể hiện trong class của C++
{
Mach_And U1,
Mach_And U2;
U1(a,b,tmp);
U2(tmp,c,o);
return o;
}

Ví dụ:
U1 : Mach_And
generic map ( LENGTH => 5 )
port map( CLK => NET2342);
Copyright (c) 10/2006 by NPB

131
Nội dung chương 2

2.1. Các đơn vị cơ bản của VHDL
2.2. Khai báo thư viện (Library)
2.3. Thực thể (Entity) và thể hiện (Component)
2.4. Kiến trúc (Architecture)
2.5. Các ví dụ

Copyright (c) 10/2006 by NPB

132
2.4. Kiến trúc (Architecture)
Kiến trúc của một thực thể cho biết cách hoạt
động của thực thể đó.
Giống như lập trình cho các method trong class
của C++.
void Mach_And.CachHoatDong(bool a, bool b, bool &o)
{
o = a & b;
}

Mỗi thực thể phải đi kèm với ít nhất 1 kiến trúc.
Mỗi thực thể có thể có nhiều kiến trúc, giống như
hàm ảo trong các class của C++. Việc kiến trúc
nào được dùng, sẽ tùy vào cấu hình lúc sử dụng
Các thành phần đặc trưng của VHDL
của người phát triển.
Copyright (c) 10/2006 by NPB

133
2.4. Kiến trúc (Architecture) (tiếp)
Cú pháp:
ARCHITECTURE architecture_name OF entity_name IS
[declarations]
BEGIN
(code)
END architecture_name;

Ví dụ:
ARCHITECTURE myarch1 OF nand_gate IS
BEGIN
x <= a NAND b;
END myarch1;
ARCHITECTURE myarch2 OF nand_gate IS
BEGIN
x <= NOT ( (NOT a) OR(NOT b) );
END myarch2;
Copyright (c) 10/2006 by NPB

134
Các kiểu mô tả kiến trúc
Mô hình cấu trúc (Structural Style): gồm các thành
phần (component) được liên kết với nhau.
Mô hình luồng dữ liệu (Dataflow Style): gồm các
lệnh gán được thực hiện đồng thời.
Mô hình hoạt động (Behavioral Style): gồm các
lệnh gán được thực hiện tuần tự.
Dạng kết hợp của 3 kiểu mô hình trên.
Mô hình cấu trúc và luồng dữ liệu gần với hoạt
động thực tế của phần cứng hơn. Mô hình hoạt
động dễ học, dễ quen hơn vì giống phần mềm.
Các thành phần đặc trưng của VHDL

Copyright (c) 10/2006 by NPB

135
Nội dung chương 2

2.1. Các đơn vị cơ bản của VHDL
2.2. Khai báo thư viện (Library)
2.3. Thực thể (Entity)
2.4. Kiến trúc (Architecture)
2.5. Các ví dụ

Copyright (c) 10/2006 by NPB

136
Ví dụ 1
Trigger D xúc phát sườn dương có tín hiệu Reset
tích cực mức cao.
Nếu rst = 1 thì q = 0
Ngược lại:
Nếu clk chuyển từ 0 lên 1 thì q = d
Còn lại thì hệ giữ nguyên trạng thái.

Copyright (c) 10/2006 by NPB

137
Ví dụ 1 (tiếp)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

--------------------------------------LIBRARY ieee;
USE ieee.std_logic_1164.all;
--------------------------------------ENTITY dff IS
PORT (d, clk, rst: IN STD_LOGIC;
q: OUT STD_LOGIC);
END dff;
--------------------------------------ARCHITECTURE behavior OF dff IS
BEGIN
PROCESS (rst, clk)
BEGIN
IF (rst='1') THEN
q <= '0';
ELSIF (clk'EVENT AND clk='1') THEN
q <= d;
END IF;
END PROCESS;
END behavior;
--------------------------------------Copyright (c) 10/2006 by NPB

138
Ví dụ 2
Trigger D xúc phát sườn dương có đầu vào D là
đầu ra của 1 cổng NAND 2 đầu vào.

Copyright (c) 10/2006 by NPB

139
Ví dụ 2 (tiếp)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

--------------------------------------ENTITY example IS
PORT ( a, b, clk: IN BIT;
q:OUT BIT);
END example;
--------------------------------------ARCHITECTURE example OF example IS
SIGNAL temp : BIT;
BEGIN
temp <= a NAND b;
PROCESS (clk)
BEGIN
IF (clk'EVENT AND clk='1') THEN q<=temp;
END IF;
END PROCESS;
END example;
---------------------------------------- Có thể thay dòng 8 và 10 bằng q <= a NAND b ở dòng 13
Copyright (c) 10/2006 by NPB

140
http://dce.hut.edu.vn

141
Nội dung chương 3
3.1. Khái niệm chung về tín hiệu
3.2. Phân loại tín hiệu
3.3. Khai báo tín hiệu và phạm vi sử dụng
3.1. Khái niệm chung về tín hiệu
Truyền thông là quá trình truyền thông tin từ đầu
phát đến đầu thu
Có nhiều phương thức để truyền thông tin nhưng
đều có một thành phần chung là

tín hiệu (Signal)
Ví dụ tín hiệu
Tín hiệu (Signal)
Tín hiệu trong các thiết bị điện tử là tín hiệu điện
Tín hiệu (Signal)
Tầm quan trọng của tín hiệu điện (electrical signal)
Tín hiệu điện đóng vai trò rất quan trọng trong hoạt
động của các thiết bị điện tử
-> VHDL: tín hiệu đóng vai trò rất quan trọng trong việc
mô tả quá trình trao đổi dữ liệu giữa các mạch, các
khối chức năng với nhau
3.2. Phân loại tín hiệu
Phân loại theo số đường tín hiệu
Đơn tín hiệu (single signal)
Đa tín hiệu (multiple signal)

Phân loại theo chức năng của tín hiệu
Tín hiệu ghép nối với bên ngoài (External signal)
Tín hiệu bên trong thiết bị (Internal signal)
Đơn tín hiệu & Đa tín hiệu
 Đơn tín hiệu: một đường kết nối -> bit
 Đa tín hiệu (bus, vector): nhiều đường kết nối -> bit_vector
Độ rộng bus và trật tự các bit

bit_vector(7 downto 0)

bit_vector(0 to 7)
Tín hiệu trong & ngoài
Tín hiệu ngoài (External Signal): kết nối hệ thống
với thế giới bên ngoài
Tín hiệu trong (Internal Signal): kết nối các thành
phần bên trong hệ thống
Tín hiệu trong & ngoài
External Signals: DATA, RESULT, EXTBUS, a, b, c…
Internal Signals: x, y, INTBUS
3.3. Khai báo tín hiệu
Vị trí khai báo
ENTITY

External Signals
ARCHITECTURE

Internal Signals
Khai báo External Signals
Port_name: Mode Port_Type
Khai báo Internal Signals
Signal_name: Signal_Type
Phạm vi sử dụng
Các tín hiệu khai báo trong một package có thể sử
dụng trong tất cả các đối tượng sử dụng package
đó
Các tín hiệu của interface (external signals) có thể
sử dụng trong tất cả các architecture của interface
đó
Các tín hiệu khai báo bên trong một architecture
thì chỉ có thể sử dụng trong architecture đó
Ví dụ

MUX5-1
Ví dụ
entity mux5_1 is
port(u, v, w, x, y: IN std_logic_vector(2 downto 0);
s: IN std_logic_vector(2 downto 0);
m: OUT std_logic_vector(2 downto 0));
end mux5_1;
architecture structure1 of mux5_1 is
signal out1, out2, out3: std_logic_vector(2 downto 0);
begin
--Khai bao va noi chan cac component voi nhau
mux21_1: entity work.mux2_1(behavior)
port map(u, v, out1, s(0));
mux21_2: entity work.mux2_1(behavior)
port map(w, x, out2, s(0));
mux21_3: entity work.mux2_1(behavior)
port map(out1, out2, out3, s(1));
mux21_4: entity work.mux2_1(behavior)
port map(out3, Y, m, s(2));
end structure1;
1/3

Trễ truyền lan
của tín hiệu là
khoảng thời gian
cần thiết để tín
hiệu đi từ đầu
vào tới đầu ra và
có trạng thái ổn
định và hợp lệ.

out

2ns
t
in

out

ổn định

Trễ truyền lan tăng khi nhiệt độ môi trường hoạt
động, điện áp nguồn cấp, kéo tải đầu ra tăng.

http://dce.hut.edu.vn

158
2/3

Dây dẫn dài 6 inch, có trễ
truyền lan khoảng 1ns.
Cổng logic, tùy công nghệ chế
tạo, trễ khoảng 10ns~1ps.
Trễ trên một đường dẫn
bằng tổng độ trễ của từng
thành phần trên đường
dẫn đó. T = Σ ti
Độ trễ của một IC được
tính bằng độ trễ lớn nhất
trong các đường dẫn giữa
đầu vào và đầu ra.
http://dce.hut.edu.vn

15,2cm, trễ ~1 ns

Trễ trên đường dẫn AiCi+1 lớn nhất
159
3/3

Độ trễ lớn nhất của một IC chính bằng chu kì hoạt
động của IC đó  quyết định tần số làm việc tối
đa Fmax.
Độ trễ thay đổi theo từng cách tối ưu hóa thiết kế,
IC vật lý (FGPA, CPLD, etc).
Độ trễ xác định được cụ thể trong quá trình tổng
hợp lên phần cứng, không xác định được nếu chỉ
tổng hợp mức logic.

Trễ trên đường dẫn AiCi+1 lớn nhất
http://dce.hut.edu.vn

160
http://dce.hut.edu.vn

161
Nội dung chương 4
4.1. Khai báo thực thể (entity)
4.2. Khai báo cổng (ports)
4.3. Khai báo thuộc tính, thông số(generic)

Copyright (c) 10/2006 by NPB

162
4.1. Khai báo thực thể (entity)
Nên khai báo tên gợi nhớ
VHDL không phân biệt chữ hoa, thường
Đặt tên của thực thể phải tuân theo các quy tắc:
Khai báo trên một dòng duy nhất
Phải bắt đầu bằng chữ cái
Chỉ có thể bao gồm chữ cái, chữ số và dấu gạch dưới
Dấu gạch dưới (underscores) không được sử dụng ở
đầu, ở cuối hoặc sử dụng hai dấu liên tiếp nhau
Không cho phép sử dụng khoảng trắng
Không được sử dụng các từ khóa

Copyright (c) 10/2006 by NPB

163
Kết thúc khai báo thực thể
Sử dụng câu lệnh end
Cách 1: end entity;
Cách 2: end entity_name; (end ExampleEnt;)
Cách 3: end entity entity_name; -> Nên dùng

Cách 4: end; -> Không nên dùng

Copyright (c) 10/2006 by NPB

164
Chú thích trong VHDL
Bắt đầu bằng hai dấu gạch ngang “- -”
Kết thúc ở cuối dòng

Copyright (c) 10/2006 by NPB

165
4.2. Khai báo cổng (ports)
Mỗi cổng được khai báo sử dụng từ khóa port và
các thành phần sau:
Từ khóa signal (optional)
Tên cổng, theo sau là dấu hai chấm “:”
Chế độ hoạt động của cổng (IN, OUT, INOUT…)
Loại cổng (Kiểu dữ liệu)
Khởi tạo giá trị cho cổng (optional)

Copyright (c) 10/2006 by NPB

166
Ví dụ khai báo cổng (ports)

Copyright (c) 10/2006 by NPB

167
Chế độ hoạt động của cổng (Port mode)
Chế độ hoạt động của cổng (Port mode) xác định
chiều dữ liệu trên cổng đó
Các chế độ cổng thường sử dụng
In: chế độ vào, cho phép đọc tín hiệu
Out: chế độ ra, cho phép xuất tín hiệu
Inout: chế độ hai chiều, cả vào và ra

Copyright (c) 10/2006 by NPB

168
4.3. Khai báo generic
Phải khai báo trong khai báo thực thể (entity)
Là hằng số, được sử dụng để mô tả một thông số
của hệ thống
Kích thước của hệ thống (độ rộng bus, …)
Tần số hoạt động
…

Khai báo generic: name:

type :=value;

Tên của thông số, theo sau là dấu hai chấm “:”
Kiểu dữ liệu
Giá trị mặc định (optional)

Copyright (c) 10/2006 by NPB

169
Ví dụ khai báo generic

Copyright (c) 10/2006 by NPB

170
http://dce.hut.edu.vn/

171
Nội dung chương 3

3.1. Các kiểu dữ liệu có sẵn
3.2. Các kiểu dữ liệu do người dùng định nghĩa
3.3. Các kiểu dữ liệu dẫn xuất
3.4. Kiểu dữ liệu mảng
3.5. Kiểu dữ liệu bản ghi
3.6. Các kiểu dữ liệu có dấu và không dấu
3.7. Chuyển đổi kiểu dữ liệu
3.8. Các ví dụ

Copyright (c) 10/2006 by NPB

172
Các kiểu dữ liệu của VHDL
VHDL cung cấp:
Một số kiểu dữ liệu cơ sở (kiểu dữ liệu vô hướng – scalar)
Cách tạo nên các kiểu dữ liệu tổng hợp (composite)

Các kiểu dữ liệu vô hướng:
Các kiểu số, các đại lượng vật lý, các kiểu liệt kê
Có rất nhiều kiểu dữ liệu cơ sở chuẩn đã được định nghĩa trước.
Ví dụ: enumeration, integer, physical(*), floating point(*).
(*) = không tổng hợp được.

Các kiểu dữ liệu tổng hợp:
Kiểu mảng (array)
Kiểu bản ghi (record)

Ngoài ra VHDL còn cung cấp cả kiểu access (pointer) và
kiểu file (ta không nghiên cứu).
Copyright (c) 10/2006 by NPB

173
• Cú pháp
type type_name is type_definition;
Trong đó type_definition có thể thuộc kiểu scalar,
composite, access, file.
Ví dụ:
type Sreg0_type is (S1, S2, S3, S4);
type small is range 0 to 23;

http://dce.hut.edu.vn/

174
5.1. Các kiểu dữ liệu có sẵn
Gói standard của thư viện std: kiểu BIT, BOOLEAN,
INTEGER và REAL
Gói std_logic_1164 của thư viện ieee: kiểu STD_LOGIC
và STD_ULOGIC
Gói std_logic_arith của thư viện ieee: định nghĩa kiểu
SIGNED và UNSIGNED, cộng thêm nhiều hàm chuyển đổi
dữ liệu, VD: conv_integer(p), conv_unsigned(p, b),
conv_signed(p, b), conv_std_logic_vector(p, b) …
Gói std_logic_signed và std_logic_unsigned của thư
viện ieee: chứa các hàm cho phép họat động với dữ liệu
STD_LOGIC_VECTOR được thực hiện khi mà kiểu dữ liệu
là SIGNED hoặc UNSIGNED

Copyright (c) 10/2006 by NPB

175
Kiểu BIT và BIT_VECTOR
Kiểu BIT và BIT_VECTOR: 2 mức logic '0' và '1'
Ví dụ:
SIGNAL x: BIT;
-- x được khai báo như một tín hiệu số kiểu BIT
SIGNAL y: BIT_VECTOR (3 DOWNTO 0);
-- y là một vector 4 bit, với bit trái nhất là MSB
SIGNAL w: BIT_VECTOR (0 TO 7);
-- w là một vector 8 bit, với bit phải nhất là MSB

Các phép gán tín hiệu (dùng toán tử <= ) sau là hợp lệ:
x <=
-- '
y <=
-- y
w <=
-- w

'1';
' dùng cho 1 bit còn " " dùng cho vector
"0111";
là tín hiệu 4 bit có giá trị là "0111" (MSB = '0')
"01110001";
là tín hiệu 8 bit có giá trị là "01110001" (MSB = '1')

Copyright (c) 10/2006 by NPB

176
Kiểu STD_LOGIC
Kiểu STD_LOGIC và STD_LOGIC_VECTOR gồm
8 giá trị sau:
'X' : không xác định
'0' : mức thấp
'1' : mức cao
'Z' : trở kháng cao
'W' : không xác định yếu
'L' : mức thấp (yếu)
'H' : mức cao (yếu)

Copyright (c) 10/2006 by NPB

177
Kiểu STD_ULOGIC
Hệ thống logic 9 mức được giới thiệu trong chuẩn
IEEE 1164 („U‟, „X‟, „0‟, „1‟, „Z‟, „W‟, „L‟, „H‟, „–‟)
STD_LOGIC là subtype của STD_ULOGIC (có
thêm giá trị logic 'U' – Unresolved)

Copyright (c) 10/2006 by NPB

178
Các kiểu dữ liệu có sẵn (tiếp)
Kiểu BOOLEAN: True và False
Kiểu INTEGER: số nguyên 32 bit (từ 2.147.483.647 đến +2.147.483.647)
Kiểu NATURAL: số tự nhiên (từ 0 đến
+2.147.483.647)
Kiểu REAL: số thực (từ -1.0E38 đến +1.0E38)

Copyright (c) 10/2006 by NPB

179
Các kiểu dữ liệu có sẵn (tiếp)
Kiểu dữ liệu vật lý:
Biểu thị một đại lượng vật lý nào đó, chẳng hạn như là
khối lượng, độ dài, thời gian hoặc điện áp.
Cú pháp khai báo một kiểu dữ liệu vật lý như sau:
physical_type_definition ::= range_constraint
units
base_unit_declaration
{ secondary_unit_declaration }
end units
base_unit_declaration ::= identifier ;
secondary_unit_declaration ::= identifier =
physical_literal ;
physical_literal ::= [ abstract_literal ]
unit_name
Copyright (c) 10/2006 by NPB

180
type CAPACITY is range 0 to 1E8
units
pF; -- picofarad
nF = 1000 pF; -- nanofarad
uF = 1000 nF; -- microfarad
mF = 1000 uF; -- milifarad
F = 1000 mF; -- farad
end units CAPACITY;
variable SomeVar : CAPACITY;
SomeVar := 1mF + 23pF;

type DISTANCE is range 0 to 1E5
units
um; -- micrometer
mm = 1000 um; -- millimeter
in_a = 25400 um; -- inch
end units DISTANCE;

variable Dis1, Dis2 : DISTANCE;
Dis1 := 28 mm;
Dis2 := 2 in_a - 1 mm;
if Dis1 < Dis2 then ...

Kiểu vật l lý không thể tổng hợp lên mạch cứng được.
Copyright (c) 10/2006 by NPB

181
Các kí tự được biểu diễn ở trong cặp dấu nháy
đơn, ví dụ:
'A'
'*'
'''
''
Nội dung của một xâu kí tự được biểu diễn trong
cặp dấu nháy kép, ví dụ:
"A string"
"" – xâu rỗng
"A string in a string: ""A string"". " – xâu có chứa ký tự "

Copyright (c) 10/2006 by NPB

182
x0 <= '0';

x6 <= X"2F";

• -- bit, std_logic, or
std_ulogic value '0'

• Số 2F theo hệ cơ số
16.

x1 <= "00011111";
• bit_vector,
std_logic_vector,
std_ulogic_vector, signed,
or unsigned

x3 <= "101111";

n <= 1200;
• Số nguyên.

m <= 1_200;

• -- Biểu diễn dạng nhị phân

• Số nguyên, được phép
có dấu gạch dưới

x4 <= B"101111";

y <= 1.2E-5;

• Biểu diễn dạng nhị phân

• Số thực

x5 <= O"57";

q <= d after 10 ns;

• Số 57 theo hệ cơ số 8.

• physical

Copyright (c) 10/2006 by NPB

183
SIGNAL
SIGNAL
SIGNAL
SIGNAL
SIGNAL

a:
b:
c:
d:
e:

BIT;
BIT_VECTOR(7 DOWNTO 0);
STD_LOGIC;
STD_LOGIC_VECTOR(7 DOWNTO 0);
INTEGER RANGE 0 TO 255;

a <= c;

a <= b(5);

•Không hợp lệ (khác kiểu BIT &
STD_LOGIC)

• Hợp lệ (cùng kiểu BIT)

b <= d;

b(0) <= a;

•Không hợp lệ (khác kiểu BIT_VECTOR
& STD_LOGIC_VECTOR)

• Hợp lệ (cùng kiểu BIT)

e <= b;

c <= d(5);

•Không hợp lệ (khác kiểu INTEGER &
BIT_VECTOR)

• Hợp lệ (cùng kiểu STD_LOGIC)

e <= d;

d(0) <= c;

•Không hợp lệ (khác kiểu INTEGER &
STD_LOGIC_VECTOR)

• Hợp lệ (cùng kiểu STD_LOGIC)

Copyright (c) 10/2006 by NPB

184
5.2. Các kiểu dữ liệu người dùng đn
Có 2 dạng dữ liệu người dùng có thể định nghĩa:
integer (kiểu số nguyên)
enumerated (kiểu liệt kê)

Copyright (c) 10/2006 by NPB

185
Kiểu số nguyên do NSD định nghĩa
Cú pháp:
integer_type_definition ::= range_constraint
range_constraint ::= range range
range ::= simple_expression direction
simple_expression
direction ::= to | downto

Ví dụ:
type
type
type
type
type

byte_int is range 0 to 255;
signed_word_int is range –32768 to 32767;
bit_index is range 31 downto 0;
my_integer is range -32 to 32;
student_grade is range 0 to 100;

Copyright (c) 10/2006 by NPB

186
Kiểu liệt kê do NSD định nghĩa
Cú pháp:
enumeration_type_definition ::= ( enumeration_literal
{ , enumeration_literal } )
enumeration_literal ::= identifier | character_literal

Ví dụ:
type logic_level is (unknown, low, undriven, high);
type alu_function is (disable, pass, add, subtract,
multiply, divide);
type octal_digit is ('0', '1', '2', '3', '4', '5',
'6', '7');

Copyright (c) 10/2006 by NPB

187
Kiểu dữ liệu liệt kê (tiếp)
Kiểu character: chứa cả tên và ký tự
type character is (
NUL, SOH, STX, ETX, EOT, ENQ, ACK, BEL,
BS, HT, LF, VT, FF, CR, SO, SI,
DLE, DC1, DC2, DC3, DC4, NAK, SYN, ETB,
CAN, EM, SUB, ESC, FSP, GSP, RSP, USP,
' ', '!', '"', '#', '$', '%', '&', ''',
'(', ')', '*', '+', ',', '-', '.', '/',
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?',
'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '[', '', ']', '^', '_',
'`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', '{', '|', '}', '~', DEL);
Copyright (c) 10/2006 by NPB

188
5.3. Các kiểu dữ liệu dẫn xuất
VD 1: các kiểu Subtype được dẫn xuất từ các kiểu
dữ liệu ở các phần trước
SUBTYPE natural IS INTEGER RANGE 0 TO INTEGER'HIGH;
SUBTYPE my_logic IS STD_LOGIC RANGE '0' TO 'Z';
-- Có STD_LOGIC = ('X','0','1','Z','W','L','H','-')
-- Suy ra my_logic = ('0','1','Z')
SUBTYPE small_integer IS INTEGER RANGE -32 TO 32;

Copyright (c) 10/2006 by NPB

189
Các kiểu dữ liệu dẫn xuất (tiếp)
VD 2: Các phép gán giữa Types và Subtypes
SUBTYPE my_logic IS STD_LOGIC RANGE '0' TO '1';
SIGNAL a: BIT;
SIGNAL b: STD_LOGIC;
SIGNAL c: my_logic;
...
b <= a; --khong hop le ( BIT vs STD_LOGIC)
b <= c; --hop le (cung kieu STD_LOGIC)
c <= b; --hop le (cung kieu STD_LOGIC)

Copyright (c) 10/2006 by NPB

190
5.4. Kiểu dữ liệu mảng
Mảng (Array) là tập hợp các phần tử có cùng kiểu.
Mảng có thể là mảng 1 chiều (1D), 2 chiều (2D)
hoặc là mảng 1 chiều của mảng 1 chiều (1Dx1D)

Copyright (c) 10/2006 by NPB

191
Kiểu mảng (tiếp)
Định nghĩa mảng:
TYPE type_name IS ARRAY (specification) OF data_type;

Sử dụng mảng:
SIGNAL signal_name: type_name [:= initial_value];
SIGNAL cũng có thể là CONSTANT hoặc VARIABLE

Ứng dụng: để mô hình các cấu trúc tuyến tính như
RAM, ROM, etc.

Copyright (c) 10/2006 by NPB

192
Ví dụ về khai báo mảng
Mảng 1Dx1D:
TYPE row IS ARRAY (7 DOWNTO 0) OF STD_LOGIC;
TYPE matrix IS ARRAY (0 TO 3) OF row;
SIGNAL x: matrix;

TYPE matrix IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO
0);

Mảng 2D:
TYPE matrix2D IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC;

Khởi tạo mảng:
... :="0001";
-- mảng 1D
... :=('0','0','0','1')
-- mảng 1D
... :=(('0','1','1','1'), ('1','1','1','0')); -- 1Dx1D / 2D

Copyright (c) 10/2006 by NPB

193
Ví dụ về sử dụng mảng
TYPE row IS ARRAY (7
TYPE array1 IS ARRAY
TYPE array2 IS ARRAY
TYPE array3 IS ARRAY
SIGNAL x: row;
SIGNAL y: array1;
SIGNAL v: array2;
SIGNAL w: array3;

DOWNTO 0) OF STD_LOGIC;
(0 TO 3) OF row;
(0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO 0);
(0 TO 3, 7 DOWNTO 0) OF STD_LOGIC;

x(0) <= y(1)(2); x(1) <= v(2)(3); x(2) <= w(2,1);
y(1)(1) <= x(6); y(2)(0) <= v(0)(0); y(0)(0) <= w(3,3);
w(1,1) <= x(7); w(3,0) <= v(0)(3);

x <= y(0); x <= v(1); x <= w(2); x <= w(2,2 DOWNTO 0);
v(0) <= w(2,2 DOWNTO 0); v(0) <= w(2);
y(1) <= v(3);
y(1)(7 DOWNTO 3) <= x(4 DOWNTO 0);
v(1)(7 DOWNTO 3) <= v(2)(4 DOWNTO 0);
w(1,5 DOWNTO 1) <= v(2)(4 DOWNTO 0);
-- Lệnh tô đậm là các phép gán sai
Copyright (c) 10/2006 by NPB

194
Ví dụ về gán mảng
Giả sử có một mảng được khai báo là:
type a is array (1 to 4) of character;

Để gán giá trị cho các phần tử của mảng theo thứ
tự 'f', 'o', 'o', 'd' ta có thể dùng cách viết như sau:
a := ('f', 'o', 'o', 'd');
a := (1 => 'f', 3 => 'o', 4 => 'd', 2 => 'o');
a := ('f', 4 => 'd', others => 'o');

Copyright (c) 10/2006 by NPB

195
Ví dụ về mảng các cổng vào-ra
Không có kiểu dữ liệu có sẵn nhiều chiều
Một cách mô tả các chân vào-ra của mạch trong
khai báo ENTITY là dùng mảng các vector
Không được phép dùng TYPE trong khai báo
ENTITY.
=> Định nghĩa kiểu dữ liệu mới trong 1 PACKAGE

Copyright (c) 10/2006 by NPB

196
Ví dụ mảng các cổng (tiếp)
------- Package: --------------------------LIBRARY ieee;
USE ieee.std_logic_1164.all;
PACKAGE my_data_types IS
CONSTANT b: INTEGER := 7;
TYPE vector_array IS ARRAY (NATURAL RANGE <>) OF
STD_LOGIC_VECTOR(b DOWNTO 0);
END my_data_types;
------- Main code: ------------------------LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE work.my_data_types.all; -- user-defined package
--------------------------ENTITY mux IS
PORT (inp: IN VECTOR_ARRAY (0 TO 3);
... );
END mux;
... ;
-------------------------------------------Copyright (c) 10/2006 by NPB

197
5.5. Kiểu dữ liệu bản ghi
Bản ghi (Record) là kiểu dữ liệu gồm các phần tử
có kiểu khác nhau nhưng có liên kết với nhau.
Cú pháp khai báo kiểu bản ghi:
record_type_definition ::=
record
element_declaration
{ element_declaration }
end record
element_declaration ::= identifier_list :
element_subtype_definition ;
identifier_list ::= identifier { , identifier )
element_subtype_definition ::= subtype_indication

Ứng dụng: để mô hình các gói dữ liệu.
Copyright (c) 10/2006 by NPB

198
Ví dụ về kiểu bản ghi
Ví dụ 1:
TYPE birthday IS RECORD
day: INTEGER RANGE 1 TO 31;
month: month_name;
END RECORD;

Ví dụ 2:
type instruction is
record
op_code : processor_op;
address_mode : mode;
operand1, operand2: integer range 0 to 15;
end record;

Để truy cập vào trường f của bản ghi r, ta sử dụng
cách viết r.f
Copyright (c) 10/2006 by NPB

199
5.6. Kiểu dữ liệu có dấu và không dấu
Các kiểu SIGNED và UNSIGNED được định
nghĩa trong gói std_logic_arith của thư viện ieee.
Ví dụ:
SIGNAL x: SIGNED (7 DOWNTO 0);
SIGNAL y: UNSIGNED (0 TO 3);
UNSIGNED: "0101" biểu diễn số 5, "1101" biểu diễn số
13
SIGNED: "0101" biểu diễn số 5, "1101" biểu diễn số -3

Dùng với các phép toán số học, không dùng được
với các phép toán logic.

Copyright (c) 10/2006 by NPB

200
Ví dụ 1
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
...
SIGNAL a: IN SIGNED (7 DOWNTO 0);
SIGNAL b: IN SIGNED (7 DOWNTO 0);
SIGNAL x: OUT SIGNED (7 DOWNTO 0);
...
v <= a + b;
w <= a AND b;

Copyright (c) 10/2006 by NPB

201
Ví dụ 2
LIBRARY ieee;
USE ieee.std_logic_1164.all;
...
SIGNAL a: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL b: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL x: OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
...
v <= a + b;
w <= a AND b;

Copyright (c) 10/2006 by NPB

202
Ví dụ 3
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
...
SIGNAL a: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL b: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL x: OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
...
v <= a + b;
w <= a AND b;

Copyright (c) 10/2006 by NPB

203
5.7. Chuyển đổi kiểu dữ liệu
VHDL không cho phép các phép toán trực tiếp (
số học, logic, …) tác động lên các dữ liệu khác
kiểu nhau.
Gói std_logic_1164 của thư viện ieee cung cấp
các hàm chuyển đổi kiểu dữ liệu.

Copyright (c) 10/2006 by NPB

204
Các hàm chuyển đổi
conv_integer(p): chuyển đổi p thuộc kiểu INTEGER,
UNSIGNED, SIGNED, hoặc STD_ULOGIC thành một giá
trị INTEGER.
conv_unsigned(p, b): chuyển đổi p thuộc kiểu INTEGER,
UNSIGNED, SIGNED, hoặc STD_ULOGIC thành một giá
trị UNSIGNED với kích thước là b bit.
conv_signed(p, b): chuyển đổi p của kiểu INTEGER,
UNSIGNED, SIGNED, hoặc STD_ULOGIC thành một giá
trị SIGNED với kích thước là b bit.
conv_std_logic_vector(p, b): chuyển đổi p thuộc kiểu dữ
liệu INTEGER, UNSIGNED, SIGNED, hoặc STD_LOGIC
thành một giá trị STD_LOGIC_VECTOR với kích thước b
bit.
Copyright (c) 10/2006 by NPB

205
Ví dụ 1
TYPE long IS INTEGER RANGE -100 TO 100;
TYPE short IS INTEGER RANGE -10 TO 10;
SIGNAL x : short;
SIGNAL y : long;
...
y <= 2*x + 5;
y <= long(2*x + 5);

Copyright (c) 10/2006 by NPB

206
Ví dụ 2
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
...
SIGNAL a: IN UNSIGNED (7 DOWNTO 0);
SIGNAL b: IN UNSIGNED (7 DOWNTO 0);
SIGNAL y: OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
...
y <= CONV_STD_LOGIC_VECTOR ((a+b), 8);
Phép toán hợp lệ: a+b được chuyển đổi từ UNSIGNED thành
một giá trị 8-bit STD_LOGIC_VECTOR, sau đó gán cho
y.

Copyright (c) 10/2006 by NPB

207
5.8. Các ví dụ
Ví dụ 1: cho các khai báo sau
TYPE byte IS ARRAY (7 DOWNTO 0) OF STD_LOGIC;
TYPE mem1 IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC;
TYPE mem2 IS ARRAY (0 TO 3) OF byte;
TYPE mem3 IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(0 TO 7);
SIGNAL a: STD_LOGIC;
SIGNAL b: BIT;
SIGNAL x: byte;
SIGNAL y: STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL v: BIT_VECTOR (3 DOWNTO 0);
SIGNAL z: STD_LOGIC_VECTOR (x'HIGH DOWNTO 0);
SIGNAL w1: mem1;
SIGNAL w2: mem2;
SIGNAL w3: mem3;

Copyright (c) 10/2006 by NPB

208
Ví dụ 1 (tiếp)
Xét tính hợp lệ của các phép gán sau:
x(2) <= a;
y(0) <= x(0);
z(7) <= x(5);
b <= v(3);
w1(0,0) <= x(3);
w1(2,5) <= y(7);
w2(0)(0) <= x(2);
w2(2)(5) <= y(7);
w1(2,5) <= w2(3)(7);
b <= a;
w1(0)(2) <= x(2);
w2(2,0) <= a;

Copyright (c) 10/2006 by NPB

209
Ví dụ 1 (tiếp)
Xét tính hợp lệ của các phép gán sau:
x <= "11111110";
x <= (OTHERS => '1');
x <= y;
y <= ('1','1','1','1','1','1','0','Z');
y <= (7 =>'0', 1 =>'0', OTHERS => '1');
y(2 DOWNTO 0) <= z(6 DOWNTO 4);
y(5 TO 7) <= z(6 DOWNTO 0);
z <= "11111" & "000";
z <= y;
z <= w3(1);
z(5 DOWNTO 0) <= w3(1)(2 TO 7);

Copyright (c) 10/2006 by NPB

210
Ví dụ 1 (tiếp)
Xét tính hợp lệ của các phép gán sau:
w1 <= ((OTHERS=>'Z'), "11110000" ,"11110000",
(OTHERS=>'0'));
w1 <= (OTHERS => '1');
w1(0, 7 DOWNTO 0) <="11111111";
w2 <= (OTHERS => 'Z');
w2(0, 7 DOWNTO 0) <= "11110000";
w2(0)(7 DOWNTO 0) <= "11110000";
w2 <= ((OTHERS=>'0'), (OTHERS=>'0'), (OTHERS=>'0'),
(OTHERS=>'0'));
w3(2) <= y;
w3(1) <= "00000000";
w3(1) <= (OTHERS => '0');
w3 <= ("11111100",
('0','0','0','0','Z','Z','Z','Z',),
(OTHERS=>'0'), (OTHERS=>'0'));
Copyright (c) 10/2006 by NPB

211
Ví dụ 2

Copyright (c) 10/2006 by NPB

212
Ví dụ 2 (tiếp)

Copyright (c) 10/2006 by NPB

213
Copyright (c) 10/2006 by NPB

214
Nội dung chương 6

6.1. Các toán tử
6.2. Các thuộc tính
6.3. Các thuộc tính do người dùng định nghĩa
6.4. Chồng toán tử
6.5. GENERIC

Copyright (c) 10/2006 by NPB

215
6.1. Toán tử
VHDL cung cấp một số loại toán tử sau:
Toán tử gán
Toán tử logic
Toán tử số học
Toán tử so sánh
Toán tử dịch

Copyright (c) 10/2006 by NPB

216
Các toán tử gán
<= dùng gán giá trị cho SIGNAL
:=
dùng gán giá trị cho VARIABLE, CONSTANT,
GENERIC
=> dùng gán giá trị cho từng phần tử của kiểu
vector hoặc dùng với từ khóa OTHERS

Copyright (c) 10/2006 by NPB

217
VD về toán tử gán
SIGNAL x : STD_LOGIC;
VARIABLE y : STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL w : STD_LOGIC_VECTOR(0 TO 7);
x
y
w
w

<=
:=
<=
<=

'1';
"0000";
"10000000";
(0 =>'1', OTHERS =>'0');

Copyright (c) 10/2006 by NPB

218
Các toán tử logic
VHDL định nghĩa các toán tử logic sau:
NOT, AND, OR, NAND, NOR, XOR, XNOR

Dữ liệu cho các toán tử này phải là kiểu: BIT,
STD_LOGIC, STD_ULOGIC, BIT_VECTOR,
STD_LOGIC_VECTOR, STD_ULOGIC_VECTOR.
Ví dụ:
y <= NOT (a AND b);
y <= a NAND b;

Copyright (c) 10/2006 by NPB

219
Các toán tử số học
Dùng cho các kiểu dữ liệu số như là:INTEGER,
SIGNED, UNSIGNED, REAL.
Bao gồm:
+ Toán tử cộng
Toán tử trừ
*
Toán tử nhân
/
Toán tử chia
** Toán tử lấy mũ
MOD
Phép chia lấy phần nguyên (Y MOD X có dấu của X)
REM
Phép chia lấy phần dư (Y REM X có dấu của Y)
ABS
Phép lấy giá trị tuyệt đối

Copyright (c) 10/2006 by NPB

220
Toán tử so sánh
Có các toán tử so sánh sau:
=
So sánh bằng
/=
So sánh khác nhau
<
So sánh nhỏ hơn
>
So sánh lớn hơn
<= So sánh nhỏ hơn hoặc bằng
>= So sánh lớn hơn hoặc bằng

Chỉ tác động lên 2 toán hạng có cùng kiểu
Kết quả là một giá trị Boolean
Các toán hạng ứng với phép so sánh bằng và khác (= và
/=) có thể có kiểu bất kì. Với các kiểu có cấu trúc, 2 giá trị
được coi là bằng nhau nếu tất cả các thành phần tương
ứng của chúng là như nhau.
Các toán tử so sánh còn lại phải có toán hạng là kiểu vô
hướng hoặc kiểu mảng 1 chiều của các kiểu rời rạc.
Copyright (c) 10/2006 by NPB

221
Toán tử dịch
Cú pháp sử dụng toán tử dịch là:
<left operand> <shift operation> <right operand>

Trong đó:
<left operand> : kiểu là BIT_VECTOR
<right operand> : kiểu là INTEGER

Có hai toán tử dịch:
Sll
Rll

Toán tử dịch trái
Toán tử dịch phải

Ví dụ:
signal x: bit_vector(bus_width-1 downto 0);
x<= x sll 2;

Copyright (c) 10/2006 by NPB

222
Toán tử ghép nối
Toán tử ghép nối (&) tác động lên các mảng 1
chiều để cho ra một mảng mới với nội dung của
toán hạng bên phải được ghép nối theo sau nội
dung của toán hạng bên trái.
Nó cũng được sử dụng để thêm 1 phần tử vào
mảng hoặc hình thành 1 mảng từ 2 phần tử.
Toán tử này thường được sử dụng với kiểu xâu kí
tự.

Copyright (c) 10/2006 by NPB

223
Thứ tự ưu tiên của các toán tử
Thự tự ưu tiên giảm dần từ trên xuống:
**
*
/
+ (sign)
+
–
=
/=
and or

abs not
mod rem
– (sign)
&
<
<=
nand nor

>
xor

Copyright (c) 10/2006 by NPB

>=

224
6.2. Các thuộc tính
Thuộc tính dữ liệu:
d‟LOW
Trả về giá trị nhỏ nhất của chỉ số mảng
d‟HIGH
Trả về chỉ số lớn nhất của chỉ số mảng
d‟LEFT
Trả về chỉ số bên trái nhất của mảng
d‟RIGHT
Trả về chỉ số bên phải nhất của mảng
d‟LENGTH Trả về kích thước của vector
d‟RANGE
Trả về khoảng chỉ số của vector
d‟REVERSE_RANGE Trả về khoảng chỉ số của vector
theo thứ tự đảo ngược

Copyright (c) 10/2006 by NPB

225
Ví dụ
Giả sử d là một vector được khai báo như sau:
SIGNAL d : STD_LOGIC_VECTOR(0 TO 7)

Ta sẽ có:
d'LOW = 0, d'HIGH = 7, d'LEFT = 0, d'RIGHT = 7, d'LENGTH = 8,
d'RANGE = (0 to 7), d'REVERSE_RANGE = (7 downto 0)

Các thuộc tính này có thể dùng trong các vòng lặp:
FOR
FOR
FOR
FOR

i
i
i
i

IN
IN
IN
IN

RANGE (0 TO 7) LOOP ...
d'RANGE LOOP ...
RANGE (d'LOW TO d'HIGH) LOOP ...
RANGE (0 TO d'LENGTH-1) LOOP ...

Nếu tín hiệu có kiểu liệt kê thì:
d’VAL(pos)
Trả
d’POS(val)
Trả
d’LEFTOF(value)
của value
d’RIGHTOF(value)
của value
d'PRED(value) Trả
vị trí của value 1
d'SUCC(value) Trả
vị trí của value 1
d’VAL(row,colum)

về giá trị phần tử tại vị trí pos
về vị trí phần tử có giá trị là val
Trả về giá trị phần tử liền bên trái
Trả về giá trị phần tử liền bên phải
về giá trị của phần tử có vị trí nhỏ hơn
đơn vị
về giá trị của phần tử có vị trí lớn hơn
đơn vị
Trả về giá trị ở một vị trí đặc biệt

Copyright (c) 10/2006 by NPB

226
Các thuộc tính (tiếp)
Thuộc tính tín hiệu:
Giả sử s là một SIGNAL thì ta có :
s‟EVENT :
Trả về True khi một sự kiện xảy ra đối với s
s‟STABLE:
Trả về True nếu không có sự kiện nào xảy ra đối
với s
s‟ACTIVE:
Trả về True khi s = 1
s‟QUIET <time>:
Trả về True khi trong khoảng thời gian
time không có sự kiện nào xảy ra
s‟LAST_EVENT:
Trả về thời gian đã trôi qua kể từ sự kiện
cuối cùng
s‟LAST_ACTIVE: Trả về thời gian đã qua kể từ lần s = 1 cuối
cùng
s‟LAST_VALUE:
Trả về giá trị của s ở sự kiện trước

Copyright (c) 10/2006 by NPB

227
Ví dụ
4 câu lệnh sau kiểm tra sự kiện xuất hiện sườn
dương của xung clk:
IF (clk'EVENT AND clk='1')...
IF (NOT clk'STABLE AND clk='1')...
WAIT UNTIL (clk'EVENT AND clk='1');
IF RISING_EDGE(clk)...

Copyright (c) 10/2006 by NPB

228
Các thuộc tính do NSD định nghĩa
NSD có thể định nghĩa ra 1 thuộc tính mới theo cú
pháp:
Khai báo thuộc tính:
ATTRIBUTE attribute_name: attribute_type;

Mô tả thuộc tính:
ATTRIBUTE attribute_name OF target_name: class IS value;

Trong đó:
attribute_type: kiểu dữ liệu bất kỳ (BIT, INTEGER,
STD_LOGIC_VECTOR, ...)
class: TYPE, SIGNAL, FUNCTION, ...
value: '0', 27, "00 11 10 01", ...

Copyright (c) 10/2006 by NPB

229
Ví dụ 1
ATTRIBUTE number_of_inputs: INTEGER;
ATTRIBUTE number_of_inputs OF nand3: SIGNAL IS 3;
...
inputs <= nand3'number_of_pins; -- kết quả = 3

Copyright (c) 10/2006 by NPB

230
Ví dụ 2
Mã hóa kiểu liệt kê:
TYPE color IS (red, green, blue, white);

Ngầm định thì red = "00", green = "01", blue =
"10", white = "11". Để thay đổi lại ta có thể dùng:
ATTRIBUTE enum_encoding OF color: TYPE IS "11 00 10 01";

Thuộc tính do người dùng định nghĩa có thể khai
báo ở bất cứ vị trí nào, ngoại trừ trong thân của
PACKAGE.

Copyright (c) 10/2006 by NPB

231
6.4. Chồng toán tử
NSD có thể định nghĩa 1 toán tử mới có trùng tên với 1
toán tử đã được định nghĩa sẵn.
VD: Định nghĩa phép + giữa 1 số INTEGER và 1 BIT.
FUNCTION "+" (a: INTEGER, b: BIT) RETURN INTEGER IS
BEGIN
IF (b='1') THEN RETURN a+1;
ELSE RETURN a;
END IF;
END "+";

Sử dụng:
SIGNAL inp1, outp: INTEGER RANGE 0 TO 15;
SIGNAL inp2: BIT;
(...)
outp <= 3 + inp1 + inp2;
(...)

Copyright (c) 10/2006 by NPB

232
6.5. GENERIC
GENERIC là cách tạo ra 1 tham số tĩnh dùng
chung cho toàn bộ thiết kế.
=> Làm cho chương trình mềm dẻo hơn và tăng
tính sử dụng lại.
GENERIC phải được khai báo trong ENTITY với
cú pháp như sau:
GENERIC (parameter_name : parameter_type := parameter_value);

Copyright (c) 10/2006 by NPB

233
Ví dụ
Tham số n sau đây luôn có giá trị ngầm định là 8:
ENTITY my_entity IS
GENERIC (n : INTEGER := 8);
PORT (...);
END my_entity;
ARCHITECTURE my_architecture OF my_entity IS
...
END my_architecture;

Có thể khai báo nhiều hơn 1 tham số GENERIC
trong 1 ENTITY.
GENERIC (n: INTEGER := 8; vector: BIT_VECTOR := "00001111");

Copyright (c) 10/2006 by NPB

234
1/2
architecture FSM_ARCH of entity_name is
attribute enum_encoding: string;
-- Khai báo các trạng thái
type Sreg_type is (
Stop, Init, Go
);
-- Nếu cần, chỉ định rõ giá trị binary của từng trạng thái
attribute enum_encoding of Sreg_type: type is
c ounter := c ounter + 1
"00 " &
-- Stop
Button='1' and
"01 " &
-- Init
c ounter < Thres hold
"10" ;
-- Go
Res et='1'
Stop
/00/
StopLam p<='1'
-- Biến chỉ trạng thái hiện tại
signal Sreg: Sreg_type;
c ounter := 0
begin
process (CLK)
if CLK'event and CLK = '1' then
…..
-- xem slide tiếp theo
end if;
end process;
end architecture FSM_ARCH
Copyright (c) 10/2006 by NPB

Init

c ounter >= Thres hold

/01/
StopLam p <='0'
c ounter := c ounter * 2

GoLam p<='0'

c ounter:=c ounter -1
c ounter = 0

Go

GoLam p <= '1'

/10/

235
1/2
-- Quá trình biến đổi trạng thái
case Sreg is
-- Biến đổi từ State1 thành ??
when State1 =>
State Action
if (condition) then
Sreg <= State2;
Transition Action;
else if (condition) then
Transition Action;
else
Sreg <= Default State
end if

Không có lệnh chuyển
trạng thái?
 giữ nguyên trạng thái

c ounter := c ounter + 1
Button='1' and
c ounter < Thres hold
Res et='1'

Stop
/00/
c ounter := 0

Init

-- Biến đổi từ State2 thành ??
when State2 =>
-- Biến đổi từ trạng thái còn lại
when others =>
Sreg <= Init State; // or null;
end case
Copyright (c) 10/2006 by NPB

StopLam p<='1'

c ounter >= Thres hold

/01/
StopLam p <='0'
c ounter := c ounter * 2

GoLam p<='0'

c ounter:=c ounter -1
c ounter = 0

Go

GoLam p <= '1'

/10/

236
Phần IV:

• Bộ dồn kênh / phân kênh
• ALU
• RAM/Thanh ghi đa năng
• Bộ nhớ chương trình
• Truy cập bộ nhớ chính

• Bộ định thời
• Thanh ghi chuyên dụng
• Bộ giải mã lệnh tuần tự
• Bộ giải mã lệnh rẽ nhánh
Process (I,S)
Begin
If (S='1') Then
O <= I(1);
Else
O <=I(0);
End If;
End Process;

I0
I1
I2
I3 S

Phần mềm: Lệnh rẽ nhánh If ~
Phần cứng: Mux/Demux

http://dce.hut.edu.vn/

238
Process (I,S)
Begin
If (S='1') Then
O(0) <= I;
Else
O(1) <=I;
End If;
End Process;

O0
O1
O2
S O3

Phần mềm: Lệnh rẽ nhánh If ~
Phần cứng: Mux/Demux

http://dce.hut.edu.vn/

239
Các câu lệnh phần
mềm chỉ có 2 dạng là:
Tuần tự
Ins 0;
Ins 1;
Ins 2;
Rẽ nhánh
If .. Then… Else

Tương ứng với phần
cứng là:
Máy trạng thái FSM

Bộ ghép kênh

Đồng thiết kế phần cứng, phần mềm. Vừa thiết kế
phần cứng, vừa thiết kế trình biên dịch, mô phỏng
tương ứng. Code VHDL tương đồng code C.
Khai thác ưu thế phần cứng: song song, etc.
http://dce.hut.edu.vn/

240
Software:
lệnh 1;
lệnh 2;
if (S) then
lệnh 3
else
lệnh 4
end if

Xác định mục tiêu trước
Thực hiện sau

http://dce.hut.edu.vn

Hardware:
mạch 1
mạch 2

mạch 3
mạch 4

Thực hiện trước
Lựa chọn kết quả sau
241
1/3
Mô tả entity, biểu tượng

Mô tả architecture

CI
A

B

Q
CO
OV

architecture adder_arch of adder is
signal TEMP_RESULT : std_logic_vector(7 downto 0);
signal TEMP_RESULT2 : std_logic_vector(1 downto 0);
begin
TEMP_RESULT <= ('0' & A(6 downto 0)) + ('0' & B(6 downto 0)) + CI;
TEMP_RESULT2 <= ('0' & A(7)) + ('0' & B(7)) + TEMP_RESULT(7);
Q <= TEMP_RESULT2(0) & TEMP_RESULT(6 downto 0);
CO <= TEMP_RESULT2(1);
OV <= TEMP_RESULT2(1) xor TEMP_RESULT(7);
end architecture;
http://dce.hut.edu.vn

242
2/3

Phép trừ bằng cách dùng số bù 2
cần 2 lần thực hiện phép cộng  trễ
lớn.
Phép trừ bằng cách dùng số bù 1 chi
cần 1 phép cộng  trễ giảm ~ ½.

A - B = - ((-A ) + B )
= - (A + 1 + B )
= - (A + B ) - 1
= A + B + 1 - 1
= A + B

CI
A

0
1

Q
B

0
1

CO
OV

ADD/SUB
http://dce.hut.edu.vn

243
3/3

Phép cộng/trừ 1 đơn vị được sử dụng nhiều.
CI
A

B
“1”

0
1

Q

0
1

CO
OV

0
1

ADD/INC
ADD/SUB

Thêm một bộ ghép kênh để chọn giá trị cố định “1”
cho toán hạng thứ 2.
http://dce.hut.edu.vn

244
DO = DI1 and DI2
architecture and_arch of ander is
signal tmp: std_logic_vector(7 downto 0);
begin
tmp <= DI1 and DI2; -- Trung gian để tính cờ Zero
DO <= tmp;
ZF <= „1' when tmp = 0 else „0'; -- Tính cờ Zero
end architecture;

DO = DI
architecture move_arch of mover is
Begin
DO <= DI;
end architecture;

http://dce.hut.edu.vn/

245
DO = DI1 shr 1
architecture shr_arch of shr is
begin
DO <= '0' & DI(7 downto 1) ;
CF <= DI(0);
end architecture;

DO = DI1 rr 1
architecture rr_arch of rr is
begin
DO <= DI(6 downto 0) & D(7);
CF <= DI(7);
end architecture;

C

0
MSB

LSB

„0‟
DI(7)
DI(6)
DI(5)
DI(4)
DI(3)
DI(2)
DI(1)
DI(0)

DO(7)
DO(6)
DO(5)
DO(4)
DO(3)
DO(2)
DO(1)
DO(0)
CF

C
MSB

http://dce.hut.edu.vn/

LSB

246
1/4

ALU thường là mạch tổ hợp với 2 thành phần:
Các mạch thực hiện phép toán.
Các bộ ghép kênh.

Sơ đồ nguyên lý
opcode

x

b

0
1
2
3

ALU

a

cls
<<
>>
opcode

http://dce.hut.edu.vn

axb

010

a+b

011

a –b

10x

clear a

110

a << b

111

+
-

00x

a >> b

247
2/4

Ngoài ra, các bộ ghép kênh còn được sử dụng để
phối ghép trạng thái cờ từ các phép toán, theo
cách tương tự.
Nhận xét: cho dù mã lệnh chỉ yêu cầu thực hiện 1
phép toán, nhưng tất cả các mạch phép toán đều
hoạt động.
Có thể tiết kiệm năng lượng bằng cách ngắt các
mạch tính toán vô ích khỏi nguồn cấp.
Dùng chính opcode để điều khiển cấp nguồn điện.
Điều này về cơ bản không ảnh hưởng tới tốc độ tính
toán, vì mọi mach phép toán đều thực hiện song song.

248
3/4

Opcode dùng để chọn mạch tính toán trên ALU,
chính là opcode của tập lệnh CPU, có thể với một
chút thay đổi nhỏ.
Thiết lập bộ mã cho opcode (ví dụ phép + ứng với
mã 010) có ảnh hưởng tới hiệu năng của ALU, vì
sẽ làm tăng/giảm hiệu quả giải mã opcode.
Lưu ý thiết kế ALU:
Một số mạch phép toán có thể thực hiện nhiều phép
toán (ví dụ bộ cộng/trừ). Khi đó opcode cho các phép
toán này cần sai khác bit càng ít càng tốt  dễ tối
thiểu hóa.

http://dce.hut.edu.vn/

249
4/4

Ví dụ về 2 cách mã opcode khác nhau. Cách thứ
2 gây khó khăn cho việc tổ chức bộ cộng.
Cách 1
opcode

Cách 2

ALU

opcode

ALU

00x

00x

axb

010

a+b

010

a+b

011

a –b

011

clear a

10x

clear a

10x

a –b

110

a << b

110

a << b

111

http://dce.hut.edu.vn/

axb

a >> b

111

a >> b

250
ALU nhằm thực hiện phép toán
PreALU nhằm cung cấp các toán hạng vào cho
ALU
Toán hạng vào có thể lấy từ tập thanh ghi, bộ nhớ
chính, etc.
Thanh ghi AX
Thanh ghi BX
Bộ nhớ chính

http://dce.hut.edu.vn/

0
1
2
3

Toán hạng 1

0
1
2
3

Toán hạng 2

251
1/2

Thanh ghi dùng để lưu trữ thông tin bên trong
CPU, có tốc độ cao nhất trong phân cấp bộ nhớ.
Có thể chứa cả dữ liệu và địa chỉ.
Chỉ gồm bit nhớ,
không có phần
cứng đặc thù kèm
theo.
DIN( 7:0)

U4

D I N D OUT

D I N D OUT

D I N D OUT

C LK

C LK

C LK

C E R ESET

C E R ESET

C E R ESET

DO UT ( 2:0)

D I N D OUT

C LK

DOUT(4)

DIN(4)

U3

DOUT(5)

DIN(5)

U2

DOUT(6)

DIN(6)

DOUT(7)

DIN(7)

U1

C E R ESET

DF F

DF F

DF F

DF F

CE

CLK
Reset
DIN(7:0)
DOUT(7:0)

U8

D I N D OUT

D I N D OUT

D I N D OUT

D I N D OUT

C LK

C LK

C LK

C LK

C E R ESET

C E R ESET

C E R ESET

C E R ESET

DF F

http://dce.hut.edu.vn/

DOUT(0)

DIN(0)

U7

DOUT(1)

DIN(1)

U6

DOUT(2)

DIN(2)

DOUT(3)

DIN(3)
U5

DF F

DF F

DF F

252
2/2
entity IPCore_GPR is
port (
CLR : in std_logic; -- xóa dữ liệu
CLK : in std_logic; -- đồng hồ
CE : in std_logic; -- cho phép hoạt động
--! cổng vào dữ liệu, nội dung cần nhớ
DATA : in std_logic_vector(7 downto 0);
--! cổng ra dữ liệu ~ nội dung đã nhớ
Q : out std_logic_vector(7 downto 0)
);
end entity;

http://dce.hut.edu.vn/

architecture GPR_arch of IPCore_GPR is
begin
process (CLK)
begin
--! tại sườn dương của đồng hồ
if rising_edge(CLK) then
--! Nếu được phép hoạt động
if CE = '1' then
--! xóa dữ liệu đồng bộ
if CLR = '1' then
Q <= (others => '0');
else --! hoặc chốt dữ liệu
Q <= DATA;
end if; -- CLR
end if; -- CE
end if; -- clk
end process;
end GPR_arch;
253
1/2

Đơn vị nhớ

0
1
2
3

Dữ
liệu
ra

Địa chỉ
http://dce.hut.edu.vn/

254
2/2
architecture rom_arch of IPCore_rom is
begin
process(ADDRESS, OE)
entity IPCore_rom is
variable ADDR_TEMP: std_logic_vector(1
port (
downto 0);
OE : in std_logic; -- cho phép dữ liệu
begin
-- đường địa chỉ
ADDR_TEMP := ADDRESS(1 downto 0);
ADDRESS : in std_logic_vector(2 downto 0);
if (OE = '1') then
-- đường đữ liệu
if (ADDRESS(2) = '0') then
Q : out std_logic_vector(7 downto 0)
case (ADDR_TEMP) is
);
when "00" => Q <= "01100001";
end entity;
when "01" => Q <= "01100010";
when "10" => Q <= "00110100";
when others => Q <= "00000000";
end case;
else
– mọi giá trị còn lại trong ROM = 0
Q <= "00000000";
end if;
else – nếu OE = „0‟
Q <= "ZZZZZZZZ"; -- trở kháng cao
end if;
end process;
end architecture;
http://dce.hut.edu.vn/
255
1/2

Có nhiều kiểu thiết kế khác nhau: đơn/đa cổng,
chung/riêng đường địa chỉ/dữ liệu.

Dữ liệu vào
Đơn vị nhớ
CE0

0
1
2
3

giải CE1
mã
địa CE2
chỉ CE3

Dữ
liệu
ra

Địa chỉ
http://dce.hut.edu.vn/

256
2/2
entity IPCore_ram is
port (
WE : in std_logic;
CLK : in std_logic;
ADDR : in std_logic_vector(3 downto 0);
DATA : in std_logic_vector(7 downto 0);
Q : out std_logic_vector(7 downto 0)
);
end entity;

http://dce.hut.edu.vn/

architecture ram_arch of IPCore_ram is
type IPCore_ram_mem_type is array (15 downto 0)
of std_logic_vector(7 downto 0);
signal IPCore_ram_mem: IPCore_ram_mem_type;

begin
process (CLK)
begin
if rising_edge(CLK) then
if (WE = '1') then
IPCore_ram_mem(CONV_INTEGER(ADDR))
<= DATA;
end if;
end if;
end process;
Q <=
IPCore_ram_mem(CONV_INTEGER(ADDR));
end architecture;

257
Thanh ghi lệnh IR, Instruction Register, chứa mã
lệnh đang được giải mã.
Đặc trưng phần cứng: đường dữ liệu vào được
nối trực tiếp với bộ nhớ chương trình, và dữ liệu
đầu ra đưa tới bộ giải mã lệnh.

Thanh ghi lệnh

ROM

http://dce.hut.edu.vn/

Giải mã
lệnh

258
1/5

Thanh ghi bộ đếm chương trình PC, Program
Counter hoặc Instruction Pointer, chứa địa chỉ của
lệnh sẽ được thực hiện.
Phần lớn các lệnh trong chương trình là tuần tự
 địa chỉ của lệnh kế tiếp = địa chỉ của lệnh hiện
tại + độ lệch địa chỉ giữa 2 lệnh đó.  dữ liệu vào.
Với bộ xử lý RISC, độ lệch này là không đổi.
 Thiết kế PC sẽ bao gồm một bộ cộng.
Với lệnh rẽ nhánh, PC phải ghi nhớ địa chỉ mới
(địa chỉ nhảy tới) bất kỳ.  dữ liệu vào.
Ngắt xảy ra  rẽ nhánh tới 1 chương trình con
phục vụ ngắt ở địa chỉ nào đó  dữ liệu vào.
http://dce.hut.edu.vn/

259
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0
Thietke ic baigiang.v1.0

More Related Content

What's hot

Chương 5: Khối thu phát
Chương 5: Khối thu phátChương 5: Khối thu phát
Chương 5: Khối thu phátviendongcomputer
 
Chuong 05 transistor bjt
Chuong 05 transistor bjtChuong 05 transistor bjt
Chuong 05 transistor bjtJean Okio
 
Tín Hiệu Và Hệ Thống - Biểu Diễn trong miền thời gian của hệ thống tuyến tính...
Tín Hiệu Và Hệ Thống - Biểu Diễn trong miền thời gian của hệ thống tuyến tính...Tín Hiệu Và Hệ Thống - Biểu Diễn trong miền thời gian của hệ thống tuyến tính...
Tín Hiệu Và Hệ Thống - Biểu Diễn trong miền thời gian của hệ thống tuyến tính...Quang Thinh Le
 
Chương trình điều khiển đèn giao thông cho ngã tư theo 3 chế độ dựa theo đồng...
Chương trình điều khiển đèn giao thông cho ngã tư theo 3 chế độ dựa theo đồng...Chương trình điều khiển đèn giao thông cho ngã tư theo 3 chế độ dựa theo đồng...
Chương trình điều khiển đèn giao thông cho ngã tư theo 3 chế độ dựa theo đồng...nataliej4
 
Arduino + GorillaShield + Các mô-đun IO + mBlock5 + Các khối mở rộng.pdf
Arduino + GorillaShield + Các mô-đun IO + mBlock5 + Các khối mở rộng.pdfArduino + GorillaShield + Các mô-đun IO + mBlock5 + Các khối mở rộng.pdf
Arduino + GorillaShield + Các mô-đun IO + mBlock5 + Các khối mở rộng.pdfMan_Ebook
 
Ktvxl chuong 2 - 8086-8088
Ktvxl chuong 2 - 8086-8088Ktvxl chuong 2 - 8086-8088
Ktvxl chuong 2 - 8086-8088NguynMinh294
 
Lập trình PLC S7 1200 tiếng Việt-Chuong 8 các công cụ trực tuyến và chuẩn đoán
Lập trình PLC S7 1200 tiếng Việt-Chuong 8 các công cụ trực tuyến và chuẩn đoánLập trình PLC S7 1200 tiếng Việt-Chuong 8 các công cụ trực tuyến và chuẩn đoán
Lập trình PLC S7 1200 tiếng Việt-Chuong 8 các công cụ trực tuyến và chuẩn đoánXuân Thủy Nguyễn
 
Bài giảng kỹ thuật điều khiển tự động
Bài giảng kỹ thuật điều khiển tự độngBài giảng kỹ thuật điều khiển tự động
Bài giảng kỹ thuật điều khiển tự độngNguyễn Nam Phóng
 
Đồ án Điều khiển thiết bị điện thông qua trợ lý ảo Google Assistant
Đồ án Điều khiển thiết bị điện thông qua trợ lý ảo Google AssistantĐồ án Điều khiển thiết bị điện thông qua trợ lý ảo Google Assistant
Đồ án Điều khiển thiết bị điện thông qua trợ lý ảo Google AssistantDaren Harvey
 
Bai giang-vhdl
Bai giang-vhdlBai giang-vhdl
Bai giang-vhdlhoangclick
 
xử lý số tín hiệu -Chuong 2
xử lý số tín hiệu -Chuong 2xử lý số tín hiệu -Chuong 2
xử lý số tín hiệu -Chuong 2Ngai Hoang Van
 
8051 giao tiep lcd
8051 giao tiep lcd8051 giao tiep lcd
8051 giao tiep lcdJean Okio
 
Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Nhóc Nhóc
 
Truyen song anten thay ngo lam
Truyen song anten thay ngo lamTruyen song anten thay ngo lam
Truyen song anten thay ngo lamVo Phong Phu
 
Các loại mã đường truyền và ứng dụng neptune
Các loại mã đường truyền và ứng dụng neptuneCác loại mã đường truyền và ứng dụng neptune
Các loại mã đường truyền và ứng dụng neptune給与 クレジット
 

What's hot (20)

Chương 5: Khối thu phát
Chương 5: Khối thu phátChương 5: Khối thu phát
Chương 5: Khối thu phát
 
Chuong 05 transistor bjt
Chuong 05 transistor bjtChuong 05 transistor bjt
Chuong 05 transistor bjt
 
Tín Hiệu Và Hệ Thống - Biểu Diễn trong miền thời gian của hệ thống tuyến tính...
Tín Hiệu Và Hệ Thống - Biểu Diễn trong miền thời gian của hệ thống tuyến tính...Tín Hiệu Và Hệ Thống - Biểu Diễn trong miền thời gian của hệ thống tuyến tính...
Tín Hiệu Và Hệ Thống - Biểu Diễn trong miền thời gian của hệ thống tuyến tính...
 
Chuong 05 flip flop
Chuong 05 flip flopChuong 05 flip flop
Chuong 05 flip flop
 
Chương trình điều khiển đèn giao thông cho ngã tư theo 3 chế độ dựa theo đồng...
Chương trình điều khiển đèn giao thông cho ngã tư theo 3 chế độ dựa theo đồng...Chương trình điều khiển đèn giao thông cho ngã tư theo 3 chế độ dựa theo đồng...
Chương trình điều khiển đèn giao thông cho ngã tư theo 3 chế độ dựa theo đồng...
 
Arduino + GorillaShield + Các mô-đun IO + mBlock5 + Các khối mở rộng.pdf
Arduino + GorillaShield + Các mô-đun IO + mBlock5 + Các khối mở rộng.pdfArduino + GorillaShield + Các mô-đun IO + mBlock5 + Các khối mở rộng.pdf
Arduino + GorillaShield + Các mô-đun IO + mBlock5 + Các khối mở rộng.pdf
 
Ktvxl chuong 2 - 8086-8088
Ktvxl chuong 2 - 8086-8088Ktvxl chuong 2 - 8086-8088
Ktvxl chuong 2 - 8086-8088
 
Lập trình PLC S7 1200 tiếng Việt-Chuong 8 các công cụ trực tuyến và chuẩn đoán
Lập trình PLC S7 1200 tiếng Việt-Chuong 8 các công cụ trực tuyến và chuẩn đoánLập trình PLC S7 1200 tiếng Việt-Chuong 8 các công cụ trực tuyến và chuẩn đoán
Lập trình PLC S7 1200 tiếng Việt-Chuong 8 các công cụ trực tuyến và chuẩn đoán
 
Điều khiển giám sát dây truyền phân loại và đóng gói sản phẩm
Điều khiển giám sát dây truyền phân loại và đóng gói sản phẩmĐiều khiển giám sát dây truyền phân loại và đóng gói sản phẩm
Điều khiển giám sát dây truyền phân loại và đóng gói sản phẩm
 
Bài giảng kỹ thuật điều khiển tự động
Bài giảng kỹ thuật điều khiển tự độngBài giảng kỹ thuật điều khiển tự động
Bài giảng kỹ thuật điều khiển tự động
 
Đề tài: Chế tạo mô hình nhà thông minh sử dụng Arduino, HAY
Đề tài: Chế tạo mô hình nhà thông minh sử dụng Arduino, HAYĐề tài: Chế tạo mô hình nhà thông minh sử dụng Arduino, HAY
Đề tài: Chế tạo mô hình nhà thông minh sử dụng Arduino, HAY
 
Đồ án Điều khiển thiết bị điện thông qua trợ lý ảo Google Assistant
Đồ án Điều khiển thiết bị điện thông qua trợ lý ảo Google AssistantĐồ án Điều khiển thiết bị điện thông qua trợ lý ảo Google Assistant
Đồ án Điều khiển thiết bị điện thông qua trợ lý ảo Google Assistant
 
Bai giang-vhdl
Bai giang-vhdlBai giang-vhdl
Bai giang-vhdl
 
xử lý số tín hiệu -Chuong 2
xử lý số tín hiệu -Chuong 2xử lý số tín hiệu -Chuong 2
xử lý số tín hiệu -Chuong 2
 
Chuong6 hoạt động ngắt
Chuong6 hoạt động ngắtChuong6 hoạt động ngắt
Chuong6 hoạt động ngắt
 
8051 giao tiep lcd
8051 giao tiep lcd8051 giao tiep lcd
8051 giao tiep lcd
 
Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05
 
Truyen song anten thay ngo lam
Truyen song anten thay ngo lamTruyen song anten thay ngo lam
Truyen song anten thay ngo lam
 
Các loại mã đường truyền và ứng dụng neptune
Các loại mã đường truyền và ứng dụng neptuneCác loại mã đường truyền và ứng dụng neptune
Các loại mã đường truyền và ứng dụng neptune
 
Đề tài: Đo tốc độ động cơ dùng 8051, HAY, 9đ
Đề tài: Đo tốc độ động cơ dùng 8051, HAY, 9đĐề tài: Đo tốc độ động cơ dùng 8051, HAY, 9đ
Đề tài: Đo tốc độ động cơ dùng 8051, HAY, 9đ
 

Similar to Thietke ic baigiang.v1.0

LUẬN VĂN THIẾT KẾ HỆ THỐNG NHÚNG VỚI VI ĐIỀU KHIỂN LÕI MỀM VÀ HỆ ĐIỀU HÀNH TR...
LUẬN VĂN THIẾT KẾ HỆ THỐNG NHÚNG VỚI VI ĐIỀU KHIỂN LÕI MỀM VÀ HỆ ĐIỀU HÀNH TR...LUẬN VĂN THIẾT KẾ HỆ THỐNG NHÚNG VỚI VI ĐIỀU KHIỂN LÕI MỀM VÀ HỆ ĐIỀU HÀNH TR...
LUẬN VĂN THIẾT KẾ HỆ THỐNG NHÚNG VỚI VI ĐIỀU KHIỂN LÕI MỀM VÀ HỆ ĐIỀU HÀNH TR...KhoTi1
 
De-cuong-on-tap-NNMTPC.pdf
De-cuong-on-tap-NNMTPC.pdfDe-cuong-on-tap-NNMTPC.pdf
De-cuong-on-tap-NNMTPC.pdfAnhTVit1
 
risc cisc_assignment_k2015-2
risc cisc_assignment_k2015-2risc cisc_assignment_k2015-2
risc cisc_assignment_k2015-2chutinhha
 
Thiet ke-he-thong-nhung -chuong-6-(p3)-tong-hop-phan-cung-va-phan-mem - [cuud...
Thiet ke-he-thong-nhung -chuong-6-(p3)-tong-hop-phan-cung-va-phan-mem - [cuud...Thiet ke-he-thong-nhung -chuong-6-(p3)-tong-hop-phan-cung-va-phan-mem - [cuud...
Thiet ke-he-thong-nhung -chuong-6-(p3)-tong-hop-phan-cung-va-phan-mem - [cuud...Tan Ngoc
 
Thiết kế đồng hồ số sử dụng bộ công cụ phần mềm thiết kế IC chuyên nghiệp của...
Thiết kế đồng hồ số sử dụng bộ công cụ phần mềm thiết kế IC chuyên nghiệp của...Thiết kế đồng hồ số sử dụng bộ công cụ phần mềm thiết kế IC chuyên nghiệp của...
Thiết kế đồng hồ số sử dụng bộ công cụ phần mềm thiết kế IC chuyên nghiệp của...luanvantrust
 
Thietke ic baigiang_02_gray
Thietke ic baigiang_02_grayThietke ic baigiang_02_gray
Thietke ic baigiang_02_grayba191992
 
chappter 1- Advanced Microprocessor presentation.pdf
chappter 1- Advanced Microprocessor presentation.pdfchappter 1- Advanced Microprocessor presentation.pdf
chappter 1- Advanced Microprocessor presentation.pdfngtloc2017
 
Luận Văn Nghiên Cứu Thiết Kế Và Xây Dựng Hệ Thống Truyền Đông Điện Động Cơ Mộ...
Luận Văn Nghiên Cứu Thiết Kế Và Xây Dựng Hệ Thống Truyền Đông Điện Động Cơ Mộ...Luận Văn Nghiên Cứu Thiết Kế Và Xây Dựng Hệ Thống Truyền Đông Điện Động Cơ Mộ...
Luận Văn Nghiên Cứu Thiết Kế Và Xây Dựng Hệ Thống Truyền Đông Điện Động Cơ Mộ...tcoco3199
 
Tong quan ve_fpga__1226
Tong quan ve_fpga__1226Tong quan ve_fpga__1226
Tong quan ve_fpga__1226KowLoon1
 
[hoctap.suctremmt.com]#1. Gioi thieu tong quan.pptx
[hoctap.suctremmt.com]#1. Gioi thieu tong quan.pptx[hoctap.suctremmt.com]#1. Gioi thieu tong quan.pptx
[hoctap.suctremmt.com]#1. Gioi thieu tong quan.pptxanhkien5
 
Gioi thieu-ve-vi-dieu-khien-pic
Gioi thieu-ve-vi-dieu-khien-picGioi thieu-ve-vi-dieu-khien-pic
Gioi thieu-ve-vi-dieu-khien-picCu Bi
 
Đồ Án Thiết Kế Lịch Vạn Niên Điện Tử Hiển Thị Trên LCD.pdf
Đồ Án Thiết Kế Lịch Vạn Niên Điện Tử Hiển Thị Trên LCD.pdfĐồ Án Thiết Kế Lịch Vạn Niên Điện Tử Hiển Thị Trên LCD.pdf
Đồ Án Thiết Kế Lịch Vạn Niên Điện Tử Hiển Thị Trên LCD.pdfNuioKila
 
đề Cương thi sát hạch kỹ sư cntt
đề Cương thi sát hạch kỹ sư cnttđề Cương thi sát hạch kỹ sư cntt
đề Cương thi sát hạch kỹ sư cnttHạnh Ngọc
 
chuong1_gioi thieu ve .he thong VLSI.ppt
chuong1_gioi thieu ve .he thong VLSI.pptchuong1_gioi thieu ve .he thong VLSI.ppt
chuong1_gioi thieu ve .he thong VLSI.pptSangL72
 
Thiết kế mạch điện tử (1).pdf
Thiết kế mạch điện tử (1).pdfThiết kế mạch điện tử (1).pdf
Thiết kế mạch điện tử (1).pdfAnhTVit1
 

Similar to Thietke ic baigiang.v1.0 (20)

LUẬN VĂN THIẾT KẾ HỆ THỐNG NHÚNG VỚI VI ĐIỀU KHIỂN LÕI MỀM VÀ HỆ ĐIỀU HÀNH TR...
LUẬN VĂN THIẾT KẾ HỆ THỐNG NHÚNG VỚI VI ĐIỀU KHIỂN LÕI MỀM VÀ HỆ ĐIỀU HÀNH TR...LUẬN VĂN THIẾT KẾ HỆ THỐNG NHÚNG VỚI VI ĐIỀU KHIỂN LÕI MỀM VÀ HỆ ĐIỀU HÀNH TR...
LUẬN VĂN THIẾT KẾ HỆ THỐNG NHÚNG VỚI VI ĐIỀU KHIỂN LÕI MỀM VÀ HỆ ĐIỀU HÀNH TR...
 
De-cuong-on-tap-NNMTPC.pdf
De-cuong-on-tap-NNMTPC.pdfDe-cuong-on-tap-NNMTPC.pdf
De-cuong-on-tap-NNMTPC.pdf
 
risc cisc_assignment_k2015-2
risc cisc_assignment_k2015-2risc cisc_assignment_k2015-2
risc cisc_assignment_k2015-2
 
Thiet ke-he-thong-nhung -chuong-6-(p3)-tong-hop-phan-cung-va-phan-mem - [cuud...
Thiet ke-he-thong-nhung -chuong-6-(p3)-tong-hop-phan-cung-va-phan-mem - [cuud...Thiet ke-he-thong-nhung -chuong-6-(p3)-tong-hop-phan-cung-va-phan-mem - [cuud...
Thiet ke-he-thong-nhung -chuong-6-(p3)-tong-hop-phan-cung-va-phan-mem - [cuud...
 
Ch0
Ch0Ch0
Ch0
 
Thiết kế đồng hồ số sử dụng bộ công cụ phần mềm thiết kế IC chuyên nghiệp của...
Thiết kế đồng hồ số sử dụng bộ công cụ phần mềm thiết kế IC chuyên nghiệp của...Thiết kế đồng hồ số sử dụng bộ công cụ phần mềm thiết kế IC chuyên nghiệp của...
Thiết kế đồng hồ số sử dụng bộ công cụ phần mềm thiết kế IC chuyên nghiệp của...
 
Vhdl
VhdlVhdl
Vhdl
 
Thietke ic baigiang_02_gray
Thietke ic baigiang_02_grayThietke ic baigiang_02_gray
Thietke ic baigiang_02_gray
 
Vi dieu khien_pic
Vi dieu khien_picVi dieu khien_pic
Vi dieu khien_pic
 
chappter 1- Advanced Microprocessor presentation.pdf
chappter 1- Advanced Microprocessor presentation.pdfchappter 1- Advanced Microprocessor presentation.pdf
chappter 1- Advanced Microprocessor presentation.pdf
 
Luận Văn Nghiên Cứu Thiết Kế Và Xây Dựng Hệ Thống Truyền Đông Điện Động Cơ Mộ...
Luận Văn Nghiên Cứu Thiết Kế Và Xây Dựng Hệ Thống Truyền Đông Điện Động Cơ Mộ...Luận Văn Nghiên Cứu Thiết Kế Và Xây Dựng Hệ Thống Truyền Đông Điện Động Cơ Mộ...
Luận Văn Nghiên Cứu Thiết Kế Và Xây Dựng Hệ Thống Truyền Đông Điện Động Cơ Mộ...
 
Tong quan ve_fpga__1226
Tong quan ve_fpga__1226Tong quan ve_fpga__1226
Tong quan ve_fpga__1226
 
[hoctap.suctremmt.com]#1. Gioi thieu tong quan.pptx
[hoctap.suctremmt.com]#1. Gioi thieu tong quan.pptx[hoctap.suctremmt.com]#1. Gioi thieu tong quan.pptx
[hoctap.suctremmt.com]#1. Gioi thieu tong quan.pptx
 
Gioi thieu-ve-vi-dieu-khien-pic
Gioi thieu-ve-vi-dieu-khien-picGioi thieu-ve-vi-dieu-khien-pic
Gioi thieu-ve-vi-dieu-khien-pic
 
Đồ Án Thiết Kế Lịch Vạn Niên Điện Tử Hiển Thị Trên LCD.pdf
Đồ Án Thiết Kế Lịch Vạn Niên Điện Tử Hiển Thị Trên LCD.pdfĐồ Án Thiết Kế Lịch Vạn Niên Điện Tử Hiển Thị Trên LCD.pdf
Đồ Án Thiết Kế Lịch Vạn Niên Điện Tử Hiển Thị Trên LCD.pdf
 
Kysu tinhoccn
Kysu tinhoccnKysu tinhoccn
Kysu tinhoccn
 
Bao cao vdk_va_pic
Bao cao vdk_va_picBao cao vdk_va_pic
Bao cao vdk_va_pic
 
đề Cương thi sát hạch kỹ sư cntt
đề Cương thi sát hạch kỹ sư cnttđề Cương thi sát hạch kỹ sư cntt
đề Cương thi sát hạch kỹ sư cntt
 
chuong1_gioi thieu ve .he thong VLSI.ppt
chuong1_gioi thieu ve .he thong VLSI.pptchuong1_gioi thieu ve .he thong VLSI.ppt
chuong1_gioi thieu ve .he thong VLSI.ppt
 
Thiết kế mạch điện tử (1).pdf
Thiết kế mạch điện tử (1).pdfThiết kế mạch điện tử (1).pdf
Thiết kế mạch điện tử (1).pdf
 

More from ba191992

More from ba191992 (8)

Thietke ic baigiang_03_gray
Thietke ic baigiang_03_grayThietke ic baigiang_03_gray
Thietke ic baigiang_03_gray
 
Ch06
Ch06Ch06
Ch06
 
Ch05
Ch05Ch05
Ch05
 
Ch04
Ch04Ch04
Ch04
 
Ch03
Ch03Ch03
Ch03
 
Ch02
Ch02Ch02
Ch02
 
Ch01
Ch01Ch01
Ch01
 
De cuong thiet bi ngoai vi
De cuong thiet bi ngoai viDe cuong thiet bi ngoai vi
De cuong thiet bi ngoai vi
 

Thietke ic baigiang.v1.0

  • 1. Bộ môn Kỹ thuật Máy tính Viện Công nghệ thông tin và Truyền thông, ĐHBKHN IC Msc. Nguyễn Đức Tiến tiennd@soict.hut.edu.vn +84-91-313-7399
  • 2. Nắm bắt được kiến thức cơ bản và ứng dụng của các IC lập trình mô tả phần cứng được. Nắm bắt được các nguyên lý lập trình mô tả phần cứng và các cấu trúc lập trình cơ bản, minh họa bằng ngôn ngữ VHDL.. Có kiến thức và kỹ năng thiết kế mạch số Hiểu biết về nguyên lý hoạt động phần cứng của bộ vi điều khiển và có khả năng thiết kế bộ vi điều khiển. http://dce.hut.edu.vn 2
  • 4. 1/2 Cứng hóa các ứng dụng mềm, tạo sản phầm ưu việt về tốc độ. >> NVIDIA Tegra INTEL Core i7 Đồ họa(Tính toán vector) Hiểu rõ nguyên tắc hoạt động của bộ xử lý, làm căn bản giúp việc lập trình phần mềm, lập trình hệ thống trở nên hợp lý, logic hơn. http://dce.hut.edu.vn 4
  • 5. 2/2 Dễ dàng thiết kế các bo mạch xử lý số. Nhanh chóng tạo ra các bộ xử lý mới, mạch số chuyên dụng dựa trên mã nguồn mở và tùy biến theo nhu cầu. Khuynh hướng tạo ra các giải pháp tổng thể hardware/soft ware (Oracle & Sun, Google& Motorola Mobility), và các khối xử lý tăng tốc. http://dce.hut.edu.vn QuadPort H/I HDMI2SDI Chipset chuyên dụng Card tăng tốc chuyên dụng 5
  • 6. 1/2 Nguyên lý mạch tích hợp. Tống Văn On. NXB Lao động xã hội. 2007. Thiết kế mạch số với VHDL & Verilog. Tống Văn On. NXB Lao động xã hội. 2007. Digital VLSI Systems Design. Dr. S. Ramachandran. Springer. 2007. Digital Integrated Circuits - A Design Perspective. Jan M. Rabaey, Anantha Chandrakasan, Borivoje Nikolic. Mc Graw Hill. http://dce.hut.edu.vn 6
  • 7. 2/2 Analysis and Design of Digital IC. David A.Hodges, Horace G.jackson, Resve A.Saleh. Mc Graw Hill. The Design Warrior‟s Guide to FPGA. Clive Max Maxfield. 2004. Circuit Design with VHDL. Volnei A. Pedroni. MIT Press. 2006. Fundamentals Of Digital Logic With VHDL Design 2nd Edition. Stephen Brown, Zvonko Vranesic. McGraw Hill. 2005. http://dce.hut.edu.vn 7
  • 8. FPGA4U, kit, usb-powered, altera, niosII & linux, http://fpga4u.epfl.ch/wiki/Main_Page SecretBlaze, bộ xử lý RISC 32bit dựa trên MicroBlaze, Xilinx, mã mở VHDL, 5 công đoạn, cache, ngắt. http://www.lirmm.fr/~barthe/index.php/page/Secret Blaze.html Các project và module mã nguồn mở http://www.opencores.org/ Các thủ thuật trên VHDL http://vhdlguru.blogspot.com/ http://dce.hut.edu.vn 8
  • 9. Phần I: • Các linh kiện để thiết kế IC (3) • Các qui trình sản xuất IC (1)
  • 10. IC, Integrated Circuit, là một mạch điện tử mà tất cả các thành phần đều được đặt trên một đế bán dẫn, không thể tách rời nhau được. Vi điều khiển Intel 8742: CPU 12MHz, RAM 128B, EPROM 2KB. http://dce.hut.edu.vn/ 10
  • 11. Thực hiện một / vài chức năng điện tử cụ thể. Chức năng có thể lập trình được. Thiết kế = IC chuẩn + custom IC (glue logic) http://dce.hut.edu.vn/ 11
  • 12. Tất cả các thành phần của IC được sản xuất đồng thời và hàng loạt, chứ không phải từng IC đơn lẻ. Ít tốn linh kiện. Được tối ưu về không gian, 1 triệu transitor/mm2 Module hóa quá trình thiết kế mạch điện tử. Giảm chi phí nghiên cứu, triển khai, nâng cấp... Giảm giá thành thiết bị, chức năng. http://dce.hut.edu.vn/ 12
  • 13. Tiêu thụ ít năng lượng. Được tối ưu hóa về tốc độ... Đồng bộ và tin cậy. Được kiểm thử bởi nhà sản xuất. Tuổi thọ cao. http://dce.hut.edu.vn 13
  • 14. 1/2 Die: khuôn, chip sillicon. Leadframe: khung dẫn, chứa các chân nối ra ngoài  rắp ráp lên board dễ hơn Wire: nối các chân IO trên die ra các chân tương ứng trên leadframe. Vỏ: phủ kín, đóng gói leadframe & die bằng ceramic, plastic… bảo vệ, tản nhiệt. http://dce.hut.edu.vn 14
  • 15. 2/2 Liên kết khung dẫn Liên kết khung dẫn (2) http://dce.hut.edu.vn 15
  • 16. Vỏ - package - có nhiều hình dạng khác nhau. Zigzag Inline Package Dual Inline Package Ball Grid Array Plastic Leader Chip Carrier Small Outline Package Tham khảo một số dạng vỏ http://dce.hut.edu.vn 16
  • 17. 1/2 Độ dài mỗi cạnh chừng vài mm. Kích thước IC được đo bằng số cổng logic/transistor (cổng là đơn vị đo tương ứng với cổng NAND 2 đầu vào). Xilinx Spartan II XC2S200, 540k đ, 200k cổng. Intel Core i7, 6.6m đ, >1 tỷ cổng. Cấu thành bởi các transistor CMOS. Một cổng NAND có 4 transistor. http://dce.hut.edu.vn 17
  • 18. 2/2 Quy trình xử lý N nm sẽ cho transistor nhỏ nhất có chiều dài N nm. Ví dụ, qui trình 28 nm. Kích thước đặc trưng nhỏ nhất λ ≈ ½ chiều dài transistor nhỏ nhất. Các bộ phận chức năng cấu thành IC được phân vùng rõ ràng. (FGPA hỗ trợ). Intel Quad Core Intel Core i7 Intel Pentium 5 AMD Quad Core
  • 19. 1/2 Sử dụng các transistor lưỡng cực, Bipolar NPN PNP Sử dụng các transistor có cực cổng kim loại, Metal Oxide Semiconductor nMOS http://dce.hut.edu.vn Kênh N Kênh P 19
  • 20. 2/2 CMOS, Complementary MOS Các lớp liên kết nối http://dce.hut.edu.vn 20
  • 22. Mật độ tích hợp: tăng với tốc độ nhanh chóng Cỡ nhỏ (Small Scale Integration) Cỡ trung bình (Medium Scale Integration) Cỡ lớn (Large Scale Integration) Cỡ rất lớn (Very Large Scale Integration) Hiệu năng: Tần số xung clock nhân đôi sau mỗi 3 năm http://dce.hut.edu.vn 22
  • 23. Nhu cầu từ thực tế, từ các dự đoán trong tương lai. Ví dụ, cần RAM gấp đôi. Nhu cầu Ứng dụng Đặc tả Kiểm thử Đặc tả các nhu cầu trên phương diện kỹ thuật. Ví dụ, cần tăng độ rộng bus địa chi. Thiết kế ASIC Kiểm thử prototype Sản xuất Tối ưu http://dce.hut.edu.vn Thiết kế: mức đỉnh – logic, thiết kế mức RTL, Register Transfer Level Tối ưu: về tốc độ, không gian, năng lượng, về công nghệ sản xuất ns. Ứng dụng: Release To Menufacturer 23
  • 24. 1/2 Tạo thỏi silicon In litô Cắt thành wafer Rửa bề mặt Mài bóng wafer Phủ kim loại Oxi hóa wafer Kiểm thử Phủ cản quang Đóng gói http://dce.hut.edu.vn 24
  • 26. 2/2 Tạo cắt mài wafer Cát và siliicon Bài dịch tham khảo Nhà máy
  • 27. Phần II: Field Programmable Gate Array Application Specific Integrated Circuit • Tổng quan (1) • Kiến trúc (2) • Qui trình thiết kế FPGA, ASIC (1) • Giới thiệu công cụ thiết kế và triển khai (4)
  • 28. 1/4 1980s, VLSI xuất hiện  thiết kế IC theo nhu cầu. Độ phức tạp tăng 40% mỗi năm. Nhu cầu thiết kế tăng 15% mỗi năm Mức độ tích hợp của PCB trên mỗi die
  • 29. 2/4 Mật độ (Gb/cm2) Tốc độ truy xuất (ns) DRAM 8.5 10 DRAM (logic) 2.5 10 SRAM (cache) 0.3 1.5 Silicon, 2010 Die Area: 2.5x2.5 cm Voltage: 0.6 V Technology: 0.07 m Mật độ (Mgate/cm2) Năng lượng (W/cm2) Xung đồng hồ (GHz) Custom 25 54 3 Std. Cell 10 27 1.5 Gate 5 18 1 Single-Mask GA 2.5 12.5 0.7 FPGA 0.3 4.5 0.25 http://dce.hut.edu.vn 29
  • 30. 3/4 Intel 4004 (1971) - thiết kế thủ công http://dce.hut.edu.vn 30
  • 31. 4/4 ASIC ra đời so nhu cầu về các hoạt động thiết kế ngày càng tăng. Hội nghị các vi mạch tùy biến theo khách hàng của IEEE đưa ra các tài liệu hướng dẫn phát triển custom IC. Thiết kế = IC chuẩn + custom IC Từ custom IC  thuật ngữ Application Specific IC http://dce.hut.edu.vn 31
  • 32. 1/3 ASIC, IC chuyên dụng. ASIC không đồng nhất với custom IC. IC chuẩn: ROM, RAM, DRAM, Processor, etc. ASIC: chip cho đồ chơi biết nói, chip cho 1 vệ tinh, chip cho bộ xử lý dưới dạng cell cùng với mạch logic. Qui tắc phổ biến: “Nếu một IC xuất hiện trong sách tra cứu, thì đó không phải là ASIC”. Application Specific Standard Product.
  • 33. 1/2 ASIC đem lại cơ hội sản xuất với số lượng lớn; các bộ phận được tiêu chuẩn hóa để nhanh chóng trở thành sản phẩm thương mại. Giá thành giảm theo số lượng. None Reducing Cost. Quy trình Cost Down trong các nhà máy. Hiệu quả kinh tế trong thiết kế Thực hiện prototype nhanh với số lượng thấp. Thiết kế theo nhu cầu, chuyên sâu, số lượng lớn. http://dce.hut.edu.vn 33
  • 34. 2/2 Có công cụ CAD cần thiết để đạt được hiệu quả trong chiến lược thiết kế: Thiết kế mức hệ thống: VHDL Thiết kế mức vật lý, từ VHDL tới silicon, timing closure (Monterey, Magma, Synopsys, Cadence, Avant!) Chiến lược thiết kế: Hierarchy - phân cấp; Regularity; Modularity - mô đun; Locality. http://dce.hut.edu.vn 34
  • 35. Thiết kế là một quá trình liên tục cân đối các tham số đầu vào, để đạt được hiệu quả mong đợi. Hiệu năng • chức năng, thời gian, tốc độ, năng lượng Kích thước die • chi phí sản xuất Thời gian thiết kế • lập lịch và chi phí nghiên cứu Test và Stability Test • lập lịch, chi phí nguồn lực, chi phí sản xuất http://dce.hut.edu.vn 35
  • 36. Ý tưởng thiết kế Simulink c := a + b; if (c = 1) then cf := 1; Đặc tả thiết kế Thiết kế hệ thống HDL Giả lập Thiết kế mức cổng Synopsys Thư viện cell Tổng hợp Giả lập Cadence Layout Kiểm tra Layout Sản xuất Novelus Kiểm thử chip Sản phẩm http://dce.hut.edu.vn 36
  • 37. Mức hệ thống Mức mô-đun chức năng Mức cổng Mức mạch Mức thiết bị http://dce.hut.edu.vn 37
  • 38. 1/2 • Phải sản xuất với số lượng cực lớn mới • Sản xuất với số lượng 100k sản phẩm/ năm • Dựa trên công nghệ ROM/PROM, cấu tạo chỉ gồm các lớp cổng AND, OR và một số Flip Flop. • Sản phẩm khá đơn giản với khoảng 1K gate. • Sản xuất đơn lẻ được http://dce.hut.edu.vn FPGA Gate Array • ~ 25M gate • Các cell là Flip-Flop, gate, hoặc bộ xử lý đã được định nghĩa trước, được tái sử dụng lại, Programable Logic Device • Thiết kế rất phức tạp, hàng trăm man-year Cell Base IC Full Custom IC CPLD • Các trans tạo sẵn thảnh mảng, và nhà thiết kế thực hiện việc tạo các liên kết nối giữa chúng bằng cách sử dụng các thư viện cell và CAD. • Sản xuất đơn lẻ được. 38
  • 39. 2/2 FPGA, PLD, CPLD được xếp vào nhóm các IC lập trình được bởi người dùng http://dce.hut.edu.vn 39
  • 40. 1/4 Phát sinh thứ 1: Một khi chip ASIC càng mạnh thì thiết kế càng tinh vi, phức tạp, càng tiềm tàng những sai sót lớn. Các phần mềm hỗ trợ, giả lập chưa thực sự phản ánh hết được hoạt động thực tế của hệ thống. Để kiểm tra thiết kế, người kĩ sư buộc phải đặt các nhà sản xuất sản xuất chip đơn lẻ và kiểm tra trên các ứng dụng, môi trường thực  tốn thời gian, và tiền bạc.  cần hệ nền kiểm thử phần cứng nhanh chóng. http://dce.hut.edu.vn 40
  • 41. 2/4 Năm 1984, Ross Freeman, Bernard Vonderschmitt, đồng sáng lập công ty Xillinx. Năm 1985, Xilinx đưa ra dòng FPGA thương mại đầu tiên, XC2064. Năm 2006, Freeman được vinh danh tại National Inventors Hall of Fame vì sáng chế này. FPGA dựa trên các công nghệ nền tảng như PROM và PLD, nhưng với kiến trúc mới hiệu quả hơn. Các thiết kế IC được thử nghiệm prototype trên các chip FPGA ngay lập tức  tiết kiệm thời gian và tiền bạc. http://dce.hut.edu.vn 41
  • 42. 3/4 Phát sinh thứ 2: Các nhà sản xuất lớn chỉ cung cấp các chip thông dụng trên thị trường, với số lượng lớn.  bỏ qua nhu cầu về các IC chuyên dụng có số lượng thấp, nhưng tổng nhu cầu thì rất lớn. Phát sinh thứ 3: Ban đầu, các chip lập trình được có giá thành khá cao và tốc độ chậm, chỉ sử dụng trong các phòng thí nghiệm. Khi công nghệ sản xuất phát triển vượt bậc, thì các chip lập trình được ngày càng mạnh và rẻ  ứng dụng đại trà. http://dce.hut.edu.vn 42
  • 43. 4/4 Hệ quả: Chân trời mới FPGA không chỉ là chip prototype trong các phòng thí nghiệm, mà thực sự trở thành sản phẩm thường mại đại chúng. Thị trường phần cứng được cung cấp một dòng sản phẩm có thể thiết kế và sử dụng được ngay. Các công ty vừa nhỏ, các kỹ sư hoạt động độc lập, không phải lệ thuộc vào các IC của các nhà sản xuất lớn  tự do sáng tạo. http://dce.hut.edu.vn 43
  • 44. vs CustomIC FPGA Chi phí chế tạo lớn Chi phí chế tạo thấp Tối ưu tốc độ, năng lượng… Tối ưu tính năng Sản xuất lớn Sản xuất nhỏ http://dce.hut.edu.vn 44
  • 45. 1/2 Nguyên nhân sử dụng chip ASIC prototyping Other 3% Easiest to use 4% Quality, Reliability 9% Complete Solution 18% Lowest Power 3% http://dce.hut.edu.vn Lowest Cost 17% Flexibility & Expandability 31% Best Performance (thoughput speed) 15% 45
  • 46. 1/2 System On Chip Hard IP Hard IP Soft IP Soft IP Others IP-based ... EDA Tools ... Soft IP EDA Tools Hard IP Others EDA Tools Application specific integration platform http://dce.hut.edu.vn EDA Integrator Platform-based Derivative 46
  • 47. Intel Core i7 die http://dce.hut.edu.vn 47
  • 48. RCC, Reconfigurable Computing. Ví dụ: RAM, ROM, PLA, PAL. Input: Địa chỉ Output: Giá trị Giá trị = f(Địa chỉ) y = f(x) FPGA với tính chất lập trình được cao, ưu việt, là đại diện của RCC. http://dce.hut.edu.vn 48
  • 49. Programable Array Logic (a) Programable ROM (b) PAL thương mại Lập trình A http://dce.hut.edu.vn B C Yêu cầu: F = AB = ABC + ABC 49
  • 50. Programable Logic Array, cả ma trận AND và OR đều lập trình được. Tiết kiệm dung lượng ma trận. Bị hạn chế bởi số lượng các cổng AND khi số đầu vào của cổng OR lớn hơn số cổng AND. Trễ truyền lan lớn hơn và mật độ tích hợp nhỏ. http://dce.hut.edu.vn 50
  • 51. Generic Array Logic nâng cấp từ PAL, gồm một ma trận AND lập trình được (cấu tạo từ EEPROM) và ma trận OR cố định. Tuy nhiên, các cổng OR nằm trong các macrocell được nối với flip-flop và các bộ dồn kênh để có thể chọn tín hiệu ra. Tên gọi chung của các thiết bị như PAL, PLA, GAL… là Programable Logic Device http://dce.hut.edu.vn Ví dụ: Dùng GAL điều khiển đèn giao thông: 51
  • 52. FPGA gồm 3 thành phần chính Khối logic – Logic Block (LB): đơn vị xử lý. Khối Vào ra – IO cell: giao tiếp với bên ngoài. Liên kết nối – Interconnection: liên kết các đơn vị xử lý. Configurable Logic Block Thành phần khác Buffer ClockDll … http://dce.hut.edu.vn I/O Block Connect Connec t 52
  • 53. 1/3 Cả 3 thành phần: khối logic, khối vào ra, liên kết nối, đều lập trình được. Lập trình cho khối logic là hành động: “có kết nối hay không phần tử logic A với phần tử logic B?” Lập trình cho khối vào ra là hành động: “có kết nối hay không đầu ra logic A với chuẩn ngoại vi B?” Lập trình cho liên kết nối là hành động: “có kết nối hay không khối logic A với khối logic/vào ra B?” http://dce.hut.edu.vn 53
  • 54. 2/3 Với FPGA, lập trình là quá trình định tuyến giữa các phần tử logic, flipflop… đã được chế tạo cố định sẵn, để thực thi một tác vụ nào đó. Một tuyến đều được chế tạo sẵn, và đính kèm một khóa đóng mở. Tuyến được thiết lập hoặc hủy, tương ứng với trạng thái khóa đóng hay mở. Mỗi trạng thái của khóa đóng/mở ứng với một bit nhớ trạng thái 0/1 tương ứng. Tập hợp các bít nhớ tạo thành bộ nhớ cấu hình cho FPGA.  Bảng định tuyến được lưu trữ trong bộ nhớ.  Công cụ EDA sẽ dịch HDL thành bảng định tuyến.
  • 55. 3/3 Phân tích Ánh xạ vào FPGA cụ thể HDL RTL BIT file • c := a + b; • if (c == 1) then cf := 1; • • 01000100 • 11010101 • 10001001 Bộ nhớ cấu hình http://dce.hut.edu.vn 55
  • 56. LB Tất cả ASIC lập trình được, bao gồm FPGA, đều chứa các khối logic (cell logic) cơ bản giống nhau tạo thành dải. Có 4 loại khối logic: Dựa vào bảng tìm kiếm (LUT – Lookup Table) Xilinx Dựa vào bộ ghép kênh (Multiplexers) Actel Dựa vào PAL/PLA Altera Transistor Pairs http://dce.hut.edu.vn I/O Cell I/O Cell I/O Cell I/O Cell LB LB LB I/O Cell I/O Cell LB LB LB I/O Cell I/O Cell LB LB LB I/O Cell I/O Cell I/O Cell I/O Cell 56
  • 57. A0 0 MUX A1 1 S Mux 2x1 có thể thực hiện được các hàm bên Biểu diễn mức transistor SA Cấu trúc cell logic ACT 1 (đơn module) Cell ACT 1 chỉ có một module logic. Cell ACT 2, 3 có nhiều module logic hơn và có Flip Flop riêng. Cấu tạo Flip Flop http://dce.hut.edu.vn 57
  • 58. 1/3 Bảng tìm kiếm, LUT, Look-Up Table, là một SRAM có K đầu vào với 2K bit nhớ, thực hiện được mọi hàm logic có K biến. Thông thường, K = 4. RAM 16bit G4 G3 G2 G1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 WE G4 G3 G2 G1 G Func. Gen. 1 G4 G3 G2 G1 Tín hiệu ra của một LUT có thể quay trở lại, thành đầu vào của chính LUT đó, hoặc LUT khác. Trong một LB, thường có 3 LUT và được gọi là bộ thực hiện hàm F, G và H. http://dce.hut.edu.vn 58
  • 59. 2/3 Các LUT F và G tương đương và độc lập với nhau, thực thi các hàm 4 biến và đưa kết quả tính toán ra ngoài CLB, hoặc nhớ vào FF. Nếu phép toán có nhiều hơn 4 biến thì LUT F, G sẽ đưa kết quả tới LUT H để mở rộng thêm. Flip-Flop đóng vai trò: • Bit nhớ hoặc • Chốt dữ liệu Hai FF có thể set/reset đồng bộ/không đồng bộ, tích cực theo sườn âm/dương… Cấu trúc cơ bản của LB dạng LUT http://dce.hut.edu.vn 59
  • 60. 3/3 Số liệu đưa vào LB có thể được xử lý bởi các hàm 4 đầu vào, có thể được chốt ở thanh ghi, có thể được chọn kênh, hoặc bởi cả 3 thao tác trên. Khối logic lập trình được, CLB, của XC4000 E/X http://dce.hut.edu.vn 60
  • 62. Còn được gọi là CrossPoint FPGA. Số lượng cổng ít, ~ 4000 http://dce.hut.edu.vn 62
  • 63. FPGA kế thừa nhiều ý tưởng thiết kế của các sản phẩm trước  sự quen thuộc trong kiến trúc. Nhưng số chức năng, mức độ tích hợp, khả năng tính toán của từng đơn vị xử lý trong FPGA có khác nhau, gồm Coarse /kɔ:s/ , và Fine. Coarse-grained: Đơn vị xử lý là một tập hợp của các PLD, các khối cấu hình được CLB, thực thi được hàm phức tạp, có yêu cầu tính toán lớn. Ví dụ: Actel Mux, Xilinx LUT. Fine-grained: Đơn vị xử lý chỉ gồm các khối cấu hình được CLB nhỏ, thực thi các hàm logic đơn giản. Ví dụ Transistor Pairs. http://dce.hut.edu.vn 63
  • 64. LB LB LB LB LB Ma trận đối xứng Symmetrical Array LB LB LB LB LB Sea-of-Gates LB LB LB LB Cấu trúc dòng Row-based LB LB LB LB LB LB LB LB LB LB http://dce.hut.edu.vn PLD PLD PLD phân cấp Hierarchical (CPLD) PLD PLD PLD PLD PLD PLD 64
  • 65. 1/3 Kết nối dài Kết nối đa năng LB SM Kết nối trực tiếp LB SM SM Ma trận chuyển mạch Liên kết nối dài, tín hiệu clk liên thông toàn bộ dải. Liên kết nối trực tiếp giữa 2 khối LB. Liên kết nối đa năng gồm nhiều kết nối và các chuyển mạch. http://dce.hut.edu.vn 65
  • 66. 2/3 Kết nối dài Kết nối trực tiếp http://dce.hut.edu.vn Kết nối đa năng 66
  • 67. 3/3 Phần lớn các kết nối tạo thành các lưới kết nối theo hàng và theo cột. Giao cắt giữa các kết nối theo hàng và theo cột sẽ tập trung các điểm cần lập trình kết nối, tạo thành ma trận chuyển mạch (Switching Matrix), nằm phân tán trong FPGA. SM http://dce.hut.edu.vn 67
  • 69. Spartan low end Cyclone low end http://dce.hut.edu.vn Arrix middle end Arria middle end Virtex high end Stratix high end 69
  • 71. Ngôn ngữ HDL phù hợp. Bộ công cụ CAD, EDA phù hợp. Ước lượng được số lượng các CLB cần thiết Dự kiến số lượng các chân I/O cần thiết. Điện áp hoạt động. Các FPGA mới sử dụng mức điện áp thấp LVTTL, LVCMOS, đòi hỏi phải chuyển đổi điện áp để tương thích với điện áp TTL, cung cấp một hoặc nhiều vùng sử dụng đồng thời đa mức điện áp. Tốc độ FPGA. Khả năng tài chính. http://dce.hut.edu.vn 71
  • 72. 1/4 Thiết kế hệ thống (System Design) Tích hợp vào ra (I/O integration) Đặc tả thiết kế (Design Specification) Tổng hợp (Synthesis) Kiểm tra thiết kế (Design Verification) Copyright (c) 10/2006 by NPB 72
  • 73. 2/4 Bước 1 - Thiết kế hệ thống Phần chức năng thực hiện trên FPGA Phần chức năng này tích hợp (kết hợp) với phần còn lại của hệ thống như thế nào Bước 2 - Tích hợp vào ra với phần còn lại của hệ thống Copyright (c) 10/2006 by NPB 73
  • 74. 3/4 Bước 3 - Đặc tả thiết kế Mô tả chức năng của thiết kế bằng: Các trình soạn sơ đồ logic Các ngôn ngữ đặc tả phần cứng Kết hợp mô phỏng Bước 4 - Tổng hợp logic Giống bước Tổng hợp logic trong quy trình đầy đủ Kết hợp tối ưu: trễ năng lượng hao phí Copyright (c) 10/2006 by NPB 74
  • 75. 4/4 Bước 5 - Kiểm tra thiết kế Thực hiện các mô phỏng, phân tích cuối cùng (RTL, thời gian…) Xác định các thông số của ASIC đã thiết kế (tần số xung nhịp…) Nạp chip và chạy thử trên hệ thống! Copyright (c) 10/2006 by NPB 75
  • 76. 1/3 Spactan II 200 Userguide.pdf Spactan II 300 PCI 32bits RS232 http://dce.hut.edu.vn 76
  • 78. 1/2 IDE của nhà sản xuất FPGA. Atera Xilinx Actel Chỉ có nhà sản xuất mới thấu hiểu nguyên tắc hoạt động của FPGA của họ.  chỉ có các IDE của nhà sản xuất mới routing, timing, cấu hình được cho FPGA. EDA của bên thứ 3 chỉ xử lý mức logic, rồi gọi IDE của nhà sản xuất để đảm nhiệm mức vật lý. http://dce.hut.edu.vn 78
  • 79. 2/2 Một số gói chương trình của bên thứ 3: Leonardo Spectrum, CT tổng hợp của Mentor Graphics Synplify, CT tổng hợp của Synplicity ModelSim , CT mô phỏng của Mentor Graphics. Active-HDL, CT thiết kế và mô phỏng của Aldec Active http://dce.hut.edu.vn 79
  • 81. • • • • • Tạo thực thể thiết kế bằng code mẫu, lấy từ Language Assistant. Tạo thực thể thiết kế, bằng giao diện Block Diagram. Tra cứu lỗi và xử lý “port mapping” trong quá trình thiết kế bằng Block Diagram. Chạy giả lập mức logic, Cách đưa giá trị vào các tín hiệu để giả lập logic. http://dce.hut.edu.vn 81
  • 82. Phần III: Very high speed integrated circuit Hardware Description Language • Giới thiệu các ngôn ngữ HDL (2) • Cấu trúc mã nguồn VHDL (2) • Mô hình lập trình VHDL • Các phương pháp thiết kế
  • 83. 1/3 Hardware Description Language, ngôn ngữ mô tả phần cứng. C = A and B A <= B rising_edge(CLK) 5V C <= „1‟ Mọi kết cấu phần cứng đều có thể biểu diễn dưới dạng các lệnh phần mềm, các hàm và thủ tục. Full Full Adder Full Adder Adder A := B + C Module1(A); Module(B); A<=B; M1 M2
  • 84. 2/3 Mô tả được kiến trúc xử lý tương tranh (đặc trưng riêng của phần cứng so với phần mềm). C L X C <= A and B; L <= P and Q; X <= C and L; C <= A and B; B <= C; Sử dụng các lệnh tuần tự để mô phỏng xử lý song song của phần cứng  dễ làm quen, dễ lập trình. + b b b a a a a a a for (i=1; i<3; i++) { a[i]:= a[i] + b[i] } thay 3 bằng J? Xử lý tuần tự của phần cứng biểu diễn thế nào?
  • 85. 3/3 Cho phép giả lập các điều kiện đầu vào để kiểm thử thiết kế phần cứng -> thực hiện test-driven, unitest. 001100010 Khi áp dụng source HDL lên 1 chip lập trình được nào đó thì các trình giả lập có thể tính toán chính xác độ trễ truyền lan, dạng sóng… tại mỗi điểm. Gợi ý: nếu không chắc chắn về thiết kế mạch số từ các phần từ logic, có thể viết bằng VHDL rồi tham khảo phân tích RTL.
  • 86. Có 2 ngôn ngữ, được sử dụng rộng rãi và công nhận bởi IEEE: VHDL Verilog Các ngôn ngữ khác như AHDL, JHDL, RHDL… Ngoài HDL, còn có HVL – Hardware Verification Language như OpenVera,Superlog http://dce.hut.edu.vn 86
  • 87. Là ngôn ngữ lập trình trừu tượng, đối lập với thiết kế mức logic, mức transistor. Phù hợp với phương pháp thiết kế top-down. Giảm thời gian thiết kế, kiểm thử, sản xuất… Giảm chi phí kỹ thuật không lặp lại None Recurring Enginnering. Tái sử dụng thiết kế. Dễ debug, tính tài nguyên. http://dce.hut.edu.vn C <= A + B HDL chi phí ? cell ? triger ? tốc độ ? phần tử logic 87
  • 88. Mô tả phần cứng bằng HDL. Kiểm thử nguyên lý bằng giả lập trên HDL. Kiểm tra chi tiết bằng phân tích RTL. Chọn IC lập trình được. Gắn kết các chân IO của phần cứng HDL với IC. Biên dịch phần cứng HDL theo IC. Nạp phần cứng HDL lên IC. http://dce.hut.edu.vn 88
  • 89. 1/3 Very high speed integrated circuit Hardware Description Language 1980, ngôn ngữ HDL đầu tiên, VHDL được ra đời theo mệnh lệnh của bộ quốc phòng Mỹ. VHDL dùng để ghi nhận cách hoạt động của các ASIC mà các công ty cung cấp sử dụng trong thiết bị quân sự  giống đặc tả cú pháp tài liệu. Bộ QP yêu cầu VHDL phải kế thừa cú pháp và các định nghĩa của ngôn ngữ Ada (mở rộng của Pascal) để tái sử dụng. http://dce.hut.edu.vn 89
  • 90. 2/3 1983, , , Intermetrics, góp kinh nghiệm về ngôn ngữ bậc cao và thiết kế top-down để phát triển VHDL. 1987, bộ QP tuyên bố: “Tất cả mạch điện tử số đều được mô tả trong VHDL”. VHDL cũng được công nhận là chuẩn IEEE 1076. Mọi hệ thống con điện tử của máy bay F-22 đều đặc tả bởi VHDL. Lúc này, VHDL đã là một chuẩn công nghiệp, nhưng ít công cụ hỗ trợ. http://dce.hut.edu.vn 90
  • 91. 3/3 1996, các công cụ giả lập logic, có thể hiểu cú pháp VHDL xuất hiện nhanh chóng. Sau đó, các công cụ tổng hợp, với đầu vào là VHDL, đầu ra là mô tả mạch phần cứng thực thi. Chuẩn IEEE 1164 được bổ sung,với nhiều kiểu logic đa giá trị khác nhau (U, Z, X…) VHDL library IEEE; IEEE.std_logic_1164.all; (Sẽ được thường xuyên sử dụng trong code VHDL) 01/2009, VHDL 4.0, còn gọi là VHDL 2008, là chuẩn IEEE 1076-2008 http://dce.hut.edu.vn VHDL wiki 91
  • 92. 1/2 Có tính định kiểu mạnh. Không phân biệt chữ hoa, thường. Cho phép tạo mảng với index tăng dần hoặc giảm dần. Ví dụ: bienx : out STD_LOGIC_VECTOR(2 downto 1) Có thể đọc/ghi file, thường dùng để giả lập, tạo số liệu vào, và thẩm định kết quả. Một người ít kinh nghiệm cũng có thể viết VHDL và giả lập thành công, nhưng không chắc đã tổng hợp được lên một thiết bị vật lý, hoặc vượt quá khả năng thực tế. Người dùng có thể dùng các VHDL IDE như Altera Quatus, Xilinx ISE… để tạo sơ đồ RTL. http://dce.hut.edu.vn 92
  • 93. 2/2 Có thể chạy giả lập để xem dạng sóng tín hiệu với các testbench tương ứng. Khi source VHDL được dịch dưới dạng “cổng và kết nối”, tức là đã được ánh xạ lên một thiết bị vật lý như CPLD, FPGA, thì đó chính là một phần cứng thực sự. Phù hợp với thiết kế mức hệ thống, vì cho phép kiểm tra hành vi của hệ thống, giả lập mà không cần thông qua công cụ tổng hợp lên phần cứng. Mô tả được tính tương tranh của phần cứng concurrent system. 1 mã nguồn VHDL phù hợp với nhiều phần cứng. http://dce.hut.edu.vn 93
  • 94. 1/3 1983~1984, Phil Moorby và Prabhu Goel đã phát triển xong một ngôn ngữ HDL, và được Gateway Design Automation công bố với tên Verilog, cùng trình mô phỏng Verilog. 1985, ra mắt bản nâng cấp của ngôn ngữ và trình mô phỏng Verilog XL, có thể mô phỏng thiết kế trên 1 triệu cổng, dễ dàng debug, mô phỏng phần cứng và cả tác nhân kích thích. 1987, Verilog thỏa mãn mong đợi của các kỹ sư thiết kế và ngày càng phổ biến. 1989, mua lại Gateway. http://dce.hut.edu.vn 94
  • 95. 2/3 1990, Cadence chia ngôn ngữ Verilog và trình mô phỏng Verilog-XL thành các sản phẩm riêng biệt.  công khai Verilog thành chuẩn mở, cạnh tranh với VHDL.  Hầu hết các xưởng chế tạo ASIC đều hỗ trợ Verilog và sử dụng Verilog-XL làm trình mô phỏng. 1993, 85% thiết kế và thẩm tra ASIC dùng Verilog. 1995, trở thành chuẩn IEEE 1364, hay còn gọi là Verilog-95 Cùng lúc, Cadence phát triển Verilog-A dành cho mạch tương tự, và là một bộ phận của VerilogAMS (Analog and Mixed-Signal) http://dce.hut.edu.vn 95
  • 96. 3/3 2005, là chuẩn IEEE 1634-2005, còn gọi là Verilog 2005. SystemVerilog là tập bao quát hơn, gồm cả Verilog 2005 bên trong, với nhiều tính năng mới và khả năng hỗ trợ thẩm định thiết kế, mô hình hóa thiết kế (nhờ tích hợp Hardware Verification Language). 2009, SystemVerilog và Verilog đều được hợp nhất lại trong IEEE 1800-2009, còn gọi là SystemVerilog 2009. http://dce.hut.edu.vn 96
  • 97. vs Khả năng trừu tượng 1/4 System Algorithm VHDL Verilog RTL Logic Gate Khả năng mô hình hóa Kiểu dữ liệu • VHDL: có nhiều kiểu, hàm chuyển kiểu, người dùng tự định nghĩa kiểu. • Verilog: kiểu đơn giản, gần với phần cứng, người dùng không tự định nghĩa kiểu được. http://dce.hut.edu.vn 97
  • 98. vs 2/4 Tái sử dụng thiết kế VHDL: các procedure và function có thể đặt trong một package và có thể được dùng lại trong thiết kế khác. Verilog: các procedure và function phải đặt trong một module, trong các file riêng rẽ và được bao gồm bằng cách sử dụng chỉ dẫn biên dịch include. Tính dễ học VHDL: do tính định kiểu mạnh nên có lợi cho người nhiều kinh nghiệm, và có nhiều cách để mô hình cùng một mạch số. Verilog: tương đối dễ học với người mới bắt đầu. Tuy nhiên, các chỉ định biên dịch và ngôn ngữ PLI đính kèm lại không đơn giản. http://dce.hut.edu.vn 98
  • 99. vs 3/4 Định thời Verilog cho khả năng liên kết thông tin giữa công cụ layout với công cụ tổng hợp/mô phỏng tốt hơn VHDL,nên khả năng biểu diễn định thời chính xác hơn. Thư viện VHDL: thư viện là miền lưu trữ trong môi trường máy chủ các thực thể (entity), kiến trúc (architecture), gói (package) và cấu hình (configuration) biên dịch được. Verilog: không tồn tại. Tính dễ đọc VHDL: giống ngôn ngữ Ada, Pascal. Verilog: giống ngôn ngữ C (50%C + 50%Ada) http://dce.hut.edu.vn 99
  • 100. vs 4/4 Mô hình thông số hóa VHDL,Verilog đều cho phép. Ví dụ, một đối tượng tổng quát n-bit, rồi được cụ thể hóa với n = 8. Sao chép cấu trúc VHDL: phát biểu generate sẽ tạo ra bản sao của các instance của cùng một đơn vị thiết kế hoặc một phần của thiết kế và kết nối một cách thích hợp. Verilog: không có phát biểu tương tương. http://dce.hut.edu.vn 100
  • 101. 1/5 Thiết kế FPGA thường dùng VHDL. Thiết kế None FPGA thường dùng Verilog hoặc System Verilog 06/2011, http://blogs.mentor.com/verificationhorizons/blog/tag/vhdl/ http://dce.hut.edu.vn 101
  • 102. 2/5 Ngoại trừ System Verilog, việc sử dụng các ngôn ngữ HDL đang giảm dần. 06/2011, http://blogs.mentor.com/verificationhorizons/blog/tag/vhdl/ http://dce.hut.edu.vn 102
  • 103. 3/5 Kiểm thử thiết kế FPGA thường dùng VHDL. Thiết kế None FPGA thường dùng System Verilog hoặc Verilog 06/2011, http://blogs.mentor.com/verificationhorizons/blog/tag/vhdl/ http://dce.hut.edu.vn 103
  • 104. 4/5 Duy nhất System Verilog đang tăng dần khuynh hướng sử dụng trong thẩm định thiết kế. 06/2011, http://blogs.mentor.com/verificationhorizons/blog/tag/vhdl/ http://dce.hut.edu.vn 104
  • 105. vs 5/5 Số lượng tìm kiếm về VHDL nhiều hơn Verilog, nhưng sự khác biệt đang giảm dần. http://dce.hut.edu.vn 105
  • 106. Viết trực tiếp mã nguồn bằng VHDL, Verilog. Sơ đồ khối, sơ đồ cấu trúc Sơ đồ trạng thái Kết hợp Thiết kế bằng sơ đồ sẽ được sinh tự động ra ngôn ngữ HDL, không đòi hỏi nhiều kỹ năng về HDL. Thiết kế bằng sơ đồ mang tính trực quan hơn, khả năng tổng hợp được lên phần cứng cao hơn. http://dce.hut.edu.vn 106
  • 107. library IEEE; use IEEE.STD_LOGIC_1164.all; entity Mach_AND is port( a : in STD_LOGIC; b : in STD_LOGIC; o : out STD_LOGIC ); end Mach_AND; architecture Cach_Hoat_Dong_01 of Mach_AND is begin o <= a and b; end Cach_Hoat_Dong_01; http://dce.hut.edu.vn 107
  • 110. Sơ đồ trạng thái Sơ đồ khối Viết mã nguồn HDL • Thiết kế để xử lý một thuật toán, ít thực thể con. • Thiết kế không có tính thuật toán, nhiều thực thể con. • Thiết kế được mô tả với nhiều mệnh đề “nếu.. thì..” • Thiết kế mang tính ”giao tiếp và phối phép” thực thể. • Thiết kế nhỏ, dễ kiểm soát hoạt động; hoặc thuật toán, thiết kế có tính tuần tự cao. • Thiết kế thực thể điều khiển, thực thể trọng tài, thực thể điều phối, phân xử. • Thiết kế mạch tổ hợp, thực thể xử lý tại ngõ vào/ra, schematic. • Phù hợp với thiết kế CU, phần xử ngắt, điều phối pipeline trong CPU. • Phù hợp với thiết kế ALU, thiết kế thanh ghi đa năng/chuyên dụng, thiết kể tổng thể toàn bộ CPU http://dce.hut.edu.vn • Giả lập môi trường hoạt động để test. • Thiết kế tạm mức hệ thống (không có khả năng tổng hợp), sau đó được thay thể dần bằng các thiết kế khả tổng hợp, với tiếp cận top-down. • Thiết kế FlipFlop, Mux, ALU, 110
  • 112. Khai báo thư viện library IEEE; use IEEE.STD_LOGIC_1164.all; Phần vỏ bên ngoài entity Mach_AND is port( a : in STD_LOGIC; b : in STD_LOGIC; o : out STD_LOGIC ); end Mach_AND; Hoạt động xử lý http://dce.hut.edu.vn architecture Cach_Hoat_Dong_01 of Mach_AND is begin o <= a and b; end Cach_Hoat_Dong_01;
  • 113. Khai báo thư viện #include <stdio.h> Định nghĩa giao diện void Mach_AND( bool a, bool b, bool & o ); Hoạt động xử lý void Mach_AND(…..) { o = a & b; } http://dce.hut.edu.vn library IEEE; use IEEE.STD_LOGIC_1164.all; entity Mach_AND is port( a : in STD_LOGIC; b : in STD_LOGIC; o : out STD_LOGIC ); end Mach_AND; architecture Cach_Hoat_Dong_01 of Mach_AND is begin o <= a and b; end Cach_Hoat_Dong_01;
  • 114. library IEEE; use IEEE.STD_LOGIC_1164.all; entity Mach_AND is port( a : in STD_LOGIC; b : in STD_LOGIC; o : out STD_LOGIC ); end Mach_AND; architecture Cach_Hoat_Dong_01 of Mach_AND is begin o <= a and b; end Cach_Hoat_Dong_01; http://dce.hut.edu.vn
  • 115. Nem chua (entity): •Thanh Hóa (archi), •Hà Tây (archi) , •Lai Vung (archi), Kiến trúc hoạt động thứ 1, do công ty A phát triển. Kiến trúc hoạt động thứ 2, do công ty B phát triển. http://dce.hut.edu.vn library IEEE; use IEEE.STD_LOGIC_1164.all; entity Mach_AND is port( a : in STD_LOGIC; b : in STD_LOGIC; o : out STD_LOGIC ); end Mach_AND; architecture Cach_Hoat_Dong_01 of Mach_AND is begin o <= a and b; end Cach_Hoat_Dong_01; architecture Cach_Hoat_Dong_02 of Mach_AND is begin o <= not ( (not a) or (not b) ); end Cach_Hoat_Dong_01;
  • 116. Package Gói Generic Architecture (Dataflow) Dạng luồng Lệnh song song Định nghĩa Entity Định nghĩa Architecture, kiểu Entity Thực thể Ports Architecture (Behavioral) Dạng hoạt động Lệnh song song Architecture (Structural) Dạng cấu trúc Tôi mua túi nhiều linh kiện, trong đó có 6 con IC. 2 con IC có 14 chân vào ra với 6 NOT TTL, và 4 con IC có 8 chân vào ra với 3 NOT CMOS. Process Lệnh tuần tự Component Thể hiện Định nghĩa Process http://dce.hut.edu.vn 116
  • 118. 2.1. Các đơn vị cơ bản của VHDL Mã lệnh VHDL gồm 3 phần cơ bản sau: Khai báo LIBRARY (thư viện): gồm danh sách các thư viện sử dụng trong thiết kế (VD: ieee, std, work, …) ENTITY (thực thể): mô tả các chân vào-ra của mạch ARCHITECTURE (kiến trúc): mô tả hoạt động của mạch LIBRARY: Tập hợp các đoạn lệnh thường được sử dụng Cho phép sử dụng lại các đoạn mã lệnh và chia sẻ với các ứng dụng khác Mã lệnh được viết theo khuôn dạng của các FUNCTION, PROCEDURE hay COMPONENT và được đặt bên trong các PACKAGE. Copyright (c) 10/2006 by NPB 118
  • 119. Các đơn vị cơ bản của VHDL (tiếp) Copyright (c) 10/2006 by NPB 119
  • 120. Nội dung chương 2 2.1. Các đơn vị cơ bản của VHDL 2.2. Khai báo thư viện (Library) 2.3. Thực thể (Entity) và thể hiện (Component) 2.4. Kiến trúc (Architecture) 2.5. Các ví dụ Copyright (c) 10/2006 by NPB 120
  • 121. 2.2. Khai báo thư viện (Library) Cú pháp: LIBRARY library_name; USE library_name.package_name.package_parts; Thường sử dụng các thư viện sau: LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY std; USE std.standard.all; LIBRARY work; USE work.all; Copyright (c) 10/2006 by NPB 121
  • 122. Khai báo thư viện (tiếp) Các thư viện std và work ngầm định có sẵn, không cần khai báo. Sử dụng thư viện ieee khi dùng các kiểu dữ liệu STD_LOGIC, STD_ULOGIC, … Thư viện ieee gồm các gói (package): std_logic_1164: các mức logic STD_LOGIC và STD_ULOGIC std_logic_arith: Các kiểu dữ liệu SIGNED và UNSIGNED Các thuật toán xử lý dữ liệu và các phép toán so sánh Các hàm chuyển đổi dữ liệu std_logic_signed: cho phép xử lý dữ liệu STD_LOGIC_VECTOR như là dữ liệu kiểu SIGNED std_logic_unsigned: cho phép xử lý dữ liệu STD_LOGIC_VECTOR như là dữ liệu kiểu UNSIGNED Copyright (c) 10/2006 by NPB 122
  • 123. Nội dung chương 2 2.1. Các đơn vị cơ bản của VHDL 2.2. Khai báo thư viện (Library) 2.3. Thực thể (Entity) và thể hiện (Component) 2.4. Kiến trúc (Architecture) 2.5. Các ví dụ Copyright (c) 10/2006 by NPB 123
  • 124. 2.3. Thực thể (Entity) Thực thể là một khai báo, đặc tả giao diện của đối tượng thiết kế, qua đó, thực thế này trao đổi với thực thế khác trong cùng môi trường. Thực thể ổ cứng, máy bay, điện thoại di động … Các thành phần đặc trưng của VHDL
  • 125. 2.3. Thực thể (Entity) Giống định nghĩa giao diện của class trong C++ class Mach_And { int a; int CachHoatDong(int); }; Copyright (c) 10/2006 by NPB 125
  • 126. 2.3. Thực thể (Entity) Mỗi thực thể bao gồm hai thành phần Các thuộc tính, thông số (parameters) Các đường kết nối vào, ra với bên ngoài
  • 127. Thực thể (Entity) Cú pháp: ENTITY entity_name IS GENERIC ( -generic_name : generic_type := <Giá trị mặc định>; ... ); PORT ( port_name : signal_mode signal_type; port_name : signal_mode signal_type; ...); END entity_name; Trong đó: Signal mode: IN, OUT, INOUT, BUFFER Signal type: BIT, STD_LOGIC, INTEGER, … generic type: integer, time… Copyright (c) 10/2006 by NPB 127
  • 128. Ví dụ 1 Copyright (c) 10/2006 by NPB 128
  • 129. Ví dụ 2: Dùng khai báo generic entity Eight_bit_register is generic ( LENGTH : integer := 8 -- Giá trị mặc định Fmax: integer := 50 -- Đơn vị MHz ); port( CLK : in STD_LOGIC; DIN : in STD_LOGIC_VECTOR(LENGTH downto 0); DOUT : out STD_LOGIC_VECTOR(LENGTH downto 0) ); end Eight_bit_register;
  • 130. Ví dụ 2: (tiếp) -- Nếu tạo component từ entity với độ -- rộng bus mặc định, 8 bit. U1 : eight_bit_register port map( CLK => NET2342 ); -- Nếu tạo component từ entity với độ -- rộng bus 5 bit. U1 : eight_bit_register generic map ( LENGTH => 5 ) 130 port map( CLK => NET2342);
  • 131. Thể hiện (Component) Thể hiện là một thực thể vật lý được đem vào sử dụng, được nhúng vào một kiến trúc của một thực thể khác. Giống như khái niệm thể hiện trong class của C++ { Mach_And U1, Mach_And U2; U1(a,b,tmp); U2(tmp,c,o); return o; } Ví dụ: U1 : Mach_And generic map ( LENGTH => 5 ) port map( CLK => NET2342); Copyright (c) 10/2006 by NPB 131
  • 132. Nội dung chương 2 2.1. Các đơn vị cơ bản của VHDL 2.2. Khai báo thư viện (Library) 2.3. Thực thể (Entity) và thể hiện (Component) 2.4. Kiến trúc (Architecture) 2.5. Các ví dụ Copyright (c) 10/2006 by NPB 132
  • 133. 2.4. Kiến trúc (Architecture) Kiến trúc của một thực thể cho biết cách hoạt động của thực thể đó. Giống như lập trình cho các method trong class của C++. void Mach_And.CachHoatDong(bool a, bool b, bool &o) { o = a & b; } Mỗi thực thể phải đi kèm với ít nhất 1 kiến trúc. Mỗi thực thể có thể có nhiều kiến trúc, giống như hàm ảo trong các class của C++. Việc kiến trúc nào được dùng, sẽ tùy vào cấu hình lúc sử dụng Các thành phần đặc trưng của VHDL của người phát triển. Copyright (c) 10/2006 by NPB 133
  • 134. 2.4. Kiến trúc (Architecture) (tiếp) Cú pháp: ARCHITECTURE architecture_name OF entity_name IS [declarations] BEGIN (code) END architecture_name; Ví dụ: ARCHITECTURE myarch1 OF nand_gate IS BEGIN x <= a NAND b; END myarch1; ARCHITECTURE myarch2 OF nand_gate IS BEGIN x <= NOT ( (NOT a) OR(NOT b) ); END myarch2; Copyright (c) 10/2006 by NPB 134
  • 135. Các kiểu mô tả kiến trúc Mô hình cấu trúc (Structural Style): gồm các thành phần (component) được liên kết với nhau. Mô hình luồng dữ liệu (Dataflow Style): gồm các lệnh gán được thực hiện đồng thời. Mô hình hoạt động (Behavioral Style): gồm các lệnh gán được thực hiện tuần tự. Dạng kết hợp của 3 kiểu mô hình trên. Mô hình cấu trúc và luồng dữ liệu gần với hoạt động thực tế của phần cứng hơn. Mô hình hoạt động dễ học, dễ quen hơn vì giống phần mềm. Các thành phần đặc trưng của VHDL Copyright (c) 10/2006 by NPB 135
  • 136. Nội dung chương 2 2.1. Các đơn vị cơ bản của VHDL 2.2. Khai báo thư viện (Library) 2.3. Thực thể (Entity) 2.4. Kiến trúc (Architecture) 2.5. Các ví dụ Copyright (c) 10/2006 by NPB 136
  • 137. Ví dụ 1 Trigger D xúc phát sườn dương có tín hiệu Reset tích cực mức cao. Nếu rst = 1 thì q = 0 Ngược lại: Nếu clk chuyển từ 0 lên 1 thì q = d Còn lại thì hệ giữ nguyên trạng thái. Copyright (c) 10/2006 by NPB 137
  • 138. Ví dụ 1 (tiếp) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 --------------------------------------LIBRARY ieee; USE ieee.std_logic_1164.all; --------------------------------------ENTITY dff IS PORT (d, clk, rst: IN STD_LOGIC; q: OUT STD_LOGIC); END dff; --------------------------------------ARCHITECTURE behavior OF dff IS BEGIN PROCESS (rst, clk) BEGIN IF (rst='1') THEN q <= '0'; ELSIF (clk'EVENT AND clk='1') THEN q <= d; END IF; END PROCESS; END behavior; --------------------------------------Copyright (c) 10/2006 by NPB 138
  • 139. Ví dụ 2 Trigger D xúc phát sườn dương có đầu vào D là đầu ra của 1 cổng NAND 2 đầu vào. Copyright (c) 10/2006 by NPB 139
  • 140. Ví dụ 2 (tiếp) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 --------------------------------------ENTITY example IS PORT ( a, b, clk: IN BIT; q:OUT BIT); END example; --------------------------------------ARCHITECTURE example OF example IS SIGNAL temp : BIT; BEGIN temp <= a NAND b; PROCESS (clk) BEGIN IF (clk'EVENT AND clk='1') THEN q<=temp; END IF; END PROCESS; END example; ---------------------------------------- Có thể thay dòng 8 và 10 bằng q <= a NAND b ở dòng 13 Copyright (c) 10/2006 by NPB 140
  • 142. Nội dung chương 3 3.1. Khái niệm chung về tín hiệu 3.2. Phân loại tín hiệu 3.3. Khai báo tín hiệu và phạm vi sử dụng
  • 143. 3.1. Khái niệm chung về tín hiệu Truyền thông là quá trình truyền thông tin từ đầu phát đến đầu thu Có nhiều phương thức để truyền thông tin nhưng đều có một thành phần chung là tín hiệu (Signal)
  • 144. Ví dụ tín hiệu
  • 145. Tín hiệu (Signal) Tín hiệu trong các thiết bị điện tử là tín hiệu điện
  • 146. Tín hiệu (Signal) Tầm quan trọng của tín hiệu điện (electrical signal) Tín hiệu điện đóng vai trò rất quan trọng trong hoạt động của các thiết bị điện tử -> VHDL: tín hiệu đóng vai trò rất quan trọng trong việc mô tả quá trình trao đổi dữ liệu giữa các mạch, các khối chức năng với nhau
  • 147. 3.2. Phân loại tín hiệu Phân loại theo số đường tín hiệu Đơn tín hiệu (single signal) Đa tín hiệu (multiple signal) Phân loại theo chức năng của tín hiệu Tín hiệu ghép nối với bên ngoài (External signal) Tín hiệu bên trong thiết bị (Internal signal)
  • 148. Đơn tín hiệu & Đa tín hiệu  Đơn tín hiệu: một đường kết nối -> bit  Đa tín hiệu (bus, vector): nhiều đường kết nối -> bit_vector
  • 149. Độ rộng bus và trật tự các bit bit_vector(7 downto 0) bit_vector(0 to 7)
  • 150. Tín hiệu trong & ngoài Tín hiệu ngoài (External Signal): kết nối hệ thống với thế giới bên ngoài Tín hiệu trong (Internal Signal): kết nối các thành phần bên trong hệ thống
  • 151. Tín hiệu trong & ngoài External Signals: DATA, RESULT, EXTBUS, a, b, c… Internal Signals: x, y, INTBUS
  • 152. 3.3. Khai báo tín hiệu Vị trí khai báo ENTITY External Signals ARCHITECTURE Internal Signals
  • 153. Khai báo External Signals Port_name: Mode Port_Type
  • 154. Khai báo Internal Signals Signal_name: Signal_Type
  • 155. Phạm vi sử dụng Các tín hiệu khai báo trong một package có thể sử dụng trong tất cả các đối tượng sử dụng package đó Các tín hiệu của interface (external signals) có thể sử dụng trong tất cả các architecture của interface đó Các tín hiệu khai báo bên trong một architecture thì chỉ có thể sử dụng trong architecture đó
  • 157. Ví dụ entity mux5_1 is port(u, v, w, x, y: IN std_logic_vector(2 downto 0); s: IN std_logic_vector(2 downto 0); m: OUT std_logic_vector(2 downto 0)); end mux5_1; architecture structure1 of mux5_1 is signal out1, out2, out3: std_logic_vector(2 downto 0); begin --Khai bao va noi chan cac component voi nhau mux21_1: entity work.mux2_1(behavior) port map(u, v, out1, s(0)); mux21_2: entity work.mux2_1(behavior) port map(w, x, out2, s(0)); mux21_3: entity work.mux2_1(behavior) port map(out1, out2, out3, s(1)); mux21_4: entity work.mux2_1(behavior) port map(out3, Y, m, s(2)); end structure1;
  • 158. 1/3 Trễ truyền lan của tín hiệu là khoảng thời gian cần thiết để tín hiệu đi từ đầu vào tới đầu ra và có trạng thái ổn định và hợp lệ. out 2ns t in out ổn định Trễ truyền lan tăng khi nhiệt độ môi trường hoạt động, điện áp nguồn cấp, kéo tải đầu ra tăng. http://dce.hut.edu.vn 158
  • 159. 2/3 Dây dẫn dài 6 inch, có trễ truyền lan khoảng 1ns. Cổng logic, tùy công nghệ chế tạo, trễ khoảng 10ns~1ps. Trễ trên một đường dẫn bằng tổng độ trễ của từng thành phần trên đường dẫn đó. T = Σ ti Độ trễ của một IC được tính bằng độ trễ lớn nhất trong các đường dẫn giữa đầu vào và đầu ra. http://dce.hut.edu.vn 15,2cm, trễ ~1 ns Trễ trên đường dẫn AiCi+1 lớn nhất 159
  • 160. 3/3 Độ trễ lớn nhất của một IC chính bằng chu kì hoạt động của IC đó  quyết định tần số làm việc tối đa Fmax. Độ trễ thay đổi theo từng cách tối ưu hóa thiết kế, IC vật lý (FGPA, CPLD, etc). Độ trễ xác định được cụ thể trong quá trình tổng hợp lên phần cứng, không xác định được nếu chỉ tổng hợp mức logic. Trễ trên đường dẫn AiCi+1 lớn nhất http://dce.hut.edu.vn 160
  • 162. Nội dung chương 4 4.1. Khai báo thực thể (entity) 4.2. Khai báo cổng (ports) 4.3. Khai báo thuộc tính, thông số(generic) Copyright (c) 10/2006 by NPB 162
  • 163. 4.1. Khai báo thực thể (entity) Nên khai báo tên gợi nhớ VHDL không phân biệt chữ hoa, thường Đặt tên của thực thể phải tuân theo các quy tắc: Khai báo trên một dòng duy nhất Phải bắt đầu bằng chữ cái Chỉ có thể bao gồm chữ cái, chữ số và dấu gạch dưới Dấu gạch dưới (underscores) không được sử dụng ở đầu, ở cuối hoặc sử dụng hai dấu liên tiếp nhau Không cho phép sử dụng khoảng trắng Không được sử dụng các từ khóa Copyright (c) 10/2006 by NPB 163
  • 164. Kết thúc khai báo thực thể Sử dụng câu lệnh end Cách 1: end entity; Cách 2: end entity_name; (end ExampleEnt;) Cách 3: end entity entity_name; -> Nên dùng Cách 4: end; -> Không nên dùng Copyright (c) 10/2006 by NPB 164
  • 165. Chú thích trong VHDL Bắt đầu bằng hai dấu gạch ngang “- -” Kết thúc ở cuối dòng Copyright (c) 10/2006 by NPB 165
  • 166. 4.2. Khai báo cổng (ports) Mỗi cổng được khai báo sử dụng từ khóa port và các thành phần sau: Từ khóa signal (optional) Tên cổng, theo sau là dấu hai chấm “:” Chế độ hoạt động của cổng (IN, OUT, INOUT…) Loại cổng (Kiểu dữ liệu) Khởi tạo giá trị cho cổng (optional) Copyright (c) 10/2006 by NPB 166
  • 167. Ví dụ khai báo cổng (ports) Copyright (c) 10/2006 by NPB 167
  • 168. Chế độ hoạt động của cổng (Port mode) Chế độ hoạt động của cổng (Port mode) xác định chiều dữ liệu trên cổng đó Các chế độ cổng thường sử dụng In: chế độ vào, cho phép đọc tín hiệu Out: chế độ ra, cho phép xuất tín hiệu Inout: chế độ hai chiều, cả vào và ra Copyright (c) 10/2006 by NPB 168
  • 169. 4.3. Khai báo generic Phải khai báo trong khai báo thực thể (entity) Là hằng số, được sử dụng để mô tả một thông số của hệ thống Kích thước của hệ thống (độ rộng bus, …) Tần số hoạt động … Khai báo generic: name: type :=value; Tên của thông số, theo sau là dấu hai chấm “:” Kiểu dữ liệu Giá trị mặc định (optional) Copyright (c) 10/2006 by NPB 169
  • 170. Ví dụ khai báo generic Copyright (c) 10/2006 by NPB 170
  • 172. Nội dung chương 3 3.1. Các kiểu dữ liệu có sẵn 3.2. Các kiểu dữ liệu do người dùng định nghĩa 3.3. Các kiểu dữ liệu dẫn xuất 3.4. Kiểu dữ liệu mảng 3.5. Kiểu dữ liệu bản ghi 3.6. Các kiểu dữ liệu có dấu và không dấu 3.7. Chuyển đổi kiểu dữ liệu 3.8. Các ví dụ Copyright (c) 10/2006 by NPB 172
  • 173. Các kiểu dữ liệu của VHDL VHDL cung cấp: Một số kiểu dữ liệu cơ sở (kiểu dữ liệu vô hướng – scalar) Cách tạo nên các kiểu dữ liệu tổng hợp (composite) Các kiểu dữ liệu vô hướng: Các kiểu số, các đại lượng vật lý, các kiểu liệt kê Có rất nhiều kiểu dữ liệu cơ sở chuẩn đã được định nghĩa trước. Ví dụ: enumeration, integer, physical(*), floating point(*). (*) = không tổng hợp được. Các kiểu dữ liệu tổng hợp: Kiểu mảng (array) Kiểu bản ghi (record) Ngoài ra VHDL còn cung cấp cả kiểu access (pointer) và kiểu file (ta không nghiên cứu). Copyright (c) 10/2006 by NPB 173
  • 174. • Cú pháp type type_name is type_definition; Trong đó type_definition có thể thuộc kiểu scalar, composite, access, file. Ví dụ: type Sreg0_type is (S1, S2, S3, S4); type small is range 0 to 23; http://dce.hut.edu.vn/ 174
  • 175. 5.1. Các kiểu dữ liệu có sẵn Gói standard của thư viện std: kiểu BIT, BOOLEAN, INTEGER và REAL Gói std_logic_1164 của thư viện ieee: kiểu STD_LOGIC và STD_ULOGIC Gói std_logic_arith của thư viện ieee: định nghĩa kiểu SIGNED và UNSIGNED, cộng thêm nhiều hàm chuyển đổi dữ liệu, VD: conv_integer(p), conv_unsigned(p, b), conv_signed(p, b), conv_std_logic_vector(p, b) … Gói std_logic_signed và std_logic_unsigned của thư viện ieee: chứa các hàm cho phép họat động với dữ liệu STD_LOGIC_VECTOR được thực hiện khi mà kiểu dữ liệu là SIGNED hoặc UNSIGNED Copyright (c) 10/2006 by NPB 175
  • 176. Kiểu BIT và BIT_VECTOR Kiểu BIT và BIT_VECTOR: 2 mức logic '0' và '1' Ví dụ: SIGNAL x: BIT; -- x được khai báo như một tín hiệu số kiểu BIT SIGNAL y: BIT_VECTOR (3 DOWNTO 0); -- y là một vector 4 bit, với bit trái nhất là MSB SIGNAL w: BIT_VECTOR (0 TO 7); -- w là một vector 8 bit, với bit phải nhất là MSB Các phép gán tín hiệu (dùng toán tử <= ) sau là hợp lệ: x <= -- ' y <= -- y w <= -- w '1'; ' dùng cho 1 bit còn " " dùng cho vector "0111"; là tín hiệu 4 bit có giá trị là "0111" (MSB = '0') "01110001"; là tín hiệu 8 bit có giá trị là "01110001" (MSB = '1') Copyright (c) 10/2006 by NPB 176
  • 177. Kiểu STD_LOGIC Kiểu STD_LOGIC và STD_LOGIC_VECTOR gồm 8 giá trị sau: 'X' : không xác định '0' : mức thấp '1' : mức cao 'Z' : trở kháng cao 'W' : không xác định yếu 'L' : mức thấp (yếu) 'H' : mức cao (yếu) Copyright (c) 10/2006 by NPB 177
  • 178. Kiểu STD_ULOGIC Hệ thống logic 9 mức được giới thiệu trong chuẩn IEEE 1164 („U‟, „X‟, „0‟, „1‟, „Z‟, „W‟, „L‟, „H‟, „–‟) STD_LOGIC là subtype của STD_ULOGIC (có thêm giá trị logic 'U' – Unresolved) Copyright (c) 10/2006 by NPB 178
  • 179. Các kiểu dữ liệu có sẵn (tiếp) Kiểu BOOLEAN: True và False Kiểu INTEGER: số nguyên 32 bit (từ 2.147.483.647 đến +2.147.483.647) Kiểu NATURAL: số tự nhiên (từ 0 đến +2.147.483.647) Kiểu REAL: số thực (từ -1.0E38 đến +1.0E38) Copyright (c) 10/2006 by NPB 179
  • 180. Các kiểu dữ liệu có sẵn (tiếp) Kiểu dữ liệu vật lý: Biểu thị một đại lượng vật lý nào đó, chẳng hạn như là khối lượng, độ dài, thời gian hoặc điện áp. Cú pháp khai báo một kiểu dữ liệu vật lý như sau: physical_type_definition ::= range_constraint units base_unit_declaration { secondary_unit_declaration } end units base_unit_declaration ::= identifier ; secondary_unit_declaration ::= identifier = physical_literal ; physical_literal ::= [ abstract_literal ] unit_name Copyright (c) 10/2006 by NPB 180
  • 181. type CAPACITY is range 0 to 1E8 units pF; -- picofarad nF = 1000 pF; -- nanofarad uF = 1000 nF; -- microfarad mF = 1000 uF; -- milifarad F = 1000 mF; -- farad end units CAPACITY; variable SomeVar : CAPACITY; SomeVar := 1mF + 23pF; type DISTANCE is range 0 to 1E5 units um; -- micrometer mm = 1000 um; -- millimeter in_a = 25400 um; -- inch end units DISTANCE; variable Dis1, Dis2 : DISTANCE; Dis1 := 28 mm; Dis2 := 2 in_a - 1 mm; if Dis1 < Dis2 then ... Kiểu vật l lý không thể tổng hợp lên mạch cứng được. Copyright (c) 10/2006 by NPB 181
  • 182. Các kí tự được biểu diễn ở trong cặp dấu nháy đơn, ví dụ: 'A' '*' ''' '' Nội dung của một xâu kí tự được biểu diễn trong cặp dấu nháy kép, ví dụ: "A string" "" – xâu rỗng "A string in a string: ""A string"". " – xâu có chứa ký tự " Copyright (c) 10/2006 by NPB 182
  • 183. x0 <= '0'; x6 <= X"2F"; • -- bit, std_logic, or std_ulogic value '0' • Số 2F theo hệ cơ số 16. x1 <= "00011111"; • bit_vector, std_logic_vector, std_ulogic_vector, signed, or unsigned x3 <= "101111"; n <= 1200; • Số nguyên. m <= 1_200; • -- Biểu diễn dạng nhị phân • Số nguyên, được phép có dấu gạch dưới x4 <= B"101111"; y <= 1.2E-5; • Biểu diễn dạng nhị phân • Số thực x5 <= O"57"; q <= d after 10 ns; • Số 57 theo hệ cơ số 8. • physical Copyright (c) 10/2006 by NPB 183
  • 184. SIGNAL SIGNAL SIGNAL SIGNAL SIGNAL a: b: c: d: e: BIT; BIT_VECTOR(7 DOWNTO 0); STD_LOGIC; STD_LOGIC_VECTOR(7 DOWNTO 0); INTEGER RANGE 0 TO 255; a <= c; a <= b(5); •Không hợp lệ (khác kiểu BIT & STD_LOGIC) • Hợp lệ (cùng kiểu BIT) b <= d; b(0) <= a; •Không hợp lệ (khác kiểu BIT_VECTOR & STD_LOGIC_VECTOR) • Hợp lệ (cùng kiểu BIT) e <= b; c <= d(5); •Không hợp lệ (khác kiểu INTEGER & BIT_VECTOR) • Hợp lệ (cùng kiểu STD_LOGIC) e <= d; d(0) <= c; •Không hợp lệ (khác kiểu INTEGER & STD_LOGIC_VECTOR) • Hợp lệ (cùng kiểu STD_LOGIC) Copyright (c) 10/2006 by NPB 184
  • 185. 5.2. Các kiểu dữ liệu người dùng đn Có 2 dạng dữ liệu người dùng có thể định nghĩa: integer (kiểu số nguyên) enumerated (kiểu liệt kê) Copyright (c) 10/2006 by NPB 185
  • 186. Kiểu số nguyên do NSD định nghĩa Cú pháp: integer_type_definition ::= range_constraint range_constraint ::= range range range ::= simple_expression direction simple_expression direction ::= to | downto Ví dụ: type type type type type byte_int is range 0 to 255; signed_word_int is range –32768 to 32767; bit_index is range 31 downto 0; my_integer is range -32 to 32; student_grade is range 0 to 100; Copyright (c) 10/2006 by NPB 186
  • 187. Kiểu liệt kê do NSD định nghĩa Cú pháp: enumeration_type_definition ::= ( enumeration_literal { , enumeration_literal } ) enumeration_literal ::= identifier | character_literal Ví dụ: type logic_level is (unknown, low, undriven, high); type alu_function is (disable, pass, add, subtract, multiply, divide); type octal_digit is ('0', '1', '2', '3', '4', '5', '6', '7'); Copyright (c) 10/2006 by NPB 187
  • 188. Kiểu dữ liệu liệt kê (tiếp) Kiểu character: chứa cả tên và ký tự type character is ( NUL, SOH, STX, ETX, EOT, ENQ, ACK, BEL, BS, HT, LF, VT, FF, CR, SO, SI, DLE, DC1, DC2, DC3, DC4, NAK, SYN, ETB, CAN, EM, SUB, ESC, FSP, GSP, RSP, USP, ' ', '!', '"', '#', '$', '%', '&', ''', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', DEL); Copyright (c) 10/2006 by NPB 188
  • 189. 5.3. Các kiểu dữ liệu dẫn xuất VD 1: các kiểu Subtype được dẫn xuất từ các kiểu dữ liệu ở các phần trước SUBTYPE natural IS INTEGER RANGE 0 TO INTEGER'HIGH; SUBTYPE my_logic IS STD_LOGIC RANGE '0' TO 'Z'; -- Có STD_LOGIC = ('X','0','1','Z','W','L','H','-') -- Suy ra my_logic = ('0','1','Z') SUBTYPE small_integer IS INTEGER RANGE -32 TO 32; Copyright (c) 10/2006 by NPB 189
  • 190. Các kiểu dữ liệu dẫn xuất (tiếp) VD 2: Các phép gán giữa Types và Subtypes SUBTYPE my_logic IS STD_LOGIC RANGE '0' TO '1'; SIGNAL a: BIT; SIGNAL b: STD_LOGIC; SIGNAL c: my_logic; ... b <= a; --khong hop le ( BIT vs STD_LOGIC) b <= c; --hop le (cung kieu STD_LOGIC) c <= b; --hop le (cung kieu STD_LOGIC) Copyright (c) 10/2006 by NPB 190
  • 191. 5.4. Kiểu dữ liệu mảng Mảng (Array) là tập hợp các phần tử có cùng kiểu. Mảng có thể là mảng 1 chiều (1D), 2 chiều (2D) hoặc là mảng 1 chiều của mảng 1 chiều (1Dx1D) Copyright (c) 10/2006 by NPB 191
  • 192. Kiểu mảng (tiếp) Định nghĩa mảng: TYPE type_name IS ARRAY (specification) OF data_type; Sử dụng mảng: SIGNAL signal_name: type_name [:= initial_value]; SIGNAL cũng có thể là CONSTANT hoặc VARIABLE Ứng dụng: để mô hình các cấu trúc tuyến tính như RAM, ROM, etc. Copyright (c) 10/2006 by NPB 192
  • 193. Ví dụ về khai báo mảng Mảng 1Dx1D: TYPE row IS ARRAY (7 DOWNTO 0) OF STD_LOGIC; TYPE matrix IS ARRAY (0 TO 3) OF row; SIGNAL x: matrix; TYPE matrix IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO 0); Mảng 2D: TYPE matrix2D IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC; Khởi tạo mảng: ... :="0001"; -- mảng 1D ... :=('0','0','0','1') -- mảng 1D ... :=(('0','1','1','1'), ('1','1','1','0')); -- 1Dx1D / 2D Copyright (c) 10/2006 by NPB 193
  • 194. Ví dụ về sử dụng mảng TYPE row IS ARRAY (7 TYPE array1 IS ARRAY TYPE array2 IS ARRAY TYPE array3 IS ARRAY SIGNAL x: row; SIGNAL y: array1; SIGNAL v: array2; SIGNAL w: array3; DOWNTO 0) OF STD_LOGIC; (0 TO 3) OF row; (0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO 0); (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC; x(0) <= y(1)(2); x(1) <= v(2)(3); x(2) <= w(2,1); y(1)(1) <= x(6); y(2)(0) <= v(0)(0); y(0)(0) <= w(3,3); w(1,1) <= x(7); w(3,0) <= v(0)(3); x <= y(0); x <= v(1); x <= w(2); x <= w(2,2 DOWNTO 0); v(0) <= w(2,2 DOWNTO 0); v(0) <= w(2); y(1) <= v(3); y(1)(7 DOWNTO 3) <= x(4 DOWNTO 0); v(1)(7 DOWNTO 3) <= v(2)(4 DOWNTO 0); w(1,5 DOWNTO 1) <= v(2)(4 DOWNTO 0); -- Lệnh tô đậm là các phép gán sai Copyright (c) 10/2006 by NPB 194
  • 195. Ví dụ về gán mảng Giả sử có một mảng được khai báo là: type a is array (1 to 4) of character; Để gán giá trị cho các phần tử của mảng theo thứ tự 'f', 'o', 'o', 'd' ta có thể dùng cách viết như sau: a := ('f', 'o', 'o', 'd'); a := (1 => 'f', 3 => 'o', 4 => 'd', 2 => 'o'); a := ('f', 4 => 'd', others => 'o'); Copyright (c) 10/2006 by NPB 195
  • 196. Ví dụ về mảng các cổng vào-ra Không có kiểu dữ liệu có sẵn nhiều chiều Một cách mô tả các chân vào-ra của mạch trong khai báo ENTITY là dùng mảng các vector Không được phép dùng TYPE trong khai báo ENTITY. => Định nghĩa kiểu dữ liệu mới trong 1 PACKAGE Copyright (c) 10/2006 by NPB 196
  • 197. Ví dụ mảng các cổng (tiếp) ------- Package: --------------------------LIBRARY ieee; USE ieee.std_logic_1164.all; PACKAGE my_data_types IS CONSTANT b: INTEGER := 7; TYPE vector_array IS ARRAY (NATURAL RANGE <>) OF STD_LOGIC_VECTOR(b DOWNTO 0); END my_data_types; ------- Main code: ------------------------LIBRARY ieee; USE ieee.std_logic_1164.all; USE work.my_data_types.all; -- user-defined package --------------------------ENTITY mux IS PORT (inp: IN VECTOR_ARRAY (0 TO 3); ... ); END mux; ... ; -------------------------------------------Copyright (c) 10/2006 by NPB 197
  • 198. 5.5. Kiểu dữ liệu bản ghi Bản ghi (Record) là kiểu dữ liệu gồm các phần tử có kiểu khác nhau nhưng có liên kết với nhau. Cú pháp khai báo kiểu bản ghi: record_type_definition ::= record element_declaration { element_declaration } end record element_declaration ::= identifier_list : element_subtype_definition ; identifier_list ::= identifier { , identifier ) element_subtype_definition ::= subtype_indication Ứng dụng: để mô hình các gói dữ liệu. Copyright (c) 10/2006 by NPB 198
  • 199. Ví dụ về kiểu bản ghi Ví dụ 1: TYPE birthday IS RECORD day: INTEGER RANGE 1 TO 31; month: month_name; END RECORD; Ví dụ 2: type instruction is record op_code : processor_op; address_mode : mode; operand1, operand2: integer range 0 to 15; end record; Để truy cập vào trường f của bản ghi r, ta sử dụng cách viết r.f Copyright (c) 10/2006 by NPB 199
  • 200. 5.6. Kiểu dữ liệu có dấu và không dấu Các kiểu SIGNED và UNSIGNED được định nghĩa trong gói std_logic_arith của thư viện ieee. Ví dụ: SIGNAL x: SIGNED (7 DOWNTO 0); SIGNAL y: UNSIGNED (0 TO 3); UNSIGNED: "0101" biểu diễn số 5, "1101" biểu diễn số 13 SIGNED: "0101" biểu diễn số 5, "1101" biểu diễn số -3 Dùng với các phép toán số học, không dùng được với các phép toán logic. Copyright (c) 10/2006 by NPB 200
  • 201. Ví dụ 1 LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; ... SIGNAL a: IN SIGNED (7 DOWNTO 0); SIGNAL b: IN SIGNED (7 DOWNTO 0); SIGNAL x: OUT SIGNED (7 DOWNTO 0); ... v <= a + b; w <= a AND b; Copyright (c) 10/2006 by NPB 201
  • 202. Ví dụ 2 LIBRARY ieee; USE ieee.std_logic_1164.all; ... SIGNAL a: IN STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL b: IN STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL x: OUT STD_LOGIC_VECTOR (7 DOWNTO 0); ... v <= a + b; w <= a AND b; Copyright (c) 10/2006 by NPB 202
  • 203. Ví dụ 3 LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ... SIGNAL a: IN STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL b: IN STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL x: OUT STD_LOGIC_VECTOR (7 DOWNTO 0); ... v <= a + b; w <= a AND b; Copyright (c) 10/2006 by NPB 203
  • 204. 5.7. Chuyển đổi kiểu dữ liệu VHDL không cho phép các phép toán trực tiếp ( số học, logic, …) tác động lên các dữ liệu khác kiểu nhau. Gói std_logic_1164 của thư viện ieee cung cấp các hàm chuyển đổi kiểu dữ liệu. Copyright (c) 10/2006 by NPB 204
  • 205. Các hàm chuyển đổi conv_integer(p): chuyển đổi p thuộc kiểu INTEGER, UNSIGNED, SIGNED, hoặc STD_ULOGIC thành một giá trị INTEGER. conv_unsigned(p, b): chuyển đổi p thuộc kiểu INTEGER, UNSIGNED, SIGNED, hoặc STD_ULOGIC thành một giá trị UNSIGNED với kích thước là b bit. conv_signed(p, b): chuyển đổi p của kiểu INTEGER, UNSIGNED, SIGNED, hoặc STD_ULOGIC thành một giá trị SIGNED với kích thước là b bit. conv_std_logic_vector(p, b): chuyển đổi p thuộc kiểu dữ liệu INTEGER, UNSIGNED, SIGNED, hoặc STD_LOGIC thành một giá trị STD_LOGIC_VECTOR với kích thước b bit. Copyright (c) 10/2006 by NPB 205
  • 206. Ví dụ 1 TYPE long IS INTEGER RANGE -100 TO 100; TYPE short IS INTEGER RANGE -10 TO 10; SIGNAL x : short; SIGNAL y : long; ... y <= 2*x + 5; y <= long(2*x + 5); Copyright (c) 10/2006 by NPB 206
  • 207. Ví dụ 2 LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; ... SIGNAL a: IN UNSIGNED (7 DOWNTO 0); SIGNAL b: IN UNSIGNED (7 DOWNTO 0); SIGNAL y: OUT STD_LOGIC_VECTOR (7 DOWNTO 0); ... y <= CONV_STD_LOGIC_VECTOR ((a+b), 8); Phép toán hợp lệ: a+b được chuyển đổi từ UNSIGNED thành một giá trị 8-bit STD_LOGIC_VECTOR, sau đó gán cho y. Copyright (c) 10/2006 by NPB 207
  • 208. 5.8. Các ví dụ Ví dụ 1: cho các khai báo sau TYPE byte IS ARRAY (7 DOWNTO 0) OF STD_LOGIC; TYPE mem1 IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC; TYPE mem2 IS ARRAY (0 TO 3) OF byte; TYPE mem3 IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(0 TO 7); SIGNAL a: STD_LOGIC; SIGNAL b: BIT; SIGNAL x: byte; SIGNAL y: STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL v: BIT_VECTOR (3 DOWNTO 0); SIGNAL z: STD_LOGIC_VECTOR (x'HIGH DOWNTO 0); SIGNAL w1: mem1; SIGNAL w2: mem2; SIGNAL w3: mem3; Copyright (c) 10/2006 by NPB 208
  • 209. Ví dụ 1 (tiếp) Xét tính hợp lệ của các phép gán sau: x(2) <= a; y(0) <= x(0); z(7) <= x(5); b <= v(3); w1(0,0) <= x(3); w1(2,5) <= y(7); w2(0)(0) <= x(2); w2(2)(5) <= y(7); w1(2,5) <= w2(3)(7); b <= a; w1(0)(2) <= x(2); w2(2,0) <= a; Copyright (c) 10/2006 by NPB 209
  • 210. Ví dụ 1 (tiếp) Xét tính hợp lệ của các phép gán sau: x <= "11111110"; x <= (OTHERS => '1'); x <= y; y <= ('1','1','1','1','1','1','0','Z'); y <= (7 =>'0', 1 =>'0', OTHERS => '1'); y(2 DOWNTO 0) <= z(6 DOWNTO 4); y(5 TO 7) <= z(6 DOWNTO 0); z <= "11111" & "000"; z <= y; z <= w3(1); z(5 DOWNTO 0) <= w3(1)(2 TO 7); Copyright (c) 10/2006 by NPB 210
  • 211. Ví dụ 1 (tiếp) Xét tính hợp lệ của các phép gán sau: w1 <= ((OTHERS=>'Z'), "11110000" ,"11110000", (OTHERS=>'0')); w1 <= (OTHERS => '1'); w1(0, 7 DOWNTO 0) <="11111111"; w2 <= (OTHERS => 'Z'); w2(0, 7 DOWNTO 0) <= "11110000"; w2(0)(7 DOWNTO 0) <= "11110000"; w2 <= ((OTHERS=>'0'), (OTHERS=>'0'), (OTHERS=>'0'), (OTHERS=>'0')); w3(2) <= y; w3(1) <= "00000000"; w3(1) <= (OTHERS => '0'); w3 <= ("11111100", ('0','0','0','0','Z','Z','Z','Z',), (OTHERS=>'0'), (OTHERS=>'0')); Copyright (c) 10/2006 by NPB 211
  • 212. Ví dụ 2 Copyright (c) 10/2006 by NPB 212
  • 213. Ví dụ 2 (tiếp) Copyright (c) 10/2006 by NPB 213
  • 214. Copyright (c) 10/2006 by NPB 214
  • 215. Nội dung chương 6 6.1. Các toán tử 6.2. Các thuộc tính 6.3. Các thuộc tính do người dùng định nghĩa 6.4. Chồng toán tử 6.5. GENERIC Copyright (c) 10/2006 by NPB 215
  • 216. 6.1. Toán tử VHDL cung cấp một số loại toán tử sau: Toán tử gán Toán tử logic Toán tử số học Toán tử so sánh Toán tử dịch Copyright (c) 10/2006 by NPB 216
  • 217. Các toán tử gán <= dùng gán giá trị cho SIGNAL := dùng gán giá trị cho VARIABLE, CONSTANT, GENERIC => dùng gán giá trị cho từng phần tử của kiểu vector hoặc dùng với từ khóa OTHERS Copyright (c) 10/2006 by NPB 217
  • 218. VD về toán tử gán SIGNAL x : STD_LOGIC; VARIABLE y : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL w : STD_LOGIC_VECTOR(0 TO 7); x y w w <= := <= <= '1'; "0000"; "10000000"; (0 =>'1', OTHERS =>'0'); Copyright (c) 10/2006 by NPB 218
  • 219. Các toán tử logic VHDL định nghĩa các toán tử logic sau: NOT, AND, OR, NAND, NOR, XOR, XNOR Dữ liệu cho các toán tử này phải là kiểu: BIT, STD_LOGIC, STD_ULOGIC, BIT_VECTOR, STD_LOGIC_VECTOR, STD_ULOGIC_VECTOR. Ví dụ: y <= NOT (a AND b); y <= a NAND b; Copyright (c) 10/2006 by NPB 219
  • 220. Các toán tử số học Dùng cho các kiểu dữ liệu số như là:INTEGER, SIGNED, UNSIGNED, REAL. Bao gồm: + Toán tử cộng Toán tử trừ * Toán tử nhân / Toán tử chia ** Toán tử lấy mũ MOD Phép chia lấy phần nguyên (Y MOD X có dấu của X) REM Phép chia lấy phần dư (Y REM X có dấu của Y) ABS Phép lấy giá trị tuyệt đối Copyright (c) 10/2006 by NPB 220
  • 221. Toán tử so sánh Có các toán tử so sánh sau: = So sánh bằng /= So sánh khác nhau < So sánh nhỏ hơn > So sánh lớn hơn <= So sánh nhỏ hơn hoặc bằng >= So sánh lớn hơn hoặc bằng Chỉ tác động lên 2 toán hạng có cùng kiểu Kết quả là một giá trị Boolean Các toán hạng ứng với phép so sánh bằng và khác (= và /=) có thể có kiểu bất kì. Với các kiểu có cấu trúc, 2 giá trị được coi là bằng nhau nếu tất cả các thành phần tương ứng của chúng là như nhau. Các toán tử so sánh còn lại phải có toán hạng là kiểu vô hướng hoặc kiểu mảng 1 chiều của các kiểu rời rạc. Copyright (c) 10/2006 by NPB 221
  • 222. Toán tử dịch Cú pháp sử dụng toán tử dịch là: <left operand> <shift operation> <right operand> Trong đó: <left operand> : kiểu là BIT_VECTOR <right operand> : kiểu là INTEGER Có hai toán tử dịch: Sll Rll Toán tử dịch trái Toán tử dịch phải Ví dụ: signal x: bit_vector(bus_width-1 downto 0); x<= x sll 2; Copyright (c) 10/2006 by NPB 222
  • 223. Toán tử ghép nối Toán tử ghép nối (&) tác động lên các mảng 1 chiều để cho ra một mảng mới với nội dung của toán hạng bên phải được ghép nối theo sau nội dung của toán hạng bên trái. Nó cũng được sử dụng để thêm 1 phần tử vào mảng hoặc hình thành 1 mảng từ 2 phần tử. Toán tử này thường được sử dụng với kiểu xâu kí tự. Copyright (c) 10/2006 by NPB 223
  • 224. Thứ tự ưu tiên của các toán tử Thự tự ưu tiên giảm dần từ trên xuống: ** * / + (sign) + – = /= and or abs not mod rem – (sign) & < <= nand nor > xor Copyright (c) 10/2006 by NPB >= 224
  • 225. 6.2. Các thuộc tính Thuộc tính dữ liệu: d‟LOW Trả về giá trị nhỏ nhất của chỉ số mảng d‟HIGH Trả về chỉ số lớn nhất của chỉ số mảng d‟LEFT Trả về chỉ số bên trái nhất của mảng d‟RIGHT Trả về chỉ số bên phải nhất của mảng d‟LENGTH Trả về kích thước của vector d‟RANGE Trả về khoảng chỉ số của vector d‟REVERSE_RANGE Trả về khoảng chỉ số của vector theo thứ tự đảo ngược Copyright (c) 10/2006 by NPB 225
  • 226. Ví dụ Giả sử d là một vector được khai báo như sau: SIGNAL d : STD_LOGIC_VECTOR(0 TO 7) Ta sẽ có: d'LOW = 0, d'HIGH = 7, d'LEFT = 0, d'RIGHT = 7, d'LENGTH = 8, d'RANGE = (0 to 7), d'REVERSE_RANGE = (7 downto 0) Các thuộc tính này có thể dùng trong các vòng lặp: FOR FOR FOR FOR i i i i IN IN IN IN RANGE (0 TO 7) LOOP ... d'RANGE LOOP ... RANGE (d'LOW TO d'HIGH) LOOP ... RANGE (0 TO d'LENGTH-1) LOOP ... Nếu tín hiệu có kiểu liệt kê thì: d’VAL(pos) Trả d’POS(val) Trả d’LEFTOF(value) của value d’RIGHTOF(value) của value d'PRED(value) Trả vị trí của value 1 d'SUCC(value) Trả vị trí của value 1 d’VAL(row,colum) về giá trị phần tử tại vị trí pos về vị trí phần tử có giá trị là val Trả về giá trị phần tử liền bên trái Trả về giá trị phần tử liền bên phải về giá trị của phần tử có vị trí nhỏ hơn đơn vị về giá trị của phần tử có vị trí lớn hơn đơn vị Trả về giá trị ở một vị trí đặc biệt Copyright (c) 10/2006 by NPB 226
  • 227. Các thuộc tính (tiếp) Thuộc tính tín hiệu: Giả sử s là một SIGNAL thì ta có : s‟EVENT : Trả về True khi một sự kiện xảy ra đối với s s‟STABLE: Trả về True nếu không có sự kiện nào xảy ra đối với s s‟ACTIVE: Trả về True khi s = 1 s‟QUIET <time>: Trả về True khi trong khoảng thời gian time không có sự kiện nào xảy ra s‟LAST_EVENT: Trả về thời gian đã trôi qua kể từ sự kiện cuối cùng s‟LAST_ACTIVE: Trả về thời gian đã qua kể từ lần s = 1 cuối cùng s‟LAST_VALUE: Trả về giá trị của s ở sự kiện trước Copyright (c) 10/2006 by NPB 227
  • 228. Ví dụ 4 câu lệnh sau kiểm tra sự kiện xuất hiện sườn dương của xung clk: IF (clk'EVENT AND clk='1')... IF (NOT clk'STABLE AND clk='1')... WAIT UNTIL (clk'EVENT AND clk='1'); IF RISING_EDGE(clk)... Copyright (c) 10/2006 by NPB 228
  • 229. Các thuộc tính do NSD định nghĩa NSD có thể định nghĩa ra 1 thuộc tính mới theo cú pháp: Khai báo thuộc tính: ATTRIBUTE attribute_name: attribute_type; Mô tả thuộc tính: ATTRIBUTE attribute_name OF target_name: class IS value; Trong đó: attribute_type: kiểu dữ liệu bất kỳ (BIT, INTEGER, STD_LOGIC_VECTOR, ...) class: TYPE, SIGNAL, FUNCTION, ... value: '0', 27, "00 11 10 01", ... Copyright (c) 10/2006 by NPB 229
  • 230. Ví dụ 1 ATTRIBUTE number_of_inputs: INTEGER; ATTRIBUTE number_of_inputs OF nand3: SIGNAL IS 3; ... inputs <= nand3'number_of_pins; -- kết quả = 3 Copyright (c) 10/2006 by NPB 230
  • 231. Ví dụ 2 Mã hóa kiểu liệt kê: TYPE color IS (red, green, blue, white); Ngầm định thì red = "00", green = "01", blue = "10", white = "11". Để thay đổi lại ta có thể dùng: ATTRIBUTE enum_encoding OF color: TYPE IS "11 00 10 01"; Thuộc tính do người dùng định nghĩa có thể khai báo ở bất cứ vị trí nào, ngoại trừ trong thân của PACKAGE. Copyright (c) 10/2006 by NPB 231
  • 232. 6.4. Chồng toán tử NSD có thể định nghĩa 1 toán tử mới có trùng tên với 1 toán tử đã được định nghĩa sẵn. VD: Định nghĩa phép + giữa 1 số INTEGER và 1 BIT. FUNCTION "+" (a: INTEGER, b: BIT) RETURN INTEGER IS BEGIN IF (b='1') THEN RETURN a+1; ELSE RETURN a; END IF; END "+"; Sử dụng: SIGNAL inp1, outp: INTEGER RANGE 0 TO 15; SIGNAL inp2: BIT; (...) outp <= 3 + inp1 + inp2; (...) Copyright (c) 10/2006 by NPB 232
  • 233. 6.5. GENERIC GENERIC là cách tạo ra 1 tham số tĩnh dùng chung cho toàn bộ thiết kế. => Làm cho chương trình mềm dẻo hơn và tăng tính sử dụng lại. GENERIC phải được khai báo trong ENTITY với cú pháp như sau: GENERIC (parameter_name : parameter_type := parameter_value); Copyright (c) 10/2006 by NPB 233
  • 234. Ví dụ Tham số n sau đây luôn có giá trị ngầm định là 8: ENTITY my_entity IS GENERIC (n : INTEGER := 8); PORT (...); END my_entity; ARCHITECTURE my_architecture OF my_entity IS ... END my_architecture; Có thể khai báo nhiều hơn 1 tham số GENERIC trong 1 ENTITY. GENERIC (n: INTEGER := 8; vector: BIT_VECTOR := "00001111"); Copyright (c) 10/2006 by NPB 234
  • 235. 1/2 architecture FSM_ARCH of entity_name is attribute enum_encoding: string; -- Khai báo các trạng thái type Sreg_type is ( Stop, Init, Go ); -- Nếu cần, chỉ định rõ giá trị binary của từng trạng thái attribute enum_encoding of Sreg_type: type is c ounter := c ounter + 1 "00 " & -- Stop Button='1' and "01 " & -- Init c ounter < Thres hold "10" ; -- Go Res et='1' Stop /00/ StopLam p<='1' -- Biến chỉ trạng thái hiện tại signal Sreg: Sreg_type; c ounter := 0 begin process (CLK) if CLK'event and CLK = '1' then ….. -- xem slide tiếp theo end if; end process; end architecture FSM_ARCH Copyright (c) 10/2006 by NPB Init c ounter >= Thres hold /01/ StopLam p <='0' c ounter := c ounter * 2 GoLam p<='0' c ounter:=c ounter -1 c ounter = 0 Go GoLam p <= '1' /10/ 235
  • 236. 1/2 -- Quá trình biến đổi trạng thái case Sreg is -- Biến đổi từ State1 thành ?? when State1 => State Action if (condition) then Sreg <= State2; Transition Action; else if (condition) then Transition Action; else Sreg <= Default State end if Không có lệnh chuyển trạng thái?  giữ nguyên trạng thái c ounter := c ounter + 1 Button='1' and c ounter < Thres hold Res et='1' Stop /00/ c ounter := 0 Init -- Biến đổi từ State2 thành ?? when State2 => -- Biến đổi từ trạng thái còn lại when others => Sreg <= Init State; // or null; end case Copyright (c) 10/2006 by NPB StopLam p<='1' c ounter >= Thres hold /01/ StopLam p <='0' c ounter := c ounter * 2 GoLam p<='0' c ounter:=c ounter -1 c ounter = 0 Go GoLam p <= '1' /10/ 236
  • 237. Phần IV: • Bộ dồn kênh / phân kênh • ALU • RAM/Thanh ghi đa năng • Bộ nhớ chương trình • Truy cập bộ nhớ chính • Bộ định thời • Thanh ghi chuyên dụng • Bộ giải mã lệnh tuần tự • Bộ giải mã lệnh rẽ nhánh
  • 238. Process (I,S) Begin If (S='1') Then O <= I(1); Else O <=I(0); End If; End Process; I0 I1 I2 I3 S Phần mềm: Lệnh rẽ nhánh If ~ Phần cứng: Mux/Demux http://dce.hut.edu.vn/ 238
  • 239. Process (I,S) Begin If (S='1') Then O(0) <= I; Else O(1) <=I; End If; End Process; O0 O1 O2 S O3 Phần mềm: Lệnh rẽ nhánh If ~ Phần cứng: Mux/Demux http://dce.hut.edu.vn/ 239
  • 240. Các câu lệnh phần mềm chỉ có 2 dạng là: Tuần tự Ins 0; Ins 1; Ins 2; Rẽ nhánh If .. Then… Else Tương ứng với phần cứng là: Máy trạng thái FSM Bộ ghép kênh Đồng thiết kế phần cứng, phần mềm. Vừa thiết kế phần cứng, vừa thiết kế trình biên dịch, mô phỏng tương ứng. Code VHDL tương đồng code C. Khai thác ưu thế phần cứng: song song, etc. http://dce.hut.edu.vn/ 240
  • 241. Software: lệnh 1; lệnh 2; if (S) then lệnh 3 else lệnh 4 end if Xác định mục tiêu trước Thực hiện sau http://dce.hut.edu.vn Hardware: mạch 1 mạch 2 mạch 3 mạch 4 Thực hiện trước Lựa chọn kết quả sau 241
  • 242. 1/3 Mô tả entity, biểu tượng Mô tả architecture CI A B Q CO OV architecture adder_arch of adder is signal TEMP_RESULT : std_logic_vector(7 downto 0); signal TEMP_RESULT2 : std_logic_vector(1 downto 0); begin TEMP_RESULT <= ('0' & A(6 downto 0)) + ('0' & B(6 downto 0)) + CI; TEMP_RESULT2 <= ('0' & A(7)) + ('0' & B(7)) + TEMP_RESULT(7); Q <= TEMP_RESULT2(0) & TEMP_RESULT(6 downto 0); CO <= TEMP_RESULT2(1); OV <= TEMP_RESULT2(1) xor TEMP_RESULT(7); end architecture; http://dce.hut.edu.vn 242
  • 243. 2/3 Phép trừ bằng cách dùng số bù 2 cần 2 lần thực hiện phép cộng  trễ lớn. Phép trừ bằng cách dùng số bù 1 chi cần 1 phép cộng  trễ giảm ~ ½. A - B = - ((-A ) + B ) = - (A + 1 + B ) = - (A + B ) - 1 = A + B + 1 - 1 = A + B CI A 0 1 Q B 0 1 CO OV ADD/SUB http://dce.hut.edu.vn 243
  • 244. 3/3 Phép cộng/trừ 1 đơn vị được sử dụng nhiều. CI A B “1” 0 1 Q 0 1 CO OV 0 1 ADD/INC ADD/SUB Thêm một bộ ghép kênh để chọn giá trị cố định “1” cho toán hạng thứ 2. http://dce.hut.edu.vn 244
  • 245. DO = DI1 and DI2 architecture and_arch of ander is signal tmp: std_logic_vector(7 downto 0); begin tmp <= DI1 and DI2; -- Trung gian để tính cờ Zero DO <= tmp; ZF <= „1' when tmp = 0 else „0'; -- Tính cờ Zero end architecture; DO = DI architecture move_arch of mover is Begin DO <= DI; end architecture; http://dce.hut.edu.vn/ 245
  • 246. DO = DI1 shr 1 architecture shr_arch of shr is begin DO <= '0' & DI(7 downto 1) ; CF <= DI(0); end architecture; DO = DI1 rr 1 architecture rr_arch of rr is begin DO <= DI(6 downto 0) & D(7); CF <= DI(7); end architecture; C 0 MSB LSB „0‟ DI(7) DI(6) DI(5) DI(4) DI(3) DI(2) DI(1) DI(0) DO(7) DO(6) DO(5) DO(4) DO(3) DO(2) DO(1) DO(0) CF C MSB http://dce.hut.edu.vn/ LSB 246
  • 247. 1/4 ALU thường là mạch tổ hợp với 2 thành phần: Các mạch thực hiện phép toán. Các bộ ghép kênh. Sơ đồ nguyên lý opcode x b 0 1 2 3 ALU a cls << >> opcode http://dce.hut.edu.vn axb 010 a+b 011 a –b 10x clear a 110 a << b 111 + - 00x a >> b 247
  • 248. 2/4 Ngoài ra, các bộ ghép kênh còn được sử dụng để phối ghép trạng thái cờ từ các phép toán, theo cách tương tự. Nhận xét: cho dù mã lệnh chỉ yêu cầu thực hiện 1 phép toán, nhưng tất cả các mạch phép toán đều hoạt động. Có thể tiết kiệm năng lượng bằng cách ngắt các mạch tính toán vô ích khỏi nguồn cấp. Dùng chính opcode để điều khiển cấp nguồn điện. Điều này về cơ bản không ảnh hưởng tới tốc độ tính toán, vì mọi mach phép toán đều thực hiện song song. 248
  • 249. 3/4 Opcode dùng để chọn mạch tính toán trên ALU, chính là opcode của tập lệnh CPU, có thể với một chút thay đổi nhỏ. Thiết lập bộ mã cho opcode (ví dụ phép + ứng với mã 010) có ảnh hưởng tới hiệu năng của ALU, vì sẽ làm tăng/giảm hiệu quả giải mã opcode. Lưu ý thiết kế ALU: Một số mạch phép toán có thể thực hiện nhiều phép toán (ví dụ bộ cộng/trừ). Khi đó opcode cho các phép toán này cần sai khác bit càng ít càng tốt  dễ tối thiểu hóa. http://dce.hut.edu.vn/ 249
  • 250. 4/4 Ví dụ về 2 cách mã opcode khác nhau. Cách thứ 2 gây khó khăn cho việc tổ chức bộ cộng. Cách 1 opcode Cách 2 ALU opcode ALU 00x 00x axb 010 a+b 010 a+b 011 a –b 011 clear a 10x clear a 10x a –b 110 a << b 110 a << b 111 http://dce.hut.edu.vn/ axb a >> b 111 a >> b 250
  • 251. ALU nhằm thực hiện phép toán PreALU nhằm cung cấp các toán hạng vào cho ALU Toán hạng vào có thể lấy từ tập thanh ghi, bộ nhớ chính, etc. Thanh ghi AX Thanh ghi BX Bộ nhớ chính http://dce.hut.edu.vn/ 0 1 2 3 Toán hạng 1 0 1 2 3 Toán hạng 2 251
  • 252. 1/2 Thanh ghi dùng để lưu trữ thông tin bên trong CPU, có tốc độ cao nhất trong phân cấp bộ nhớ. Có thể chứa cả dữ liệu và địa chỉ. Chỉ gồm bit nhớ, không có phần cứng đặc thù kèm theo. DIN( 7:0) U4 D I N D OUT D I N D OUT D I N D OUT C LK C LK C LK C E R ESET C E R ESET C E R ESET DO UT ( 2:0) D I N D OUT C LK DOUT(4) DIN(4) U3 DOUT(5) DIN(5) U2 DOUT(6) DIN(6) DOUT(7) DIN(7) U1 C E R ESET DF F DF F DF F DF F CE CLK Reset DIN(7:0) DOUT(7:0) U8 D I N D OUT D I N D OUT D I N D OUT D I N D OUT C LK C LK C LK C LK C E R ESET C E R ESET C E R ESET C E R ESET DF F http://dce.hut.edu.vn/ DOUT(0) DIN(0) U7 DOUT(1) DIN(1) U6 DOUT(2) DIN(2) DOUT(3) DIN(3) U5 DF F DF F DF F 252
  • 253. 2/2 entity IPCore_GPR is port ( CLR : in std_logic; -- xóa dữ liệu CLK : in std_logic; -- đồng hồ CE : in std_logic; -- cho phép hoạt động --! cổng vào dữ liệu, nội dung cần nhớ DATA : in std_logic_vector(7 downto 0); --! cổng ra dữ liệu ~ nội dung đã nhớ Q : out std_logic_vector(7 downto 0) ); end entity; http://dce.hut.edu.vn/ architecture GPR_arch of IPCore_GPR is begin process (CLK) begin --! tại sườn dương của đồng hồ if rising_edge(CLK) then --! Nếu được phép hoạt động if CE = '1' then --! xóa dữ liệu đồng bộ if CLR = '1' then Q <= (others => '0'); else --! hoặc chốt dữ liệu Q <= DATA; end if; -- CLR end if; -- CE end if; -- clk end process; end GPR_arch; 253
  • 254. 1/2 Đơn vị nhớ 0 1 2 3 Dữ liệu ra Địa chỉ http://dce.hut.edu.vn/ 254
  • 255. 2/2 architecture rom_arch of IPCore_rom is begin process(ADDRESS, OE) entity IPCore_rom is variable ADDR_TEMP: std_logic_vector(1 port ( downto 0); OE : in std_logic; -- cho phép dữ liệu begin -- đường địa chỉ ADDR_TEMP := ADDRESS(1 downto 0); ADDRESS : in std_logic_vector(2 downto 0); if (OE = '1') then -- đường đữ liệu if (ADDRESS(2) = '0') then Q : out std_logic_vector(7 downto 0) case (ADDR_TEMP) is ); when "00" => Q <= "01100001"; end entity; when "01" => Q <= "01100010"; when "10" => Q <= "00110100"; when others => Q <= "00000000"; end case; else – mọi giá trị còn lại trong ROM = 0 Q <= "00000000"; end if; else – nếu OE = „0‟ Q <= "ZZZZZZZZ"; -- trở kháng cao end if; end process; end architecture; http://dce.hut.edu.vn/ 255
  • 256. 1/2 Có nhiều kiểu thiết kế khác nhau: đơn/đa cổng, chung/riêng đường địa chỉ/dữ liệu. Dữ liệu vào Đơn vị nhớ CE0 0 1 2 3 giải CE1 mã địa CE2 chỉ CE3 Dữ liệu ra Địa chỉ http://dce.hut.edu.vn/ 256
  • 257. 2/2 entity IPCore_ram is port ( WE : in std_logic; CLK : in std_logic; ADDR : in std_logic_vector(3 downto 0); DATA : in std_logic_vector(7 downto 0); Q : out std_logic_vector(7 downto 0) ); end entity; http://dce.hut.edu.vn/ architecture ram_arch of IPCore_ram is type IPCore_ram_mem_type is array (15 downto 0) of std_logic_vector(7 downto 0); signal IPCore_ram_mem: IPCore_ram_mem_type; begin process (CLK) begin if rising_edge(CLK) then if (WE = '1') then IPCore_ram_mem(CONV_INTEGER(ADDR)) <= DATA; end if; end if; end process; Q <= IPCore_ram_mem(CONV_INTEGER(ADDR)); end architecture; 257
  • 258. Thanh ghi lệnh IR, Instruction Register, chứa mã lệnh đang được giải mã. Đặc trưng phần cứng: đường dữ liệu vào được nối trực tiếp với bộ nhớ chương trình, và dữ liệu đầu ra đưa tới bộ giải mã lệnh. Thanh ghi lệnh ROM http://dce.hut.edu.vn/ Giải mã lệnh 258
  • 259. 1/5 Thanh ghi bộ đếm chương trình PC, Program Counter hoặc Instruction Pointer, chứa địa chỉ của lệnh sẽ được thực hiện. Phần lớn các lệnh trong chương trình là tuần tự  địa chỉ của lệnh kế tiếp = địa chỉ của lệnh hiện tại + độ lệch địa chỉ giữa 2 lệnh đó.  dữ liệu vào. Với bộ xử lý RISC, độ lệch này là không đổi.  Thiết kế PC sẽ bao gồm một bộ cộng. Với lệnh rẽ nhánh, PC phải ghi nhớ địa chỉ mới (địa chỉ nhảy tới) bất kỳ.  dữ liệu vào. Ngắt xảy ra  rẽ nhánh tới 1 chương trình con phục vụ ngắt ở địa chỉ nào đó  dữ liệu vào. http://dce.hut.edu.vn/ 259