Mô tả khối DES16

Một phần của tài liệu thiết kế hệ thống mã khối bằng công nghệ fpga (Trang 89 - 126)

Khối DES16 là thành phần chính của module DES với 16 vòng lặp. Tại đầu vào dữ liệu có độ rộng là 64 bít đƣợc chia thành 2 phần, các thanh ghi đƣợc tạo ra từ các Triger D của FPGA L0[1..32] và R0[1..32] sử dụng để nhận dữ liệu đầu vào sau hoán vị IP đồng thời cũng là vùng đệm dữ liệu từ đầu ra của các vòng lặp quay về. Tại đầu ra, 2 thanh ghi Li[1..32] và Ri[1..32] cũng đƣợc sử dụng để lƣu giữ kết quả và quay trở về đầu vào sau mỗi vòng lặp do khối điều khiển tác động, đồng thời là

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

vùng đệm dữ liệu của vòng lặp thứ 16 trƣớc khi qua phép hoán vị FP.

Reset Clk Khoá mã Lo Ro 16 vòng lặp Điều khiển Li Ri FP IP

Hình 3.11: Mô tả 16 vòng lặp của DES.

Các vòng lặp của DES có cấu trúc cơ bản giống nhau, vì vậy một vòng lặp của DES sẽ đƣợc mô tả trong tập tin des1.vhd.

6 4 S1 Key 32 S2 S8 EP . P . . . . . XOR1 XOR2 6 4 6 4 32 32 48 32 48 Ri Li Reg_L Reset Clk Lo Ro 32 32 Reg_R

Hình 3.12 : Sơ đồ thiết kế của một vòng lặp.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Mô tả một vòng lặp của DES đã đƣợc trình bày trong phần 3.2.2 gồm các phép toán nhƣ sau:

• EP : Hàm mở rộng dữ liệu của Li từ 32 bít thành 48 bít.

• XOR1 : Phép cộng modul 2 giữa khoá Ki và dữ liệu đầu ra của hàm EP. • S-BOX : Các hộp thế.

• P : Hoán vị dữ liệu đầu ra của các hộp S-BOX. • XOR2 : Phép cộng modul 2 giữa kết quả của P và Li .

Các thành phần khối màu xám trong sơ đồ tạo nên hàm F của DES.

Mô tả khai báo cấu trúc của khối des1 và các hàm trong vòng lặp bằng VHDL nhƣ sau:

entity des1 is port

( clk : in std_logic;

reset : in std_logic;

li,ri : in std_logic_vector(1 to 32);

key : in std_logic_vector(1 to 48);

lo,ro : out std_logic_vector(1 to 32));

end round;

architecture behaviour of des1 is

Mô tả tín hiệu kết nối giữa các hàm trong des1.

signal e : std_logic_vector(1 to 48);

signal b1x,b2x,b3x,b4x,b5x,b6x,b7x,b8x

: std_logic_vector(1 to 6);đầu vào của 8 hộp thế. signal so1x,so2x,so3x,so4x,so5x,so6x,so7x,so8x

: std_logic_vector(1 to 4); đầu ra của 8 hộp thế.

signal ppo,r_toreg32,l_toreg32 : std_logic_vector(1 to 32);

Mô tả cấu trúc hàm des1 bao gồm. component ep component xor1 component sbox1 ... component sbox8 component p component xor2 component reg32

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

end;

a) Hàm EP: 32 bít dữ liệu tại thanh ghi bên phải Ri [1..32] đƣợc mở rộng thành 48 bít theo tham số mô tả ở bảng 3.3; kết quả chuyển tới e[1..48]. Thực hiện phép mở rộng dữ liệu có thể đƣợc mô tả nhƣ sau:

entity ep is port ( ri : in std_logic_vector(1 to 32); e : out std_logic_vector(1 to 48)); end ep; architecture behavior of ep is begin

e(1)<=ri(32); e(47)<=ri(32); lấy nội dung của vị trí thứ 32 trong thanh ghi Ri gán vào vị trí số 1 và vị trí số 47 của e.

....

end behavior;

