Tải bản đầy đủ (.pdf) (102 trang)

(Luận văn thạc sĩ) nghiên cứu, thiết kế vi xử lý 8 bit dựa trên công nghệ FPGA

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.44 MB, 102 trang )

1

MỤC LỤC
DANH MỤC BẢNG.......................................................................................................... 3
DANH MỤC HÌNH VẼ...................................................................................................... 4
LỜI NĨI ðẦU .................................................................................................................. 6
CHƯƠNG 1 TỔNG QUAN VỀ FPGA.............................................................................. 7
1.1. Giới thiệu chung.................................................................................................................................................... 7
1.2. Tổng quan về thiết bị logic khả trình – PLD ...................................................................................................... 7
1.3. Thiết bị logic khả trình ñơn giản – Simple PLD ................................................................................................ 9
1.4. Thiết bị logic khả trình phức tạp – Complex PLD........................................................................................... 12
1.5. FPGA – Field Programmable Gate Arrays ..................................................................................................... 15

CHƯƠNG 2 THIẾT KẾ TẬP LỆNH ............................................................................... 22
2.1. Mô tả chung về tập lệnh. .................................................................................................................................... 22
2.2. Thiết kế chi tiết tập lệnh..................................................................................................................................... 23

CHƯƠNG 3 THIẾT KẾ KIẾN TRÚC VI XỬ LÍ .............................................................. 27
3.1. Giới thiệu. ............................................................................................................................................................ 27
3.2. Thiết kế datapath và ñiều khiển cho RICS....................................................................................................... 28
3.4. Xây dựng module ñiều khiển ............................................................................................................................. 45
3.5. Tổ chức bộ nhớ.................................................................................................................................................... 45

CHƯƠNG 4: THIẾT KẾ TESTBENCH VÀ PHƯƠNG PHÁP MÔ PHỎNG TRÊN
MODELSIM ................................................................................................................... 51
4.1. Giới thiệu ............................................................................................................................................................. 52
4.2. Thiết kế hệ mơ phỏng. ........................................................................................................................................ 53
4.3. Mơ phỏng để kiểm tra thiết kế........................................................................................................................... 55

CHƯƠNG 5: THIẾT KẾ CHI TIẾT CHỨC NĂNG CỦA VI ðIỀU KHIỂN VÀ MÔ PHỎNG
TRÊN MODELSIM......................................................................................................... 58


5.1. Giới thiệu chung.................................................................................................................................................. 58


2
5.2.

Thiết kế và mô phỏng chức năng của các module cơ bản trong vi xử lý. ............................................... 59

5.3

Thiết kế bộ mơ phỏng hệ thống tự động. ................................................................................................... 68

5.4
Mơ phỏng vi ñiều khiển thực hiện một ñoạn chương trình ñơn giản, kiểm tra chức năng các module
trong vi ñiều khiển. .................................................................................................................................................... 72

CHƯƠNG 6 TRIỂN KHAI TRÊN KÍT DE2 VÀ MỘT ỨNG DỤNG ðƠN GIẢN ............. 79
6.1 Tổng quan về Kit DE2 ......................................................................................................................................... 79
6.2 Triển khai và chạy thử trên kít DE2. ................................................................................................................. 80
6.3 Một ứng dụng nhỏ sử dụng vi ñiều khiển 8 bít.................................................................................................. 81

KẾT LUẬN. ................................................................................................................... 83
TÀI LIỆU THAM KHẢO................................................................................................. 85
Phụ lục 1: Các chương trình test bench dùng để mơ phỏng và kiểm tra chức năng của vi điều khiển.............. 86
Phụ lục 2. Mã nguồn Verilog của nhân vi ñiều khiển. ............................................................................................ 88


3

DANH MỤC BẢNG

Bảng 1 - 1: Tóm tắt về các thiết bị PLD .............................................................................. 8
Bảng 1 - 2 Altera CPLD. ................................................................................................... 14
Bảng 1 - 3 Xilinx CPLD. .................................................................................................... 14
Bảng 2- 1: Các lệnh hướng byte của vi ñiều khiển............................................................ 24
Bảng 2- 2: Các lệnh hướng bít của vi điều khiển .............................................................. 25
Bảng 2- 3: Các lệnh rẽ nhánh của vi ñiều khiển ............................................................... 26
Bảng 3 - 1: Các thanh ghi chức năng ñặc biệt .................................................................. 47
Bảng 3 - 2: Thanh ghi trạng thái của vi ñiều khiển........................................................... 48
Bảng 5 - 1: Lối vào ñiều khiển của ALU ........................................................................... 61
Bảng 5 - 2: Mã nguồn chương trình được mơ phỏng. ....................................................... 73
Bảng 5 - 3: Các testbench được dùng để mơ phỏng và kiểm tra chức năng của vi ñiều
khiển................................................................................................................................... 78


4

DANH MỤC HÌNH VẼ
Hình 1 - 1 Cấu trúc một thiết bị PAL............................................................................................. 10
Hình 1 - 2 Cấu trúc một thiết bị PLA............................................................................................. 10
Hình 1 - 3: Cấu trúc chip GAL 16V8............................................................................................. 11
Hình 1 - 4: Cấu trúc chung của một CPLD. .................................................................................. 12
Hình 1 - 5 Cấu trúc CPLD XC9500 của Xilinx ............................................................................. 13
Hình 1 - 6: Cấu trúc chung của FPGA. ......................................................................................... 16
Hình 1 - 7: Cấu trúc một CLB trong FPGA họ XC40000E ........................................................... 17
Hình 1 - 8: Cấu trúc một Logic Cell trong Spartan-IIE ................................................................ 18
Hình 1 - 9 Cấu trúc IOB trong Spartan-IIE................................................................................... 18
Hình 1 - 10: Liên kết trong một chuyển mạch. .............................................................................. 19
Hình 1 - 11 Mạng liên kết giữa các CLB. ...................................................................................... 19
Hình 1 - 12 Các kết nối trực tiếp giữa các khối trong FPGA........................................................ 20
Hình 1 - 13 FPGA Spartan IIE của Xilinx..................................................................................... 20

