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.. Hệ thống các đường nối cho phép các khối logic trongchip FPGA có t
Trang 1MỤ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
Trang 22.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
Trang 33.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
Trang 4CÁC TỪ VIẾT TẮT TRONG ĐỒ ÁN
FPGA Field Programmable Gates Array
ASIC Application Specific Integrated Circuit
CPLD Complex Programmable Logic Device
AES Advanced Encryption Standard
LUT Look Up Table
VHDL VHSIC Hardware Description Language
VHSIC Very High Speed Integrated Circuits
Các mạch tích hợp tốc độ cao
PLD Programmable Logic Device
GPIO General Purpose IO
Các chân vào ra thông thường
CAD Computer Aided Design
Hỗ trợ thiết kế trên máy tính
IEEE Institute of Electrical and Electronic Engineers
Viện Kĩ thuật điện và điện tử
NIST National Institute of Standard and Technology
Viện công tiêu chuẩn và công nghệ Hoa Kỳ
GF Galois Field
Trường Galoa
DES Data Encryption Standard
Tiêu chuẩn mã hóa dữ liệu
DPA Difference Power Attack
Trang 5DANH 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
Trang 6DANH MỤC CÁC HÌNH VẼ
Trang
Hình 1.1 Kiến trúc FPGA 4
Hình 1.2 Logic block 5
Hình 1.3 Vị trí các chân của Logic block 5
Hình 1.4 Liên kết Logic block với kênh định tuyến 6
Hình 1.5 Kết nối các khối logic 7
Hình 1.6 Kết nỗi các khối logic với các chân I/O của FPGA 7
Hình 1.7 Các đường kết nối chuyên dụng tốc dộ cao 8
Hình 1.8 FPGA kết hợp với RAM trong 9
Hình 1.9 RAM hai cổng 9
Hình 1.10 Quá trình thiết kế PLD 12
Hình 1.11 Thiết kế bộ nhân sử dụng Sơ đồ và ngôn ngữ VHDL 13
Hình 1.12 Bo mạch Virtex-4 LC 16
Hình 1.13 Sơ đồ khối chức năng của Virtex-4 LC 17
Hình 1.14 Cổng cấu hình và nạp chương trình cho Virtex-4 17
Hình 1.15 Giao tiếp giữa Virtex-4 và cổng RS232 19
Hình 2.1 Trạng thái đầu vào, đầu ra và trung gian 26
Hình 2.2 SubBytes 29
Hình 2.3 ShifRows 30
Hình 2.4 MixColumn 31
Hình 2.5 AddRoundKey 32
Hình 2.6 ShiftRow 34
Hình 2.7 SubWord 36
Hình 2.8 RotWord 36
Hình 3.1 Sơ đồ khối tổng quát hệ thống AES 41
Hình 3.2 Sơ đồ thuật toán Khối data của bộ mã hóa 42
Hình 3.3 Sơ đồ thuật toán Khối KeyExpansion 43
Hình 3.4 Sơ đồ thuật toán khối CPU 45
Hình 3.5 Sơ đồ thuật toán khối giải mã - Dạng 1 46
Hình 3.6 Khối AddRoundKey 46
Hình 3.7 Sơ đồ thuật toán khối giải mã - Dạng 2 47
Hình 3.8 Khối SubByte 48
1
Trang 7Hình 3.9 Khối ShiftRow 49
Hình 3.10 Khối MixColumn 50
Hình 3.11 Khối Xtime 51
Hình 3.12 Phép biến đổi theo dòng 52
Hình 3.13 Khối SubMixColumn 53
Hình 3.14 Khối nhân 09h 53
Hình 3.15 Khối nhân 0Bh 53
Hình 3.16 Khối nhân 0Dh 54
Hình 3.17 Phép nhân 0Eh 54
Hình 3.18 Khối InverseMixColumn 55
Hình 3.19 Sơ đồ khối KeyExPansion 55
Hình 3.20 Khối RotWord 56
Hình 3.21 Khối SubWord 56
Hình 3.22 Khối Rcon 57
Hình 3.23 Khối KeyStorage 57
Hình 3.24 Khối DemuxKey 59
Hình 3.25 Khối CPU 59
Hình 3.26 Giản đồ thời gian điều khiển vòng key 60
Hình 3.27 Giản đồ thời gian điều khiển vòng data 60
Hình 3.28 Sơ đồ khối giao tiếp với máy tính 62
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
2
Trang 8Bê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êucầ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ánbả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, đâycũ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 trongthô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 đánhgiá rất cao trong bảo mật thông tin
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 đượcphá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 đỡ emtậ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ổnglogic 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
3
Trang 9mộ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ảnhoặ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 trongchip FPGA có thể kết nối với nhau như mong muốn của người thiết kê hệ thống FPGAnhì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ểmnổ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ệmthờ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ểntrê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 ProgrammableLogic Device) vào giữa những năm 1980 Ross Freeman và Xilinx là hai nhà đồng phátminh 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ácchip 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ủachip 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 FPGAcá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 rathì 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ứccao 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ộtphầ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 đổithiết kế của hệ thống trong khi nó vẫn hoạt động
4
Trang 101.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ốngRadio 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 đangphá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ủaCPLD trong lĩnh vực chip khả trình Nhưng với khả năng và tốc độ phát triển nhanhchó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ạpcao là thị trường mà hiện nay các chip SOC đang chiếm giữ
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 haymộ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ỏitố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ệntrê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 đượcbiết đến như là Reconfigurable Computing Cấu trúc song song vốn có của các logicblock 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 xungnhị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ònnhanh 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ăngcá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ệnASIC mà còn giảm chi phí tối đa do quá trình kiểm ta thiết kế , không những đượckiể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ựctrong 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
5
Trang 11Tuy 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)
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 ứngvớ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ộtFPGA gồm một mảng 4x4 của các khối logic
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ộtflip-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ộtmạ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
6
Trang 12Hì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ốilogic.( 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
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ênhgầ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ầnvớ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 Wnào (trong đó W độ rộng kênh) trong kênh nằm ngang bên dưới nó
7
Trang 13Việ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 đườngdẫ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ộpchuyể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ó 3chuyể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ênhgầ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ạchnà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ạnkê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 trongcá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/Othông thường Khoảng 20% đến 30 % số chân của FPGA là chân chuyên dụng Cácchâ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ềukhiể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 chocá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
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áckhố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
8
Trang 14chứ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ứctạ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
Trang 15Ngoài các đường kết nối thông thường các FPGA còn có các đường chuyên dụngkế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áckhố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 RAMlà:
RAM đơn cổng: Chỉ có duy nhất một phần tử truy nhập RAM để đọc và ghi tạimộ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
Trang 16để đọc và ghi cùng lúc Mỗi phần tử sẽ sử dụng một xung clock khác nhau.CácRAM 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ộ tuynhiên việc đọc dữ liệu từ RAM có thể thực hiện được theo phương thức không đôngbộ
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 chophé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
Trang 171.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ácngô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ấutrú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-routethườ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ácphươ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ăngmứ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ìnhcho 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 Ccủ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 đượcmụ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ầnmề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 racá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 nhanhquá 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 đượccung 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
Trang 18đượ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ácgiấ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ìnhnguồn đó Việc mô phỏng các module được thực hiện trên các file này Sau khi thựchiệ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ữngngườ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áchthứ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à ứngdụ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ĩacác chân I/O của thiết bị
-Tạo Netlist
Trang 19Hì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 đòihỏ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ảothô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 ứngdụ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ìnhnhư 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ủaphươ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
Trang 20Hì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 16bit, 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ấtkhoả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 8dò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 độclậ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ácnhà 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ônngữ 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 :
Trang 21Bộ nhân 16x16 bit:
entity MULT isport ( A,B:in std_logic_vector(15 downto 0);
Y:out std_logic_vector(31 downto 0));
Y:out std_logic_vector(31 downto 0));
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ệcthiế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áttriể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 độ linhhoạ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
Trang 22phá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ảnphẩm hoàn thiện.Bo mạch Virtex-4 LC sử dụng chip FPGA XC4VLX25-10FS363C củahã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áttriển hệ thống Bo mạch cũng hỗ trợ module chuẩn mở rộng P160 của Memec cho phépthêm các module một cách dễ dàng
Trang 23Hì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 :
Trang 24 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
Trang 25Virtex-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 chipFPGA
Bảng 1.1 Sơ đồ chân LED
Trang 26Các chân tín hiệu của Virtex-4 dùng để giao tiếp với RS232 cho bởi bảng sau:
Bảng 1.4 Giao tiếp với RS232
Sau đây là hình mô tả giao tiếp giữa chip Virtex-4 và RS232
Hình 1.15 Giao tiếp giữa Virtex-4 và cổng RS232
Luận văn này sẽ sử dụng cổng RS232 để giao tiếp với máy tính
Màn hình LCD
Bảng 1.5 Màn hình LCD
Trang 28CHƯƠNG 2:
CHUẨN MÃ HÓA NÂNG CAO AES
2.1 Lịch sử chuẩn mã hóa AES
Viện Tiêu chuẩn và công nghệ quốc gia Mỹ( The National Institute of Standardand Technology – NIST ) đã làm việc với cộng đồng mã hóa và công nghiệp để pháttriển AES Mục đích chung là phát triển một tiêu chuẩn xử lí thông tin liên bang(Federal Information Processing Standard – FIPS ) Tiêu chuẩn này bao gồm một thuậttoán mã hóa có khả năng bảo vệ các thông tin nhạy cảm của Liên bang trong vòng mộtthế kỉ tới.Thuật toán này dự kiến được chính phủ Mỹ áp dụng trên cơ sở tự nguyện vàchỉ áp dụng nội bộ
Tháng một năm 1997, NIST tuyên bố bắt đầu các nỗ lực phát triển AES Và tênchính thức của thuật toán này được công bố này 12 tháng 9 năm 1997 Thuật toán nàyphải được thực thi trên mã hóa khóa đối xứng như là một mã hóa khối (block cipher )
nó hỗ trợ các khóa 128 bit, 196 bit và 256 bit Các yêu cầu cơ bản được đưa ra choAES như sau:
+ AES được công khai về mặt tiêu chuẩn;
+ AES là hệ mã hóa đối xứng;
+ AES được thiết kế sao cho độ dài của khóa có thể mở rộng theo yêu cầu
+ AES có thể được thực hiện trên các phần cứng và phần mềm;
+ Thuật toán thỏa mãn yêu cầu sẽ được xem xét trên cơ sở các phương diện sau :
- Tính bảo mật;
- Tính hiệu quả về mặt tính toán;
- Nhu cầu đòi hỏi về bộ nhớ;
+ Tính đơn giản:
- Tính mềm dẻo, linh hoạt;
- Các yêu cầu về bản quyền
Trang 29Từ tháng 8 năm 1998 đến tháng 5 năm 2000, NIST đã tổ chức ba hội nghị nhằmlựu chọn ra các thuật toán phù hợp nhất cho yêu cầu mã hóa của AES Hội nghị đãtrình bày, xem xét và đánh giá các thuật toán và cuối cùng đã chọn ra thuật toán thíchhợp nhất đó là thuật toán Rijndael ( tháng 10 năm 2000) Sau đó NIST đã đưa cho công
bố văn bản chuẩn của AES (FIPS - 197) vào tháng 2 năm 2001 Và hè năm 2001,NIST đã kiểm thử hệ thống AES đầu tiên,
2.2 Cơ sở toán học xây dựng AES
AES xây dựng dựa trên hai loại phép toán : loại phép toán trên tập các byte và cácphép toán trên các vector 4 byte (word)
Trường các byte: Mỗi byte được biểu diễn bằng một đa thức có bậc không quá 7với các hệ số btrong tập {0,1}.Kí hiệu như sau :
Đa thức trên biểu diễn cho phần tử : ‘D4’ Vậy ‘57’+ ‘83’ = ‘D4’
Một cách khác : Biểu diễn dưới dạng nhị phân, sau đó lấy XOR của hai số nhị phân đó
Trang 30Đa thức này biểu diễn phần tử ‘C1’ nên ‘57’∙* ‘83’ = ‘C1’
Tuy nhiên phép nhân trên đây không tương ứng với một phép nhân đơn giản nào
ở mức byte Để ý rằng phép nhân này có thể được quy về phép nhân đơn giản hơn vìphép nhân với một đa thức có thể được xem như phép cộng của nhiều phép nhân đơnthức Và phép nhân này lại có thể được coi là các phép nhân liên tiếp đối với x
Nhận xét: Phép nhân trên có tính chất kết hợp và phân phối đối với phép cộng
Nó có phần tử đơn vị là byte ‘01’.Hơn thế mọi phần tử không phải là ‘00’ đều có phần
tử nghịch đảo Phép cộng và phép nhân trên tập các byte tạo thành một trường, đó làtrường Galois GF ( 28 )
Nhân với x: Chú ý rằng x chính là biểu diễn của phần tử “00000010”
Với byte b = b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0, ta có :
x* b = x( b 7 x + b 6 x + b 5 x + b 4 x + b 3 x + b2 x + b 1 x + b 0 ) mod m ( x ) =
Trang 31Khi b7 = 0 thì xb( x) là một đa thức bậc không quá 7, do đó kết quả của phépnhân là byte b dịch sang trái một bít Ví dụ: nếu b = “01100101” thì kết quả là
2.2.3 Đa thức với hệ số hằng (trong trường GF ( 28 ))
Ta biết rằng trên một trường hữu hạn luôn có thể xây dựng các không gianvector hoặc các vành đa thức, trong trường GF(28) cũng vậy Luôn tồn tại một quan hệtương ứng giữa các vector và các đa thức xác định trên cùng một trường,trong đó cáctọa độ của một vector k chiều được ứng với hệ số của một đa thức bậc không quák-1 Sau đây ta chỉ xét các bộ 4 byte, còn gọi là word, cho nên ta chỉ đề cập đến cácvector 4-byte và các đa thức bậc không quá 3, trong đó vector (b3, b2, b1, b0 ) được ứngvới đa thức b3 x3 + b2 x 2 + b1 x+ b0
Trang 32Phép cộng các đa thức (hay các vector tương ứng ) được quy về phép cộng các byte trong GF( 28 )
Phép nhân hai đa thức (hay các vector tương ứng ) theo quy tắc sau :
- Quy tắc nhân • và cộng các hệ số trong trường GF( 28 )
- Đa thức tích phải có bậc nhỏ hơn 4 cho nên sau các tính toán thông thườngphải tiến hành rút gọn theo modulo một đa thức bậc 4 nà đó, trong Rijndael đa thức nàyđược chọn là M(x) = x4 + x + 1
Ví dụ: với 2 đa thức :
a(x) = a3x3 + a2x2 + a1x + a0 ; b(x) = b3x3 + b2x2 + b1x + b0
thì tích thông thường của chúng sẽ là : c(x) = c6x6 + c5x5 + c4x4 + c3x3 + c2x2 + c1x + c0
với các hệ số xác định như sau :
d(x) = a(x) b(x) với các hệ số xác định như sau :
Trang 33Phép nhân một đa thức với x :
Giả sử ta có đa thức : b(x) = b3x3 + b2x2 + b1x + b0 Khi ấy :
x b(x) = x.b(x) mod (x4 + 1) = ( b3x4 + b2x3 + b1x2 + b0x ) mod (x4 + 1)
= b2x3 + b1x2 + b0x + b3
Như vậy việc cho vector các hệ số của đa thức b(x) là ( b3, b2, b1, b0 ) xoay vòng sangtrái 1 bit ta sẽ thu được vector các hệ số của đa thức tích x b(x) là ( b2, b1, b0, b3 )Điều này hoàn toàn phù hợp với công thức nhân ma trận nêu trên Tóm lại việc nhânvới x nói chung được thực hiện bằng cách xoay vòn sang trái
2.3 Các phép biến đổi
Ba tiêu chí được quán triệt trong quá trình thiết kế là :
- Có khả năng chống lại các phương pháp thám mã ;
- Chương trình gọn, tốc độ nhanh và đa nền;
- Thiết kế mạch lạc,rõ ràng trong sáng,có khả năng linh hoạt và tính module hóa Các phép biến đổi của AES được thực hiện trên một ma trận hai chiều gọi làState State bao gồm bốn hàng mỗi hàng chứa Nb byte với Nb bằng độ dài của block
chia cho 32 Dãy State kí hiệu là s, mỗi byte có 2 chỉ số : chỉ số hàng r trong khoảng 0
< r < 4 và chỉ số cột là c trong khoảng 0 < c < Nb Một byte bất kì trong State đều có
thể kí hiệu là sr,c hoặc s[r,c]
Bắt đầu mã hóa hoặc giải mã dữ liệu vào ( là chuỗi các byte in0, in1, in15 ) – được copy vào trong chuỗi State ( hình 3 ) Sau khi quá trình mã hóa hay giải mã
được thực hiện trên chuỗi State này thì giá trị nhận được sẽ được copy sang chuỗi
byte đầu ra: out0, out 1, … out15
Hình 2.1 Trạng thái đầu vào, đầu ra và trung gian
Trang 34Quy tắc chuyển từ đầu vào sang dạng State như sau :
s[r, c] = in[r + 4c] với
Quy tắc chuyển từ State sang đầu ra như sau :
out[r + 4c] = s[r, c] với
Với thuật toán AES thì độ dài của input block, output block và State là 128 bit Do đó
Nb = 4 (đây chính là số cột – số từ 32 bit) trong State
Theo chuẩn AES, độ dài của từ khóa K có thể là 128, 192,hoặc 256 bit Độ dài của Key tương ứng là Nk = 4,6, hoặc 8 ( chính số cột của từ khóa )
Cũng theo chuẩn AES, số vòng thực hiện mã hóa dữ liệu của thuật toán sẽ phụ
thuộc vào độ lớn của từ khóa Số vòng quay kí hiệu là Nr, với Nr = 10 khi Nk = 4,
2 Phép dịch hàng đối với dãy State
3 Phép trộn cột đỗi với dãy State
4 Phép cộng State Round Key
2.3.1 Phép thế byte – SubBytes( )
SubByte là một phép biến đổi không tuyến tính Các byte đầu vào được ánh
xạ qua bảng S-box S-box là một ma trận 8x8 được xây dựng trên cơ sở kết hợp haiphép biến đổi sau:
Trang 35- Lấy byte ngược : thay thế mỗi byte bằng nghịch đảo của nó (theo phép nhân trong trường
GF 28 )
- Sau đó áp dụng phép biến đổi affine trên GF(28) :
yi = x i x (i+4) mod 8 x (i+5) mod 8 x (i+6 ) mod 8 x (i+7) mode 8
Với và ‘x’= “x0x1x2x3x4x5x6x7” là kết quả có được sau phép lấy byte ngược
là ‘y’ = “y0y1y2y3y4y5y6y7 ” là kết quả sau phép affine; byte c là một hằng số bằng
{63} hay {01100011}.Dạng ma trận của phép biến đổi này được mô tả như sau :
Tuy nhiên việc tính toán subbyte với các phép biến đổi nói trên là rất phức tạpkhi thực hiện trên phần cứng Người ta đã chứng minh được rằng phép biến đổiSubbyte là khả nghịch có nghĩa là: Với một byte A cho trước tồn tại một và chỉ mộtbyte Y thỏa mãn B = subbyte(A) Do đó người ta đã đưa ra phương pháp ánh xạ đầuvào của phép biến đổi subbyte qua một bảng S-box (xây dựng theo các phép biến đổitrên) để tìm đầu ra