b) Hàm XOR1: Thực hiện cộng modul 2 giữa khoá trong thanh ghi K[1..48] và dữ liệu chuyển đến qua e[1..48], kết quả đƣa vào 8 hộp S-BOX theo thứ tự vị trí các bít dữ liệu: [1..6] vào hộp S-BOX1; [7..12] vào hộp S-BOX2;... ; [43..48] vào hộp S-BOX8.

Mô tả cấu trúc của XOR1 bằng VHDL nhƣ sau: entity xor1 is port

( e : in std_logic_vector(1 to 48); b1x,b2x,b3x,b4x,b5x,b6x,b7x,b8x : out std_logic_vector (1 to 6);

k : in std_logic_vector (1 to 48)); end xor1;

architecture behavior of xor1 is

signal XX : std_logic_vector( 1 to 48);

begin XX<=k xor e;

b1x<=XX(1 to 6); bít [1..6] đƣa vào hộp thế số 1. b2x<=XX(7 to 12);

....

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

end behavior;

Hàm XOR2 cũng đƣợc mô tả tƣơng tự nhƣ hàm XOR1.

c) Hộp thế S-BOX: Có 8 hộp S-BOX trong mỗi vòng của DES, cấu trúc một hộp S-BOX đƣợc mô tả nhƣ hình 3.13. Trong FPGA chúng ta sử dụng các bít ROM để lƣu các tham số của các hộp S-BOX.

Đầu vào dữ liệu b là xâu bít có độ dài 6, qua hộp thế dữ liệu tại đầu ra S1 là xâu bít có độ dài 4.

4 6

b

S- BOX1 S1

Hình 3.13 : Sơ đồ thực thể hộp S-BOX.

Mô tả hộp thế S-BOX1 bằng VHDL. entity sbox1 is port

( b : in std_logic_vector(1 to 6);

s1 : out std_logic_vector(1 to 4));

end sbox1;

architecture behaviour of sbox1 is begin

process(b) begin case b is

when "000000"=> s1<=To_StdLogicVector(Bit_Vector'(x"e"));

Sử dụng To_StdLogicVector để chuyển đổi kiểu dữ liệu của x”e” đƣợc xác định bởi hàng, cột đƣa vào S1[1..4];

when "000010"=> so<=To_StdLogicVector(Bit_Vector'(x"4")); when "000100"=> so<=To_StdLogicVector(Bit_Vector'(x"d")); ...

when "111101"=> so<=To_StdLogicVector(Bit_Vector'(x"6")); when others=> so<=To_StdLogicVector(Bit_Vector'(x"d")); end case;

end process; end;

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Các hộp thế S-BOX2,..., S-BOX8 cũng đƣợc thực hiện tƣơng tự nhƣ S-BOX1. Mô tả tham số của các hộp thế đƣợc trình bày trong bảng 3.4.

d) Hoán vị P: Thực hiện hoán vị dữ liệu tại đầu ra của các hộp thế theo tham số mô tả ở bảng 3.5; phƣơng pháp thực hiện tƣơng tự nhƣ hoán vị IP đã đƣợc trình bày ở trên.

3.3.3.3. Khối deskey (tính toán khoá).

Sơ đồ tính khoá đƣợc mô tả trên hình 3.14. Nhiệm vụ của khối deskey là tính toán khoá cho 16 vòng lặp của DES mỗi khoá con có độ dài 48 bít từ 56 bít cỡ khoá đúng (64 bít khoá đầu vào loại bỏ 8 bít kiểm tra chẵn lẻ) .

key_in 56 56 PC-1 Dịch vòng LSi PC-2 Lặp 16 lần 64 48 C0 D0

Hình 3.14: Sơ đồ khối tạo khoá con.

key_out(K )i

Mô tả cấu trúc của khối tính khoá con bằng VHDL nhƣ sau: entity deskey is port

( key_in : in std_logic_vector(1 to 64);

shift : in std_logic_vector(1 to 3);

clk : in std_logic;

key_out: out std_logic_vector(1 to 48));

end deskey;

architecture behaviour of deskey is

signal c,d,c1,d1 : std_logic_vector(1 to 28);

component pc1; phép hoán vị PC-1. component shifter; phép dịch vòng trái. component pc2; phép hoán vị PC-2.

Mô tả cách thức nối dây tín hiệu giữa các thành phần trong khối tính khoá: begin

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