Hình 2- 1: ðịnh dạng các lệnh hướng byte ................................................................................... 23
Hình 2- 2 ðịnh dạng các lệnh hướng bít ....................................................................................... 24
Hình 2- 3: ðịnh dạng các lệnh rẽ nhánh ...................................................................................... 25
Hình 2- 4: ðịnh dạng của lệnh goto .............................................................................................. 25
Hình 3- 1: Một datapath đơn giản và mơ đun điều khiển tương ứng ............................................ 28
Hình 3- 2: Tổng quan về kiến trúc của vi điều khiển..................................................................... 30
Hình 3- 3: Mơ hình điều khiển datapath........................................................................................ 31
Hình 3- 4: Bộ nhớ chương trình, PC và module tính PC+1 được kết nối với nhau tạo thành
datapath đơn giản .......................................................................................................................... 33
Hình 3- 5: Tệp thanh ghi (register file) ......................................................................................... 33
Hình 3- 6: Bộ logic và số học ALU................................................................................................ 34
Hình 3- 7: Kết nối bộ logic và số học với register file .................................................................. 34
Hình 3- 8: Datapath đơn giản sau khi đã kết nối các thành phần của vi ñiều khiển với nhau. .... 35
Hình 3- 9: Datapath của vi điều khiển sau khi ñã ñược thêm vào các thanh ghi pipeline ñể có thể
thực hiện ñược kĩ thuật xử lý ñường ống. ...................................................................................... 39
Hình 3- 10: Trạng thái của datapath khi thực hiện pha đầu tiên, tìm và nạp lệnh. ...................... 40
Hình 3- 11: Trạng thái của datapath khi thực hiện bước giải mã lệnh và ñọc dữ liệu từ register
file. ................................................................................................................................................. 41
Hình 3- 12: Trạng thái của datapath khi thực hiện bước thực thi lệnh......................................... 42


5
Hình 3- 13: Datapath sau khi đã thêm khối điều khiển. ................................................................ 43
Hình 3- 14: Tổ chức bộ nhớ chương trình của vi điều khiển......................................................... 46
Hình 3- 15: Tiến trình thực hiện lệnh GOTO ................................................................................ 48
Hình 3- 16: Tiến trình thực hiện lệnh CALL.................................................................................. 49
Hình 3- 17: Tổ chức bộ nhớ dữ liệu, bao gồm cả thanh ghi chức năng ñặc biệt và thanh ghi chức
năng chung..................................................................................................................................... 49
Hình 3- 18: Sơ đồ kiến trúc của vi xử lý. ....................................................................................... 50
Hình 4 - 1 Mơi trường đồng mơ phỏng đồng nhất......................................................................... 54

Hình 4 - 2 Mơi trường đồng mơ phỏng khơng đồng nhất .............................................................. 55
Hình 5 - 1: Bộ lơ gic và số học ALU.............................................................................................. 60
Hình 5 - 2 MUX lựa chọn lối vào cho S1 của bộ ALU. ................................................................. 60
Hình 5 - 3: Bộ nhớ RAM single port ñược dùng làm bộ nhớ chương trình................................... 62
Hình 5 - 4: Sơ ñồ khối của bộ nhớ chương trình ........................................................................... 63
Hình 5 - 5: Sơ ñồ khối của bộ chia tần số ..................................................................................... 64
Hình 5 - 6: Sơ đồ khối của bộ nhớ chương trình ........................................................................... 64
Hình 5 - 7: IP core ñược dùng ñể làm bộ nhớ chương trình ......................................................... 66
Hình 5 - 8: Sơ ñồ bên trong của register file................................................................................. 67
Hình 5 - 9: Bộ nhớ Stack................................................................................................................ 68
Hình 5 - 10: Kết quả mô phỏng PC và bộ nhớ chương trình của vi điều khiển ........................... 74
Hình 5 - 11: Kết quả mơ phỏng khối ALU ..................................................................................... 75
Hình 5 - 12: Kết quả mơ phỏng register file.................................................................................. 76
Hình 6 - 1 Sơ đồ các thành phần trên kít phát triển DE2.............................................................. 80
Hình 6 - 2: Lưu đồ thuật tốn thực hiện chạy chữ trên LCD. ....................................................... 82


6

LỜI NÓI ðẦU
Với xu hướng phát triển rất nhanh của các bộ vi xử lý cũng như yêu cầu ngày càng
cao của người dùng, việc phát triển một một bộ vi xử lý với tốc độ tính tốn thật mạnh ñã
và ñang là yêu cầu khẩn thiết ñối với những nhà phát triển công nghệ. Việc thiết kế các bộ
vi xử lý có khả năng tính tốn cao khơng cịn là một vấn ñề mới mẻ trên thế giới, nhưng
với Việt Nam nó vẫn địi hỏi phải vượt qua những khó khăn nhất định. Trong luận văn
này tác giả khơng có tham vọng thiết kế một bộ vi xử lý có khả năng tính tốn cao mà chủ
yếu tập trung vào phân tích kiến trúc và thiết kế một vi xử lý đơn giản. Mục đích chính
của tác giả là nắm được kiến trúc, quy trình thiết kế, triển khai và kiểm định một vi xử lý.
Trên cơ sở đó tác giả sẽ mở rộng, cải tiến một vài mô ñun, chức năng của vi xử lý ñể nâng
cao dần hiệu suất tính tốn của vi xử lý. Kết quả của luận văn sẽ là tiền ñề ñể tác giả có

