資源簡介
使用HLS完成AES-128部分運算通路的設計,21個周期可以完成128個bit的加密。
附上可綜合的純RTL Code以及C++代碼。
可通過我的優化選項來學習如何優化HLS工具生產的代碼。
代碼片段和文件信息
#include?
#include?
#define?AES_128
#ifdef?AES_128
#define?Nk?4
#define?Nb?4
#define?Nr?10
#endif
#ifdef?AES_192
#define?Nk?6
#define?Nb?4
#define?Nr?12
#endif
#ifdef?AES_256
#define?Nk?8
#define?Nb?4
#define?Nr?14
#endif
#define?BYTE?unsigned?char
#define?WORD?unsigned?int
BYTE?xtime(BYTE?A);
BYTE?Multiplication(BYTE?ABYTE?B);
BYTE*?Four_Term_Multiplication(BYTE?A[4]BYTE?B[4]);
BYTE?SubBytes(BYTE?IN);
BYTE?InvSubBytes(BYTE?IN);
WORD?SubWord(WORD?IN);
WORD?RotWord(WORD?IN);
WORD?Rcon(WORD?I);
WORD*?KeyExpansion(BYTE?key[4*Nk]);
WORD*?ModifiedKeyExpansion(BYTE?key[4*Nk]);
void?ShiftRows(BYTE?S[4][Nb]);
void?InvShiftRows(BYTE?S[4][Nb]);
void?MixColumns(BYTE?S[4][Nb]);
void?InvMixColumns(BYTE?S[4][Nb]);
void?AddRoundKey(BYTE?S[4][Nb]WORD?w_bias[Nb]);
void?Cipher(BYTE?in[4*Nb]BYTE?out[4*Nb]WORD?w[Nb*(Nr+1)]);
void?InvCipher(BYTE?in[4*Nb]BYTE?out[4*Nb]WORD?w[Nb*(Nr+1)]);
void?EqInvCipher(BYTE?in[4*Nb]BYTE?out[4*Nb]WORD?dw[Nb*(Nr+1)]);
void?DispArray(char?*ArraynameBYTE?*arrayint?heightint?width);
void?main(int?argc?char*argv[])
{
BYTE?Input[4*Nb]={0x000x110x220x330x440x550x660x770x880x990xaa0xbb0xcc0xdd0xee0xff};
BYTE?key[4*Nk]={0x000x010x020x030x040x050x060x070x080x090x0a0x0b0x0c0x0d0x0e0x0f};
BYTE?CipherOut[4*Nb]InvCipherOut[4*Nb]EqInvCipherOut[4*Nb];
WORD*?w=KeyExpansion(key);
WORD*?dw=ModifiedKeyExpansion(key);
Cipher(InputCipherOutw);
InvCipher(CipherOutInvCipherOutw);
EqInvCipher(CipherOutEqInvCipherOutdw);
DispArray(“CipherIn“(BYTE?*)Input14*Nb);
DispArray(“CipherOut“(BYTE?*)CipherOut14*Nb);
DispArray(“InvCipherOut“(BYTE?*)InvCipherOut14*Nb);
DispArray(“EqInvCipherOut“(BYTE?*)EqInvCipherOut14*Nb);
}
BYTE?xtime(BYTE?A)
{
BYTE?result=(A<<1);
if(A&0x80)
result=result^0x1b;
return?result;
}
BYTE?Multiplication(BYTE?ABYTE?B)
{
BYTE?temp=B;
BYTE?sum=0;
char?i;
for(i=0;i<8;i++)
{
if(A&(0x01< sum=sum^temp;
temp=xtime(temp);
}
return?sum;
}
BYTE*?Four_Term_Multiplication(BYTE?A[4]BYTE?B[4])
{
BYTE*?result=(BYTE*)malloc(4*sizeof(BYTE));
result[0]=Multiplication(A[0]B[0])^Multiplication(A[3]B[1])^Multiplication(A[2]B[2])^Multiplication(A[1]B[3]);
result[1]=Multiplication(A[1]B[0])^Multiplication(A[0]B[1])^Multiplication(A[3]B[2])^Multiplication(A[2]B[3]);
result[2]=Multiplication(A[2]B[0])^Multiplication(A[1]B[1])^Multiplication(A[0]B[2])^Multiplication(A[3]B[3]);
result[3]=Multiplication(A[3]B[0])^Multiplication(A[2]B[1])^Multiplication(A[1]B[2])^Multiplication(A[0]B[3]);
return?result;
}
BYTE?SubBytes(BYTE?IN)
{
const?static?BYTE?S_Box[16][16]={
{0x630x7c0x770x7b0xf20x6b0x6f0xc50x300x010x670x2b0xfe0xd70xab0x76}
{0xca0x820xc90x7d0xfa0x590x470xf00xad0xd40xa20xaf0x9c0xa40x720xc0}
{0xb70xfd0x930x260x360x3f0xf70xcc0x340xa50xe50xf10x710xd80x310x15}
{0
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-06-19?12:33??AES_VLSI\
?????目錄???????????0??2017-01-20?19:39??AES_VLSI\C++\
?????目錄???????????0??2017-01-20?17:34??AES_VLSI\C++\C++\
?????文件????????4001??2017-01-17?13:14??AES_VLSI\C++\C++\C++.vcxproj
?????文件?????????942??2017-01-17?13:14??AES_VLSI\C++\C++\C++.vcxproj.filters
?????目錄???????????0??2017-01-20?19:39??AES_VLSI\C++\C++\Debug\
?????文件??????????72??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\C++.lastbuildstate
?????文件????????2041??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\C++.log
?????文件????????1762??2017-01-20?19:39??AES_VLSI\C++\C++\Debug\CL.read.1.tlog
?????文件?????????348??2017-01-20?19:39??AES_VLSI\C++\C++\Debug\CL.write.1.tlog
?????文件????????1222??2017-01-20?18:28??AES_VLSI\C++\C++\Debug\cl.command.1.tlog
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
?????文件???????????2??2017-01-20?18:29??AES_VLSI\C++\C++\Debug\li
............此處省略810個文件信息
評論
共有 條評論