pc_1: pc1 port map ( key=>key_in, c0x=>c, d0x=>d );

shifter_comp: shifter port map ( datac=>c, datad=>d, shift=>shift, clk=>clk, datac_out=>c1, datad_out=>d1 );

pc_2: pc2 port map ( c=>c1, d=>d1, k=>ki ); end behaviour;

a) Khối PC-1, PC-2: Từ 64 bít khoá vào cho trƣớc, loại bỏ 8 bít kiểm tra tính chẵn lẻ và hoán vị 56 bít còn lại theo phép hoán vị cố định PC-1 theo tham số mô tả ở bảng 3.6 và phép hoán vị PC-2 theo tham số mô tả ở bảng 3.7.

b) Khối dịch vòng: 56 bít khoá sau hoán vị PC-1 đƣợc chia làm hai phần C0[1..28] và D0[1..28], sau đó mỗi phần C0 và D0 đƣợc dịch vòng sang trái một hoặc hai vị trí tuỳ theo từng vòng khoá con cụ thể do khối control điều khiển, kết quả đƣợc chuyển tới Ci, Di đƣa tới phép hoán vị PC-2 tạo thành khoá con Ki có độ dài xâu bít là 48, đồng thời nội dung của Ci, Di lại đƣợc quay trở về đầu vào phép dịch vòng để tính khoá con tiếp theo.

3.3.3.4. Khối Control (điều khiển).

Nhiệm vụ chính của khối điều khiển là:

- Điều khiển việc vào/ra dữ liệu: Bản rõ, bản mã và khoá.

- Điều khiển thực hiện 16 vòng lặp của DES với các khoá K1,...,K16 trong chế độ mã hoá và K16,...,K1 trong chế độ giải mã.

- Điều khiển việc tính toán khoá.

Sử dụng 3 bít để thể hiện các trạng thái trong phép dịch vòng trái một hoặc hai vị trí và lấy khoá của khối điều khiển tính toán khoá :

Giá trị các bít Mô tả chức năng

000 Không dịch vòng trái; không lấy khoá mới.

001 Không dịch vòng trái; lấy khoá mới.

010 Dịch vòng trái 1 vị trí; không lấy khoá mới.

011 Dịch vòng trái 1 vị trí; lấy khoá mới.

100 Dịch vòng trái 2 vị trí; không lấy khoá mới.

101 Dịch vòng trái 2 vị trí; lấy khoá mới.

“Khác” Báo lỗi

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Init (trạng thái ban đầu): Lấy khoá mới, dịch vòng trái một vị trí. State 1 : Dịch vòng trái một vị trí.

State 2,3,4,5,6,7 : Dịch vòng trái hai vị trí. State 8 : Dịch vòng trái một vị trí. State 9,10,11,12,13,14 : Dịch vòng trái hai vị trí. State 15 : Dịch vòng trái một vị trí. State 16 : Dừng.

Ở mỗi trạng thái điều khiển một khoá con sẽ đƣợc sinh ra phục vụ cho tác vụ

mã hoá - giải mã của mỗi vòng lặp tƣơng ứng.

3.3.3.5. Khối Converter (lấy dữ liệu vào/ra).

Khối converter có nhiệm vụ lấy dữ liệu vào hoặc ra. Về nguyên tắc, dữ liệu vào/ra có thể đƣa song song hoặc nối tiếp phụ thuộc yêu cầu của một bài toán cụ thể nào đó.

Với phƣơng thức đƣa dữ liệu vào song song 64 bít có thể giảm đƣợc số chu kỳ xung nhịp cho một quá trình mã hoá/giải mã một khối dữ liệu. Tuy nhiên phƣơng thức này đôi khi lại phụ thuộc vào dung lƣợng cổng lôgíc và số chân vào/ra của FPGA. Ví dụ: EP20K100TC144-3 có 144 chân vào/ra trong đó 95 chân dành cho ngƣời sử dụng.

Giả sử việc lấy dữ liệu vào/ra bao gồm: - 64 bít cho dữ liệu rõ vào.

- 64 bít cho khoá vào. - 1 bít cho reset. - 1 bít cho clock.

- 1 bít cho chọn chế độ mã hoá/giải mã. - 64 bít cho dữ liệu mã ra.