thể phát triển những vi xử lý mới có tốc ñộ xử lý cao hơn.
Luận văn sẽ bắt ñầu với việc tìm hiểu về xu hướng cũng như những loại thiệt bị
lơgic lập trình được hiện nay, tìm hiểu, thiết kế tập lệnh, datapath và bộ ñiều khiển cho
một vi xử lý 8 bít đơn giản dựa trên kiến trúc RISC với 33 lệnh trong tập lệnh, tiến hành
triển khai bằng ngôn ngữ Verilog và mô phỏng kiểm tra chức năng của vi xử lý bằng phần
mềm ModelSim. Mục đích chính của phần đầu này là hiểu về quy trình thiết kế và xây
dựng mơi trường phát triển. Sau đó tác giả sẽ cải tiến dần vi xử lý ñể có thể có khả năng
tính tốn tốt hơn, như áp dụng kĩ thuật ñường ống pipeline, nâng ñộ sâu của bộ nhớ stack,
mở rộng không gian nhớ của bộ nhớ chương trình và bộ nhớ dữ liệu dùng kĩ thuật
banking. Cuối cùng thực hiện tổng hợp thiết kế trên kít FPGA DE2 của Altera và chạy thử
các chương trình nhỏ. Phần cuối cùng tác giả sẽ trình bày về một ứng dụng nhỏ sử dụng
vi ñiều khiển vừa ñược thiết kế. Kết quả cho thấy, vi điều khiển có thể thực hiện ñúng
ñược những chức năng cơ bản.


7

Chương 1 TỔNG QUAN VỀ FPGA
1.1. Gi i thi u chung
Ngày nay việc sử dụng một hệ FPGA ñang là một ñề tài rất ñược quan tâm trên thế
giới, sở dĩ như vậy là do các lý do cơ bản sau:
-

Do sự phát triển rất nhanh của công nghệ bán dẫn, giá thành của chip FPGA ngày
càng rẻ.

-

Việc sử dụng chip FPGA ñể phát triển sản phẩm sẽ rút ngắn ñược rất nhiều thời
gian thiết kế cũng như thời gian ñưa sản phẩn ra thị trường so với một số phương

pháp thiết kế truyền thống như ASIC.

-

Sử dụng công nghệ FPGA ñể verification một thiết kế ASIC cũng rút ngắn ñược
rất nhiều thời gian simulation cũng như giảm ñược nhiều giá thành và cơng sức
thiết kế.

Dưới đây trình bày sơ lược về các thiết bị logic khả trình cũng như quy trình thiết
kế dựa trên cơng nghệ FPGA, sở dĩ tác giả chỉ tập trung vào giới thiệu quy trình thiết kế
dựa trên công nghệ FPGA là do tác giả sẽ sử dụng chip FPGA của Altera ñể thử
Prototype thiết kế của tác giả. Phần ñầu tiên của chương này sẽ giới thiệu về các thiết bị
PLD: khái niệm PLD, quá trình phát triển của các thiết bị PLD, cấu trúc của một vài loại
thiết bị PLD và FPGA, công nghệ chế tạo cũng như tính năng và ứng dụng.

1.2. T ng quan v thi t b logic kh trình – PLD
Field Programmable Device (FPD) – Một thuật ngữ chung ñể chỉ bất cứ loại
mạch tích hợp nào ñược sử dụng ñể thực thi một phần cứng số, mà ở đó con chip có thể
được cấu hình lại bởi người dùng cuối nhằm thu ñược một thiết kế mới. Người dùng có
thể cấu hình lại cho thiết bị ngay tại nơi thiết bị được sử dụng mà khơng cần đem thiết bị
cho nhà sản xuất thực hiện việc cấu hình. Lập trình cho các thiết bị trên bao gồm việc ñưa
con chip vào một thiết bị lập trình ñặc biệt (nạp cấu hình), nhưng một số khác có thể cấu
hình ngay trên hệ thống (ISP – In System Programming). Một tên gọi khác của FPD là
Programmable Logic Devices (PLD). Sau ñây ta sẽ ñi tìm hiểu kỹ hơn về các thiết bị
PLDs cụ thể.
PLD – Programable Logic Device là thiết bị logic số lập trình được, PLD được
đưa ra giới thiệu vào khoảng giữa thập kỷ 70, bắt nguồn từ ý tưởng chế tạo ra một mạch
logic tổ hợp có khả năng tái lập trình lại phần cứng (khả trình), nhằm phục vụ cho việc
thử nghiệm, tạo mẫu, phát triển ứng dụng, sản xuất ở quy mô nhỏ.



8

Khác với vi xử lý, vi ñiều khiển hay các loại IC số đã có trước đây là chạy chương
trình lập trình nhưng trên một phân cứng cố định, khả năng tái lập trình của PLDs nhằm
đạt đến sự thay ñổi ở mức phần cứng. Nói theo cách khác, một PLDs là một chip đa mục
đích, có thể tái cấu hình lại phần cứng nhiều lần tùy theo ứng dụng khác nhau.
PLDs ñầu tiên là các thiết bị PAL – Programmable Arrays Logic (Mảng logic khả
trình) hay PLA. Các thiết bị này chỉ sử dụng các cổng logic số AND, OR (khơng có các
flip-flop), cho phép thực hiện các mạch logic tổ hợp và khơng thực hiện được logic dãy.
ðể khắc phục nhược ñiểm này, các thanh ghi cho PLD ñã ñược ñưa ra nhằm thêm vào
mỗi ñầu ra một flip-flop, do đó có thể thực hiện được các hàm logic dãy ñơn giản.
ðầu thập niên 1980s, một mạch logic mới ñược ñưa vào các ñầu ra của PLD. Cấu
trúc tế bào ñầu ra mới gọi là Macro Cell, chứa ñựng các flip-flop, cổng logic và bộ dồn
kênh (MUX). Sự cải tiến này ñem lại cho PLDs khả năng linh hoạt hơn trong các thiết kế.
Kiến trúc mới của PLDs ñược gọi là GAL – generic PAL.
Các PLA, PAL, GAL ñược gọi chung là thiết bị logic khả trình ñơn giản – Simple
PLDs (SPLD). ðến các thế hệ tiếp sau, một vài GAL được chế tạo ra, có cấu trúc phức
tạp hơn, sử dụng công nghệ bán dẫn tiên tiến và nhiều tính năng hơn (như chuẩn JTAG,
giao diện logic với nhiều chuẩn logic khác nhau …). Một thế hệ các thiết bị PLD mới ra
ñời và ñược biết tới là thiết bị logic số khả trình phức tạp - Complex PLD (CPLD). CPLD
có mật độ tích hợp cao, hiệu suất cao, giá thành thấp (có CPLD giá dưới 1USD)
ðến giữa thập kỷ 80, FPGAs (Field Programmable Gate Arrays) ñược ñưa ra giới
thiệu. FPGA có nhiều ñiểm khác biệt với CPLD về kiến trúc, cơng nghệ, tính năng đi kèm
và về giá thành. FPGA nhắm tới những thiết bị mạch logic cỡ lớn, hiệu suất cao.

