Công nghệ FPGA là một trong những công nghệ vi mạch tích hợp lớn VLSI có thể cho phép thực hiện thiết kế thử nghiệm các cấu hình khác nhau các chip vi xử lý đa nhân ít nhất là hai nhân c
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI
LUẬN VĂN THẠC SỸ
CHUYÊN NGÀNH CÔNG NGHỆ THÔNG TIN
TÊN ĐỀ TÀI LUẬN VĂN THẠC SỸ
THIẾT KẾ THỬ NGHIỆM, PHÂN TÍCH VÀ ĐÁNH GIÁ HIỆU NĂNG VI XỬ LÝ LÕI MỀM ĐA NHÂN TRÊN FPGA
NGUYỄN QUANG VINH
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI
Trang 4LỜI CAM ĐOAN
Tôi cam đoan đây là công trình nghiên cứu của riêng tôi
Các số liệu, kết quả nêu trong luận văn là trung thực và chƣa từng đƣợc ai công bố trong bất kỳ công trình nào khác
Tác giả luận văn
Trang 5LỜI CÁM ƠN
Qua luận văn này tôi xin chân thành cảm ơn TS.Hồ Khánh Lâm đã tận tình giúp đỡ, động viên, định hướng, hướng dẫn tôi nghiên cứu và hoàn thành luận văn này Tôi xin cám ơn các giảng viên trong Trường Đại học mở Hà Nội đã giảng dạy
và giúp đỡ tôi trong hai năm học qua, cám ơn sự giúp đỡ nhiệt tình của các bạn đồng nghiệp
Tôi cũng xin cám ơn các anh chị em học viên lớp CH CNTT, khóa học 2017 -2019, Trường Đại học mở Hà Nội đã ủng hộ và giúp đỡ tôi trong quá trình học tập cũng như thực hiện luận văn này
Cuối cùng tôi xin cám ơn đến các bạn đồng nghiệp trong đơn vị đã giúp đỡ tôi quá trình thực hiện đề tài
Xin chân thành cảm ơn!
Trang 6MỤC LỤC
Trang
LỜI CAM ĐOAN i
LỜI CÁM ƠN ii
MỤC LỤC iii
DANH MỤC CÁC THUẬT NGỮ, CHỮ VIẾT TẮT vi
DANH MỤC BẢNG BIỂU iix
DANH SÁCH HÌNH VẼ x
MỞ ĐẦU 1
CHƯƠNG 1 CÔNG NGHỆ FPGA VÀ VI XỬ LÝ LÕI MỀM MICROBLAZE 32-BIT CỦA XILINX 4
1.1 Công nghệ FPGA 4
1.1.1 Cấu trúc chung của FPGA 4
1.1.2 Định tuyến trong FPGA 11
1.1.3 Các kiến trúc của FPGA 16
1.1.4 So sánh FPGA với các công nghệ khác 17
1.2 32-bit RISC lõi mềm Microblaze cho Xilinx FPGA 20
1.2.1 Kiến trúc Microblaze 20
1.2.2 Đặc điểm của Microblaze 21
1.2.3 Tập lệnh RISC của Microblaze 24
1.3 Kết luận chương 30
CHƯƠNG 2: THIẾT KẾ VI XỬ LÝ 2-CORE MICROBLAZE TRÊN XILINX FPGA 31
2.1 Kit phát triển hệ thống nhúng của Xilinx 31
Trang 72.1.1 Các công cụ phần mềm phát triển 31
2.1.2 Bảng phát triển Xilinx FPGA 35
2.2 Thiết kế hệ thống 2-core Microblaze 37
2.2.1 Đề xuất cấu hình 2-core microblaze 37
2.2.2 Thực hiện từng bước thiết kế 38
2.3 Xây dựng ứng dụng ở ngôn ngữ C chạy thử nghiệm trên 2-core MicroBlaze41 2.3.1.Các bước xây dựng ứng dụng ở ngôn ngữ C để chạy kiểm tra vận hành của vi xử lý Microblaze 32-bit 2-core được thiết kế cho ở phụ lục 2 41
2.3.2.Kết quả chạy các chương trình ứng dụng cho thấy thiết kế Microblaze 32-bit 2-core là thành công 41
2.4 Kết luận chương 43
CHƯƠNG 3: ĐÁNH GIÁ HIỆU NĂNG CỦA VI XỬ LÝ ĐA NHÂN NHỜ MÔ HÌNH HÓA BẰNG PETRI NET VÀ MẠNG HÀNG ĐỢI 44
3.1 Hiệu năng của hệ đa xử lý theo mức tăng tốc 44
3.1.1 Luật Amdahl 44
3.1.2 Luật Gustafson-Barsis 54
3.1.3 Số đo Karp-Flatt 56
3.1.4 Số đo đẳng hiệu năng 57
3.2 Một số đặc điểm của mạng hàng đợi và Petri Net 62
3.2.1 Mạng hàng đợi 62
3.2.2 Petri Net 72
3.3 Mô hình hóa và phân tích hiệu năng của vi xử lý đa nhân 84
3.3.1 Mô hình chip multi-core 84
3.3.2 Xác định các số đo hiệu năng 89
3.3.3 Mô phỏng và xác định kết quả nhờ công cụ mô phỏng JMT 90
Trang 83.3.4 Thực hiện mô phỏng nhờ mạng hàng đợi đóng nhiều lớp công việc
nghiệm dạng tích xác suất MCPFQN 91
3.4 Kết luận chương 92
KẾT LUẬN CHUNG VÀ HƯỚNG NGHIÊN CỨU 93
TÀI LIỆU THAM KHẢO 94
PHỤ LỤC 96
PHỤ LỤC 1 KẾT QUẢ THỰC HIỆN THIẾT KẾ MICROBLAZE 3BIT 2-CORE 97
PHỤ LỤC 2.XÂY DỰNG CÁC ỨNG DỤNG Ở NGÔN NGỮ C ĐỂ KIỂM TRA HOẠT ĐỘNG CỦA THIẾT KẾ MICROBLAZE 32-BIT 2-CORE 105
PHỤ LỤC 3 KẾT QUẢ THỰC HIỆN MÔ PHỎNG SỬ DỤNG JMT 110
Trang 9DANH MỤC CÁC THUẬT NGỮ, CHỮ VIẾT TẮT
STT Từ viết tắt Tiếng Anh Tiếng Việt
Expression Language
Ngôn ngữ biểu thức boolean nâng cao
chip
Chip đa lõi bất đối xứng
integrated circuit
Vi mạch tích hợp chuyên dụng
Trang 1016 EAR Exception Address
Register
Thanh ghi địa chỉ ngoài
Kit
Công cụ phát triển hệ thống nhúng
controller
Khối điều khiển bộ nhớ ngoài
Array
Mảng cổng có thể lập trình đƣợc
input/output
Cổng vào ra đa năng
Trang 1134 MAC Multiply accummualate
circuits
Các mạch tích lũy nhân
Logic
Logic mảng lập trình đƣợc
Computer
Máy tính với tập lệnh giảm thiểu
nhiên
Integration
Tích hợp cấp độ rất lớn
Trang 12DANH MỤC BẢNG BIỂU
Trang
Bảng 1.1 Các kiến trúc FPGA, công nghệ và các nhà cung cấp
17 Bảng 1.2 Bản đồ sắp xếp địa chỉ của hệ thống MicroBlaze
23
Trang 13DANH SÁCH HÌNH VẼ
Trang
Hình 1.10 Định tuyến qua các hộp kết nối 12
Trang 14Hình 2.6 Kết quả chạy thử chương trình Helloword 41
Hình 2.8 Kết quả chương trình test các thiết bị ngoại vi 42
Hình 3.3 Luật Amdahl: mức tăng tốc so với tỷ lệ phần trăm của phần tuần tự của
Hình 3.6 Chip đa lõi đối xứng (SMC) gồm n/r = 4/4 lõi (4 lõi, mỗi lõi có 4 BCEs)
51 Hình 3.7 Chip đa lõi bất đối xứng (AMC) gồm một lõi 4-BCEs và n-4 lõi 1-BCE
Hình 3.22 GSPN của chip multi_core thực hiện các công việc có tham chiếu bộ
Hình 3.25 Mô hình MCPFQN của chip multi_core thực hiện các công việc có tham
Trang 15Hình 1.5 Chọn system clock 50MHz và 8KB BRAM cho các MicroBlaze 99
Trang 16MỞ ĐẦU
Công nghệ chip vi xử lý đa nhân (multicore processor) là công nghệ lõi trong phát triển các hệ thống thiết bị máy tính và truyền thông, và điện tử Hầu nhƣ tất cả các thiết bị thông minh trong mọi lĩnh vực đều có các bộ xử lý trung tâm là các chip
vi xử lý đa nhân Ngày nay, Internet vạn vật (IoT) đều cần đến chip vi xử lý đa nhân
để có thể thực hiện xử lý song song các tín hiệu, dữ liệu, các tác vụ và ứng dụng trí tuệ nhân tạo Công nghệ máy tính song song nhƣ các hệ thống tính toán hiệu năng cao và siêu máy tính có thể lả sự kết hợp của hàng chục, hàng trăm, hàng nghìn nút máy tính chủ (server node) với sự tích hợp của các chip vi xử lý đa nhân và các chip đồng xử lý tăng tốc nhiều nhân (manycore processor) Các hệ thống nhúng với trung tâm là các chip vi xử lý đa nhân trong các hệ thống điện tử dân dụng thông minh đang thịnh hành trong đời sống chúng ta
Công nghệ FPGA là một trong những công nghệ vi mạch tích hợp lớn (VLSI) có thể cho phép thực hiện thiết kế thử nghiệm các cấu hình khác nhau các chip vi xử lý đa nhân (ít nhất là hai nhân) cho các ứng dụng mong muốn Ƣu điểm quan trọng của FPGA chính là nó cho phép thay đổi cấu hình thiết cấu hình của chip
đa nhân bằng công cụ phần mềm thiết kế trên các ngôn ngữ mô phỏng phần cứng VHDL hay Verilog Thiết kế chip đa nhân trên FPGA có thể đƣợc cứng hóa (đóng vỏ) nếu cấu hình mong muốn đã thỏa mãn các điều kiện ứng dụng Mức độ tích hợp của các công nghệ FPGA cho phép thiết kế mạng trên chip (NoC) và hệ thống trên chip (SoC) với các nhân xử lý 32-bit
Do vậy, thiết kế thử nghiệm chip đa nhân trên FPGA là vấn đề cần thiết để
có thể tự chủ trong thiết kế các hệ thống có ứng dụng chuyên biệt
Đối tƣợng nghiên cứu
Đối tƣợng nghiên cứu của đề tài chủ yếu nghiên cứu về các vấn đề liên quan đến công nghệ FPGA, cấu trúc một số chip vi xử lý có thể thiết kế trên FPGA, các phân tích đánh giá hiệu năng vi xử lý đa nhân dựa trên sự kết hợp mạng hàng đợi và
Petri Net
Trang 17 Phạm vi nghiên cứu
Trong khuôn khổ đề tài, luận văn nghiên cứu kiến trúc của Xilinx FPGA, cấu trúc của chip xử lý Microblaze, các bước thiết kế chip vi xử lý đa nhân Microblaze trên FPGA, xác định hiệu năng của vi xử lý đa nhân theo mức tăng tốc và sử dụng
mô hình tích hợp mạng hàng đợi và Petri Net
Thiết kế chip vi xử lý 2-core Microblaze 32-bit trên bảng phát triển Xilinx FPGA Xây dựng mô hình dựa vào mạng hàng đợi và Petri Net cho phân tích, đánh giá và phân tích hiệu năng của chip vi xử lý đa nhân
Trong quá trình thực hiện luận văn, những phương pháp nghiên cứu chủ yếu được sử dụng là phương pháp thực nghiệm, ứng dụng các lý thuyết để phân tích, đánh giá
Ngoài phần mở đầu và kết luận, nội dung nghiên cứu của luận văn được trình bày trong 3 chương:
Chương 1: Công nghệ FPGA và vi xử lý lõi mềm Microblaze 32-bit của Xilinx
1.1 Công nghệ FPGA
1.2 32-bit RISC lõi mềm Microblaze cho Xilinx FPGA
1.3 Kết luận chương
Chương 2: Thiết kế vi xử lý 2-core microblaze trên Xilinx FPGA
2.1 Kit phát triển hệ thống nhúng của Xilinx
2.2 Thiết kế hệ thống 2-core Microblaze
2.3 Xây dựng ứng dụng ở ngôn ngữ C chạy thử nghiệm hệ 2-core Microblaze
2.4 Kết luận chương
Chương 3: Đánh giá hiệu năng của vi xử lý đa nhân nhờ mô hình hóa bằng Petri
Trang 18net và queueing network
3.1 Hiệu năng của hệ đa xử lý theo mức tăng tốc
3.2 Một số đạc điểm của mạng hàng đợi và Petri Net
3.3 Mô hình hóa và phân tích hiệu năng của vi xử lý đa nhân 3.4 Kết luận chương
4 Kết luận và định hướng nghiên cứu
Trang 19CHƯƠNG 1 CÔNG NGHỆ FPGA VÀ VI XỬ LÝ LÕI MỀM
MICROBLAZE 32-BIT CỦA XILINX
1.1 Công nghệ FPGA
1.1.1 Cấu trúc chung của FPGA
Trong khi tồn tại sự phát triển công nghệ từ PAL lên GAL và CPLD, có một
xu hướng phát triển khác dựa trên công nghệ mảng cổng, đó là mảng cổng có thể lập trình được dạng trường, FPGA (Field-Programmable Gate Array)
Từ 1980, các công ty sản xuất PLD hàng đầu đã đẩy mạnh quá trình nghiên cứu về FPGA và nhanh chóng cho ra các thế hệ FPGA với số lượng cổng và tốc độ ngày càng cao.các FPGA hiện nay có số lượng cổng đủ lớn để có thể thay thế cả
Hình 1.1 Sơ đồ khối của FPGA
I/O Block
Programmable Interconnect I/O Pin
Block RAM
Trang 20một hệ thống bao gồm lõi CPU, Bộ điều khiển bộ nhớ (Memory Controller), các ngoại vi như SPI,Timer, I2C, GPIO, PWM, Video/Audio Controller… (nghĩa là tương đương với các SoC hiện đại)
FPGA gồm có (hình 1.1) [1, tr 94]:
là các thành phần tiêu chuẩn Trong hầu hết các FPGA, mỗi một CLB chứa một số các mảnh, mà mỗi mảnh lại chứa một số (thường là 2 hoặc 4) ô logic (logic cell) với một số thành phần nhớ (D Flip-Flop) hoặc bộ dồn kênh (MUX) nếu không dùng FF Mỗi ô logic có thể được cấu hình để thực hiện các chức năng logic cơ bản (như AND, OR, NOT) trên các tín hiệu số nhờ sử dụng bảng LUT (look-up Table) Các CLB liên kết với nhau qua mạng liên kết có thể lập trình được (Programmable Interconnect hay routing)
Hình 1.2 CLB và Logic Cell
chuyển mạch có thể lập trình được - PSM (Programmable Switch Matrix) để hình thành các đơn vị thực hiện các chức năng phức tạp hơn
miếng FPGA và nối với các chân tín hiệu vào/ra (I/O pin) Như vậy từng chân I/O của FPGA có thể được lập trình để đảm bảo các giao tiếp điện cần thiết cho kết nối FPGA với hệ thống mà nó là thành phần (hình 1.3)
Trang 21 Block RAM (BRAM): khối RAM, là RAM 2-port bên trong FPGA
Trong FPGA có thể có một số (hay nhiều) BRAM dung lượng đến vài chục kilobit Chúng được nhúng ở vị các vị trí cố định trên FPGA để lưu trữ dữ liệu (không được
sử dụng để thực hiện các chức năng logic khác)
Hình 1.3 IOB của Xilinx FPGA
Ngoài ra các thành phần trên, FPGA còn các logic nhỏ khác, như:
thực hiện các phép nhân và cộng hiệu quả,
ví dụ các bộ biến đổi tương tự-số ADC (Analog-to-Digital Converter) và các bộ biến đổi số-tương tự DAC (Digital-to-Analog Converter), cho phép FPGA vận hành như là một SoC Một FPGA chứa từ 64 đến hàng chục ngàn khối logic và các flip-flop
FG (Function generator), được sử dụng để thực hiện các chức năng logic nhờ cất giữ trạng thái logic ra đúng ở trong một vùng nhớ, mà trạng thái logic ra tương ứng
Trang 22với từng tổ hợp của các biến vào LUT thường có 4 đầu vào có thể thực hiện bất kỳ chức năng logic 4-đầu vào
Các thành phần nhớ trong CLB có thể được cấu hình hoặc thành các các Flip-flop hoặc thành các mạch chốt (Latch) Mỗi CLB thường có bố trí các chân tín hiệu vào và hai chân tín hiệu ra xung quanh (hình 1.2) Như vậy, có thể kết nối chân tín hiệu đầu từ các phía tương ứng của CLB, trong khi chân tín hiệu đầu ra có thể kết nối với các dây dẫn định tuyến ở cả kênh phía bên phải và kênh phía dưới của CLB Mỗi một chân tín hiệu đầu ra của CLB có thể kết nối với bất kỳ đoạn nối dây nào trong các kênh kề cận với nó Tương tự, hộp đệm vào/ra (I/Opad) ở đỉnh của chip FPGA có thể nối với bất kỳ dây dẫn nào ở kênh nằm ngang phía dưới
Các nhà sản xuất có xu hướng thiết kế các khối logic của FPGA thực hiện các chức năng lớn hơn để giảm liên kết cục bộ, đồng nghĩa với số lượng chân tín hiệu đầu vào của khối logic tăng lên, và nó cũng cho phép lập trình các khối logic linh hoạt hơn
Ví dụ, Xilinx có kiến trúc Virtex-5 FPGA dựa trên cặp LUT 6-đầu vào với tổng số 64 bits của không gian lập trình và 6 đầu vào độc lập, và logic liên quan đảm bảo ưu việt trong sử dụng các tài nguyên so với các kiến trúc khác Nó có thể thực hiện bất kỳ chức năng nào từ 6 đầu vào độc lập và các tổ hợp số của một hoặc hai chức năng nhỏ LUT 6-đầu vào cũng bao gồm cả các bộ cộng (adder) với logic carry, các bộ dồn kênh (MUX), và flip-flop Nó có thể được sử dụng bổ xung như
là RAM 64-bit hay thanh ghi dịch 32 bit (hình 1.4)
Hình 1.4 Xilinx Virtex-5 FPGA LUT- cặp FF
Trang 23Kiến trúc của họ Altera Stratix FPGA đạt đƣợc hiệu năng cao nhờ đƣa vào module logic thích ứng hiệu quả vùng - ALM (Adaptive logic Module) ALM gồm
có logic tổ hợp, 2 thanh ghi, và 2 bộ cộng, nhƣ chỉ ra ở hình 1.5 logic tổ hợp có 8 đầu vào một bảng LUT (Lookup Table)
Hình 1.5 Altera Stratix IV FPGA ALM
kiến trúc của Altera ALM
5-LUT 3-LUT
5-LUT 4-LUT
5-LUT 4-LUT
6-LUT
6-LUT
Trang 24Bảng LUT có thể được chia ra 2 ALUT (Adaptive LUT) với tổng số 64 bits của không gian lập trình và 8 đầu vào chia sẻ Nó cũng có thể thực hiện bất kỳ chức năng nào của 6 đầu vào và các tổ hợp số của một hoặc hai chức năng nhỏ ALM 8-đầu vào cho phép các khả năng cấu hình khác nhau như chỉ ra ở hình 1.6 Họ Stratix của các FPGA cũng có hiệu quả trong định tuyến thông qua mạng liên kết
các khối của các kiến trúc FPGA và chúng tương đồng nhau (hình 1.7)
Các FPGA khác nhau có số lượng các ô logic, kích cỡ và số lượng các block RAM, các MAC khác nhau Các FPGA sử dụng trong các hệ thống lai (hybrid system) thường có khoảng 100K-200K ô logic, 500KB của RAM bên trong và 100 MACs Hệ thống lai có thể sử dụng FPGA với 1000 khối I/O tương ứng với 1000 I/O pin để đảm bảo các giao tiếp với hệ thống chủ, cũng như với bộ nhớ cục bộ nối trực với FPGA
Các FPGA thường được lập trình sau khi đã hàn gắn trên bảng mạch in, tương tự như các CPLD lớn Nhưng dữ liệu cấu hình trong FPGA bị mất khi ngừng cấp nguồn (mất điện) giống như RAM trong máy tính vậy Do đó, muỗi lần ngắt nguồn và bật lại thì ta phải nạp lại tệp cấu hình vào FPGA Muốn lưu giữ lại cấu
Hình 1.7 Sự thực hiện chức năng 5-Input và 3- Input trong Stratix IV ALM và Virtex-5 LUT-cặp FF
Trang 25hình đã lập trình cho FPGA thì ta phải mắc thêm PROM hay EPROM ngoài Bộ nhớ ngoài này có nhiệm vụ lưu tệp cấu hình ở dạng nhị phân (bitstream hay bit file)
và tự động nạp dữ liệu cấu hình lại cho FPGA mỗi khi bật nguồn, như vậy dù có ngắt nguồn FPGA vẫn “không bị mất” dữ liệu Các phiên bản EEPROM có thể có thể lập trình được trong hệ thống (hay trong mạch), thường thông qua giao tiếp JTAG Tệp cấu hình chứa các thiết lập cho từng CLB, PSM, MAC, I/O và các thành phần có thể cấu hình khác của FPGA Các FPGA được sử dụng trong các hệ thống máy tính lai có thể được lập trình lại vô số lần Thời gian tải cấu hình mới thường chỉ chưa đến 1 giây Một số FPGA hiện nay có khả năng trong khi đang hoạt động chuyển đến cấu hình mới đã được nạp trước vào thiết bị Một số FPGA cũng cho phép cầu hình lại từng phần của thiết bị
FPGA và CPLD có những điểm khác biệt đó là: FPGA bên trong dựa trên các bảng look-up (LUTs), trong khi các CPLD hình thành các chức năng logic bằng các nhiều mạch cổng (ví dụ tổng các tích); FPGA và CPLD đều cấu tạo từ các khối logic (các ô logic) là sự kết hợp của một khối logic và Flip-Flop Nhưng, FPGA có
số lượng lớn các khối logic (đến hang trăm ngàn) hơn nhiều so với CPLD; FPGA giống như RAM, phải nạp lại dữ liệu cấu hình mỗi khi bật nguồn CPLD giống như EEPROM chỉ cần nạp một lần và không bị mất chức năng sau khi ngắt nguồn;
Do FPGA có số lượng rất lớn các khối logic nên có nhiều tài nguyên để thực hiện nhiều chức năng toán học chuyên dụng và phức tạp.Vì vậy các FPGA phù hợp cho các thiết kế phức tạp hơn so với CPLD Nhìn chung các CPLD là sự lựa chọn tốt cho các ứng dụng tổ hợp, trong khi các FPGA phù hợp hơn cho các máy trạng thái lớn (như các vi xử lý)
FPGA có các phần tử logic chạy theo dạng song song Còn vi điều khiển dựa trên cấu trúc CPU thực thi theo mã lệnh theo dạng tuần tự
FPGA dùng ngôn ngữ lập trình phần cứng (Verilog, VHDL) và lập trình trên FPGA gọi là lập trình phần cứng Lập trình vi điều khiển là lập trình phần mềm phần cứng có sẵn
Trang 261.1.2 Định tuyến trong FPGA
Liên kết bên trong từng CLB, liên kết giữa các khối logic với nhau và với các khối I/O để FPGA trở thành một thiết bị có chức năng lớn phức tạp là một vấn
đề then chốt ảnh hưởng đến hiệu năng của FPGA Bởi vì các trễ do định tuyến sẽ là đáng kể và lớn hơn so với trễ ở từng khối logic Ngoài ra, vì các FPGA ngày càng đi vào sâu của các quá trình chế tạo micron nhỏ của mạch tích hợp, nên tỷ lệ của toàn
bộ trễ do định tuyến tăng lên với từng thế hệ của quá trình chế tạo
Định tuyến trong FPGA bao gồm các khối chuyển mạch (SB) và các dây nối Định tuyến đảm bảo kết nối giữa các khối I/O và các khối logic và giữa các khối logic với nhau Kiểu của kiến trúc định tuyến quyết định vùng được định tuyến và mật độ các khối logic Khối chuyển mạch nằm ở giao của các kênh định tuyến dọc (vertical routing channel) và ngang (horizontal routing channel)
Các nghiên cứu hàn lâm sử dụng một mô hình kiến trúc chung đơn giản của Xilinx FPGA cho ở hình 1.9 Kiến trúc chung này của Xilinx FPGA gồm có một mảng hai chiều các khối logic có thể lập trình được CLB (configurable Logic Block), với các kênh định tuyến ngang và dọc giữa các hàng và các cột của các CLB Mỗi CLB có 4 đầu vào và một đầu ra, và tất cả các khối logic là giống nhau
Hình 1.8 Kết nối trong khối chuyển mạch
Trang 27Các tài nguyên của định tuyến trong Xilinx FPGA gồm
Các khối kết nối (Connection Block): các khối kết nối C nối các dây dẫn
của kênh định tuyến với các chân tín hiệu của các CLB Có hai đặc tính ảnh hướng
chính đến khả năng định tuyến của thiết kế: tính linh hoạt, Fc, là số dây dẫn mà
từng tín hiệu của CLB có thể kết nối; và cấu hình, là mẫu của các chuyển mạch tạo
lập kết nối (đặc biệt nếu giá trị Fc thấp)
Ví dụ, trong hình 1.10, đối với hộp C với Fc=2, cấu hình 1 (topology 1) không thế nối chân A của một CLB với chân B của CLB khác, trong khí đó thì ở
cấu hình 2 (Topology 2) là có thể
Hình 1.9 Kiến trúc đơn giản của Xilinx FPGA
Trang 28Các khối chuyển mạch (Switch Block): các khối chuyển mạch S cho phép
các dây dẫn chuyển mạch giữa các dây dọc và ngang Tính linh hoạt, Fs, xác định
số lượng các đoạn dây nối mà một đoạn dây nối đi vào trong khối S có thể kết nối Cấu hình của các khối chuyển mạch S là rất quan trọng bởi vì có thể chọn hai cấu hình khác nhau có các khả năng định tuyến khác nhau với cùng một giá trị tính linh hoạt Fs Ví dụ, hình 1.11 mô tả cấu hình 1 (topology 1) có thể nối chân tín hiệu A của một CLB với chân tín hiệu B của một CLB khác, trong khi đó cấu hình 2 (Topology 2) thì không thể
Hình 1.11 Định tuyến qua các khối chuyển mạch
Hình 1.12 Các đường dây trong Xilinx FPGA
Trang 29Các khối chuyển mạch mà chỉ kết nối các rãnh trong cùng một miền, chẳng hạn, 0-0, 1-1, được gọi là các khối chuyển mạch của tập hợp con hay phẳng hai chiều (Subset switch box hay Planar) Các khối chuyển mạch mà cho phép kết nối với bất kỳ miền nào khác, chẳng hạn, 0-3, 1-2, được gọi là các khối chuyển mạch Wilton, và chúng được sử dụng rộng rãi do đảm bảo định tuyến linh hoạt hơn
Các đường dây dài-đơn (Single-length lines) (hình 1.12): chúng được
dùng cho các kết nối tương đói ngắn giữa các CLB và chúng trải rộng chỉ qua một CLB
Các đường dây dài-gấp đôi (Double-length lines): chúng tương tự như các
đường dây dài-đơn, ngoại trừ mỗi đường dây ở đây trải rộng qua hai CLB Chúng cho các trễ định tuyến nhỏ đối với kết nối dài vừa phải
Các đường dây dài (Long lines): chúng phù hợp cho các kết nối dài trải
rộng một số CLB
chuyển mạch C được thực hiện với các transistors dẫn xuất (pass transistor) Các transistors dẫn xuất công nghệ CMOS cho phép thực hiện một chức năng logic với rất ít transistors, do đó nó có ưu điểm là làm cho điện dung thấp Chuỗi các
Hình 1.13 Ma trận chuyển mạch trong Xilinx FPGA
Trang 30transistors dẫn xuất đƣợc sử dụng để thiết kế các mảng logic lớn nhƣ ROM, PLA,
và cả các bộ dồn kênh Vì vậy với khối chuyển mạch C sử dụng các transistors dẫn xuất thì không cần phải dùng đến các bộ dồn kênh cho các đầu vào kết nối Điều này cho phép hai hoặc nhiều rãnh hơn đƣợc hết nối điện qua chân tín hiệu vào nhờ các chuyển mạch trong khối C
Hình 1.14 minh họa về định tuyến trong một Xilinx FPGA Các liên kết của kênh định tuyến với khối logic (LB) đƣợc tạo ra thông qua khối kết nối, CB (Connection Block) Vì công nghệ SRAM đƣợc sử dụng để thực hiện các LUT, nên các phía kết nối là rộng Khối logic đƣợc vây quay bởi các khối kết nối ở cả bốn phía kết nối Các CB nối nối các chân tín hiệu (pin) của LB với các đoạn dây Các chân tín hiệu của LB, mà chúng nối với các CB có thể sau đó nối với bất kỳ số lƣợng của các đoạn dây thông qua các khối chuyển mạch, SB (Switch Block)
Routing switch x
Trang 31Trong cấu hình này có bốn loại đoạn dây: các đoạn dây có mục đích chung (General purpose Interconnect): các dây lại này đi qua các chuyển mạch trong SB; liên kết trực tiếp (Direct Interconnect): kết nối các chân tín hiệu của LB với bốn khối kết nối xung quanh LB; đường dây dài (Long Line): là các dây nối thống nhất có hệ số trễ phân đầu ra cao; và các đường dây nhịp đồng hồ (Clock lines): dẫn tín hiệu nhịp đồng hồ đến tất cả các chip
1.1.3 Các kiến trúc của FPGA
Có hai loại kiến trúc cơ bản của FPGA: kiến trúc mặt độ thưa grained) và kiến trúc mật độ cao (fine-grained)
Kiến trúc mật độ thưa: có các khối logic lớn, mỗi khối logic thường chứa
hai hoặc nhiều bảng look-up (LUTs) và hai hoặc nhiều flip-flop Trong hầu hết các FPGA kiến trúc này bảng LUT 4-đầu vào (như là 16x1 ROM) làm thành một logic
cụ thể Loại kiến trúc này sử dụng công nghệ cầu chì đối ngẫu CMÓS (anti-fuse CMOS), chỉ cho phép lập trình một lần, nhưng dữ liệu không bị thay đổi khi bị mất nguồn để lập trình cần phải có thiết bị lập trình chuyên dụng (thường do nhà sản xuất hay nhà phân phối cung cấp)
Kiến trúc mật độ cao: có số lượng lớn các khối logic đơn giản Khối logic
đơn giản hoặc chứa chức năng logic hai đầu vào hoặc bộ dồn kênh 4-to-1 và một flip-flop Chúng sử dụng công nghệ bộ nhớ SRAM, tương tự như các bộ vi xử lý Như vậy chúng có thể được lập trình lại không hạn chế trong hệ thống, nhưng đòi hỏi phải có bộ nhớ PROM
EPROM, EEPROM hay Flash bên ngoài (gọi là bộ nhớ cấu hình) để lưu trữ chương trình xác định các chức năng như thế nào của từng khối logic, các khối I/O nào là các cổng vào và các cổng ra, và các khối được liên kết với nhau như thế nào FPGA hoặc là tự nạp bộ nhớ cấu hình của nó hoặc bộ xử lý bên ngoài tải nội dung của bộ nhớ cấu hình vào FPGA Khi thực hiện tự nạp, FPGA địa chỉ các byte của bộ nhớ cấu hình giống như bộ xử lý địa chỉ bộ nhớ PROM lưu cấu hình khỏi tạo (boot PROM), hoặc sử dụng PROM tuần tự truy nhập liên tiếp Khi bộ xử lý tải vào
Trang 32FPGA, FPGA thể hiện như là bộ xử lý ngoại vi chuẩn Thời gian cấu hình thường nhỏ hơn 200 ms, phụ thuộc vào kích thước của FPGA và phương pháp cấu hình
Bảng 1.1: Các kiến trúc FPGA, công nghệ và các nhà cung cấp
Mật độ thưa
(Coarse-grained)
Altera: (FLEX, APEX) Atmel: (AT40K) DynaChip Lucent: (ORCA) Vantis: (VF1) Xilinx:
1.1.4 So sánh FPGA với các công nghệ khác
Nếu sản xuất công nghiệp với số lượng lớn, thì ASIC cho chi phí trên một đơn vị thấp hơn các FPGA
Nếu ta biết rằng có nhiều thiết bị và các máy tính cá nhân chạy ở tốc độ vài Gigaherz, thì các FPGA lại chạy với tốc độ thấp ở (vài trăm Megaherz) Trong khi
đó các ASIC có thể tốc độ cao hơn FPGA nhiều
FPGA hiệu quả cho các ứng dụng nhỏ bởi vì nó có chi phí thiết kế thấp Nhưng nếu sản xuất công nghiệp với số lượng lớn, thì ASIC lại có giá rẻ hơn nhiều
Trang 33Quá trình thiết kế FPGA đơn giản và thời gian ngắn hơn so với quá trình thiết kế ASIC, bởi vì không cần phải sắp xếp linh kiện, không cần các mặt mạ hoặc các quá trình sau-cuối (back-end processes)
ASIC có thể có các thiết kế xử lý hỗn hợp các tín hiệu, hoặc chỉ là các thiết
kế tương tự Nhưng không thể thiết kế ASIC sử dụng các chip FPGA
ASIC có thể có các thiết kế hoàn toàn cho các ứng dụng riêng và phức tạp, ví
dụ vi xử lý chẳng hạn, nhưng FPGA thì không thể
Bởi vì FPGA có thể được lập trình cấu hình lại vô số lần nên nó phù hợp cho các thiết kế mẫu cho ASIC Như vậy với FPGA ta có thể tự thiết kế cả mẫu CPU theo mong muốn
Các thiết kế ASIC phải tốn chi phí NRE (Non Recurring Engineering), đó là chi phí cho một lần nghiên cứu, thiết kế, và kiểm thử sản phẩm mới, trong khi đó thì các thiết kế FPGA lại không cần
Các công cụ được sử dụng cho thiết kế FPGA thường rẻ hơn so với các công
cụ thiết kế của ASIC
Một FPGA có thể được sử dụng cho các ứng dụng khác nhau, nhờ lập trình lại FPGA Nhưng với ASIC thì không thể
Trang 34Các FPGA dựa vào các bảng Look-up (LUTs) bên trong, trong khi các CPLD lại hình thành các hàm logic nhờ các mạch cổng sea-of-gates
Hầu hết các FPGA có các mạch logic mức cao, ví dụ, các bộ cộng, bộ nhân
và các bộ nhớ nhúng, và các khối logic thực hiện các bộ giải mã hoặc các hàm toán học, trong khi đó CLPD thì không
Bình thường, các FPGA đắt hơn so với các CPLD
Các trễ (Delays) trong các CLPD lớn hơn so với các trễ trong các FPGA
1.1.4.3 FPGA và vi điều khiển:
Vi điều khiển là hệ thống tính toán, có kiến trúc Havard bên trong với đầy đủ các khối chức năng của một máy tính nhỏ và tập lệnh máy riêng Trong khi đó FPGA là chip chưa định hình cấu trúc của một thiết bị thực hiện một chức năng cụ thể
Hoạt động của vi điều khiển phải được lập trình và phải cài đặt mã chương trình vào trong bộ nhớ code bên trong chip vi điều khiển Lập trình cho vi điều khiển là lập trình phần mềm bằng bất kỳ ngôn ngữ lập trình nào Chương trình không làm thay đổi cấu trúc bên trong của vi điều khiển Trong khi đó, để tạo FPGA thành một thiết bị theo yêu cầu ứng dụng riêng cần phải lập trình bằng một ngôn ngữ mô tả phần cứng Chương được dịch ra một file dạng bit hay chuỗi bit (BitStream) và được nạp vào trong FPGA cấu hình các liên kết các thành phần logic
đã có sẵn bên trong FPGA tạo ra một thiết bị thực hiện chức năng cụ thể Như vậy, lập trình FPGA làm thay đổi phần cứng trong FPGA Đó là lập trình phần cứng
Các FPGA được ứng dụn g trong các hệ thống nhúng, có thể kết hợp với các
vi điều khiển
Hình 1.15 Quan hệ của các công nghệ mạch tích hợp
ASIC, PLD PLD, FPGA
Microprocessors MEMORY
SOC
Trang 35Xét chung về công nghệ mạch tích hợp bán dẫn: bộ nhớ, các bộ vi xử lý, ASIC, PLD, FPGA, và SoC, ta có sơ đồ mối liên quan của chúng với nhau như mổ
tả ở hình 1.15
1.2 32-bit RISC lõi mềm Microblaze cho Xilinx FPGA
1.2.1 Kiến trúc Microblaze
Các bộ vi xử lý sẵn có để sử dụng trong các FPGA của Xilinx với các công
cụ phần mềm Xilinx EDK có thể được chia thành hai loại: các vi xử lý lõi-mềm (MicroBlaze) và vi xử lý lõi-cứng (PowerPC) Các vi xử lý lõi-mềm MicroBlaze được sử dụng trong hầu hết các họ Spartan-II, Spartan-3, Spartan-3E, và Virtex FPGA Các vi xử lý lõi-cứng nhúng là bộ xử lý IBM PowerPC 405, và cũng có trong Virtex-II Pro và Virtex-4 FX FPGA Chúng được sản xuất sẵn trong các chip,
vì vậy ở đây ta chỉ xét đến các vi xử lý lõi-mềm
Bộ xử lý MicroBlaze là bộ xử lý 32-bit kiến trúc RISC được tối ưu để thực hiện trong các Xilinx FPGA với các bus lệnh và dữ liệu 32-bit riêng biệt chạy ở tốc
độ đầy đủ để thực hiện các chương trình và truy nhập dữ liệu từ bộ nhớ bên trong chip và từ bộ nhớ bên ngoài chip đồng thời Xương sống của kiến trúc MicroBlaze
là đường ống 3-giai đoạn một đường ra với tệp các thanh ghi chung 32-bit, ALU, đơn vị dịch, và hai mức ngắt (hình 1.16)
Hình 1.16 Sơ đồ khối của bảng phát triển Spartan 3E 500K
Kiến trúc cơ bản này của MỉcroBlaze có thể sau đó được cấu hình thêm
Trang 36những khối chức năng khác cho phù hợp với ứng dụng nhứng như: bộ dịch (barrel shifter), bộ chia (divider), bộ nhân (multiplier), đơn vị dấu phẩy động (FPU), các cache lệnh và dữ liệu (8KB I-cache, 8KB D-cache), xử lý ngoại lệ, logic gỡ rối (debug logic), giao tiếp liên kết đơn công nhanh FSL (Fast Simplex Link),v.v… Tính linh hoạt này cho phép người sử dụng cân bằng hiệu năng yêu cầu của ứng dụng đối lại với chi phí vùng logic của bộ xử lý
Vì MicroBlaze là bộ xử lý lõi-mềm, nên bất kỳ đặc tính nào không được sử dụng sẽ không được thực hiện và sẽ không sẽ không lấy bất kỳ tài nguyên nào bên trong FPGA.Vì MicroBlaze có mô hình kiến trúc Havard, trong đó bus dữ liệu và các cổng I/O (các cổng I/O là một phần trong bộ nhớ) được tách riêng với bus của lệnh, nên có thể tham chiếu đồng thời lệnh và dữ liệu Đường ống của MicroBlaze
là đường ống song song, được chia thành 3 giai đoạn: đọc lệnh (Fetch), Giải mã lệnh (Decode), và thực hiện lệnh (Execute) Mỗi giai đoạn tích cực trong một chu
kỳ nhịp đồng hồ nên 3 lệnh có thể thực hiện đồng thời Nhờ có bộ đệm lệnh (Instruction Buffer) nên giảm trễ chờ đợi giữa các lệnh vì các lệnh được đọc từ bộ nhớ được liên tục theo tiến trình thực hiện các lệnh trước (đó là đặc tính của đường ống lệnh, tương tự như dây truyền sản xuất)
1.2.2 Đặc điểm của Microblaze
Hình 1.17 Sơ đồ khối của bộ xử lý lõi-mềm MicroBlaze bên trong FPGA
Trang 37Hình 1.18 Kết nối bộ xử lý lõi-mềm MicroBlaze trong/ngoài FPGA
Bus LMB đảm bảo một chu kỳ nhịp đồng hồ truy nhập đến block RAM hai cổng (BRAM) trong FPGA Bus OPB đảm bảo kết nối với bộ nhớ và ngoại vi cả ở bên trong chip và bên ngoài chip (các hình 1.17, 1.18) XCL dùng cho kết nối với các bộ điều khiển bộ nhớ (MCH OPB DDR)
Khối OPB Ethernet được cấu hình cho 10 Mb/s hoặc 100 Mb/s phụ thuộc vào mạng ghép nối
Khối điều khiển bộ nhớ ngoài OPB EMC (External Memory Controller) kết nối với Intel StrataFlash PROM, sử dụng để lưu trữ Bitstream của cấu hình phần cứng và ứng dụng khởi động nạp (Bootloader)
MCH OPB DDR: Multi-CHannel (MCH) On-chip Peripheral Bus (OPB) Double Data Rate (DDR) Synchronous DRAM (SDRAM) controller: được cấu hình
để sử dụng DDR SDRAM clock gấp 2 lần tần số của OPB clock DDR clock được đặt để chạy ở 100 MHz và OPB clock được đặt chạy ở 50 MHz MCH OPB DDR cũng đảm bảo các giao tiếp kênh có thể kết nối với các cổng của bộ nhớ cache của microblaze và cấu hình để sử dụng giao thức XCL (Xilinx CacheLink với Cache Khối RAM (block RAM) bên trong microblaze được kết nối qua OPB
Kích thước của cacheline, tính theo số từ 32-bit, được thiết lập cho tất cả các kênh XCL Kênh MCH0 được nối với instruction cache (I-cache) của microblaze, Kênh MCH1 được nối với data cache (D-cache) của microblaze Giao tiếp XCL
Trang 38được sử dụng cho cả instruction cache và data cache trong vận chuyển cacheline
Để microblaze tạo cache trên XCL, các kết nối cần phải giữa microblaze và MCH OPB DDR SDRAM Các kết nối này có thể xem trong file system.mhs
Khối OPB UART Lite được cấu hình để sử dụng các ngắt Nó được thiết lập cổng kết nối DTE tuần tự tốc độ 115200 b/s Nó yêu cầu sử dụng cáp Null modem
MicroBlaze hỗ trợ đến 8 cổng liên kết đơn cổng nhanh FSL, mỗi cổng FSL với một master và một slave FSL đơn giản cho kết nối điểm-điểm
Các lệnh của MicroBlaze đều rộng 32 bit và được xác định như là loại A hoặc loại B Các lệnh loại A có 2 thanh ghi toán hạng nguồn và 1 thanh ghi toán hạng đích Các lệnh loại B có thanh ghi toán hạng nguồn và một toán hạng tức thời 16-bit Có các nhóm lệnh: số học, logic, rẽ nhánh, Load/store, và đặc biệt
MicroBlaze là loại xử lý Load/Store, nghĩa là nó chỉ có thể load/store dữ liệu từ/đến bộ nhớ Nó không thể thực hiện bất kỳ thao tác nào trên dữ liệu trực tiếp trong bộ nhớ, mà phải lấy dữ liệu vào trong MicroBlaze để thực hiện
Các giao tiếp dữ liệu cũng rộng 32 bit và sử dụng Big-Endian, dạng đảo bit
để biểu diễn dữ liệu, nghĩa là Bit 0 là MSB và Bit 31 là LSB MicroBlaze sử dụng
từ 32-bit, nửa từ 16-bit, và cho phép truy nhập theo byte vào bộ nhớ
Bảng 1.2: Bản đồ sắp xếp địa chỉ của hệ thống MicroBlaze
Ngăn xếp trong MicroBlaze bắt đầu từ vùng nhớ địa chỉ cao và lớn dần xuống vùng nhớ địa chỉ thấp khi các khoản dữ liệu được đẩy vào ngăn xếp nhờ lệnh Call Các khoản dữ liệu ở vùng nhớ địa chỉ thấp được pop khỏi ngẵn xếp trước tiên
Trang 39Các khối của bộ nhớ chính nằm trong khoảng địa chỉ 0x22000000 – 0x2200FFFF
Thanh ghi địa chỉ ngoại lệ EAR (Exception Address Register) lưu địa chỉ đầy
đủ của load/store đã gây ra một ngoại lệ Thanh ghi trạng thái ngoại lệ ESR (Exception Status Register) chỉ ra loại ngoại lệ nào đã xẩy ra Thanh ghi trạng thái dấu phẩy động FSR (Floating-Point Status Register) chỉ ra thao tác bị lỗi, lỗi chia cho 0, tràn, tràn dưới và lỗi toán hạng không được bình thường hóa của lệnh dấu phẩy động
MicroBlaze cũng hỗ trợ xóa, ngắt, ngoại lệ của người dùng, break và các ngoại lệ của phần cứng Đối với các ngắt, chỉ một nguồn ngắt từ bên ngoài (nối với cổng vào ngắt) Nếu cần phải có nhiều ngắt, thì phải sử dụng bộ điều khiển ngắt Có một bộ điều khiển ngắt sẵn có cho sử dụng với các công cụ phần mềm Xilinx EDK
Bộ xử lý sẽ phản ứng với các ngắt nếu bit cho phép ngắt IE (interrupt enable) trong MSR được thiết lập bằng 1 Một ngắt lệnh đang thực hiện sẽ xẩy ra, lệnh trong giai đoạn giải mã được thay thế bằng một rẽ nhánh đến interrupt vector (địa chỉ 0x10) Địa chỉ trở về sau khi thực hiện xong ngắt (địa chỉ của lệnh trong giai đoạn giải mã
bị ngắt) được tự động nạp vào thanh ghi chung R14 Ngoài ra, bộ xử lý cũng xóa bit
IE trong MSR để cấm các ngắt tiếp theo Bit IE được tự động thiết lập bằng 1 trở lại khi thực hiện lệnh RTID
Chương trình điều khiển MicroBlaze phải được viết ở ngôn ngữ C/C++ Bởi
vì sử dụng C/C++ là phương pháp ưa thích của hầu hết người dùng và nó là khuôn dạng mà các công cụ phần mềm phát triển Xilinx EDK mong muốn Các công cụ Xilinx EDK đã xây dựng trình biên dịch C/C++ để tạo mã máy cần thiết cho MicroBlaze
1.2.3 Tập lệnh RISC của Microblaze
Tập lệnh rút gọn RISC của Microblaze sử dụng hai định dạng lệnh 32-bit: Định dạng loại A: được các lệnh register-register sử dụng Nó gồm có trường opcode, một thanh ghi toán hạng đích và hai thanh ghi nguồn
Định dạng loại B: được các lệnh register-immediate sử dụng Nó gồm có
Trang 40trường opcode, một thanh ghi đích và một thanh ghi nguồn, và một giá trị nguồn trực tiếp 16-bit
Microblaze sử dụng kiến trúc Load/Store của RISC, trong đó, có thể truy cập đến bộ nhớ theo ba kích thước dữ liệu: Byte (8 bits), Halfword (16 bits), và Word (32 bits) Hạt nhân của kiến trúc RISC của Microblaze dựa vào tập thanh ghi 32-bit LUT RAM với các lệnh truy cập riêng bộ nhớ dữ liệu và bộ nhớ lệnh Microblaze
hỗ trợ kết nối các khối RAM (BRAM) cả trong chip và ngoài chip
Cũng như các vi xử lý kiến trúc RISC khác, Microblaze có kiến trúc đường ống lệnh (pipeline architecture) với ba giai đoạn thực hiện lệnh: đọc lệnh IF (Instruction Fetch), giải mã lệnh ID (Instruction Decode), và thực hiện lệnh IE (Instruction Execution) (hình 1.19) Các quá trình đẩy dữ liệu (data forwarding), trễ chờ trong đường ống (pipeline stall) và thực hiện các rẽ nhánh (branches) được thực hiện tự động trong phần cứng
Hình 1.19 Đường ống thực hiện lệnh của Microblaze
Lõi xử lý mềm Microblaze được đưa vào Kit phát triển hệ nhúng của Xilinx EDK (Embedded Development Kit) và được cung cấp theo thỏa thuận bản quyền của phí nhà cung cấp Xilinx Core Bản quyền này cho phép người dùng sử dụng Microblaze trong các thiết kế hạn chế trên Xilinx FPGA
1.2.4 Hệ thống bus của Xilinx MicroBlaze
Xilinx hỗ trợ các chuẩn bus PLB (PLBv4.6) và AXI cho các thiết kế hệ thống dựa trên các công nghệ FPGA với lõi mềm MicroBlaze và ARM
AXI:
AXI là một phần của AMBA (Advanced Microcontroller Bus Architecture), một họ bus vi điều khiển của ARM được giới thiệu lần đầu năm 1996