Nhƣ vậy tổng số chân vào/ra phải dùng sẽ là: 195 chân, lớn hơn nhiều so với số chân của mạch EP20K100TC144-3 chọn lựa để đƣa vào sử dụng trong quá trình thiết kế.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Với phƣơng thức nối tiếp thì ngƣợc lại, sử dụng số chân vào/ra ít hơn và tiết kiệm số cổng lôgíc nhƣng số chu kỳ xung nhịp dành cho một quá trình mã hoá/giải lại cần nhiều hơn vì vậy tốc độ mã hoá/giải mã chậm hơn.

Clk

Data_in Converter

16 64

load unload

Data_out

Hình 3.15: Mô tả khối vào/ra dữ liệu.

Trong thực tế, cần phải quan tâm đến việc kết hợp cả hai phƣơng thức lấy dữ liệu với nhau nhằm đảm bảo tính tối ƣu của thiết kế. Để minh hoạ cho một phƣơng án thiết kế thực tế, khi đó 64 bít dữ liệu đƣợc lấy thành 4 lần nối tiếp nhau, mỗi lần lấy song song 16 bít. Nhƣ vậy sẽ cần 4 chu kỳ xung nhịp cho việc lấy 64 bít dữ liệu. Hình 3.15 minh hoạ cho ví dụ này, trong đó tín hiệu “load”; “unload” điều khiển việc lấy dữ liệu.

3.3.3.6. Tổng hợp các khối chức năng của module DES.

Key [1:16] Data_int [1:16] clk reset Data_out Control_unit Load_cl Load_key Clk Load_pl Reset Output_clk Shit [1:3] Unload_pl Unload_key Control Converter_data Clk Input Output [1..64] load Unload converter datapath Clk Load_cl 0nput_cl C[1:64] Data_in [1:64] reset xkey[1:48] Enciph Des16 Converter_key Clk Input[1:16] Output[1:64] Load Unload converter Key_proc Clk shit1:3] kl[1:48] lhe_key[1:64] Enciph deskey En/De

Hình 3.16: Sơ đồ liên kết giữa các khối trong modul DES.

Khi các khối chức năng trong DES đƣợc mô tả xong, cần phải tiến hành liên kết các khối với nhau.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Có 2 phƣơng pháp thực hiện chính:

- Sử dụng chế độ Block Diagram trong Quartus.

- Sử dụng một mô tả bằng ngôn ngữ mô tả phần cứng VHDL.

3.3.3.7. Kiểm tra thiết kế.

a) Kiểm tra thiết kế bằng chương trình mô phỏng Waveform Edit:

Sau mỗi bƣớc thiết kế chƣơng trình, việc kiểm tra sự hoạt động của khối chức năng với mục đích khảng định tính đúng đắn của thiết kế theo các yêu cầu đặt ra có thể thực hiện nhờ sự trợ giúp bởi chƣơng trình Waveform Edit của công cụ Quartus II với việc cho bộ tham số véc tơ đầu vào mô phỏng, sau khi chạy chƣơng trình Simulation đầu ra sẽ thu đƣợc kết quả. Nếu việc thiết kế chƣa đạt các yêu cầu này, ngƣời thiết kế bắt buộc phải quay lại kiểm tra từng bƣớc trong quá trình thiết kế.

Việc kiểm tra DES có thể thực hiện theo phƣơng pháp Test Vector đƣợc trình bày trong 3.3.5.

b) Kiểm tra thiết kế trên phần cứng:

Nạp chƣơng trình đã đƣợc biên dịch cho phần cứng và tiến hành kiểm tra phân tích trực tiếp trên phần cứng theo phƣơng pháp Test Vector.

3.3.4. Phần cứng mô phỏng module DES.

Để module DES thiết kế trên FPGA có thể hoạt động đƣợc độc lập, cần phải thiết kế một bảng mạch phụ trợ theo sơ đồ hình 3.17:

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn EN M· ho¸/Gi¶i m· FPGA liÖu ra kho¸ Ic cÊu h×nh C¸p mv liÖu vµo t¹o xung nhÞp En/De Reset