- PLA
Simple PLD(SPLD)

- PAL

- Register PLA/PAL
- GAL

Complex PLD (CPLD)
FPGA (Field Programmable Gate Arrays)

Bảng 1 - 1: Tóm tắt về các thiết bị PLD


9

Trong các phần tiếp theo ta sẽ đi tìm hiểu về 2 loại thiết bị PLD đó là các thiết bị
PLD ñơn giản (SPLD) và thiết bị PLD phức tạp (CPLD, FPGA).

1.3. Thi t b logic kh trình đn gi n – Simple PLD
Như ñã ñề cập ở trên, các thiết bị PAL, PLA và GAL ñược gọi chung là các thiết bị
logic khả trình đơn giản – Simple PLD. Dưới đây sẽ trình bày cụ thể cấu trúc của mỗi loại
SPLDs
1.3.1 Thiết bị PAL
PAL – Programmable Array Logic chip ñược ñưa ra giới thiệu bởi Monolithic
Memories khoảng giữa thập kỷ 70. Cấu trúc của PAL: Mảng cổng AND khả trình, theo
sau là các cổng OR cố định. Các đầu vào được nối đến các cổng AND thơng qua ma trận
các điểm nối lập trình được, đầu ra của các cổng AND đưa đến cổng OR và đến đầu ra.
Hình dưới đây mơ tả cấu trúc của một PAL (Hình 2.1).
Với cấu trúc phần cứng đó, khả năng của PAL là chỉ cho phép thực hiện các hàm
tổ hợp, nếu gọi a1, a2, ... aN là các tìn hiệu đầu vào, x là tìn hiệu đầu ra, ta có hàm tổ hợp:
x = m1 + m2 + ..... + mM với m = fi(a1,a2,...aN) lấy ví dụ:
x = a1a2 + a2 a3 a4 + a1a2 a3 a4 a5

ðể khắc phục nhược ñiểm này, cuối những năm 70, Registered PALs (RPALs)

ñược ñưa ra giới thiệu. RPALs có thêm các flip-flop tại mỗi đầu ra của cổng OR, điều đó
cho phép RPALs thực hiện ñược cả các hàm logic tổ hợp và logic dãy đơn giản.
Một ví dụ điển hình cho các thiết bị PAL thơng dụng là chíp PAL16L8 có 16 ñầu
vào, 8 ñầu ra nhưng với kiểu ñóng vỏ PDIP-20 nên chỉ có 10 chân là vào cho tín hiệu, 2
chân ra cho tín hiệu và 6 chân vào/ra.
1.3.2. Thiết bị PLA
ðưa ra giới thiệu vào giữa những năm 70 bởi hãng Signetics. Cấu trúc PLA khác
với PALs ở chỗ, các thiết bị PLAs có mảng kết nối AND và OR đều lập trình được, đem
lại cho PLA tính linh hoạt hơn PAL trong các thiết kế logic số.
Nhược ñiểm: Số ñiểm nối nhiều dẫn ñến tốc ñộ chậm
Một PLA ñiển hình là Signetics PLS161 với 12 vào và 8 ra. Công nghệ chế tạo ra
PLA giống với công nghệ chế tạo PAL. Mặc dù ngày nay các thiết bị PLA ñã cũ, xong
chúng lại ñược xuất hiện trở lại gần ñây như là một khối kiến trúc trong họ CPLDs tiêu
thụ năng lượng thấp, họ CoolRunner (Xilinx)


10

Kết nối lập
trình được

Hình 1 - 1 Cấu trúc một thiết bị PAL.

Hình 1 - 2 Cấu trúc một thiết bị PLA.


11

1.3.3. Thiết bị GAL
ðược giới thiệu bởi Lattice vào ñầu những năm 1980

Thiết bị GAL ra đời có nhiều cải tiến quan trọng trong cấu trúc so với 2 loại PLD
trước đó là PAL, PLA ở các điểm sau:
-

Các tế bào đầu ra phức tạp hơn được đưa ra (cịn gọi là Macro Cell – MC).
Mỗi MC chứa 1 FF, một vài cổng và một bộ MUX.

-

Mỗi MC đều có thể lập trình được, cho phép nhiều chế độ hoạt động.

-

Có tín hiệu phản hồi từ đầu ra MC trở lại mảng lập trình.

-

EEPROM được sử dụng thay thế cho PROM và EPROM

Hình dưới trình bày cấu trúc của GAL (Hình 1.3).

Hình 1 - 3: Cấu trúc chip GAL 16V8.


12

GAL16V8 có 16 đầu vào và 8 đầu ra được bố trí đóng vỏ 20 chân, 8 vào và 8
vào/ra. Mỗi đầu ra có một MC
GAL sử dụng cơng nghệ CMOS, EEPROM hay Flash và tốc độ có thể lên tới
250MHz

Một số nhà sản xuất GAL: Lattice, Atmel, TI…

