📄 all-desvf.v
字号:
assign K3[40] = dec ? K[31] : K[21];
assign K3[41] = dec ? K[14] : K[8];
assign K3[42] = dec ? K[37] : K[0];
assign K3[43] = dec ? K[43] : K[37];
assign K3[44] = dec ? K[15] : K[9];
assign K3[45] = dec ? K[16] : K[38];
assign K3[46] = dec ? K[28] : K[22];
assign K3[47] = dec ? K[38] : K[28];
assign K3[48] = dec ? K[0] : K[49];
assign K2[1] = dec ? K[33] : K[54];
assign K2[2] = dec ? K[54] : K[18];
assign K2[3] = dec ? K[12] : K[33];
assign K2[4] = dec ? K[46] : K[10];
assign K2[5] = dec ? K[24] : K[20];
assign K2[6] = dec ? K[27] : K[48];
assign K2[7] = dec ? K[13] : K[34];
assign K2[8] = dec ? K[17] : K[13];
assign K2[9] = dec ? K[40] : K[4];
assign K2[10] = dec ? K[34] : K[55];
assign K2[11] = dec ? K[25] : K[46];
assign K2[12] = dec ? K[5] : K[26];
assign K2[13] = dec ? K[39] : K[3];
assign K2[14] = dec ? K[11] : K[32];
assign K2[15] = dec ? K[19] : K[40];
assign K2[16] = dec ? K[20] : K[41];
assign K2[17] = dec ? K[3] : K[24];
assign K2[18] = dec ? K[48] : K[12];
assign K2[19] = dec ? K[47] : K[11];
assign K2[20] = dec ? K[41] : K[5];
assign K2[21] = dec ? K[10] : K[6];
assign K2[22] = dec ? K[18] : K[39];
assign K2[23] = dec ? K[26] : K[47];
assign K2[24] = dec ? K[6] : K[27];
assign K2[25] = dec ? K[22] : K[43];
assign K2[26] = dec ? K[44] : K[38];
assign K2[27] = dec ? K[7] : K[28];
assign K2[28] = dec ? K[49] : K[15];
assign K2[29] = dec ? K[9] : K[30];
assign K2[30] = dec ? K[38] : K[0];
assign K2[31] = dec ? K[0] : K[21];
assign K2[32] = dec ? K[15] : K[36];
assign K2[33] = dec ? K[37] : K[31];
assign K2[34] = dec ? K[50] : K[16];
assign K2[35] = dec ? K[21] : K[42];
assign K2[36] = dec ? K[16] : K[37];
assign K2[37] = dec ? K[43] : K[9];
assign K2[38] = dec ? K[23] : K[44];
assign K2[39] = dec ? K[8] : K[29];
assign K2[40] = dec ? K[45] : K[7];
assign K2[41] = dec ? K[28] : K[49];
assign K2[42] = dec ? K[51] : K[45];
assign K2[43] = dec ? K[2] : K[23];
assign K2[44] = dec ? K[29] : K[50];
assign K2[45] = dec ? K[30] : K[51];
assign K2[46] = dec ? K[42] : K[8];
assign K2[47] = dec ? K[52] : K[14];
assign K2[48] = dec ? K[14] : K[35];
assign K1[1] = dec ? K[40] : K[47];
assign K1[2] = dec ? K[4] : K[11];
assign K1[3] = dec ? K[19] : K[26];
assign K1[4] = dec ? K[53] : K[3];
assign K1[5] = dec ? K[6] : K[13];
assign K1[6] = dec ? K[34] : K[41];
assign K1[7] = dec ? K[20] : K[27];
assign K1[8] = dec ? K[24] : K[6];
assign K1[9] = dec ? K[47] : K[54];
assign K1[10] = dec ? K[41] : K[48];
assign K1[11] = dec ? K[32] : K[39];
assign K1[12] = dec ? K[12] : K[19];
assign K1[13] = dec ? K[46] : K[53];
assign K1[14] = dec ? K[18] : K[25];
assign K1[15] = dec ? K[26] : K[33];
assign K1[16] = dec ? K[27] : K[34];
assign K1[17] = dec ? K[10] : K[17];
assign K1[18] = dec ? K[55] : K[5];
assign K1[19] = dec ? K[54] : K[4];
assign K1[20] = dec ? K[48] : K[55];
assign K1[21] = dec ? K[17] : K[24];
assign K1[22] = dec ? K[25] : K[32];
assign K1[23] = dec ? K[33] : K[40];
assign K1[24] = dec ? K[13] : K[20];
assign K1[25] = dec ? K[29] : K[36];
assign K1[26] = dec ? K[51] : K[31];
assign K1[27] = dec ? K[14] : K[21];
assign K1[28] = dec ? K[1] : K[8];
assign K1[29] = dec ? K[16] : K[23];
assign K1[30] = dec ? K[45] : K[52];
assign K1[31] = dec ? K[7] : K[14];
assign K1[32] = dec ? K[22] : K[29];
assign K1[33] = dec ? K[44] : K[51];
assign K1[34] = dec ? K[2] : K[9];
assign K1[35] = dec ? K[28] : K[35];
assign K1[36] = dec ? K[23] : K[30];
assign K1[37] = dec ? K[50] : K[2];
assign K1[38] = dec ? K[30] : K[37];
assign K1[39] = dec ? K[15] : K[22];
assign K1[40] = dec ? K[52] : K[0];
assign K1[41] = dec ? K[35] : K[42];
assign K1[42] = dec ? K[31] : K[38];
assign K1[43] = dec ? K[9] : K[16];
assign K1[44] = dec ? K[36] : K[43];
assign K1[45] = dec ? K[37] : K[44];
assign K1[46] = dec ? K[49] : K[1];
assign K1[47] = dec ? K[0] : K[7];
assign K1[48] = dec ? K[21] : K[28];
endmodule
/////////////////////////////////////////////////////////////////////
//// ////
//// ////
//// 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
/////////////////////////////////////////////////////////////////////
//// ////
//// SBOX 1 ////
//// ////
//// ////
/////////////////////////////////////////////////////////////////////
module sbox1(addr, dout);
input [1:6] addr;
output [1:4] dout;
reg [1:4] dout;
always @(addr) begin
case ({addr[1], addr[6], addr[2:5]}) //利用addr的值来寻址,确定输出dout
0: dout = 14;
1: dout = 4;
2: dout = 13;
3: dout = 1;
4: dout = 2;
5: dout = 15;
6: dout = 11;
7: dout = 8;
8: dout = 3;
9: dout = 10;
10: dout = 6;
11: dout = 12;
12: dout = 5;
13: dout = 9;
14: dout = 0;
15: dout = 7;
16: dout = 0;
17: dout = 15;
18: dout = 7;
19: dout = 4;
20: dout = 14;
21: dout = 2;
22: dout = 13;
23: dout = 1;
24: dout = 10;
25: dout = 6;
26: dout = 12;
27: dout = 11;
28: dout = 9;
29: dout = 5;
30: dout = 3;
31: dout = 8;
32: dout = 4;
33: dout = 1;
34: dout = 14;
35: dout = 8;
36: dout = 13;
37: dout = 6;
38: dout = 2;
39: dout = 11;
40: dout = 15;
41: dout = 12;
42: dout = 9;
43: dout = 7;
44: dout = 3;
45: dout = 10;
46: dout = 5;
47: dout = 0;
48: dout = 15;
49: dout = 12;
50: dout = 8;
51: dout = 2;
52: dout = 4;
53: dout = 9;
54: dout = 1;
55: dout = 7;
56: dout = 5;
57: dout = 11;
58: dout = 3;
59: dout = 14;
60: dout = 10;
61: dout = 0;
62: dout = 6;
63: dout = 13;
endcase
end
endmodule
/////////////////////////////////////////////////////////////////////
//// ////
//// SBOX 2 ////
//// ////
//// ////
/////////////////////////////////////////////////////////////////////
module sbox2(addr, dout);
input [1:6] addr;
output [1:4] dout;
reg [1:4] dout;
always @(addr) begin
case ({addr[1], addr[6], addr[2:5]}) //利用addr的值来寻址,确定输出dout
0: dout = 15;
1: dout = 1;
2: dout = 8;
3: dout = 14;
4: dout = 6;
5: dout = 11;
6: dout = 3;
7: dout = 4;
8: dout = 9;
9: dout = 7;
10: dout = 2;
11: dout = 13;
12: dout = 12;
13: dout = 0;
14: dout = 5;
15: dout = 10;
16: dout = 3;
17: dout = 13;
18: dout = 4;
19: dout = 7;
20: dout = 15;
21: dout = 2;
22: dout = 8;
23: dout = 14;
24: dout = 12;
25: dout = 0;
26: dout = 1;
27: dout = 10;
28: dout = 6;
29: dout = 9;
30: dout = 11;
31: dout = 5;
32: dout = 0;
33: dout = 14;
34: dout = 7;
35: dout = 11;
36: dout = 10;
37: dout = 4;
38: dout = 13;
39: dout = 1;
40: dout = 5;
41: dout = 8;
42: dout = 12;
43: dout = 6;
44: dout = 9;
45: dout = 3;
46: dout = 2;
47: dout = 15;
48: dout = 13;
49: dout = 8;
50: dout = 10;
51: dout = 1;
52: dout = 3;
53: dout = 15;
54: dout = 4;
55: dout = 2;
56: dout = 11;
57: dout = 6;
58: dout = 7;
59: dout = 12;
60: dout = 0;
61: dout = 5;
62: dout = 14;
63: dout = 9;
endcase
end
endmodule
/////////////////////////////////////////////////////////////////////
//// ////
//// SBOX 3 ////
//// ////
//// ////
/////////////////////////////////////////////////////////////////////
module sbox3(addr, dout);
input [1:6] addr;
output [1:4] dout;
reg [1:4] dout;
always @(addr) begin
case ({addr[1], addr[6], addr[2:5]}) //利用addr的值来寻址,确定输出dout
0: dout = 10;
1: dout = 0;
2: dout = 9;
3: dout = 14;
4: dout = 6;
5: dout = 3;
6: dout = 15;
7: dout = 5;
8: dout = 1;
9: dout = 13;
10: dout = 12;
11: dout = 7;
12: dout = 11;
13: dout = 4;
14: dout = 2;
15: dout = 8;
16: dout = 13;
17: dout = 7;
18: dout = 0;
19: dout = 9;
20: dout = 3;
21: dout = 4;
22: dout = 6;
23: dout = 10;
24: dout = 2;
25: dout = 8;
26: dout = 5;
27: dout = 14;
28: dout = 12;
29: dout = 11;
30: dout = 15;
31: dout = 1;
32: dout = 13;
33: dout = 6;
34: dout = 4;
35: dout = 9;
36: dout = 8;
37: dout = 15;
38: dout = 3;
39: dout = 0;
40: dout = 11;
41: dout = 1;
42: dout = 2;
43: dout = 12;
44: dout = 5;
45: dout = 10;
46: dout = 14;
47: dout = 7;
48: dout = 1;
49: dout = 10;
50: dout = 13;
51: dout = 0;
52: dout = 6;
53: dout = 9;
54: dout = 8;
55: dout = 7;
56: dout = 4;
57: dout = 15;
58: dout = 14;
59: dout = 3;
60: dout = 11;
61: dout = 5;
62: dout = 2;
63: dout = 12;
endcase
end
endmodule
/////////////////////////////////////////////////////////////////////
//// ////
//// SBOX 4 ////
//// ////
//// ////
/////////////////////////////////////////////////////////////////////
module sbox4(addr, dout);
input [1:6] addr;
output [1:4] dout;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -