基于FPGA的AES算法芯片設計實現
加/脫密模塊實現方案
對于分組密碼芯片加/脫密模塊的實現,有迭代結構、輪展開結構和并行流水線結構等方法。迭代結構需要n(n為加/脫密輪數)個時鐘周期完成一個分組的加/ 脫密操作。這種結構占用面積最小,速度較慢。而輪展開結構能夠有效提高加/脫密速率,卻需要大量占用存儲單元和布線資源,因而面積最大。在設計芯片時,我們需要采用一種速度和面積的有效折衷方案,使得在滿足速率要求的前提下盡可能減少資源占用。并行流水線結構就是這樣一種方案。
流水線技術其實質就是在適當的地方加入寄存器,將前面的運算結果或輸入數據暫存,并在下一個時鐘到來時將寄存值作為后一級運算的輸入。
流水線處理如同生產裝配線那樣,將操作執行工作量分成若干個時間上均衡的操作段,從流水線的起點連續地輸入,流水線的各操作段以重疊方式執行。這使得操作執行速度只與流水線輸入的速度有關,而與處理所需的時間無關。AES分組密碼在非反饋模式下,后續塊的加密與前塊的加密結果無關,即所有塊的加密可并發執行,因而采用流水結構能顯著提高性能。
流水線的引入可以采用輪內流水線結構或者輪間流水線結構來實現。輪內流水線結構把在一個時鐘周期內欲完成的運算劃分為若干子運算(模加運算、查表和各級移位相加運算),采用寄存輸出模式,這種方式既可縮短延時路徑,提高時鐘頻率,又可使各子運算同時進行。這樣一來雖然速度有可能提高,但是增加了控制的復雜度同時占用大量的存儲單元,這對于FPGA實現來說將是很大的負擔,所以本設計采用輪間流水線結構來實現。圖2為輪內流水線結構和輪間流水線結構對比。以 10輪運算為例,可以按輪數(3、3、3、1)拆分為4個流水段,即:第1-3輪為第1段,第4-6輪為第2段,第7-9輪為第3段,第10輪為第4段。為了使各流水段的時間片均衡,在第4段內部需要加入鎖存器使輸出與前3段匹配。用VHDL語言描述實現這個流水線式電路的代碼如下:
Proc1:process(Data_in)begin
A=Round1(Data_in);
Endprocess;
R1:processbegin
waituntilCLK'EventandCLK=‘1’;
A_REG=A;
Endprocess;
Proc2:process(A_REG)begin
B=Round2(A_REG);
Endprocess;
R2:processbegin
waituntilCLK'EventandCLK=‘1’;
B_REG=B;
Endprocess;
Proc3:process(B_REG)begin
C=Round3(B_REG);
Endprocess;
R3:processbegin
waituntilCLK'EventandCLK=‘1’;
C_REG=C;
Endprocess;
Proc4:process(C_REG)begin
D=FinalRound(C_REG);
Data_out=D;
Endprocess;
圖2 輪內流水線結構和輪間流水線結構對比
評論