Hình 3.17: Sơ đồ khối phần cứng của modul mã khối DES. 3.3.4.1. Khối xử lý chính (mã hoá/giải mã).

Đây là phần chính thực thi toàn bộ các hoạt động của modul mã khối. Toàn bộ chƣơng trình thiết kế thuật toán DES và các chức năng khác của modul bằng ngôn ngữ mô tả phần cứng sau khi qua các giai đoạn của trình biên dịch, tối ƣu, đặt và định đƣờng, kiểm tra sẽ đƣợc nạp và thực hiện trên cho FPGA. Việc chọn linh kiện FPGA hoàn toàn phụ thuộc vào các yêu cầu của một nhiệm vụ cụ thể. Ví dụ: Các yêu cầu về tốc độ xử lý phải đáp ứng đƣợc tốc độ dữ liệu của ứng dụng, số chân vào/ra tín hiệu phụ thuộc vào phƣơng thức lấy dữ liệu vào/ra, số lƣợng các cổng logic của linh kiện phải đảm bảo tƣơng ứng với số lƣợng các cổng logic của chƣơng trình thiết kế, giá thành sản phẩm...

3.3.4.2. Khối cấu hình cho FPGA.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

- Giai đoạn 1: “Nạp mềm” dùng cho việc kiểm tra kết quả trong từng giai đoạn hoặc toàn bộ quá trình thiết kế. Với mỗi khối chức năng đƣợc chia ra trong quá trình thiết kế modul ngoài việc kiểm tra sự hoạt động của khối bằng chƣơng trình mô phỏng“ Vector Waveform File” của công cụ Quartus II nhƣ đã trình bày trong phần 3.3.3.7, ngƣời thiết kế có thể kiểm tra sự hoạt động của các khối bằng cách nạp cấu hình của khối đó thông qua cáp ByteBlasterMV (MV) ra thiết bị phần cứng để phân tích xem hoạt động của khối có đúng so với yêu cầu chƣa. Nếu khối chức năng hoạt động chƣa đúng yêu cầu thì quay lại kiểm tra thiết kế. Cấu hình này trong phần cứng sẽ bị xoá khi tắt nguồn nuôi.

Hình 3.18: Sơ đồ ghép nối giữa FPGA và cáp MV.

- Giai đoạn 2: “Nạp cứng” sau khi kiểm tra toàn bộ hoạt động của modul theo đúng yêu cầu thiết kế, ngƣời thiết kế tiến hành nạp cấu hình cho phần cứng bằng thiết bị nạp trình ALL-11C. IC để lƣu giữ cấu hình đƣợc chọn phải phù hợp với linh kiện FPGA.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Hình 3.19: Sơ đồ ghép nối giữa FPGA và linh kiện cấu hình

3.3.4.3. Các phần mạch khác.

- Mạch tạo xung nhịp: Tạo xung Clock cung cấp cho toàn bộ module.

- Khối nguồn đƣợc thiết kế cho ra các nguồn điện áp DC +5V; +2,5V; +3,3V

để cung cấp cho các vi mạch.

3.3.5. Kiểm tra sự hoạt động của DES trong module mã khối.

Việc thiết kế module mã khối DES, cũng nhƣ cứng hoá các thuật toán phức tạp khác trên công nghệ FPGA phải trả lời một câu hỏi: liệu vi mạch FPGA đã thiết kế có hoạt động đúng nhƣ mô tả lý thuyết của thuật toán? Để kiểm tra tính đúng đắn của thiết bị phần cứng đã thiết kế, ngƣời ta thƣờng thực hiện bằng phƣơng pháp kiểm tra theo vector (test vector)[17], trong đó mỗi vector là một bộ thông tin bao gồm: thông tin đầu vào, thông tin cần xử lý và thông tin kết quả, tuỳ theo từng thuật toán phải đánh giá. Những vector kiểm tra này đƣợc ngƣời xây dựng thuật toán tạo ra bằng công cụ lý thuyết. Việc kiểm tra vector đƣợc thực hiện theo hai phƣơng pháp:

- Phƣơng pháp kiểm tra vector đã đƣợc tính sẵn kết quả KAT (Know Answer

Một phần của tài liệu thiết kế hệ thống mã khối bằng công nghệ fpga (Trang 89 - 126)