⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sha512.v

📁 安全散列函数的VERILOG实现
💻 V
📖 第 1 页 / 共 4 页
字号:
                        '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 + -