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

📄 md5_comb.v

📁 MD5 算法在Xilinx FPGA上的实现
💻 V
📖 第 1 页 / 共 2 页
字号:
/********************************************************************************
* Module Name : md5_comb
* Description : MD5 computation combologic
* 
*
* *******************************************************************************/

module md5_comb (
         
                 //Inputs
                 RoundNum,
                 StateAReg,
                 StateBReg,
                 StateCReg,
                 StateDReg,
                 DataVld,
                 DataIn,
                 BlockIn,
                 AddRes1,
                 AddRes2,

                //Outputs
                 Md5FuncValue,
                 TValue,
                 XValue,
                 StateAComb,
                 StateBComb,
                 StateCComb,
                 StateDComb,
                 AddendState1,
                 AddendState2,
                 ShiftedAddend
                 
                );

`include "ah_params.vh"
`include "md5_params.vh"
`include "md5_func.vh"
input [5:0]                         RoundNum;
input [STATE_DWIDTH - 1:0]          StateAReg;
input [STATE_DWIDTH - 1:0]          StateBReg;
input [STATE_DWIDTH - 1:0]          StateCReg;
input [STATE_DWIDTH - 1:0]          StateDReg;
input [BLOCK_SIZE  - 1:0]           BlockIn;
input [DATA_WIDTH  - 1:0]           DataIn;
input                               DataVld;
input [STATE_DWIDTH - 1:0]          AddRes1;
input [STATE_DWIDTH - 1:0]          AddRes2;

output [STATE_DWIDTH - 1:0]         Md5FuncValue;
output [STATE_DWIDTH - 1:0]         TValue;
output [STATE_DWIDTH - 1:0]         XValue;
output [STATE_DWIDTH - 1:0]         StateAComb;
output [STATE_DWIDTH - 1:0]         StateBComb;
output [STATE_DWIDTH - 1:0]         StateCComb;
output [STATE_DWIDTH - 1:0]         StateDComb;
output [STATE_DWIDTH - 1:0]         AddendState1;
output [STATE_DWIDTH - 1:0]         AddendState2;
output [STATE_DWIDTH - 1:0]         ShiftedAddend;

reg [STATE_DWIDTH - 1:0]            Md5FuncValue;
reg [STATE_DWIDTH - 1:0]            TValue;
reg [STATE_DWIDTH - 1:0]            XValue;
reg [STATE_DWIDTH - 1:0]            StateAComb;
reg [STATE_DWIDTH - 1:0]            StateBComb;
reg [STATE_DWIDTH - 1:0]            StateCComb;
reg [STATE_DWIDTH - 1:0]            StateDComb;
reg [STATE_DWIDTH - 1:0]            AddendState1;
reg [STATE_DWIDTH - 1:0]            AddendState2;
reg [STATE_DWIDTH - 1:0]            ShiftedAddend;

always @(RoundNum or StateAReg or StateBReg or StateCReg or 
         StateDReg or BlockIn or DataVld)
    begin
       Md5FuncValue = 0;
       XValue = 0;
       TValue = 0;
       if (DataVld) begin
         case(RoundNum)
            0 : begin
              Md5FuncValue = F(StateBReg, StateCReg, StateDReg);
              XValue = byte_flip(DataIn);
              TValue = T01;
            end 
            1 : begin
              Md5FuncValue = F(StateAReg, StateBReg, StateCReg);
              XValue = byte_flip(DataIn);
              TValue = T02;
            end 
            2 : begin
              Md5FuncValue = F(StateDReg, StateAReg, StateBReg);
              XValue = byte_flip(DataIn);
              TValue = T03;
            end 
            3 : begin
              Md5FuncValue = F(StateCReg, StateDReg, StateAReg);
              XValue = byte_flip(DataIn);
              TValue = T04;
            end 
            4 : begin
              Md5FuncValue = F(StateBReg, StateCReg, StateDReg);
              XValue = byte_flip(DataIn);
              TValue = T05;
            end 
            5 : begin
              Md5FuncValue = F(StateAReg, StateBReg, StateCReg);
              XValue = byte_flip(DataIn);
              TValue = T06;
            end 
            6 : begin
              Md5FuncValue = F(StateDReg, StateAReg, StateBReg);
              XValue = byte_flip(DataIn);
              TValue = T07;
            end 
            7 : begin
              Md5FuncValue = F(StateCReg, StateDReg, StateAReg);
              XValue = byte_flip(DataIn);
              TValue = T08;
            end 
            8 : begin
              Md5FuncValue = F(StateBReg, StateCReg, StateDReg);
              XValue = byte_flip(DataIn);
              TValue = T09;
            end 
            9 : begin
              Md5FuncValue = F(StateAReg, StateBReg, StateCReg);
              XValue = byte_flip(DataIn);
              TValue = T10;
            end 
            10 : begin
              Md5FuncValue = F(StateDReg, StateAReg, StateBReg);
              XValue = byte_flip(DataIn);
              TValue = T11;
            end 
            11 : begin
              Md5FuncValue = F(StateCReg, StateDReg, StateAReg);
              XValue = byte_flip(DataIn);
              TValue = T12;
            end 
            12 : begin
              Md5FuncValue = F(StateBReg, StateCReg, StateDReg);
              XValue = byte_flip(DataIn);
              TValue = T13;
            end 
            13 : begin
              Md5FuncValue = F(StateAReg, StateBReg, StateCReg);
              XValue = byte_flip(DataIn);
              TValue = T14;
            end 
            14 : begin
              Md5FuncValue = F(StateDReg, StateAReg, StateBReg);
              XValue = byte_flip(DataIn);
              TValue = T15;
            end 
            15 : begin
              Md5FuncValue = F(StateCReg, StateDReg, StateAReg);
              XValue = byte_flip(DataIn);
              TValue = T16;
            end 
            16 : begin
              Md5FuncValue = G(StateBReg, StateCReg, StateDReg);
              XValue = FX(BlockIn, 1);
              TValue = T17;
            end 
            17 : begin
              Md5FuncValue = G(StateAReg, StateBReg, StateCReg);
              XValue = FX(BlockIn, 6);
              TValue = T18;
            end 
            18 : begin
              Md5FuncValue = G(StateDReg, StateAReg, StateBReg);
              XValue = FX(BlockIn, 11);
              TValue = T19;
            end 
            19 : begin
              Md5FuncValue = G(StateCReg, StateDReg, StateAReg);
              XValue = FX(BlockIn, 0);
              TValue = T20;
            end 
            20 : begin
              Md5FuncValue = G(StateBReg, StateCReg, StateDReg);
              XValue = FX(BlockIn, 5);
              TValue = T21;
            end 
            21 : begin
              Md5FuncValue = G(StateAReg, StateBReg, StateCReg);
              XValue = FX(BlockIn, 10);
              TValue = T22;
            end 
            22 : begin
              Md5FuncValue = G(StateDReg, StateAReg, StateBReg);
              XValue = FX(BlockIn, 15);
              TValue = T23;
            end 
            23 : begin
              Md5FuncValue = G(StateCReg, StateDReg, StateAReg);
              XValue = FX(BlockIn, 4);
              TValue = T24;
            end 
            24 : begin
              Md5FuncValue = G(StateBReg, StateCReg, StateDReg);
              XValue = FX(BlockIn, 9);
              TValue = T25;
            end 
            25 : begin
              Md5FuncValue = G(StateAReg, StateBReg, StateCReg);
              XValue = FX(BlockIn, 14);
              TValue = T26;
            end 
            26 : begin
              Md5FuncValue = G(StateDReg, StateAReg, StateBReg);
              XValue = FX(BlockIn, 3);
              TValue = T27;
            end 
            27 : begin
              Md5FuncValue = G(StateCReg, StateDReg, StateAReg);
              XValue = FX(BlockIn, 8);
              TValue = T28;
            end 
            28 : begin
              Md5FuncValue = G(StateBReg, StateCReg, StateDReg);
              XValue = FX(BlockIn, 13);
              TValue = T29;
            end 
            29 : begin
              Md5FuncValue = G(StateAReg, StateBReg, StateCReg);
              XValue = FX(BlockIn, 2);
              TValue = T30;
            end 
            30 : begin
              Md5FuncValue = G(StateDReg, StateAReg, StateBReg);
              XValue = FX(BlockIn, 7);
              TValue = T31;
            end 
            31 : begin
              Md5FuncValue = G(StateCReg, StateDReg, StateAReg);
              XValue = FX(BlockIn, 12);
              TValue = T32;
            end 
            32 : begin
              Md5FuncValue = H(StateBReg, StateCReg, StateDReg);
              XValue = FX(BlockIn, 5);
              TValue = T33;
            end 
            33 : begin
              Md5FuncValue = H(StateAReg, StateBReg, StateCReg);
              XValue = FX(BlockIn, 8);
              TValue = T34;
            end 
            34 : begin
              Md5FuncValue = H(StateDReg, StateAReg, StateBReg);
              XValue = FX(BlockIn, 11);
              TValue = T35;
            end 
            35 : begin
              Md5FuncValue = H(StateCReg, StateDReg, StateAReg);
              XValue = FX(BlockIn, 14);
              TValue = T36;
            end 
            36 : begin
              Md5FuncValue = H(StateBReg, StateCReg, StateDReg);
              XValue = FX(BlockIn, 1);
              TValue = T37;
            end 
            37 : begin
              Md5FuncValue = H(StateAReg, StateBReg, StateCReg);
              XValue = FX(BlockIn, 4);
              TValue = T38;
            end 
            38 : begin
              Md5FuncValue = H(StateDReg, StateAReg, StateBReg);
              XValue = FX(BlockIn, 7);
              TValue = T39;
            end 
            39 : begin
              Md5FuncValue = H(StateCReg, StateDReg, StateAReg);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -