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.. một hàm toán học Trong hầu hết các FPGA, các thành phần logic lậ
Trang 1Danh 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.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 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 4AES Advanced Encryption Standard
Các mạch tích hợp tốc độ cao
Các chân vào ra thông thường
Hỗ trợ thiết kế trên máy tính
Viện Kĩ thuật điện và điện tử
Viện công tiêu chuẩn và công nghệ Hoa Kỳ
Trường Galoa
Tiêu chuẩn mã hóa dữ liệu
Trang 5Bả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
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
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ê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
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
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ả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 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
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ố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ữ
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
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 ứ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
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
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ố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
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ó
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 đườ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 :
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
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
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ứ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
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ụ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à:
một thời điểm
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á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í
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á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
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á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
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 đò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
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 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 :
Trang 21Bộ 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));
Y:out std_logic_vector(31 downto 0));
Trang 22hoạ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
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 SystemACE™ Module Connector
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
Trang 25Sử 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
Trang 26Bo mạch Virtex-4 cung cấp giao diện RS232 với hai tín hiệu RX và TX và các jumper để kết nối các tín hiệu RTS và CTS
Cá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
Trang 27Màn hình LCD
Bảng 1.5 Màn hình LCD
Trang 28Thá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ên chí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ày phả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 cho AES 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 đơ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ằm lự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ích hợ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ác phép toán trên các vector 4 byte (word)
với các hệ số btrong tập {0,1}.Kí hiệu như sau :
(x x x x 1) (x x 1) x x x x
Đ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 đơn thứ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à
)
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ép nhân là byte b dịch sang trái một bít Ví dụ: nếu b = “01100101” thì kết quả là
“101001010” Khi b7 = 1 thì xb( x) là một đa thức bậc 8 ta thực hiện như sau :
x * b = ( xb( x) – x8 ) – ( m(x) – x8 ) = ( xb( x) – x8 ) + ( m(x) – x8 ) Tổng thứ nhất là b dịch một bít sang trái, tổng thứ 2 là ‘1B’, kết quả là b dịch một bít sang trái và XOR với ‘1B’
Nhân với x là một trong những hàm cơ bản trong thuật toán được kí hiệu là xtime( )
Theo các chú ý trên ta có Ví dụ : Nhân ‘57’ với ‘13’ : ‘57’• ‘02’ = xtime(‘57’) = ‘AE’
‘57’• ‘04’ = xtime(‘AE’) = ‘47’
‘57’• ‘08’ = xtime(‘47’) = ‘8E’
‘57’• ’10 = xtime(‘8E’) = ‘07’
Để ý : ‘13’ = ‘10’ ‘02’ ‘01’ Suy ra : ‘57’• ‘13’ = ‘57’• (‘10’ ‘02’ ‘01’ ) = ‘07’ ‘AE’ ‘57’ = ‘FE’
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 gian
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ác tọ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ác vector 4-byte và các đa thức bậc không quá 3, trong đó vector (b3, b2, b1, b0 ) được ứng với đa thức b x3 + b x 2 + b x+ b
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ường phả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
+ 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 :
c6 = a3 • b3 ; c5 = a3 • b2 b3 • a2 ; c4 = a3 • b1 b2 • a2 b3 • a1
c0 = a0 • b0; c1 = a1 • b0 b0 • a1 ; c2 = a2 • b0 b2 • a0 b1 • a1
c3 = a3 • b0 b2 • a1 b1 • a2 b3 • a0
Để có tích trong vành words ( kí hiệu là : ) ta phải tiến hành rút gọn theo
thu được đa thức
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 sang trá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ân vớ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 0 r 4 à 0v c Nb
Quy tắc chuyển từ State sang đầu ra như sau :
out[r + 4c] = s[r, c] với 0 r 4 à 0v c Nb
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
Trang 352.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 hai phép biến đổi sau:
- 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 0 i 8 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 :
1 1
2 2
3 3
4 4
5 5
6 6
7 7
x y
x y
x y
x y
x y
x y