Nhan đề : Thiết kế system on chip (SoC) và thực hiện bằng FPGA Tác giả : Trần Văn Tiến Người hướng dẫn: Nguyễn Kim Khánh Từ khoá : Công nghệ FPGA Năm xuất bản : 2013 Nhà xuất bản : Trường Đại học Bách khoa Hà Nội Tóm tắt : Trình bày tổng quan về system on chip. Tổng quan về công nghệ FPGA. Thiết kế system on chip và thực hiện bằng FPGA. Kết quả và đánh giá.
Trang 1LUẬN VĂN THẠC SĨ KỸ THUẬT
KỸ THUẬT MÁY TÍNH VÀ TRUYỀN THÔNG
Trang 2
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
-
Trần Văn Tiến
THIẾT KẾ SYSTEM ON CHIP (SoC) VÀ THỰC HIỆN BẰNG FPGA
Chuyên ng ành : Kỹ thuật máy tính và truyền thông
LUẬN VĂN THẠC SĨ KỸ THUẬT
KỸ THUẬT MÁY TÍNH VÀ TRUYỀN THÔNG
NGƯỜI HƯỚNG DẪN KHOA HỌC :
TS NGUYỄN KIM KHÁNH
Hà Nội – 2013
Trang 31
L ỜI CAM ĐOAN
Tôi xin cam đoan đề tài nghiên cứu của tôi hoàn toàn do tôi tự làm dưới sự
hướng dẫn của thầy giáo Ts Nguyễn Kim Khánh, Viện công nghệ thông tin và truyền
thông - Đại học Bách Khoa Hà Nội Các số liệu, kết quả trình bày trong luận văn là
hoàn toàn trung thực và chưa từng được công bố trong bất cứ công trình nào
Các tài liệu tham khảo sử dụng trong luận văn đều được dẫn nguồn (có bảng
thống kê các tài liệu tham khảo) hoặc được sự đồng ý trực tiếp của tác giả
Nếu xảy ra bất cứ điều không đúng như những lời cam đoan trên, tôi xin chịu
hoàn toàn trách nhiệm trước Viện và Nhà trường
Hà N ội, ngày 15 tháng 03 năm 2013 Tác gi ả
Tr ần Văn Tiến
Trang 42
Để hoàn thành luận văn tốt nghiệp này, tôi xin gửi lời cảm ơn chân thành nhất
t ới tập thể các thầy giáo, cô giáo trường Đại học Bách Khoa Hà Nội nói chung, viện Công ngh ệ thông tin và Truyền thông, bộ môn Kĩ thuật máy tính, đã đào tạo cho tôi
nh ững kiến thức, những kinh nghiệm qúy báu trong suốt thời gian học tập và rèn luyện
Tôi xin chân thành c ảm ơn sự giúp đỡ của thầy Nguyễn Kim Khánh Trong quá trình th ực hiện đề tài thầy đã luôn tận tình hướng dẫn, gợi cho tôi nhiều ý tưởng để hoàn thành lu ận văn một cách tốt nhất
Cu ối cùng là lời cảm ơn chân thành nhất tới gia đình, bạn bè đã động viên, góp
ý và t ạo mọi điều kiên tốt nhất để tôi có thể hoàn thành luận văn tốt nghiệp này
Tuy nhiên, do th ời gian và trình độ có hạn nên đồ án này chắc chắn không tránh
kh ỏi những thiếu sót, tôi rất mong được sự đóng góp ý kiến của các thầy, các cô và toàn th ể các bạn Tôi xin chân thành cảm ơn
Hà N ội, ngày 15 tháng 3 năm 2013
Sinh viên:
Tr ần Văn Tiến
Trang 53
M ỤC LỤC
LỜI CAM ĐOAN 1
LỜI CẢM ƠN 2
MỤC LỤC 3
DANH MỤC TỪ VIẾT TẮT, THUẬT NGỮ 6
DANH MỤC CÁC HÌNH 7
DANH MỤC CÁC BẢNG 9
MỞ ĐẦU 10
1 Lý do chọn đề tài 10
2 Lịch sử nghiên cứu 10
3 Mục đích, đối tượng và phạm vi nghiên cứu 10
4 Tóm tắt các luận điểm cơ bản và đóng góp của đồ án 10
5 Phương pháp nghiên cứu 11
NỘI DUNG 12
CHƯƠNG 1 TỔNG QUAN VỀ SYSTEM ON CHIP (SoC) 12
1.1 Cơ sở lý thuyết 12
1.1.1 Sự ra đời của SOC 12
1.1.2 SoC và đặc điểm 14
1.1.3 Công cụ lựa chọn 16
1.2 Quy trình thiết kế System on Chip 17
1.2.1 Giai đoạn thiết kế Front end 18
Trang 64
1.2.2 Giai đoạn thiết kế Back end 21
CHƯƠNG 2 TỔNG QUAN VỀ CÔNG NGHỆ FPGA 22
2.1 Giới thiệu về FPGA 22
2.2 Kiến trúc chung của một FPGA 23
1.2.1 Khối logic FPGA 23
1.2.2 Hệ thống mạch liên kết 24
1.2.3 Các phần tử tích hợp sẵn 25
2.3 Ngôn ngữ phần cứng HDL 25
1.3.1 Các ưu điểm của VHDL 26
1.3.2 Cấu trúc một mô hình hệ thống sử dụng ngôn ngữ VHDL 27
CHƯƠNG 3 THIẾT KẾ SYSTEM ON CHIP VÀ THỰC HIỆN BẰNG FPGA 34
3.1 Thiết kế bộ vi xử lý 34
3.1.1 Cấu trúc tổng quát 34
3.1.2 Sơ đồ khối thiết kế 35
3.1.3 Quá trình thiết kế CPU 36
3.1.4 Thực hiện code mổ phỏng trên FPGA 41
3.2 Thiết kế các module nối ghép vào ra 43
3.2.1 Thiết kế module IP UART 43
3.2.2 Thiết kế module IP I2C 53
3.3 Thực hiện hệ thống SoC FPGA dựa trên Vi xử lý 32-bit Nios II 66
3.3.1 Tạo hệ thống NIOS II bằng SOPC Builder 66
3.3.2 Điều khiển Nios sử dụng ngôn ngữ C 73
CHƯƠNG 4 KẾT QUẢ VÀ ĐÁNH GIÁ 76
4.1 Các kết quả đạt được 76
Trang 75
4.2 Đánh giá và định hướng 76
KẾT LUẬN 77 TÀI LIỆU THAM KHẢO 78
Trang 86
DANH M ỤC TỪ VIẾT TẮT, THUẬT NGỮ
Trang 97
Hình 1.1 Sự gia tăng mật độ transitor 12
Hình 1.2 Giảm giá thành sản phẩm 13
Hình 1.3 Mô hình cơ bản SoC 14
Hình 1.4 Quy trình thiết kế SoC 17
Hình 1.5 RTL Coding 18
Hình 1.6 Dynamic Verification 19
Hình 1.7 Synthesis and Scan Insertion 20
Hình 1.8 Formal Verification 21
Hình 2.1 Cấu trúc tổng thể của một FPGA 23
Hình 2.2 Khối Logic 24
Hình 2.3 Bộ bán tổng 27
Hình 2.4 Sơ đồ thiết kế VHDL 32
Hình 2.5 Sơ đồ tổng quát của một chương trình thử (Testbench) 33
Hình 3.1 Sơ đồ khối bộ vi xử lý 35
Hình 3.2 Khối Datapath 36
Hình 3.3 Khối instruction_fetch 38
Hình 3.4 Sơ đồ máy trạng thái FSM cho bộ vi xử lý 40
Hình 3.5 Sơ đồ thiết kế hoàn chỉnh bộ vi xử lý 41
Hình 3.6 Cấu trúc file trên quatus 41
Hình 3.7 Kết quả mô phỏng 43
Hình 3.8 Sơ đồ khối Uart 46
Hình 3.9 Sơ đồ tín hiệu kết nối giữa các module 47
Hình 3.10 Interfaces module baud_gen.v 48
Hình 3.11 Interface module uart_tx.v 49
Hình 3.12 Interface module uart_rx.v 50
Hình 3.13 Interface module fifo.v 51
Trang 108
Hình 3.14 Mô phỏng dạng sóng module top.v 53
Hinh 3.15 Truyền nhận dữ liệu UART 53
Hình 3.16 I2C và các thiết bị kết nối 54
Hình 3.17 Bit transfer on the I2C bus 56
Hình 3.18 Sơ đồ khối I2C 58
Hình 3.19 Khối Top_Control 59
Hình 3.20 Khối Byte control 62
Hình 3.20 Trạng thái FSM khối bit control 63
Hình 3.21 Kết quả mô phỏng I2C 65
Hình 3.22 Kết quả mô phỏng I2C trên Modelsim 66
Hình 3.23 SoPC Builder 67
Hình 3.24 Chọn hệ SoPC dựa trên ngôn ngữ Verilog 68
Hình 3.25 Chọn Loại NIOS II 69
Hình 3.26 Tạo bộ nhớ hệ thống 71
Hình 3.27 JTAG UART 71
Hình 3.28 Giao diện phát triển Nios II IDE 73
Hình 3.29 Tạo example hello_world_small 74
Hình 3.30 Nạp chương trình cho Nios II 75
Hình 3.31 Example Hello world small 75
Trang 119
Bảng 1.1 Các công cụ phát triển 16
Bảng 3.1 Tập lệnh bộ vi xử lý 39
Bảng 3.1 Module baudgen.v Interfaces Description 48
Bảng 3.2 Module uart_tx.v Interfaces Description 50
Bảng 3.3 Module uart_rx.v Interfaces Description 51
Bảng 3.4 Module fifo.v Interfaces Description 52
Bảng 3.5 UART top module 53
Bảng 3.6 Bảng các thanh ghi 59
Bảng 3.8 Thanh ghi điều lệnh 60
Bảng 3.9 Thanh ghi phát 61
Bảng 3.10 Thanh ghi nhận 61
Bảng 3.11 Thanh ghi trạng thái 61
Trang 1210
1 Lý do ch ọn đề tài
Hệ thống trên chip SoC (System on Chip) là xu hướng phát triển mới cho các
sản phẩm điện tử ngày nay Mục đích là đưa tất cả các module với các chức năng khác nhau lên cùng một chip sử dụng công nghệ FPGA Và ngày càng có nhiều công ty chuyên thiết kế các module riêng biệt cho phép người thiết kế hệ thống lựa chọn các module phù hợp với yêu cầu, tích hợp vào hệ thống và xây dựng ứng dựng cho sản
phẩm mà không phải xây dựng chi tiết từ đầu từng module riêng lẻ Từ những xu hướng phát trển thực tế, do vậy tôi chọn đề tài : Thiết kế SoC (System on Chip) và thực
hiện bằng FPGA để nghiên cứu tìm hiểu cách thức thực hiện xây dựng thiết kế các IP core, tìm hiểu công nghệ FPGA, xây dựng hệ thống SoC Từ đó có được tài liệu để các
bạn học viên tiếp tục nghiên cứu phát triển hệ thống System on Chip
Luận văn được thực hiện dưới sự hướng dẫn của thầy giáo Ts Nguyễn Kim Khánh, Viện Công nghệ thông và Truyền thông-Đại học Bách Khoa Hà Nội Luận văn được hướng dẫn, xem xét điều chỉnh, báo cáo theo lịch đều đặn 2 tuần/ lần với giáo viên hướng dẫn Luận văn được bắt đầu nghiên cứu từ tháng 10/2012 và hoàn thành vào tháng 03/2013
Tìm hiểu được quy trình xây dựng và thiết kế SoC Tìm hiểu công nghệ FPGA Tìm hiểu các IP core trong hệ thống SoC Thiết kế được các IP Core thiết yếu của hệ
thống SoC : Bộ xử lý, bộ nhớ, các modun nối ghép vào ra Thực hiện hệ thống SoC FPGA dựa trên Vi xử lý 32-bit Nios II
Mục tiêu chính của luận văn là nghiên cứu hệ thống System on Chip, quy trình thiết kế System on Chip, tìm hiểu công nghệ FPGA Xây dựng các khối IP Core của hệ
Trang 1311
thống System on Chip từ đó có cái nhìn tổng quan để xây dựng hoàn thiện hệ thống SoC
Bố cục của luận văn tốt nghiệp
Chương 1: Tổng quan về System on Chip
Trình bày tổng quan về System on Chip, các quy trình thiết kế và hướng đi của
luận văn trong xây dựng thiết kế hệ thống SoC
Chương 2 : Công nghệ FPGA
Trình bày công nghệ FPGA, kiến trúc FPGA và ngôn ngữ sử dụng cho FPGA Chương 3 : Thiết kế System on Chip và thực hiện bằng FPGA
Thiết kế bộ vi xử lý, bộ nhớ
Thiết kế các module nối ghép vào ra
Thực hiện trên FPGA
Đánh giá các kết quả đạt được
Luận văn được nghiên cứu dựa trên cơ sở lý thuyết từ các tài liệu về SoC, các tài liệu về bộ vi xử lý nói của các tác giả trong và ngoài nước, các website và bài báo
cần thiết để phát triển luận văn Các kết quả của luận văn được thực hiện trên bộ phần
mềm của Altera : Quatus, Modelsim và NiosII
Trang 1412
1.1 Cơ sở lý thuyết
[2] Trong 40 năm qua đã có sự tiến bộ kinh ngạc trong kĩ thuật silicon và kết
quả là sự tăng nhạnh mật độ và hiệu năng của transitor
Hình 1.1 Sự gia tăng mật độ transitor
Biểu đồ cho thấy sự tiến bộ không ngừng trong việc cải tiến mật độ transistor và đồng thời với đó là sự giảm về giá thành thiết bị
Trang 1513
Hình 1.2 Giảm giá thành sản phẩm [2] Những công nghệ sản xuất tiên tiến có thể sản xuất các chíp ngày nay có thể
chứa tới 100 triệu transitor, kích thước của transitor được đo bằng nanometer, và xấp xỉ
18 tháng số lượng transitor trên mỗi chip lại tăng lên gấp đôi (Moore’s law) Và kết
quả là rất nhiều các Component (module) bây giờ được tích hợp trên cùng một Printed Circuit Board do vậy tạo ra sự phát triển lĩnh vực thiết kế SOC
Trang 1614
Hình 1.3 Mô hình cơ bản SoC Hình 1.3 minh họa một số những yếu tố cơ bản của một hệ thống SoC Chúng bao gồm
một số lượng đa dạng các xử lý để kết nối đến một hoặc nhiều thành phần bộ nhớ cùng
với một dãy các cấu hình logic Thường xuyên, SoC cũng có mạch tương tự để quản lý
dữ liệu cảm biến và chuyển đổi tương tự đến kỹ thuật số, hoặc để hỗ trợ truyền dữ liệu không dây.[2]
Ví dụ, một SoC cho điện thoại thông minh sẽ cần phải hỗ trợ, thêm vào đầu vào âm thanh và khả năng đầu ra cho một điện thoại truyền thống, chức năng truy cập internet
và phương tiện truyền thông video, xử lý tài liệu, và giải trí đa phương tiện
chẳng hạn như các trò chơi và phim ảnh
Trang 1715
- SoC là một hệ thống bao gồm Chip + Software + Integration
o SoC chip bao gồm Embedded Processor, ASIC Logics và các mạch tương tự
o SoC software bao gồm OS, compiler, simulator, firmware, driver, protocol stackIntegrSted development environment (debugger, linker, ICE)Application interface (C/C++, assembly)
o SoC integration bao gồm giải pháp tổng thể cho hệ thống, các kỹ thuật hỗ trợ
và đặc tả của nhà sản xuất
- Điểm điểm :
o Quá trình phát triển SoC nhanh hơn so với phát triển ASIC
o Có một Bus kết nối chuẩn (SoC interconnection) trong hệ thống và tất cả các Component giao tiếp với nhau cần được kết nối tới hệ thống Bus này thông qua các Interface Một số hệ thống Bus :
AMBA (Advanced Microcontroller Bus Architecture)
APB (Advanced Peripheral Bus)
ASB (Advanced System Bus)
AHB (Advanced High Performance Bus)
o Các Component (hay còn gọi là các Core) này có đặc điểm là khả năng sử
dụng lại ,được phát triển bởi nhà sản xuất, các IP vendor…
Soft Core : linh động, tính tái sử dụng, dễ tích hợp
Firm Core : mang đặc tính của cả hai SoftCore và HardCore
Hard Core : Hiệu suất ,tốc độ hoạt động cao
- Ưu điểm :
o Tiêu thụ ít năng lượng
o Tốc độ hoạt động được cải thiện
o Kích thước mạch nhỏ
o Giá thành rẻ trên mỗi transitor được tích hợp
o Độ tin cậy cao
Trang 1816
- Nhược điểm :
o Mở rộng độ phức tạp của hệ thống
o Mở rộng yêu cầu kiểm tra (verification) cho toàn bộ hệ thống
- Ứng dụng của SoC trong các lĩnh vực :
o Xử lý tín hiệu tiếng nói
o Xử lý tín hiệu âm thanh và hình ảnh
o Công nghệ thông tin:
PC interface (USB, PCI,PCI-Express, IDE, etc) Computer peripheries (printer control, LCD monitor controller, DVD controller,.etc)
o Trao đổi dữ liệu :
Wireline Communication: 10/100 Based-T, xDSL, Gigabit Ethernet, Etc
Wireless communication: BlueTooth, WLAN, 2G/3G/4G, WiMax, UWB, …,etc
dụng NIOS II IDE
Trang 19Check Timing
Check Functions
Floorplanning
Place and Route
post-layout STA
Functions with Timing
Tape-out Fail
Pass
Hình 1.4 Quy trình thiết kế SoC
Trang 2018
Giai đoạn thiết kế Front End thực hiện việc xây dựng thiết kế về mặt luận lý như
viết mã, mô phỏng kiểm tra, thiết đặt các ràng buộc, phân tích thời gian v.v [2][6][8]
Define Architecture
Từ bảng mô tả chi tiết thông số kỹ thuật của thiết kế, người thiết kế sẽ phác họa
sơ đồ khối cho thiết kế bao gồm nhiều khối Logic kết nối với nhau, mỗi khối Logic
thực hiện một chức năng nhất định trong thiết kế
RTL Coding
Sau khi có sơ đồ khối của thiết kế với các khối Logic kết nối với nhau, người thiết kế sẽ tiến hành viết mã RTL cho từng khối Logic đó Viết mã RTL là giai đoạn quan trọng, viết mã RTL ngoài việc đảm bảo đúng chức năng Logic còn phải thỏa mãn
phần cứng yêu cầu trong thiết kế (Flip Flop, Latch, Mux …)
Hình 1.5 RTL Coding
Dynamic Verification
Sau giai đoạn viết mã RTL thiết kế sẽ được mô phỏng động bằng cách đưa các tín hiệu vào và nhận tín hiệu ra sau khi mô phỏng Vì chức năng thiết kế là hoàn toàn
Trang 21Chương trình viết để đưa tín hiệu ngõ vào và nhận tín hiệu ngõ ra mong muốn được gọi là Testbench Testbench cũng được viết bằng ngôn ngữ mô tả phần cứng để giao tiếp với thiết kế cần mô phỏng
Hình 1.6 Dynamic Verification
Synthesis and Scan Insertion
Sau khi đã đảm bảo về chức năng của thiết kế, thiết kế sẽ được chuyển qua giai đoạn Synthesis và Scan Insertion
Synthesis là quá trình dùng phần mềm để biên dịch mã RTL sang Gate-level Netlist bằng cách kết hợp với các ràng buộc về điều kiện môi trường, ràng buộc thời gian để tương tác với phần mềm nhằm mục đích chọn ra các Cell trong thư viện thỏa các điều kiện ràng buộc của thiết kế Trong quá trình này phần mềm sẽ cố gắng tối ưu
để thỏa các điều kiện ràng buộc Phần mềm của Synopsys thường được sử dụng là Design Compiler (viết tắt là DC)
Những thiết kế ngày nay bao gồm cả thiết kế cho việc kiểm tra lỗi Silicon của quá trình sản xuất, kỹ thuật này gọi là Design For Test (DFT) Một trong những
Trang 2220
phương pháp của kỹ thuật DFT là Scan Insertion, phương pháp này sẽ tạo nên trong thiết kế những cấu trúc dùng riêng cho việc kiểm tra lỗi Silicon
Hình 1.7 Synthesis and Scan Insertion
STA (Static Timing Analysis)
Thiết kế sau khi được Synthesis phải đảm bảo đúng về mặt chức năng, thỏa mãn các thông số vật lý và phải hoạt động ở một tốc độ nhất định, đây chính là tốc độ yêu
cầu của thiết kế
STA là giai đoạn phân tích về mặt thời gian của thiết kế sau khi Synthesis, phần
mềm sử dụng là PrimeTime cho phép phân tích độ trì hoãn qua các đường truyền tín
hiệu trong thiết kế Kết quả phân tích sẽ là các báo cáo, người thiết kế dựa vào các
bảng báo cáo này để xem tốc độ hoạt động của thiết kế có đạt yêu cầu hay không Trong thực tế quá trình STA được lặp đi lặp lại nhiều lần với Synthesis cho đến khi các yêu cầu về thời gian của thiết kế được thỏa mãn
STA gồm hai giai đoạn: layout STA và post-layout STA Giai đoạn layout STA đảm bảo thiết kế thỏa mãn các yêu cầu về thời gian sau quá trình Synthesis Giai đoạn post-layout STA đảm bảo thiết kế vẫn thỏa về thời gian sau khi Back End thiết đặt các giá trị thực về R, C của các Cell và các dây nối
pre-Formal Verification
Formal Verification là giai đoạn nhằm đảm bảo tính chính xác về mặt chức năng
của thiết kế, không xem xét đến thông số định thời và thông số vật lý của thiết kế Không giống như Dynamic Verification, Formal Verification không đưa các tín hiệu cụ
thể vào để kiểm tra mà thực hiện các phương pháp toán học để so sánh nhằm đảm bảo
Trang 2321
Gate-level Netlist của thiết kế sau khi Synthesis vẫn đảm bảo đúng chức năng so với
mã RTL ban đầu
Nếu kết quả sau giai đoạn Formal Verification vẫn đảm bảo đúng chức năng so
với mã RTL ban đầu thì chuyển sang giai đoạn thiết kế Back End Ngược lại thì kiểm
tra lại quá trình Synthesis
Hình 1.8 Formal Verification
Floorplanning
Floorplanning là quá trình sắp xếp các khối trong vùng die hay bên trong các
khối khác và giữa chúng phải có định nghĩa các vùng dùng để đi dây
Quá trình Floorplanning có ảnh hưởng rất lớn đến hiệu suất và định thời của mạch,
nhất là đối với những thiết kế phức tạp
Chất lượng Floorplanning ảnh hưởng đáng kể đến chất lượng thiết kế của chúng ta
Place and Route
Place and Route là quá trình đặt các Cell và kết nối dây dựa trên kết nối về mặt
Logic giữa các Cell trong Gate-level Netlist Sau khi hoàn tất việc đặt các Cell và kết
nối dây sẽ tiến hành giai đoạn post-layout STA và post-layout simulation để đảm bảo
Netlist với các giá trị thực về R, C của các Cell và dây nối vẫn thỏa chức năng và thời
gian Nếu không có lỗi, xuất dữ liệu ra dưới dạng file gds2 Nếu có lỗi, kiểm tra lại việc
đặt các Cell và kết nối dây
Tape-out
Kiểm tra lại tất cả các báo cáo sau quá trình Place and Route trước khi đưa đi sản xuất
Trang 2422
CHƯƠNG 2 TỔNG QUAN VỀ CÔNG NGHỆ FPGA
[1][4] FPGA là viết tắt của "Field Programmable Gate Array", là vi mạch dùng
cấu trúc mảng phần tử logic mà người dùng có thể lập trình được, có thể thực hiện các tính năng logic thông qua máy tính của mình với giá rẻ, và có thể xóa đi viết lại nhiều
lần Xilinx là công ty đầu tiên bán ra FPGA và luôn chiếm thị phần lớn nhất Ngoài ra còn có Alterna, Lattice, Actel, QuickLogic Nhiều nhà sản xuất hiện đang cung cấp rất nhiều cấu trúc và phương pháp xử lý khác nhau Vì vậy, việc chọn một cấu trúc và một phương pháp xử lý để có thể đáp ứng được các yêu cầu về chức năng và độ ổn định, đối với một hệ thống trong thực tế là vấn đề mang tính quyết định Thiết bị logic lập trình được được phát minh lần đầu vào cuối thập kỷ 1970 và ngay lập tức đã trở lên
phổ biến trong ngành công nghiệp bán dẫn Ngoài khả năng lập trình đa dạng, công nghệ này còn có thời gian sản xuất nhỏ nên có khả năng cạnh tranh thương mại rất lớn Hơn nữa, việc thiết kế với nó khá dễ dàng và nó có khả năng lập trình lại nhiều lần
FPGA được thiết kế đầu tiêm bởi Ross Freeman, người sáng lập công ty Xilinx vào năm 1984, kiến trúc mới của FPGA cho phép tính hợp số lượng tương đối lớn các
phần tử bán dẫn vào 1 vi mạch so với kiến trúc trước đó là CPLD (Complex Programmable Logic Device).Điểm tương đồng của CPLD và FPGA là ở chỗ chúng đều bao gồm một số lượng tương đối lớn các phần tử logic khả trình Tuy nhiên mật độ tích hợp thì khác nhau, mật độ cổng logic của CPLD nằm trong khoảng từ vài nghìn đến hàng chục nghìn, trong khi với FPGA thì mật độ tích hợp cỡ hàng chục nghìn cho đến vài triệu
FPGA và CPLD có rất nhiều điểm khác biệt tuy nhiên kiến trúc là điểm khác
biệt chính giữa CPLD và FPGA CPLD có kiến trúc giới hạn ở một mức độ nào đó, nó bao gồm một hoặc nhiều dải logic “sum-of-products” khả trình và được cung cấp một
số tương đối nhỏ các thanh ghi được đồng bộ Điều này làm cho CPLD trở nên không được mềm dẻo lắm, nhưng bù lại trễ timing lại dễ dự đoán hơn và tốc độ kết nối logic
Trang 2523
cũng cao hơn FPGA Với FPGA, thì kiến trúc theo một cách khác trội hơn hẳn CPLD
bởi vì FPGA sử dụng các liên kết nối Điều này không những tạo cho nó mềm dẻo hơn
rất nhiều mà còn làm tăng độ phức tạp trong thết kế
Điểm khác biệt nữa giữa FPGA và CPLD là trong hầu hết chip FPGA đều có các hàm cấp cao (như bộ cộng và bộ nhân) và các bộ nhớ đã được nhúng vào Ngoài ra, trong các FPGA đời mới còn hỗ trợ đầy đủ hoặc một phần việc cấu hình lại trong hệ
thống, cho phép thay đổi thiết kế tức là có thể cập nhật hệ thống hoặc cấu hình động (dynamic reconfiguration) khi chúng đang ho ạt động như là một chức rất bình thường
Một vài FPGA còn có khả năng cấu hình lại cục bộ (partial re-configuration) tức là một
phần của thiết bị được cấu hình trong khi các phần còn lại vẫn đang hoạt động
Cấu trúc tổng thể của FPGA bao gồm:
- Các khối Logic
- Hệ thống liên kết mạch
- Các phần tử tích hợp sẵn
Hình 2.1 Cấu trúc tổng thể của một FPGA
1.2.1 Kh ối logic FPGA
FPGA chứa trong nó rất nhiều khối logic có thể tái cấu hình CLB (Configurable Logic Blocks) được liên kết với nhau thành bằng các liên kết khả trình (Programmable Interconnect) Các khối vào ra được phân bố xung quanh chip tạo thành các liên kết với
Trang 2624
bên ngoài Bên trong khối logic CLB có bảng LUT (Look-Up Table) và các phần tử
nhớ (FlipFlop hoặc bộ chốt) LUT (Look up table) là khối logic có thể thực hiện bất kì hàm logic nào từ 4 đầu vào, kêt quả của hàm này tùy vào mục đích mà gửi ra ngoài
khối logic trực tiếp hay thông qua phần tử nhớ flip-flop
Trong tài liệu hướng dẫn của các dòng FPGA của Xilinx còn sử dụng khái niệm SLICE, 1 Slice tạo thành từ gồm 4 khối logic, số lượng các Slices thay đổi từ vài nghìn đến vài chục nghìn tùy theo loại FPGA.Nếu nhìn cấu trúc tổng thể của mảng LUT thì ngoài 4 đầu vào kể trên còn hỗ trợ thêm 2 đầu vào bổ xung từ các khối logic phân bố trước và sau nó nâng tổng số đầu vào của LUT lên 6 chân Cấu trúc này là
nhằm tăng tốc các bộ số học logic
Hình 2.2 Khối Logic
1.2.2 H ệ thống mạch liên kết
Mạng liên kết trong FPGA được cấu thành từ các đường kết nối theo hai phương ngang
và đứng, tùy theo từng loại FPGA mà các đường kết nối được chia thành các nhóm khác nhau, ví dụ trong XC4000 của Xilinx có 3 loại kết nối: ngắn, dài và rất dài Các đường kết nối được nối với nhau thông qua các khối chuyển mạch lập trình được (programable switch), trong một khối chuyển mạch chứa một số lượng nút chuyển lập trình được đảm bảo cho các dạng liên kết phức tạp khác nhau
Trang 2725
1.2.3 Các ph ần tử tích hợp sẵn
Ngoài các khối logic tùy theo các loại FPGA khác nhau mà có các phần tử tích hợp thêm khác nhau, ví d ụ để thiết kế những ứng dụng SoC, trong dòng Virtex 4,5 của Xilinx có chứa nhân xử lý PowerPC, hay trong Atmel FPSLIC tích hợp nhân ARV…, hay cho những ứng dụng xử lý tín hiệu số DSP trong FPGA được tích hợp các DSP Slide là bộ nhân cộng tốc độ cao, thực hiện hàm A*B+C, ví dụ dòng Virtex của Xilinx chứa từ vài chục đến hàng trăm DSP slices với A, B, C 18-bit
Năm 1980 bộ Quốc phòng Mỹ (DOD) muốn thực hiện việc thiết kế mạch tự dẫn
chứng, muốn theo đuổi một hệ phương pháp thiết kế tổng quát và có thể sử dụng lại được với các công nghệ mới Rõ ràng đã có nhu cầu cho một ngôn ngữ lập trình chuẩn
để mô tả chức năng và cấu trúc của các mạch số đối với việc thiết kế vi mạch (IC) Sau
đó DOD đã tài trợ cho một dự án thuộc chương trình vi mạch có tốc độ rất cao VHSIC (very high speed integrated circuit) để tạo ra ngôn ngữ mô tả phần cứng chuẩn Kết quả
là dự án này đã tạo ra ngôn ngữ mô tả phần cứng VHSIC hay thường được gọi là
VHSIC) như hiện nay
Trang 2826
VHDL được xem như là sự kết hợp của các ngôn ngữ sau : ngôn ngữ tuần tự + ngôn ngữ đồng thời + netlist + định thời + mô phỏng Do đó cấu trúc VHDL cho phép
thể hiện cách thức thực hiện theo kiểu song song hay tuần tự của một hệ thống số có
hoặc không có timing Nó cũng cho phép vẽ mô hình một hệ thống bằng các liên kết
nối của các thành phần
VHDL được dành cho tổng hợp mạch (synthesis) cũng như mô phỏng mạch (simulation) Dù VHDL có thể mô phỏng một cách đầy đủ, nhưng không phải tất cả các cấu trúc đều được VHDL tổng hợp
1.3.1 Các ưu điểm của VHDL
- Chương trình trong VHDL có th ể được viết theo nhiều cấu trúc khác nhau: Ngẫu nhiên, tuần tự, nối chân, định thời chỉ rõ, ngôn ngữ sinh dạng sóng
- VHDL là một ngôn ngữ phân cấp, hệ thống số có thể được mô phỏng như một kết
nối các khối mà các khối này được thực hiện bởi các khối con khác nhỏ hơn
- Cung cấp một cách mềm dẻo các phương thức thiết kế trên xuống, dưới lên, hoặc tổ
hợp cả hai
- Cung cấp cả hai mode đồng bộ và không đồng bộ
- Linh hoạt trong kĩ thuật mô phỏng số nh ư sử dụng biểu đồ trạng thái, thuật toán, các hàm Boolean
- Có tính đại chúng: VHDL được phát triển dưới sự bảo trợ của chính phủ Mỹ và hiện nay là một tiêu chuẩn của IEEE VHDL được sự hỗ trợ của nhiều nhà sản xuất thiết bị cũng như nhiều nhà cung cấp công cụ thiết kế mô phỏng hệ thống
- VHDL cung cấp 3 kiểu mẫu viết khác nhau: structural, dataflow và behavioral
- Không giới hạn về độ lớn của thiết kế khi sử dụng ngôn ngữ
- VHDL hoàn toàn độc lập với công nghệ chế tạo phần cứng Một mô tả hệ thống dùng VHDL thiết kế ở mức cổng có thể được chuyển thành các bản tổng hợp mạch khác nhau tuỳ thuộc công nghệ chế tạo phần cứng mới ra đời nó có thể được áp dụng ngay cho các hệ thống đã thiết kế
Trang 2927
- Khả năng định nghĩa kiểu dữ liệu mới cung cấp một công cụ hữu hiệu cho thiết kế và
mô phỏng công nghệ mới với một mức rất cao
1.3.2 C ấu trúc một mô hình hệ thống sử dụng ngôn ngữ VHDL
VHDL là ngôn ngữ mô tả phần cứng do vậy mà nó có thể được sử dụng để làm
mô hình của một hệ thống số Hệ thống số có thể đơn giản là các cổng logic hay phức
tạp như một hệ thống hoàn chỉnh Các khối xây dựng n ên ngôn ngữ VHDL gọi là các
khối thiết kế Có 3 khối thiết kế chính:
- Khai báo Entity (Thực thể)
- Khai báo Architecture (Kiến trúc)
- Khai báo Configuration (Cấu hình)
- Đôi khi ta sử dụng các gói (Packages) và mô hình kiểm tra hoạt động của hệ
thống (Testbench)
1.3.2.1 Entity (Th ực thể)
Khai báo thực thể trong VHDL là phần định nghĩa các chỉ tiêu phía ngoài của
một phần tử hay một hệ thống Khai báo Entity là chỉ ra tên của Entity và liệt kê các
cổng vào/ra Các cổng là các (dây) tín hiệu mà qua đó entity giao tiếp với môi trường bên ngoài Ví dụ, một mạch bán tổng được chỉ ra ở hình 8 :
Hình 2.3 Bộ bán tổng Khai báo Entity như sau:
entity HALF-ADDER is
port ( A, B : in BIT;
SUM, CARRY : out BIT);
Trang 3028
end HATF-ADDER;
Bộ bán cộng này gồm có hai đầu vào là A và B; và hai đầu ra là SUM và CARRY, BIT
là một kiểu cấu trúc ngôn ngữ được định nghĩa trước của FPGA
1.3.2.2 Architecture (Ki ến trúc)
Phần thứ 2 trong mã nguồn VHDL là khai báo Architecture Mỗi một khai báo Entity đều phải đi kèm với ít nhất một Architecture tương ứng Khai báo Architecture trong chương trình phải kết hợp tên của Architecture và một Entity trong chương trình
đó Phần thân Architecture có th ể bao gồm các khai báo về các tín hiệu bên trong, các
phần tử bên trong hệ thống, hay các hàm và thủ tục mô tả hoạt động của hệ thống Tên
của Architecture là nhãn được đặt tuỳ theo người viết chương trình Cấu trúc bên trong của Architecture có thể được viết theo một trong số các kiểu mẫu sau:
- Tập hợp kết nối bên trong của các thiết bị
- Tập các câu lệnh ngẫu nhiên
Trang 3129
End component;
Begin
X1: XOR2 port map(A,B,SUM);
A1 : AND2 port map (A,B,CARRY);
End HA-STRUCTURE;
- Kiểu luồng dữ liệu
Trong kiểu này, luồng dữ liệu qua Entity trước tiên được biểu diễn bằng các phép gán đồng thời Kiểu luồng dữ liệu của bộ bán cộng được chỉ ra trong ví dụ sau:
Architecture DATAFLOW of HALF-ADDER is
Begin
SUM <= A xor B after 8ns;
CARRY <= A and B after 4ns;
End DATAFLOW;
Trong ví dụ này kiểu luồng dữ liệu sử dụng hai phép gán tín hiệu đồng thời (hoặc gán nối tiếp) Trong phép gán cho tín hiệu thì ký hiệu gán là “<=” Giá trị của biểu biểu
thức bên phải được gán cho tín hiệu bên phía tay trái Một phép gán đồng thời được
thực hiện chỉ khi có bất kỳ tín hiệu trong biểu thức phía phải có sự thay đổi, tức là giá
trị tín hiệu thay đổi Thông tin trễ cũng có thể được thêm vào phép gán bằng cách sử
dụng mệnh đề “after”
- Kiểu behavior
Kiểu behavior chỉ ra cách thức hoạt động của một entity như là một tập hợp lệnh được
thực hiện theo kiểu nối tiếp bằng cách sử dụng process Chúng không chỉ ra rõ ràng cấu trúc của entity mà chỉ ra chức năng của nó Ví dụ sau xem xét kiểu behavior của bộ bán
tổng
Architecture BEHAVIOR of HALF-ADDER is
Begin
Process (A,B)
Trang 32Một process cũng có một phần để khai báo (trước từ khóa “begin”) và một phần
để trình bày (giữa từ khóa “begin” và “process”) Các lệnh bên trong phần trình bày này được thực hiện theo kiểu nối tiếp Danh sách các tín hiệu được chỉ ra trong dấu ngoặc sau từ khóa “process” tạo thành một danh sách “nhạy” Tức là, khi có sự thay đổi của bất kỳ giá trị nào trong danh sách này thì mới thực hiện các lệnh trong process Tuy nhiên, tất cả các process trong một chương trình thì đều thực hiện đồng thời
Khai báo biến (bắt đầu bằng từ khóa “variable”), trong ví dụ n ày có hai biến X và Y Các biến được gán với ký hiệu là “:=” và giá trị của vế phải gán cho giá trị biến bên trái
- Kiểu hỗn tạp
Kiểu hỗn tạp là kiểu kết hợp cả ba kiểu trên Tức là, bên trong một architecture, chúng
ta có thể sử dụng cả ba cách trình bày trên
Khai báo Configuration dùng để lựa chọn một trong các thân Architecture có
sẵn mà một Entity có hoặc để gắn các khối vào Entity Nếu cho dạng cấu trúc, Configuration có thể được xem như liệt kê các thành phần cho khối mô hình Cho mỗi
khối thì Configuration chỉ rõ Architecture nào cho Entity từ nhiều Architecture Khi Configuration cho tổng hợp Entity -Architecture thì được biên dịch vào thư viện và
Trang 3331
một thực thể mô phỏng được tạo ra Ví dụ khai báo Configuration trong bộ bán tổng như sau:
Library CMOS-LIB, MY-LIB;
Configuration CONFIG of HALF-ADDER is
VHDL là không giống như cách thực thi chương trình một cách tuần tự như chương trình của PC, các lệnh của VHDL được thực hiện một cách đồng thời Vì lí do này, người ta thường gọi là “mã VHDL” chứ không gọi là “chương trình VHDL”
mới được thực thi một cách tuần tự
Như đã đề cập ở trên, một trong những ưu điểm của VHDL là nó cho phép
tổng hợp một mạch hay một hệ thống trong một thiết bị khả trình (như PLD hoặc
Trang 3432
FPGA) hoặc trong một chip ASIC Các bước thực hiện một project được chỉ ra trong hình 1.3
Hình 2.4 Sơ đồ thiết kế VHDL Thiết kế được bắt đầu bằng việc viết mã VHDL và lưu vào file có đuôi “.vhd”
có cùng tên với tên của ENTITY Bước đầu tiên trong quá trình tổng hợp là biên dịch Biên dịch là quá trình chuy ển từ ngôn ngữ VHDL bậc cao (mô tả mạch ở mức RTL –
mức chuy ển thanh ghi) sang dạng danh sách kết nối (netlist) ở mức gate Bước thứ hai
là tối ưu, được thực hiện trên danh sách kết nối mức gate để đạt được sự tối ưu về tốc
độ hoặc tối ưu về diện tích sắp đặt Ở giai đoạn này, thiết kế có thể được mô phỏng
Cuối cùng một phần mềm Place-và-route sẽ tạo ra sự sắp đặt (layout) vật lý cho một thiết bị PLD/FPGA hoặc sẽ tạo ra mặt nạ (mask) cho chip ASIC
Một trong các nhiệm vụ rất quan trọng là kiểm tra bản mô tả thiết kế Kiểm tra một mô hình VHDL được thực hiện bằng cách quan sát hoạt động của nó trong khi mô phỏng và các giá trị thu được có thể đem so sánh với yêu cầu thiết kế Môi trường kiểm tra có thể hiểu như một mạch kiểm tra ảo Môi trường kiểm tra sinh ra các
Trang 3533
tác động lên bản thiết kế và cho phép quan sát hoặc so sánh kết quả hoạt động của bản
mô tả thiết kế Thông thường thì các bản mô tả đều cung cấp chương hử Nhưng ta cũng có thể tự xây dựng chương trình thử (testbench) Mạch thử thực chất là sự kết
hợp của tổng hợp nhiều thành phần Nó gồm ba thành phần Mô hình VHDL đã qua
kiểm tra, nguồn dữ liệu và bộ quan sát Hoạt độn của mô hình VHDL được kích thích
bởi cá nguồn dữ liệu và kiểm tra tính đúng đắn thông qua bộ quan sát
Hình 2.5 Sơ đồ tổng quát của một chương trình thử (Testbench)
Trong đó: DUT: (device under test) mô hình VHDL cần kiểm tra
Observer: khối quan sát kết quả
Data source: nguồn dữ liệu (khối tạo ra các tín hiệu kích thích)
Trang 36giữa các phần của datapath Datapath cũng xuất ra các status signal để Control Unit
biết trạng thái hiện tại của hệ thống mà điều khiển phù hợp (ví dụ như giá trị lệnh vừa
lấy được từ ROM, hay các cờ tràn, cờ âm, cờ zero…).[1][2][7]
- Control unit (CU): Phần này đảm nhiệm tạo các control signal phù hợp vào thời điểm thích hợp để điều khiển Datapath hoạt động chính xác Tại một thời điểm, CU ở vào một trạng thái nhất định, trạng thái này xác định bởi giá trị của bộ nhớ trạng thái Các control signal được tạo ứng với mỗi trạng thái nhất định thông qua các mạch tổ
hợp
Trang 3735
3 1.2 Sơ đồ khối thiết kế
Data path for executing all the instructions
Status Signals Signals
Control Signals
Hình 3.1 Sơ đồ khối bộ vi xử lý
Ở hình trên, 2 thanh ghi PC, IR và Memory sẽ tạo thành khối instruction_fetch
Nếu ko có nhảy hay ngắt quãng bất thường thì PC sẽ tăng dần tương ứng với từng lệnh trong code Sau đó IR được load giá trị là ô nhớ trong memory có địa chỉ là giá trị của
PC Lúc này nội dung IR chính là mã lệnh cần thực thi Quá trình này được điều khiển
bởi 2 control_signal như trong hình (load PC, load IR) và tương ứng với state fetch trong FSM của control unit Sau đó nội dung IR sẽ được đưa sang Control Unit để decode Sau khi xác định yêu cầu của lệnh, FSM sẽ quyết định sẽ rẽ nhánh sang state nào tiếp theo Tương ứng với mỗi nhánh, FSM sẽ đưa ra các control_signal thích hợp
để điều khiển datapath (register, ALU, shifter…) để thực thi lệnh đúng đắn Đồng thời,
Trang 3836
trong một số lệnh, datapath cần phản hồi các status_signal sang Control Unit để có quyết định thích hợp (chẳng hạn lệnh nhảy có điều kiện JNZ ) Điều này thể hiện sự tương quan “nhịp nhàng” giữa Control Unit và Datapath Khi thiết kế, cần đảm bảo sự tách biệt giữa 2 phần này, đảm bảo 2 phần chỉ giao tiếp với nhau thông qua các signal,
ko để các luồng data từ Datapath “lấn sân” sang Control Unit, bởi vì sự độc lập này là
cơ sở để có thể dễ dàng tính toán Critical Path (nôm na là đường đi dài nhất của dữ liệu trong chuỗi tính toán, giữa các thanh ghi, giữa thanh ghi và bộ nhớ) Các thông số về Crirital Path rất cần thiết để tối ưu các thành phần của Datapath (ảnh hưởng trực tiếp
tới tốc độ bộ xử lí) cũng như trong quá trình cài đặt kĩ thuật pipeline cho máy
- Phân tích kh ối datapath
B_neg_0
BLoad BClr
Datapath
8 bit bus
Hình 3.2 Khối Datapath
Trang 3937
Các thành phần Register, ALU, Multiplexer đều là các khối cơ bản quen thuộc
Khối ALU thực hiện các phép toán trên 2 toán hạng là 2 thanh ghi A và B (theo bảng các phép toán bên dưới) Kết quả phép toán có thể được update vào thanh ghi B Thanh ghi A có thể load giá trị từ thanh ghi B sang hoặc đọc input từ bên ngoài tùy thuộc vào
lựa chọn của bộ Multiplexer Đồng thời cũng có thêm cổng output để có thể xuất giá trị thanh ghi A ra ngoài Các đường mảnh hơn là các control signal để điều khiển các thành phần trên: Amul (chọn input cho thanh ghi A từ input bên ngoài hoặc từ thanh ghi B), ALoad (cập nhật nội dung A), AClr (xóa A, thường là khi reset), BLoad, BClr, ALUins (chọn lệnh cho ALU) Từ thanh ghi B, một bộ so sánh sẽ đưa ra status_signal
là B_neq_0 để xác định giá trị B có bằng 0 hay ko nhằm phục vụ lệnh nhảy có điều
Trang 40Ở đây sử dụng thanh ghi PC 4bit để trỏ tới vị trí chương trình hiện tại Giá trị
PC được dùng làm địa chỉ cho ROM Giá trị lệnh đọc từ ROM ra được đưa vào IR Giá
trị PC có thể được cập nhật tăng lên 1, hoặc đước load từ một phần của IR (trường hợp
lệnh nhảy) Ngoài các control_signal IRLoad, IRClr, PCLoad, PCClr tương tự như trên, còn có PCmul dùng để chọn đầu vào cho PC Nội dung IR được đưa sang Control Unit để decode mã lệnh