1.4. Thi t b logic kh trình ph c t p – Complex PLD
Sự ra ñời của các thiết bị số khả trình phức tạp – CPLD và FPGA là một cuộc cách
mạng trong ngành cơng nghiệp điện tử. Một thiết kế logic phức tạp với hàng chục, hàng
trăm các loại cổng logic cùng với đó là các vấn đề về nguồn tiêu thụ, trễ truyền đạt, tính
ổn định của hệ thống…tất cả sẽ được tích hợp trong một linh kiện số duy nhất.
CPLDs là thiết bị PLD có cấu trúc phức tạp hơn các SPLDs khác. Bên trong mỗi
CPLD chứa ñựng nhiều PLDs khác ( thường thuộc loại GAL ) ñược chế tạo như là một
chip đơn. Ngồi ra, CPLD cịn một ma trận chuyển mạch ñể kết nối các PLDs với các ñầu
vào ra. Chức năng của CPLD bao gồm:
Mỗi đầu ra có kết nối đến các Macrocells
Có thêm tính năng như JTAG
Hỗ trợ chuẩn giao tiếp với các mức logic khác nhau: 1V8, 2V5, 3V3, 5V

Hình 1 - 4: Cấu trúc chung của một CPLD.
ðể làm rõ hơn, ta ñi vào phân tích thêm cấu trúc CPLD họ XC9500 của hãng
Xilinx. Mỗi một CPLD gồm có nPLD mà ở ñây mỗi PLD chính là GAL36V18 (giống
như kiến trúc của GAL16V8, nhưng có 36 đầu vào và 18 đầu ra, thay vì 16 đầu vào và 8
đầu ra của GAL16V8, do đó GAL36V18 có 18 Macrocells cho mỗi đầu ra). Khối I/O


13

Blocks quản lý các chân vào/ra dữ liệu của PLD. Khối kết nối giữa các I/O Blocks và
GAL36V18 là một ma trận chuyển mạch tốc ñộ cao (Fast CONNECT II Switch Matrix).
Chính nhờ cấu trúc linh hoạt và tốc độ kết nối cao (Trễ truyền ñạt chỉ cỡ 5nS), các thiết bị
CPLD là một giải pháp thay thế cho các mạch số cồng kềnh, tốc ñộ chậm, làm tăng hiệu
năng hệ thống và tăng tốc độ xử lý thơng tin.


Hình 1 - 5 Cấu trúc CPLD XC9500 của Xilinx
Một số nhà cung cấp các linh kiện PLD và CPLD
Xilinx (XC9500, CoolRunner…)
Altera (Max3000.Max7000…)
Lattice
Atmel
Cypress


14

Dưới ñây là bảng liệt kê một số loại CPLDs do 2 hãng cung cấp lớn trên thế giới là
Xilinx và Altera

Bảng 1 - 2 Altera CPLD.

Bảng 1 - 3 Xilinx CPLD.


15

1.5. FPGA – Field Programmable Gate Arrays
1.5.1. Giới thiệu về FPGA
FPGA ñược ñưa ra giới thiệu lần ñầu tiên giữa những năm 1980 bởi Xilinx. FPGA
là từ viết tắt của Field Programmable Gate Arrays – Mảng cổng khả trình. FPGA cũng là
một thiết bị FPD mà ta ñã ñề cập ở trên. Từ “Field” trong thuật ngữ FPGA bao hàm ý
nghĩa về khả năng tái cấu hình lại phần cứng cho FPGA bởi người dùng cuối (enduser)
ngay tại nơi sử dụng mà không cần mang trở lại cho nhà sản xuất cấu hình. ðó chính là
một điểm mạnh của FPGA cũng như các thiết bị PLD khác.
Ross Freeman, người ñồng sáng lập ra hãng Xilinx, phát minh ra FPGA vào năm

1984. FPGA bắt nguồn từ sự phát triển của thiết bị logic khả trình phức tạp
(CPLD_Complex Programmable Devices) có từ giữa những năm 80 của thế kỉ 20. CPLD
và FPGA ñều chứa một số lượng lớn các thành phần logic khả trình có liên quan đến
nhau. Trong khi mật độ cổng logic trong CPLD chỉ có vài nghìn đến vài chục nghìn thì
trong FPGA có khoảng từ vài chục nghìn ñến vài triệu cổng.
FPGA có nhiều khác biệt so với CPLDs về cấu trúc, cơng nghệ lưu trữ, tính năng
hỗ trợ và giá thành, hiệu suất cao, cho phép thực hiện những mạch tích hợp cỡ lớn. FPGA
là một vi mạch chứa các logic cells. Mỗi logic cells thực hiện chức năng của các mạch
logic và ñược kết nối với nhau bởi ma trận kết nối và chuyển mạch lập trình được. FPGA
là tập hợp các phần tử rời rạc ñược kết nối theo một cách chung.
Một ñiểm khác biệt cần chú ý giữa FPGA và CPLD là sự có mặt của các hệ nhúng
trong hầu hết các sản phẩm FPGA. Sự khác biệt quan trọng là có nhiều FPGA hiện ñại hỗ
trợ ñầy ñủ hoặc một phần khả năng cấu hình lại trong hệ thống, cho phép thiết kế có thể
được thay đổi cũng như nâng cấp hệ thống hoặc cho việc cấu hình động trở lại như là một
phần bình thường của hệ điều hành. Một vài FPGA có khả năng cấu hình riêng cho phép
một phần của thiết bị được lập trình lại trong khi những phần khác vẫn hoạt động bình
thường.
Xu hướng phát triển gần đây là việc kết hợp các khối logic, các liên kết trong
FPGA truyền thống với vi xử lý nhúng và những ngoại vi có liên quan để tạo nên một “hệ
thống trên một chip khả trình” hồn thiện. Ta có thể tìm thấy những thiết kế đó trong một
số thiết bị Xilinx Virtex-II PRO và Virtex-4 có chứa một hoặc nhiều lõi xử lý nhúng
Power PC trong phạm vi kết cấu logic của FPGA. Atmel FPSLIC là một thiết bị tương tự
cũng có lõi vi xử lý AVR kết hợp với cấu trúc logic khả trình của Atmel. Ngồi các lõi vi
xử lý cứng cịn có các lõi vi xử lý mềm là một thành phần trong phạm vi tài nguyên logic
của FPGA. Những lõi này bao gồm: Xilinx MicroBlaze và Pico Blaze, vi xử lý Altera


16

Nios và Nios II, và nguồn mở LatticeMicro32 và LatticeMicro 8, giống như là lõi xử lý

