📄 ffunc.v
字号:
/////////////////////////////////////////////////////////////////////
//// ////
//// ////
//// F函数模块 ////
//// ////
/////////////////////////////////////////////////////////////////////
module crp(P, R, K_sub);
output [1:32] P;
input [1:32] R;
input [1:48] K_sub;
wire [1:48] Temp1;
wire [1:48] Temp2;
wire [1:32] Temp3;
// 把R换位并扩展为48位,以便和子密钥进行异或运算
assign Temp1[1:48] = { R[32], R[1], R[2], R[3], R[4], R[5], R[4], R[5],
R[6], R[7], R[8], R[9], R[8], R[9], R[10], R[11],
R[12], R[13], R[12], R[13], R[14], R[15], R[16],
R[17], R[16], R[17], R[18], R[19], R[20], R[21],
R[20], R[21], R[22], R[23], R[24], R[25], R[24],
R[25], R[26], R[27], R[28], R[29], R[28], R[29],
R[30], R[31], R[32], R[1]};
assign Temp2 = Temp1 ^ K_sub;
// 调用S盒模块,利用Temp2寻址,得出Temp3各位的值
sbox1 u0( .addr(Temp2[01:06]), .dout(Temp3[01:04]) );
sbox2 u1( .addr(Temp2[07:12]), .dout(Temp3[05:08]) );
sbox3 u2( .addr(Temp2[13:18]), .dout(Temp3[09:12]) );
sbox4 u3( .addr(Temp2[19:24]), .dout(Temp3[13:16]) );
sbox5 u4( .addr(Temp2[25:30]), .dout(Temp3[17:20]) );
sbox6 u5( .addr(Temp2[31:36]), .dout(Temp3[21:24]) );
sbox7 u6( .addr(Temp2[37:42]), .dout(Temp3[25:28]) );
sbox8 u7( .addr(Temp2[43:48]), .dout(Temp3[29:32]) );
// 将Temp3换位并赋给输出P
assign P[1:32] = { Temp3[16], Temp3[7], Temp3[20], Temp3[21], Temp3[29], Temp3[12],
Temp3[28],Temp3[17], Temp3[1], Temp3[15], Temp3[23], Temp3[26], Temp3[5],
Temp3[18],Temp3[31], Temp3[10], Temp3[2], Temp3[8], Temp3[24], Temp3[14],
Temp3[32],Temp3[27], Temp3[3], Temp3[9], Temp3[19], Temp3[13], Temp3[30],
Temp3[6],Temp3[22], Temp3[11], Temp3[4], Temp3[25]};
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -