MỤC LỤC
Trang
Trang phụ bìa……………………………………………………………………........
Mục lục…………………………………………………………………………….....
Danh mục các ký hiệu, các chữ viết tắt……………………………………………....
Danh mục các bảng……………………………………………………………….......
Danh mục các hình vẽ…………………………………………………………….......
MỞ ĐẦU...........................................................................................................................1
Chương 1
TỔNG QUAN VỀ FPGA VÀ VHDL
1.1. Khái niện về FPGA.................................................................................................2
1.2. Lịch sử ra đời của FPGA........................................................................................2
1.3. Ý nghĩa và vai trò của FPGA..................................................................................3
1.4. Kiến trúc FPGA......................................................................................................4
1.4.1. Kiến trúc của chíp FPGA.................................................................................4
1.4.2. Đặc điểm hoạt động của FPGA.......................................................................7
1.5. Qúa trình thiết kế FPGA......................................................................................10
1.5.1. Thiết kế sử dụng sơ đồ...................................................................................11
1.5.2. Sử dụng ngôn ngữ HDL.................................................................................12
1.6. Virtex-4 LC System Board...................................................................................14
1.6.1. Giới thiệu chung.............................................................................................14
1.6.2. Các chức năng của bo phát triển....................................................................16
Chương 2
CHUẨN MÃ HÓA NÂNG CAO AES
2.1. Lịch sử chuẩn mã hóa AES..................................................................................21
2.2. Cơ sở toán học xây dựng AES..............................................................................22
2.2.1. Phép cộng.......................................................................................................22
2.2.2. Phép nhân………………………………………………………………….23
2.3. Các phép biến đổi..................................................................................................26
2.3.1. Phép thế byte – SubBytes( )...........................................................................28
2.3.2. Phép dịch hàng – ShiftRows( )......................................................................29
2.3.3. Phép trộn cột – MixColumns( ).....................................................................30
2.3.4. Cộng với khóa của vòng - AddRoundKey( ).................................................31
2.3.5. InverseSubBytes( ).........................................................................................32
2.3.6. InverseMixColumns( )...................................................................................33
2.3.7. InverseShiftRows( ).......................................................................................34
2.4. Quy trình sinh khóa ( Key Expansion).................................................................35
2.4.1. SubWord ( )....................................................................................................36
2.4.2. RotWord ( )....................................................................................................36
2.4.3. Xor với RCon[i].............................................................................................36
2.5. Mã hóa...................................................................................................................37
2.6. Giải mã ( Inverse Cipher )....................................................................................38
Chương 3
MÃ HÓA AES TRÊN NỀN FPGA
3.1. Sơ đồ tổng quan của hệ thống AES......................................................................41
3.1.1. Mô tả lưu đồ tổng quát của bộ mã hóa và giải mã AES...............................41
3.1.2. Sơ đồ thuật toán khối Data của bộ mã hóa....................................................42
3.1.3. Sơ đồ thuật toán của khối KeyExpansion......................................................43
3.1.4. Sơ đồ thuật toán khối CPU............................................................................44
3.1.5. Sơ đồ thuật toán khối Data của bộ giải mã AES...........................................44
3.2. Thiết kế chi tiết các khối chức năng của bộ mã hóa............................................46
3.2.1. Khối AddRoundKey......................................................................................46
3.2.2. Khối SubByte.................................................................................................47
3.2.3. Khối ShiftRow...............................................................................................48
3.2.4. Khối MixColumn...........................................................................................50
3.4. Thiết kế các khối chức năng của bộ giải mã........................................................52
3.4.1. Nhân với 09h..................................................................................................53
3.4.2. Phép nhân với 0Dh.........................................................................................53
3.4.3. Phép nhân với 0Eh.........................................................................................54
3.4. Thiết kế chi tiết cho khối KeyExpansion.............................................................55
3.4.1. Khối RotWord................................................................................................55
3.4.2. Khối SubWord...............................................................................................56
3.4.3. Khối Rcon......................................................................................................56
3.4.4. Khối KeyStorage............................................................................................57
3.4.5. Khối DemuxKey............................................................................................59
3.5. Khối diều khiển bộ giải mã và bộ giao tiếp với máy tính....................................59
3.5.1. Khối CPU - điều khiển bộ giải mã................................................................59
3.5.2. Khối giao tiếp với máy tính...........................................................................62
KẾT LUẬN......................................................................................................................63
TÀI LIỆU THAM KHẢO...............................................................................................64
FPGA
ASIC
CPLD
AES
LUT
SRAM
HDL
VHDL
VHSIC
PLD
GPIO
CAD
IEEE
NIST
GF
DES
DPA
CÁC TỪ VIẾT TẮT TRONG ĐỒ ÁN
Field Programmable Gates Array
Application Specific Integrated Circuit
Complex Programmable Logic Device
Advanced Encryption Standard
Look Up Table
Bảng tra
Static Random Memory Access
Ram tĩnh
Hardware Description Language
Ngôn ngữ mô tả phần cứng
VHSIC Hardware Description Language
Very High Speed Integrated Circuits
Các mạch tích hợp tốc độ cao
Programmable Logic Device
General Purpose IO
Các chân vào ra thông thường
Computer Aided Design
Hỗ trợ thiết kế trên máy tính
Institute of Electrical and Electronic Engineers
Viện Kĩ thuật điện và điện tử
National Institute of Standard and Technology
Viện công tiêu chuẩn và công nghệ Hoa Kỳ
Galois Field
Trường Galoa
Data Encryption Standard
Tiêu chuẩn mã hóa dữ liệu
Difference Power Attack
DANH MỤC CÁC BẢNG BIỂU
Trang
Bảng 1.1. Sơ đồ chân LED..............................................................................................18
Bảng 1.2. Sơ đồ phím bấm..............................................................................................18
Bảng 1.3. Sơ đồ công tắc................................................................................................18
Bảng 1.4. Giao tiếp với RS232.......................................................................................19
Bảng 1.5. Màn hình LCD................................................................................................20
Bảng 2.1. Các chuẩn AES...............................................................................................27
Bảng 2.2. S-box...............................................................................................................29
Bảng 2.2. Bảng Inverse S-Box........................................................................................33
DANH MỤC CÁC HÌNH VẼ
Trang
Hình 1.1. Kiến trúc FPGA...........................................................................................................6
Hình 1.2. Logic block..................................................................................................................7
Hình 1.3. Vị trí các chân của Logic block...................................................................................7
Hình 1.4. Liên kết Logic block với kênh định tuyến...................................................................7
Hình 1.5. Kết nối các khối logic..................................................................................................9
Hình 1.6. Kết nỗi các khối logic với các chân I/O của FPGA.....................................................9
Hình 1.7. Các đường kết nối chuyên dụng tốc dộ cao...............................................................10
Hình 1.8. FPGA kết hợp với RAM trong...................................................................................11
Hình 1.9. RAM hai cổng............................................................................................................11
Hình 1.10. Quá trình thiết kế PLD.............................................................................................14
Hình 1.11. Thiết kế bộ nhân sử dụng Sơ đồ và ngôn ngữ VHDL.............................................15
Hình 1.12. Bo mạch Virtex-4 LC...............................................................................................18
Hình 1.13. Sơ đồ khối chức năng của Virtex-4 LC...................................................................19
Hình 1.14. Cổng cấu hình và nạp chương trình cho Virtex-4....................................................19
Hình 1.15. Giao tiếp giữa Virtex-4 và cổng RS232...................................................................21
Hình 2.1. Trạng thái đầu vào, đầu ra và trung gian...................................................................28
Hình 2.2. SubBytes....................................................................................................................31
Hình 2.3. ShifRows....................................................................................................................32
Hình 2.4. MixColumn................................................................................................................33
Hình 2.5. AddRoundKey...........................................................................................................34
Hình 2.6. ShiftRow....................................................................................................................36
Hình 2.7. SubWord....................................................................................................................38
Hình 2.8. RotWord.....................................................................................................................38
Hình 3.1. Sơ đồ khối tổng quát hệ thống AES...........................................................................43
Hình 3.2. Sơ đồ thuật toán Khối data của bộ mã hóa................................................................44
Hình 3.3. Sơ đồ thuật toán Khối KeyExpansion........................................................................48
Hình 3.4. Sơ đồ thuật toán khối CPU........................................................................................50
Hình 3.5. Sơ đồ thuật toán khối giải mã - Dạng 1.....................................................................51
Hình 3.6. Khối AddRoundKey..................................................................................................51
Hình 3.7. Sơ đồ thuật toán khối giải mã - Dạng 2.....................................................................52
Hình 3.8. Khối SubByte.............................................................................................................53
Hình 3.9. Khối ShiftRow...........................................................................................................54
Hình 3.10. Khối MixColumn.....................................................................................................55
Hình 3.11. Khối Xtime...............................................................................................................56
Hình 3.12. Phép biến đổi theo dòng...........................................................................................57
Hình 3.13. Khối SubMixColumn...............................................................................................58
Hình 3.14. Khối nhân 09h..........................................................................................................58
Hình 3.15. Khối nhân 0Bh.........................................................................................................58
Hình 3.16. Khối nhân 0Dh.........................................................................................................59
Hình 3.17. Phép nhân 0Eh.........................................................................................................59
Hình 3.18. Khối InverseMixColumn.........................................................................................60
Hình 3.19. Sơ đồ khối KeyExPansion.......................................................................................60
Hình 3.20. Khối RotWord..........................................................................................................61
1
Hình 3.21. Khối SubWord.........................................................................................................61
Hình 3.22. Khối Rcon................................................................................................................62
Hình 3.23. Khối KeyStorage......................................................................................................62
Hình 3.24. Khối DemuxKey......................................................................................................64
Hình 3.25. Khối CPU.................................................................................................................64
Hình 3.26. Giản đồ thời gian điều khiển vòng key....................................................................65
Hình 3.27. Giản đồ thời gian điều khiển vòng data...................................................................65
Hình 3.28. Sơ đồ khối giao tiếp với máy tính...........................................................................67
LỜI NÓI ĐẦU
Thông tin di động ngày nay đã trở thành một ngành công nghiệp viễn thông phát
triển nhanh và mang lại nhiều lợi nhuận nhất cho nhiều nhà khai thác. Sự phát triển của
thị trường viễn thông di động đã thúc đẩy mạnh mẽ việc nghiên cứu và triển khai các
hệ thống thông tin di động mới trong tương lai. Các dịch vụ do mạng thông tin di động
cũng ngày càng phong phú hơn, ngoài các dịch vụ thoại truyền thống, hệ thống thông
tin di động hiện đại còn cung cấp thêm nhiều loại hình dịch vụ số liệu khác với tốc độ
cao.
Bên cạnh đó, vấn đề lớn nhất của các hệ thống truyền thông vô tuyến và di động
là đảm bảo tính bảo mật các thông tin của người sử dụng. Kiến trúc mạng thông tin di
động, vì thế, ngoài các thành phần nhằm thực hiện truyền thông tin người dùng còn yêu
cầu thêm các thành phần khác để bảo mật các thông tin đó. Do đó, có nhiều thuật toán
bảo mật ra đời, thay thế nhau nhằm đảm bảo tốt hơn nữa tính an toàn của thông tin, đây
cũng là một đề tài thú vị thu hút nhiều sự quan tâm của các nhà nghiên cứu.
Đã có rất nhiều đề tài nghiên cứu khoa học được đưa ra về vấn đề bảo mật trong
thông tin, nhưng qua tìm hiểu em được biết chuẩn mã hóa AES được Viện tiêu chuẩn
và công nghệ Quốc gia Hoa Kì (NIST) thông qua năm 2001 là một đề tài được đánh
giá rất cao trong bảo mật thông tin.
2
Chính vì vậy mục đích đồ án của em là sử dụng vi mạch khả trình FPGA để
thực thi bộ mã hóa tiêu chuẩn nâng cao AES. FPGA là một công nghệ ngày càng được
phát triển trong khắp các lĩnh vực công nghệ do các ưu điểm nổi trội của nó.
Em xin chân thành cảm ơn thầy giáo ThS.Nguyễn Anh Quỳnh đã giúp đỡ em
tận tình trong quá trình thực hiện đồ án .
Em xin chân thành cảm ơn các Thầy trong tổ Điều Khiển Tự Động nói riêng và
các Thầy Cô bộ môn trong khoa Điện Tử Viễn Thông trường Đại Học Vinh đã giúp đỡ
em trong suốt quá trình học tập và làm đồ án Tốt Nghiệp .
Vinh, tháng 12 năm 2011
Sinh viên thực hiện : Hoàng Song Hào
CHƯƠNG 1:
TỔNG QUAN VỀ FPGA VÀ VHDL
1.1. Khái niện về FPGA
FPGA là một thiết bị bán dẫn bao gồm các thành phần logic lập trình được và
các đường nối giữa chúng. Các thành phần này có thể được lập trình để tạo ra các cổng
logic cơ bản như AND, OR, XOR, NOT hoặc các hàm phức hợp như bộ giải mã hoặc
một hàm toán học Trong hầu hết các FPGA, các thành phần logic lập trình được ( còn
được gọi là các khối logic ) cũng bao gồm các phần tử nhớ là các flip-flop đơn giản
hoặc các khối nhớ hoàn chỉnh. Hệ thống các đường nối cho phép các khối logic trong
chip FPGA có thể kết nối với nhau như mong muốn của người thiết kê hệ thống FPGA
nhìn chung là có tốc độ xử lí chậm hơn so với ASIC, không thể đáp ứng được các thiết
kế phức tạp và tiêu tốn nhiều năng lượng hơn. Tuy nhiên nó cũng có những ưu điểm
nổi trội như. thời gian nghiên cứu ngắn, có khả năng lập trình lại ngay trên chip nên có
thể sửa chữa lỗi dễ dàng, nhanh chóng đưa được sản phẩm ra thị trường. Để tiết kiệm
thời gian và chi phí sản xuất, hạn giá thành sản phẩm thì các thiết kế được phát triển
3
trên các chíp FPGA thông thường, sau đó nó được chuyển sang phiên bản cố định,
thường là ASIC.
1.2. Lịch sử ra đời của FPGA
Các chip FPGA bắt nguồn từ các chip gọi là CPLD (Complex Programmable
Logic Device) vào giữa những năm 1980. Ross Freeman và Xilinx là hai nhà đồng phát
minh ra FPGA vào năm 1984. CPLD và FPGA đều bao gồm một số các phần tử logic.
Các chip CPLD có mật độ tích hợp khoảng vài ngàn đến vài chục ngàn cổng logic. Các
chip FPGA có mật độ tích hợp cao hơn, từ vài chục ngàn đến vài triệu cổng logic.
Điểm khác nhau cơ bản của CPLD và FPGA là ở cấu trúc của chúng.Cấu trúc của
chip CPLD có phần hạn chế do đó nó ít mềm dẻo hơn song lại dễ dàng tính toán độ trễ
thời gian và có tỉ lệ logic block trên số kết nối cao hơn. Ngược lại trong kiến trúc FPGA
các kết nối chiếm đa số. Điều này làm cho nó linh hoạt hơn nhiều so với CPLD ngoài ra
thì các thiết kế phức tạp thường sử dụng FPGA hơn.
Một điểm khác biệt rất đáng chú ý nữa là hầu hết các chức năng embedded ở mức
cao và các bộ nhớ embedded đều sử dụng FPGA (ví dụ như . bộ cộng hoặc bộ nhân ).
Điều này là do nhiều chip FPGA hiện nay có hỗ trợ việc cấu hình lại toàn phần hoặc một
phần hệ thống giống như hệ điều hành vậy, thậm chí một vài dòng chip cho phép thay đổi
thiết kế của hệ thống trong khi nó vẫn hoạt động
1.3. Ý nghĩa và vai trò FPGA
Ứng dụng của FPGA bao gồm. Các hệ thống xử lí tín hiệu số DSP, hệ thống
Radio mềm, công nghệ hàng không vũ trụ và hệ thống quốc phòng. Ngoài ra nó còn
được sử dụng làm các mẫu ASIC, xử lí ảnh trong Y tế, nhận dạng giọng nói, mã hóa,
công nghệ sinh học, mô phonge phần cứng máy tính và rất nhiều lĩnh vực khác đang
phát triển các ứng dụng của FPGA. FPGA khởi đầu như là một đối thủ cạnh tranh của
CPLD trong lĩnh vực chip khả trình. Nhưng với khả năng và tốc độ phát triển nhanh
chóng nó đã bắt đầu có thể đảm nhiệm được các hệ thống ngày càng lớn và phức tạp
cao là thị trường mà hiện nay các chip SOC đang chiếm giữ.
4
Có thể dễ dàng bắt gặp các ứng dụng của FPGA trong bất kì một lĩnh vực hay
một thuật toán nào mà yêu cầu tính toán song song và xử lí phức tạp như các thuật toán
mã hóa chẳng hạn. FPGA ngày càng được sử dụng nhiều trong các ứng dụng đòi hỏi
tốc độ tính toán cao nơi mà các lõi tính toán như FFT hay Convolution được thực hiện
trên FPGA thay cho một vi xử lí. Việc sử dụng FPGA cho các nhiệm vụ tính toán được
biết đến như là Reconfigurable Computing. Cấu trúc song song vốn có của các logic
block trên FPGA cho phép một lưu lượng tính toán rất lớn thậm chí ở xung nhịp chỉ
500 Mhz. Ví dụ . Thế hệ hiện nay của các FPGA có thể thực thi khoảng 100 đơn vị
floating point có độ chính xác đơn, tất các chúng có thể đưa ra kết quả sau mỗi xung
nhịp đồng hồ. Sự linh hoạt của FPGA cho phép một tốc độ tính toán thậm chí còn
nhanh hơn nếu hi sinh độ chính xác và giảm số các chữ số sau dấu thập phân để tăng
các đơn vị tính toán song song.
Với FPGA chúng ta không những có thể rút ngắn thời gian thời gian thực hiện
ASIC mà còn giảm chi phí tối đa do quá trình kiểm ta thiết kế , không những được
kiểm tra bằng các phần mền mô phỏng mà giờ đây còn được chạy trên các chip thực
trong môi trường có thẻ nói là gần với môi trường ASIC thực nhất .
Khả năng tái cấu hình cho phép chúng ta sửa đi sửa lại nhiều thiết kế cho tới khi
đạt yêu cầu .
Tuy nhiên việc sử dụng các chip FPGA trong các tính toán tốc độ cao hiện đang
bị giới hạn bởi độ phức tạp của việc thiết kế FPGA so với các phần mềm thông thường
và thời gian biên dịch hoàn thành của các công cụ thiết kế là rất dài. Phải mất 4-8 giờ
chờ đợi thậm chí cho một thay đổi rất nhỏ trong thiết kế.
1.4. Kiến trúc FPGA
1.4.1. Kiến trúc của chíp FPGA
Kiến trúc bao gồm một mảng các khối logic và các kênh định tuyến. Mỗi hàng
hay cột được đệm đày bởi 2 đệm I/O. Tất cả các kênh định tuyến có cùng chiều rộng
(cùng số dây)
5
Hình 1.1. Kiến trúc FPGA
Mỗi mạch phải được vẽ trong một FPGA hình vuông nhỏ nhất có thể thích ứng
với nó. Ví dụ một mạch bao gồm 14 khối logic và 10 đệm I/O sẽ được vẽ trong một
FPGA gồm một mảng 4x4 của các khối logic
6
Khối logic chuẩn của FPGA gồm một bảng tìm kiếm 4 đầu vào (LUT) và một
flip-flop, như được biểu diễn ở hình 1.2. Khối logic chỉ có một đầu ra, đầu ra này có
thể là đầu ra LUT đã đăng kí hoặc không đăng kí. Khối Logic có 4 đầu vào của LUT
và một đầu vào xung Clock. Vì xung clock thông thường được định tuyến thông qua
một mạng định tuyến đặc biệt nên nó được điều khiển khác so với các tín hiệu còn lại.
Vị trí các chân của khối logic của FPGA được biểu diễn dưới đây.
Hình 1.2. Logic block
Mỗi đầu vào có khả năng truy nhập từ một chân của khối logic khi chân đầu ra
có thể kết nối tới các dây định tuyến trong cả hai kênh bên phải và bên dưới của khối
logic.( Hình 1.3 )
Hình 1.3. Vị trí các chân của Logic block
Hình 1.4. Liên kết Logic block với kênh định tuyến
7
Mỗi chân đầu ra của khối logic có thể kết nối tới bất kì đoạn đi dây nào trong các kênh
gần với nó. Hình 1.4 sẽ thể hiện một cách rõ ràng.
Tương tự đệm I/O có thể kết nối tới bất kì đoạn đi dây nào trong các kênh gần
với nó. Ví dụ một đệm I/O tại đầu của chip có thể kết nối ngay lập tức tới bất kì dây W
nào (trong đó W độ rộng kênh) trong kênh nằm ngang bên dưới nó.
Việc định tuyến FPGA không được phân đoạn (Hình 1.6). Mỗi đoạn đi dây chỉ
bắc cầu qua một khối logic trước khi nó kết thúc trong hộp chuyển mạch. Bằng cách
mở một số các chuyển mạch có khả năng lập trình trong hộp chuyển mạch, các đường
dẫn dài hơn có thể được tạo ra.
Mỗi khi một kênh nằm dọc và một kênh nằm ngang giao nhau thì có một hộp
chuyển mạch. Trong kiến trúc này khi một dây đi vào hộp chuyển mạch thì có 3
chuyển mạch có khả năng lập trình cho phép nó kết nối tới 3 dây khác trong đoạn kênh
gần đó. Mô hình hoặc topo của các chuyển mạch được sử dụng trong kiến trúc này là
một tôpô của hộp chuyển mạch cơ sở bán dẫn hoặc vùng. Trong tôpô hộp chuyển mạch
này, một dây trong tuyến số 1 chỉ kết nối tới các dây trong tuyến số 1 trong các đoạn
kênh gần đó, các dây trong tuyến số 2 chỉ kết nối tới các dây trong tuyến số 2 trong
các đoạn kênh gần đó,... Hình 1.7 mô tả các kết nối trong hộp chuyển mạch.
Các chân của FPGA được chia làm hai loại. Chân chuyên dụng và chân I/O
thông thường. Khoảng 20% đến 30 % số chân của FPGA là chân chuyên dụng. Các
chân chuyên dụng của FPGA chia làm ba loại nhỏ như sau :
•
Các chân nguồn ;
•
Các chân cấu hình, dùng để download chương trình xuống chip FPGA;
•
Các đầu vào chuyên dụng hoặc các chân xung clock. Các chân này để điều
khiển các khối chức năng trong FPGA;
Còn lại là các chân I/O thông thường. Người dùng có toàn quyền lập trình cho
các chân này, có thể cấu hình chúng thành đầu vào, đầu ra hoặc đầu vào ra.
8
1.4.2. Đặc điểm hoạt động của FPGA
Ở trên ta đã biết các FPGA được tạo thành từ hàng ngàn phần tử cơ bản là các
khối logic. Mỗi khối logic có thể được kết nối với các khối logic khác thông qua các
đường nối bố trí xung quanh khối logic đó. Một khối logic chỉ thực hiện được một
chức năng rất nhỏ nhưng khi kết hợp chúng lại thì ta có thể tạo ra một hàm logic phức
tạp.
Hình 1.5. Kết nối các khối logic
Các đường kết nối cũng có thể kéo dài tới các chân của FPGA để nối với đầu vào
và đầu ra của thiết bị.
Hình 1.6. Kết nỗi các khối logic với các chân I/O của FPGA
9
Ngoài các đường kết nối thông thường các FPGA còn có các đường chuyên dụng
kết nối giữa các khối logic ở cạnh nhau. Đường kết nối chuyên dụng tốc độ cao phổ
biến nhất là các “carry chain”. Các carry chain cho phép tạo ra các hàm số học như bộ
đếm hay bộ cộng một cách hiệu quả (tốn ít tài nguyên và có tốc độ tính toán cao).
Hình 1.7. Các đường kết nối chuyên dụng tốc dộ cao
Các công nghệ PLD cũ không có các đường kết nối chuyên dụng tốc độ cao nên
chúng rất hạn chế trong các ứng dụng yêu cầu tính toán số học.
Các FPGA loại mới thường có thêm các khối SRAM chuyên dụng đặt ở giữa các
khối logic và được điều khiển bởi chính các phần tử logic đó. Các khối SRAM này sẽ
làm tăng phạm vi ứng dụng và khả năng linh hoạt của FPGA.
Có rất nhiều tham số ảnh hưởng tới hoạt động của SRAM nhưng số các phần tử
có thể truy nhập SRAM đồng thời là nhân tố chính. Người ta phân ra làm hai loại RAM
là:
•
RAM đơn cổng: Chỉ có duy nhất một phần tử truy nhập RAM để đọc và ghi tại
một thời điểm.
•
RAM hai cổng và bốn cổng. Cho phép hai hoặc bốn phần truy cập RAM
để đọc và ghi cùng lúc. Mỗi phần tử sẽ sử dụng một xung clock khác nhau.Các
RAM lại này đạt được tốc độ xử lí dữ liệu rất cao.
Hình 1.8. FPGA kết hợp với RAM trong
Dưới đây là hình minh họa về loại RAM hai cổng:
Hình 1.9. RAM hai cổng
Để xác định số phần tử có thể truy nhập RAM đồng thời ta chỉ cần đếm số bus
địa chỉ nối với RAM. Mỗi bus địa chỉ đại diện cho một phần tử.Ngoài ra mỗi phần tử
còn có bus dữ liệu để thực hiện đọc, ghi RAM .
Việc đọc và ghi lên RAM thường được thực hiện theo phương thức đồng bộ tuy
nhiên việc đọc dữ liệu từ RAM có thể thực hiện được theo phương thức không đông
bộ.
Các khối RAM lớn tạo thành các khối RAM chuyên dụng (“blockram”).
Hãng Xilinx có rất nhiều kiểu bố trí RAM khác nhau vì các FPGA của hãng này cho
phép sử dụng các khối logic như một vi RAM (“distributed RAM”). Hãng Altera lại bố trí
RAM thành các khối có kích thước khác nhau xung quanh các khối logic.
1.5. Qúa trình thiết kế FPGA
Để định nghĩa một hành động cho FPGA người dùng sử dụng ngôn ngữ mô tả
phần cứng ( Hardware Description Language –HDL ) hoặc thiết kế bằng sơ đồ. Các
ngôn ngữ HDL phổ biến là VHDL và Verilog. Sau khi thiết kế xong dùng một công cụ
thiết kế điện tử tự động để tạo ra netlist. Sau đó netlist được chỉnh cho phù hợp với cấu
trúc của một chip FPGA thực sự bằng cách sử dụng một công cụ gọi là place-and-route
thường được sản xuất bởi các công ty sở hữu phần mềm place-and-route. Người dùng sẽ
xác nhận các map, place, route thông qua việc phân tích thời gian, mô phỏng và các
phương pháp kiểm tra khác. Sau khi hoàn tất việc thiết kế và kiểm tra, file nhị phân sẽ
được tạo ra ( việc tạo file này cũng dùng phần mềm của công ty cung cấp chip FPGA) để
cấu hình cho FPGA.
Để giảm thiểu độ phức tạp của các thiết kế trên ngôn ngữ HDL (sự phức tạp này
có thể được so với việc viết một chương trính bằng ngôn ngữ Assembly ) người ta tăng
mức trừu tượng hóa của các thiết kế. Các công ty như Cadence, Synopsys và Celoxica
đang xúc tiến SystemC như một công cụ kết hợp các ngôn ngũ bậc cao với các mô hình
cho phép chu trình thiết kế FPGA nhanh hơn so với các ngôn ngữ HDL truyền thống.
Sự giống nhau này dựa trên ngôn ngữ C chuẩn và C++ ( với các thư viện hoặc các mở
rộng khác cho phép lập trình song song), nó đã được tìm thấy trong công cụ Catapult C
của Mentor Graphics và trong Impulse C của Impulse Accelerated Technologies.Một số
công ty khác lại đưa ra các công cụ graphical dataflow giống như việc thiết kế mức cao.
Các ngôn ngữ như System Verilog, System VHDL và Handel-C cũng gần tiếp cận được
mục tiêu này nhưng mục tiêu là nhằm vào các kĩ sư phần cứng hơn là các kĩ sư phần
mềm.
Để đơn giản hóa việc thiết kế các hệ thống phức tạp trệ FPGA, người ta tạo ra
các thư viện các hàm và các mạch tổng hợp đã được kiểm tra và tối ưu để tăng nhanh
quá trình thiết kế. Các mạch định nghĩa trước này thường được gọi là các IP core và
thường được cung cấp sãn bởi các nhà cung cấp FPGA và bên thứ 3 (thường được
cung cấp dưới một số điều khoản về sở hữu trí tuệ ).Ngoài ra cũng có các Core khác
được phát triển bởi cộng đồng mã nguồn mở. Các Core này được miễn phí dưới các
giấy phép như GPL, BSD, …
Trong một chu trình thiết kế thông thường, các nhà phát triển ứng dụng FPGA
sẽ mô phỏng thiết kế này trong một loạt các giai đoạn trong suốt cả quá trình thiết kế.
Việc đầu tiên là viết các chương trình cho ứng dụng bằng ngôn ngữ VHDL hoặc là
Verilog. Sau đó người ta tạo ra các file test bench tương ứng với các chương trình
nguồn đó. Việc mô phỏng các module được thực hiện trên các file này. Sau khi thực
hiện tổng hợp để ánh xạ thiết kế này thành một netlist, netlist được chuyển thành mức
mô tả cổng logic. Tiếp tục thực hiên mô phỏng để đảm bảo quá trình tổng hợp không
có lỗi. Cuối cùng chương trình được nạp vào chip FPGA .
Các quá trình thiết kế FPGA cơ bản:
1.5.1. Thiết kế sử dụng sơ đồ
Phương pháp dùng giản đồ là một phương pháp truyền thống trong đó những
người thiết kế thường sử dụng các phần tử logic có sẵn hoặc đã được định nghĩa. Đó là
một công cụ đồ họa cho phép xác định chính xác các cổng logic theo yêu cầu và cách
thức để nối chúng lại với nhau. Phương pháp này có bốn bước cơ bản sau:
- Sau khi chọn công cụ vẽ mạch và thư viện các thiết bị, bắt đầu tạo mạch bằng
cách lấy ra các cổng logic, các linh kiện cần thiết từ thư viện đó. Lưu ý các nhà sản
xuất khác nhau có các thư viện linh kiện khác nhau và phải chọn các linh kiện phù hợp
với nhà sản xuất nhất định.
-Kết nối các cổng logic, các thiết bị với nhau bằng các đường nối. Chúng ta có
toàn quyền điều khiển và có thể kết nối các cổng logic theo bất kì cấu hình nào mà ứng
dụng của ta yêu cầu.
-Thêm các nhãn cho các bộ đệm của đầu ra và đầu vào. Bước này sẽ định nghĩa
các chân I/O của thiết bị .
-Tạo Netlist.
Hình 1.10. Quá trình thiết kế PLD
Ví dụ ở hình trên là rất đơn giản tuy nhiên trong thực tế các mạch ứng dụng đòi
hỏi số lượng cổng logic rất lớn, có thể lên tới hàng triệu cổng. Một trang bản thảo
thông thường có thể chứa tối đa là 200 cổng logic như vậy để thiết kế một mạch ứng
dụng 10.000 cổng logic cần 50 trang bản thảo đồng thời phải thực thi 50 lần quy trình
như trên. Việc này tốn rất nhiều thời gian và công sức. Một nhược điểm khác của
phương pháp vẽ sơ đồ là rất khó khăn trong việc chuyển đổi bản thiết kế, thay đổi nhà
sản xuất hay thay đổi công nghệ. Việc thay đổi này phải được thực hiện trên toàn bộ
các trang bản thảo của thiết kế.
1.5.2. Sử dụng ngôn ngữ VHDL
Sử dụng các ngôn ngữ mô tả phần cứng (các file dạng text ) thay thế cho việc
sử dụng sơ đồ mô tả các cổng logic ở mức thấp. Hai ngôn ngữ hay được sử dụng nhất
là VHDL và Verilog.
Hình 1.11. Thiết kế bộ nhân sử dụng Sơ đồ và ngôn ngữ VHDL
Giả sử ta cần thiết kế một bộ nhân 16x16 bit. Bộ nhân này gồm hai đầu vào 16
bit, và đầu ra 32 bít là tích của hai đầu vào, tổng cộng sẽ có 64 bit I/O mạch này tương
đương với khoảng 6000 cổng logic. Nếu thực hiện bằng phương pháp sơ đồ phải mất
khoảng 3 ngày. Nhưng nếu thực hiện bằng ngôn ngữ HDL thì chỉ cần một file text 8
dòng, viết trong vòng vỏn vẹn 3 phút. File này chứa tất cả những gì cần thiết cho bộ
nhân 16x16 bít. Ngoài việc tiết kiệm được nhiều thời gian thì ngôn ngữ HDL còn độc
lập với các nhà sản xuất. Điều này mở ra khả năng thiết kế đa dạng và hiệu quả cho các
nhà phát triển.
Việc chuyển đổi bộ nhân 16x16 bit thành 32x32 bit cũng rất dễ dàng nếu sử dụng ngôn
ngữ HDL. Sau đây là hai đoạn chương trình viết bằng VHDL cho bộ nhân 16x16 bit và
bộ nhân 32x32 bit :
Bộ nhân 16x16 bit:
entity MULT is
port ( A,B:in std_logic_vector(15 downto 0);
Y:out std_logic_vector(31 downto 0));
end MULT;
architecture BEHAVE of MULT is
begin
Y <= A*B;
end BEHAVE;
Bộ nhân 32x32 bit:
entity MULT is
port (A,B:in std_logic_vector(31 downto 0);
Y:out std_logic_vector(31 downto 0));
end MULT;
architecture BEHAVE of MULT is
begin
Y <= A*B;
end BEHAVE;
1.6. Virtex-4 LC System Board
1.6.1. Giới thiệu chung
Kít Virtex-4 LC cung cấp một bộ nền phát triển đầy đủ với chi phí thấp cho việc
thiết kế và kiểm tra các ứng dụng trên họ FPGA Virtex-4 LX của hãng Xilinx. Kít phát
triển cho phép nhà thiết kế thực thi các bộ xử lí nhúng dựa trên các ứng dụng với độ linh
hoạt rất cao.Virtex-4 FPGA đi kèm với lõi bộ vử lí mềm Xilinx MicroBlaze cho phép đội
phát triển phầm mềm dễ dàng truy cập vào nền phần cứng trước khi làm việc với sản
phẩm hoàn thiện.Bo mạch Virtex-4 LC sử dụng chip FPGA XC4VLX25-10FS363C của
hãng Xilinx, bộ nhớ 64Mb DDR SDRAM, một cổng 10/100 Ethernet PHY, đồng hồ
hệ thống 100 Mhz,cổng giao tiếp RS 232 và các mạch mở rộng hỗ trợ người dùng phát
triển hệ thống. Bo mạch cũng hỗ trợ module chuẩn mở rộng P160 của Memec cho
phép thêm các module một cách dễ dàng.
Chú thích :
1. Cổng RS232
2. Chíp Xilinx XC4VLX25-10SF363 FPGA
3. Bộ tạo dao động 100 Mhz
4. LCD
5. Công tắc nguồn
6. Nguồn
7. Khe cắm mở rộng
8. Khe cắm P160
9. Cổng Ethernet
10. Phím bấm mềm
11. Công tắc DIP
Hình 1.12. Bo mạch Virtex-4 LC
1.6.2. Các chức năng của bo phát triển
Sơ đồ khối của bo phát triển Virtex-4™ LC được mô tả trong hình 1.15. Kit gồm các
khối chức năng chính như sau :
• Chíp Xilinx XC4VLX25-10SF363 FPGA
• 64MB DDR SDRAM
• 10/100 Ethernet PHY
• Bộ tạo dao động LVTTL 100MHz
• Khe cắm cho bộ dao động LVTTL
• Khe cắm P160
• Màn hình LCD 2x16
• 16Mb Serial Flash để để cấu hình cho FPGA
• Cổng cấu hình và lập trình PC4 JTAG
• SystemACE™ Module Connector
• Cổng RS232
• Các đèn LED đơn
• Bốn phím bấm mềm và 8 công tắc chuyển mạch DIP
• GPIO Header
Sơ đồ tổ chức các khối chức năng trên Kit:
Hình 1.13. Sơ đồ khối chức năng của Virtex-4 LC
Cổng cấu hình và nạp chương trình cho FPGA JTAG ( PC4 )
Hình 1.14. Cổng cấu hình và nạp chương trình cho Virtex-4
Sử dụng các LED
Virtex-4 LC có bốn đèn LED, điều khiển trạng thái SÁNG bằng tín
hiệu ‘0’. Sau đây là bảng kí hiệu các LED và chân điều khiển tương ứng trên chip
FPGA .
Bảng 1.1. Sơ đồ chân LED
Bảng 1.2. Sơ đồ phím bấm
Bảng 1.3. Sơ đồ công tắc
Cổng nối tiếp RS232