thứ 3.
Nhiều FPGA hiện đại có khả năng để lập trình lại trong khi ñang hoạt ñộng, và
ñiều này rất quan trọng cho ý tưởng của việc tính tốn cấu hình lại hoặc hệ thống cấu hình
lại để tự cấu hình lại phù hợp với hoạt động sắp tới. Những cơng cụ FPGA hiện nay chưa
hồn tồn hỗ trợ đầy đủ cho phương thức này. Hiện nay FPGA khơng có cấu trúc đang
bắt đầu xuất hiện. Vi xử lý cấu hình phần mềm như Stretch S5000 chọn hướng tiến ñến
hệ lai bằng cách cung cấp một mảng các lõi xử lý và FPGA giống như lõi khả trình trên
cùng một chip. Các thiết bị khác cung cấp các mảng của các ñối tượng khả trình cấp cao
nằm giữa khỗi logic của FPGA và các xử lý phức tạp.
1.5.2. Kiến trúc của FPGA
Hình dưới trình bày cấu trúc cơ bản của một FPGA (Hình 1 - 6)

Hình 1 - 6: Cấu trúc chung của FPGA.
Kiến trúc cơ bản của một FPGA gồm có:
- Các khối logic có thể cấu hình lại được – CLB (Configuable Logic Blocks)
- Ma trận chuyển mạch (Swith Matrix) ñể kết nối các CLBs – kết nối lập trình được
- Các khối vào ra – IOB (In/Out Blocks)


17

Khối CLB: Cấu trúc bên trong của các CLBs rất khác biệt so với PLD. ðầu tiên,
thay vì sử dụng các cổng logic AND và OR như trong các SPLD, mỗi CLB hoạt ñộng dựa
trên một LUT (Lookup Table) – Bộ tạo hàm. Nhiệm vụ của LUT là xác ñịnh giá trị các
ñầu ra dựa trên giá trị của các ñầu vào.
IN

OUT

0110


0

1011

0

1100

1

Hình 1 - 7: Cấu trúc một CLB trong FPGA họ XC40000E
Mỗi CLB gồm 4-logic-cell, Logic cell gồm 2 LUT giống nhau, mỗi LUT gồm 4
ngõ vào, tín hiệu ñiều khiển và FF-D. Trong mỗi CLB có hai bộ ñiều khiển ngõ ra 3 trạng
thái (BUFT). Mỗi BUFT có chân ñiều khiển và ngõ vào ñộc lập.


18

Hình 1 - 8: Cấu trúc một Logic Cell trong Spartan-IIE
Khối vào ra – IOB: Tín hiệu vào đi qua 1 bộ đệm, tín hiệu ra qua bộ đệm 3 trạng thái,
theo các chuẩn, bộ nhớ/giao tiếp Bus. Mỗi IOB gồm 3 Flip-Flop chia chung 1 tín hiệu
Clock và các tín hiệu CE (Clock Enable), điều khiển độc lập cho từng Flip-Flop.

Hình 1 - 9 Cấu trúc IOB trong Spartan-IIE.
Ma trận chuyển mạch: Như ta thấy trên hình 1-11, ma trận chuyển mạch bao
gồm vô số các dây nối, các kênh liên kết ñan chéo ngang dọc bên trong FPGA bao quanh


19


các CLB (kênh ngang và kênh dọc). Các CLB thông qua mạng chuyển mạch và thuật tốn
định tuyến có thể kết nối ñến bất kỳ một CLB nào khác.
Tại ñiểm phân cắt của kênh ngang và kênh dọc đều có một hộp chuyển mạch.
Trong cấu trúc này, khi một dây đi vào một hộp chuyển mạch, có 6 cơng tắc khả trình cho
phép nó kết nối đến các dây cịn lại trong các đoạn liền kề. Mơ hình topology của chuyển
mạch sử dụng trong cấu trúc này là phẳng hoặc trong phạm vi cấp cơ sở của topology hộp
chuyển mạch. Trong topology hộp chuyển mạch này, một dây trong track số một chỉ nối
với dây trong track số một của các ñoạn liền kề, những dây trong track 2 chỉ nối với
những dây trong track 2, và cứ tiếp tục như vậy. Hình 1-10 dưới đây sẽ mơ tả những liên
kết trong một hộp chuyển mạch:

Hình 1 - 10: Liên kết trong một chuyển mạch.

Hình 1 - 11 Mạng liên kết giữa các CLB.
Các kết nối trực tiếp: Trong FPGA, việc kết nối giữa các CLB thông qua mạng
chuyển mạch, cịn có các kết nối trực tiếp khác đó là:


20

-

Kết nối giữa CLB liền kề

-

Kết nối giữa các CLB cách xa nhau

-


Kết nối giữa CLB đến IOB

Hình 1 - 12 Các kết nối trực tiếp giữa các khối trong FPGA.

Hình 1 - 13 FPGA Spartan IIE của Xilinx.
1.5.3. Các khối chức năng của FPGA và ứng dụng FPGA
Các khối chức năng của FPGA:


21

- FPGA có số lượng flip-flop gấp nhiều lần so với CPLDs, cho phép FPGA thực
hiện ñược các hàm logic dãy phức tạp
- Chuẩn giao tiếp JTAG phục vụ cho viêc cấu hình và debug phần cứng
- Giao tiếp tương thích nhiều chuẩn logic khác nhau
- Bộ nhớ SRAM
- Các bộ nhân tần và quản lý xung ñồng hồ: PLL, DLL, DCM
- Giao tiếp PCI
- Một số loại khác còn có bộ nhân, DSP và vi xử lý tích hợp sẵn …
FPGA sử dụng công nghệ nhớ SRAM (với CPLDs là EEPROM và Flash) để lưu
cấu hình do đó giảm giá thành và tăng khả năng kết nối, nhưng cũng vì vậy mà dữ liệu bị
mất khi mất điện. FPGA cần có một PROM ngồi để lưu trữ cấu hình. Khi khởi động, các
cấu hình trong ROM sẽ được nạp trở lại vào RAM của FPGA và thực thi chức năng đã
được lập trình.
Ứng dụng FPGA
Thiết kế mạch logic số hiện ñại theo nhu cầu của người thiết kế
Tạo mẫu trước khi chế tạo vi mạch
Thiết kế các bộ vi xử lý, vi ñiều khiển, thiết kế hệ thống nhúng
Xử lý tín hiệu số DSP

