📄 sha512.v
字号:
'd87,
'd88,
'd89,
'd90,
'd91,
'd92,
'd93,
'd94,
'd95:
begin
W0 <= W1;
W1 <= W2;
W2 <= W3;
W3 <= W4;
W4 <= W5;
W5 <= W6;
W6 <= W7;
W7 <= W8;
W8 <= W9;
W9 <= W10;
W10 <= W11;
W11 <= W12;
W12 <= W13;
W13 <= W14;
W14 <= Wt;
Wt <= next_Wt;
H <= G;
G <= F;
F <= E;
E <= next_E;
D <= C;
C <= B;
B <= A;
A <= next_A;
round <= round_plus_1;
end
'd96:
begin
A <= next_A + H0;
B <= A + H1;
C <= B + H2;
D <= C + H3;
E <= next_E + H4;
F <= E + H5;
G <= F + H6;
H <= G + H7;
round <= 'd0;
busy <= 'b0;
end
default:
begin
round <= 'd0;
busy <= 'b0;
end
endcase
end
end
//------------------------------------------------------------------
// Kt generator
//------------------------------------------------------------------
always @ (posedge clk_i)
begin
if (rst_i)
begin
Kt <= 'b0;
end
else
begin
case (round)
'd00: Kt <= `K00;
'd01: Kt <= `K00;
'd02: Kt <= `K01;
'd03: Kt <= `K01;
'd04: Kt <= `K02;
'd05: Kt <= `K02;
'd06: Kt <= `K03;
'd07: Kt <= `K03;
'd08: Kt <= `K04;
'd09: Kt <= `K04;
'd10: Kt <= `K05;
'd11: Kt <= `K05;
'd12: Kt <= `K06;
'd13: Kt <= `K06;
'd14: Kt <= `K07;
'd15: Kt <= `K07;
'd16: Kt <= `K08;
'd17: Kt <= `K08;
'd18: Kt <= `K09;
'd19: Kt <= `K09;
'd20: Kt <= `K10;
'd21: Kt <= `K10;
'd22: Kt <= `K11;
'd23: Kt <= `K11;
'd24: Kt <= `K12;
'd25: Kt <= `K12;
'd26: Kt <= `K13;
'd27: Kt <= `K13;
'd28: Kt <= `K14;
'd29: Kt <= `K14;
'd30: Kt <= `K15;
'd31: Kt <= `K15;
'd32: Kt <= `K16;
'd33: Kt <= `K17;
'd34: Kt <= `K18;
'd35: Kt <= `K19;
'd36: Kt <= `K20;
'd37: Kt <= `K21;
'd38: Kt <= `K22;
'd39: Kt <= `K23;
'd40: Kt <= `K24;
'd41: Kt <= `K25;
'd42: Kt <= `K26;
'd43: Kt <= `K27;
'd44: Kt <= `K28;
'd45: Kt <= `K29;
'd46: Kt <= `K30;
'd47: Kt <= `K31;
'd48: Kt <= `K32;
'd49: Kt <= `K33;
'd50: Kt <= `K34;
'd51: Kt <= `K35;
'd52: Kt <= `K36;
'd53: Kt <= `K37;
'd54: Kt <= `K38;
'd55: Kt <= `K39;
'd56: Kt <= `K40;
'd57: Kt <= `K41;
'd58: Kt <= `K42;
'd59: Kt <= `K43;
'd60: Kt <= `K44;
'd61: Kt <= `K45;
'd62: Kt <= `K46;
'd63: Kt <= `K47;
'd64: Kt <= `K48;
'd65: Kt <= `K49;
'd66: Kt <= `K50;
'd67: Kt <= `K51;
'd68: Kt <= `K52;
'd69: Kt <= `K53;
'd70: Kt <= `K54;
'd71: Kt <= `K55;
'd72: Kt <= `K56;
'd73: Kt <= `K57;
'd74: Kt <= `K58;
'd75: Kt <= `K59;
'd76: Kt <= `K60;
'd77: Kt <= `K61;
'd78: Kt <= `K62;
'd79: Kt <= `K63;
'd80: Kt <= `K64;
'd81: Kt <= `K65;
'd82: Kt <= `K66;
'd83: Kt <= `K67;
'd84: Kt <= `K68;
'd85: Kt <= `K69;
'd86: Kt <= `K70;
'd87: Kt <= `K71;
'd88: Kt <= `K72;
'd89: Kt <= `K73;
'd90: Kt <= `K74;
'd91: Kt <= `K75;
'd92: Kt <= `K76;
'd93: Kt <= `K77;
'd94: Kt <= `K78;
'd95: Kt <= `K79;
default:Kt <= 'd0;
endcase
end
end
//------------------------------------------------------------------
// read result
//------------------------------------------------------------------
always @ (posedge clk_i)
begin
if (rst_i)
begin
text_o <= 'b0;
read_counter <= 'b0;
end
else
begin
if (cmd[0])
begin
case (cmd[3])
1'b0: read_counter <= 'd11; // sha-384 384/32=12
1'b1: read_counter <= 'd15; // sha-512 512/32=16
endcase
end
else
begin
if (~busy)
begin
case (cmd[3])
1'b0:
begin
case (read_counter)
'd11: text_o <= SHA384_result[12*32-1:11*32];
'd10: text_o <= SHA384_result[11*32-1:10*32];
'd09: text_o <= SHA384_result[10*32-1:09*32];
'd08: text_o <= SHA384_result[09*32-1:08*32];
'd07: text_o <= SHA384_result[08*32-1:07*32];
'd06: text_o <= SHA384_result[07*32-1:06*32];
'd05: text_o <= SHA384_result[06*32-1:05*32];
'd04: text_o <= SHA384_result[05*32-1:04*32];
'd03: text_o <= SHA384_result[04*32-1:03*32];
'd02: text_o <= SHA384_result[03*32-1:02*32];
'd01: text_o <= SHA384_result[02*32-1:01*32];
'd00: text_o <= SHA384_result[01*32-1:00*32];
default:text_o <= 'b0;
endcase
end
1'b1:
begin
case (read_counter)
'd15: text_o <= SHA512_result[16*32-1:15*32];
'd14: text_o <= SHA512_result[15*32-1:14*32];
'd13: text_o <= SHA512_result[14*32-1:13*32];
'd12: text_o <= SHA512_result[13*32-1:12*32];
'd11: text_o <= SHA512_result[12*32-1:11*32];
'd10: text_o <= SHA512_result[11*32-1:10*32];
'd09: text_o <= SHA512_result[10*32-1:09*32];
'd08: text_o <= SHA512_result[09*32-1:08*32];
'd07: text_o <= SHA512_result[08*32-1:07*32];
'd06: text_o <= SHA512_result[07*32-1:06*32];
'd05: text_o <= SHA512_result[06*32-1:05*32];
'd04: text_o <= SHA512_result[05*32-1:04*32];
'd03: text_o <= SHA512_result[04*32-1:03*32];
'd02: text_o <= SHA512_result[03*32-1:02*32];
'd01: text_o <= SHA512_result[02*32-1:01*32];
'd00: text_o <= SHA512_result[01*32-1:00*32];
default:text_o <= 'b0;
endcase
end
endcase
if (|read_counter)
read_counter <= read_counter - 'd1;
end
else
begin
text_o <= 'b0;
end
end
end
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -