1.设计描述
此设计为DES加密解密算法的FPGA实现,DES算法为密码体制中的对称密码体制,也被称为美国数据加密标准。明文按64位进行分组,密钥长度为64位,随后按照一系列置换和代替技术进行具体的加密算法。
输入为100MHz的时钟,复位信号。
输出为16位数据D[15:0]。
IP核:v4_dcm进行系统分频
输入时钟首先进行dcm分频为10MHz,再通过分频模块进一步分频为100K时钟,并以此为算法中数据处理的基准时钟。复位信号中对各寄存器值初始化,其中对data_in(加密模式下的明文或解密模式下的密文,64位)和密钥key(64位)赋初值,经过DES算法后产生data_out(加密模式下的密文或解密模式下的明文,64位)。将64位data_out分为8组赋给D的数据输出,同时按时钟循环赋给D控制输出,最终在实验箱8个数码管上显示,每个数码管表示8位输出,目的是验证在可综合以及仿真成功的条件下能够在真实环境中运行。
2.代码设计
2.1时钟模块
//main函数例化模块 系统时间分频
//dcm IP核 输入100MHz,输出10MHz
v4_dcm CLK_DIV_10M(
.CLKIN_IN(CLK),
.RST_IN(!rst_n),
.CLKDV_OUT(CLK_10M),
.CLKIN_IBUFG_OUT(),
.CLK0_OUT(),
.LOCKED_OUT(CLK_LOCKED)
);
//100k模块运行时间分频
wire CLK_100K;
parameter DIV_FACTOR = 100;
CLK_DIV CLK_DIV_100K (
.CLK_IN(CLK_10M),
.nRST(CLK_LOCKED),
.CLK_OUT(CLK_100K)
);
defparam CLK_DIV_100K.DIV_FACTOR =DIV_FACTOR;
wire nRST_USER;
assign nRST_USER= CLK_LOCKED;
//时钟分频模块
moduleCLK_DIV(CLK_IN, nRST, CLK_OUT);
input CLK_IN;
input nRST;
output CLK_OUT;
reg CLK_OUT = 1'b1;
reg [9:0] DIV_counter = 10'h000;