Xử lý ảnh số, Video
Xử lý âm thanh
Truyền thông: Ethernet, mã Turbo, mã Viterbi,Reed – Solomon …
Các giao tiếp PCI, USB
ðiều khiển tự ñộng
Các ứng dụng khác …
Qua chương này ta đã tìm hiểu về cấu trúc chức năng và hoạt ñộng của một số loại
PLD ñơn giản là PAL, PLA và GAL. Ta cũng ñã tìm hiểu về kiến trúc của CPLD, một
loại PLD có kiến trúc phức tạp hơn so với GAL, là sự tổng hợp của rất nhiều các thiết bị
GAL cùng mới ma trận chuyển mạch và các khối vào/ra. Sự vượt trội về cơng nghệ của
CPLD đem lại nhiều lợi ích và tính linh hoạt trong các thiết kế logic số. Cũng là một loại
PLD, FPGA có nhiều khác biệt so với CPLDs về cấu trúc, cơng nghệ lưu trữ, tính năng hỗ
trợ, giá thành hiệu suất cao, cho phép mạch tích hợp cỡ lớn.


22

Chương 2 THIẾT KẾ TẬP LỆNH
Tập lệnh có thể được hiểu như tập hợp những từ vựng của lệnh ñược hiểu bởi một
kiến trúc máy tính nhất định. Nói một cách đơn giản để có thể ra lệnh được cho phần
cứng máy tính chúng ta cần phải nói chuyện bằng ngơn ngữ của máy tính, có thể hiểu
một cách nơm na rằng ngơn ngữ của máy tính chính là các lệnh.

2.1. Mô t chung v t p l nh.
Mỗi một lệnh của vi xử lý dài 12 bít, được chia thành phần OPCODE, dùng ñể xác
ñịnh kiểu lệnh và OPERAND dùng để xác định tốn hạng ứng với lệnh đó. Bài tốn đầu
tiên đặt ra với một người thiết kế vi ñiều khiển là thiết kế tập lệnh như thế nào, ñộ dài
của mỗi lệnh bằng bao nhiêu, trong một lệnh có bao nhiêu trường, có bao nhiêu kiểu
lệnh. Trong luận văn này tác giả dựa vào kiến trúc RISC ñể thiết kế vi ñiều khiển, như
vậy tập lệnh của vi ñiều khiển cũng phải tuân theo kiến trúc RISC. Cụ thể như sau:

-

Một kiến trúc RICS bình thường, cụ thể trong trường hợp này, theo như dịng
vi điều khiển 8 bít của MICROCHIP, số lệnh của vi điều khiển là 33 lệnh, như
vậy ta cần tối thiểu là 6 bít để mã hóa trường OPCODE của lệnh.

-

Kiến trúc RISC có một thanh ghi chung thường được dùng trong rất nhiều lệnh
khác nhau gọi là thanh ghi làm việc (Working register) W, tốn hạng được chọn
có thể thanh ghi này hoặc bất kì một thanh ghi nào đó trong register file, do đó
cần thêm một bit nữa để mã hóa tập lệnh.

-

Vi điều khiển có 32 thanh ghi trong register file, như vậy sẽ cần tới 5 bít nữa để
mã hóa địa chỉ register file được dùng làm tốn hạng trong các lệnh.

-

Tổng hợp lại những ñiều trên ta thấy cần thiết kế một tập lệnh mà mỗi từ của tập
lệnh có 12 bít.

Trong thiết kế này, tất cả các lệnh được thực hiện trong một chu kì lệnh (instruction
cycle) nhờ vào thực thi kĩ thuật pipeline. Chỉ có một trường hợp ngoại lệ là khi thực hiện
lệnh rẽ nhánh (branch instruction), nếu ñiều kiện của lệnh ñúng (lệnh rẽ nhánh ñược thực
hiện), trong trường hợp này sẽ cần tới hai chu kì lệnh để hồn thành lệnh rẽ nhánh đó.
Một chu kì lệnh bao gồm 4 chu kì xung nhịp, tức là một lệnh muốn hoàn thiện
cần qua bốn chu kì xung nhịp khác nhau, sở dĩ có điều này là vì với kiến trúc RISC, một
lệnh thường được chia ra làm bốn bước: Tìm và nạp lệnh (Innstruction fetch), giải mã

lệnh (Instruction Decode), thực hiện lệnh (Execution) và ghi kết quả (Write Back). Bởi
vậy nếu với bộ tạo xung nhịp có đầu ra là 4MHz được làm clock cho vi xử lý thì vi xử lý
sẽ thực hiện ñược một lệnh trong 1micro giây. Trong trường hợp lệnh rẽ nhánh, vi xử lý
sẽ mất 2µs để thay đổi bộ đếm chương trình và thực hiện lệnh. Như vậy có thể nói rằng ở


23

xung nhịp 4MHz, vi điều khiển có thể thực hiện ñược một triệu lệnh trong một giây, nếu
như không sử dụng kiến trúc ñường ống. Trong trường hợp sử dụng kiến trúc ñường ống,
mỗi một lệnh chỉ cần một chu kì xung nhịp đầu vào để hồn thành lệnh, riêng với các
lệnh rẽ nhánh sẽ địi hỏi 2 chu kì xung nhịp để hồn thành. Do đó nếu sử dụng kiến trúc
pipeline ở xung nhịp 4MHz vi ñiều khiển sẽ thực hiện ñược bốn triệu lệnh trong một
giây.

2.2. Thi t k chi ti t t p l nh.
Tập lệnh của vi xử lý ñược chia ra làm ba kiểu ñịnh dạng (ba lớp lệnh) gồm các
lệnh hướng byte (byte – oriented), các lệnh hướng bít (bit-oriented) và các lệnh điều
khiển.
-

Các lệnh hướng byte gồm tồn bộ những lệnh mà tốn hạng của nó là 1 byte và
lệnh sẽ được thực hiện trên một byte (ñầu vào và ñầu ra của lệnh ñều là một byte).
Lệnh hướng byte thường là những lệnh để thực hiện các tính tốn đối với những
tốn hạng có độ rộng là 1 byte. ðịnh dạng của các lệnh hướng byte như sau:
11
OPCODE

6


5
d

4

0
f(FILE #)

Hình 2- 1: ðịnh dạng các lệnh hướng byte
-

OPCODE: 6 bit ñể xác ñịnh lệnh tương ứng, opcode của các lệnh hướng byte
tương ứng được chỉ ra như trên hình 2-1.

-

OPERAND: Tốn hạng đối với các lệnh hướng byte chính là d và f, ý nghĩa của
hai toán hạng này như sau
o d: 1 bít dùng để chỉ tốn hạng đích, khi d = 0 tốn hạng đích sẽ là thanh ghi
W (working register), khi d = 1 đích sẽ là thanh ghi trong register file được
xác định bởi 5 bít trong trường f.
o f: 5 bít dùng để xác định địa chỉ của thanh ghi tốn hạng trong register file.

-

Có tất cả 18 lệnh hướng byte trong tập lệnh của vi ñiều khiển ñược chỉ ra như bảng
dưới 2-1.

-


Các lệnh hướng bít: Là các lệnh dùng để thay đổi các bít trong thanh ghi W hoặc
thay đổi các bít trong register file f. Các lệnh hướng bít thường rất hay được sử
dụng trong các ứng dụng vi ñiều khiển do phần lớn các ứng dụng của vi ñiều
khiển là những ứng dụng ñơn giản, ñầu vào cũng như ñầu ra thường chỉ là một bít.
ðịnh dạng của các lệnh hướng bít như sau:


24

11

8

OPCODE

7

5
b

4

0
f(FILE #)

Hình 2- 2 ðịnh dạng các lệnh hướng bít
STT Mnemonic Operand
Mô tả
Cycles
1 I_ADDWF

f,d
Cộng W và và thanh ghi f
2 I_ANDWF
f,d
AND W và f
3 I_CLRF
f
Xóa thanh ghi f
4 I_CLRW
Xóa W
5 I_COMF
f,d
Tính bù của f
6
I_DEC
f,d
Giảm f đi 1
Giảm f đi 1, khơng thực
hiện nếu cờ Z được thiết
7 I_DECFSZ
f,d
lập
8
I_INCF
f,d
Tăng f lên 1
Tăng f lên 1, không thực
9 I_INCFSZ
f,d
hiện lệnh tiếp theo nếu Z

=0
10 I_IORWF
f,d
OR W với f
11 I_MOV
f,d
Move tới f
12 I_MOVWF
f
Move W tới f
13 I_NOP
Khơng thực hiện gì
14
I_RLF
f,d
Quay trái f qua cờ Carry

12'b0001_00xx_xxxx
12'b0010_00xx_xxxx
12'b0000_001x_xxxx
12'b0000_0000_0000,
12'b0011_01xx_xxxx

Z
Z
None
None
C

15


I_RRF

16 I_SUBWF
17 I_SWAPF
18 I_XORWF

Opcode
Cờ
12'b0001_11xx_xxxx C,DC,Z
12'b0001_01xx_xxxx
Z
12'b0000_011x_xxxx
Z
12'b0000_0100_0000,
Z
12'b0010_01xx_xxxx
Z
12'b0000_11xx_xxxx
Z
12'b0010_11xx_xxxx
12'b0010_10xx_xxxx

Z

12'b0011_11xx_xxxx

f,d

Quay phải f qua cờ Carry


12'b0011_00xx_xxxx

C

f,d
f,d
f,d

Trừ W cho f
Swap f
XOR W với f

12'b0000_10xx_xxxx
12'b0011_10xx_xxxx
12'b0001_10xx_xxxx

C,DC,Z
None
Z

Bảng 2- 1: Các lệnh hướng byte của vi điều khiển
-

OPCODE: 6 bít là trường ñể xác ñịnh opcode của các lệnh tương ứng.

-

OPERAND: gồm hai trường:
o b: 3 bít dùng để xác ñịnh 1 bít xác ñịnh trong một byte cần thay ñổi.

o f: 5 bít dùng ñể xác ñịnh ñịa chỉ của register file, chính là byte mà lệnh
hướng bít này muốn thay đổi giá trị một bít trên đó.

-

Có 4 lệnh hướng bít được chỉ ra như trong bảng dưới ñây.


25
STTMnemonic Operand Mơ tả

Cycles Opcode

Cờ

1 I_BCF

f,b

Xóa bít b trong thanh ghi f

1 12'b0100_xxxx_xxxx

None

2 I_BSF

f,b

1 12'b0101_xxxx_xxxx


None

3 I_BTFSC

f,b

Set bít b trong thanh ghi f
Test bits b trong thanh ghi f,
không thực hiện nếu bit b
bằng 0

1 12'b0110_xxxx_xxxx

None

f,b

Test bits b trong thanh ghi f,
không thực hiện nếu bit b
bằng 0

1 12'b0111_xxxx_xxxx

None

4 I_BTFSS

Bảng 2- 2: Các lệnh hướng bít của vi điều khiển
-


Các lệnh ñiều khiển: Là các lệnh dùng ñể ñiều khiển chương trình như các lệnh
rẽ nhánh, gọi chương trình con….. Các lệnh điều khiển có một định dạng chung,
trừ lệnh goto như được mơ tả dưới đây.
11

8

7

OPCODE

0
f(FILE #)

Hình 2- 3: ðịnh dạng các lệnh rẽ nhánh
11
OPCODE

9

8

0
f(FILE #)

Hình 2- 4: ðịnh dạng của lệnh goto
-

Các lệnh rẽ nhánh ñược chỉ ra như trong bảng 2-3.



×