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

📄 md5_ctrl.v

📁 MD5 算法在Xilinx FPGA上的实现
💻 V
字号:
/********************************************************************************

* Module Name : md5_ctrl

* Description : MD5 computation control logic

*

********************************************************************************/





module md5_ctrl ( 



                //Inputs

                 clk,

                 rst_n,

                 DataVld,

                 DataIn,

                 ResStateAReg,

                 ResStateBReg,

                 ResStateCReg,

                 ResStateDReg,

                

                //Outputs

                 RoundNum,

                 DataVldExt,

                 Md5Data,

                 MsgDgstVld,

                 MsgDigest

              );





`include "ah_params.vh"

`include "md5_params.vh"

`include "md5_func.vh"



input                                clk;

input                                rst_n;

input                                DataVld;

input  [DATA_WIDTH - 1:0]            DataIn;

input  [STATE_DWIDTH - 1:0]          ResStateAReg;

input  [STATE_DWIDTH - 1:0]          ResStateBReg;

input  [STATE_DWIDTH - 1:0]          ResStateCReg;

input  [STATE_DWIDTH - 1:0]          ResStateDReg;



output [5:0]                         RoundNum;

output                               DataVldExt;

output [DATA_WIDTH - 1:0]            Md5Data;

output                               MsgDgstVld;

output [DATA_WIDTH -1:0]             MsgDigest;



reg [5:0]                            RoundNum;

reg                                  DataVldTemp;

reg                                  MsgDgstVld_send;



wire                                 DataVldExt;

wire [DATA_WIDTH - 1:0]              Md5Data;

wire [MD5_MSG_DIGEST -1:0]           MsgDigest_wire;

reg  [DATA_WIDTH -1:0]               MsgDigest;

wire  [STATE_DWIDTH - 1:0]           ResStateAFlip;

wire  [STATE_DWIDTH - 1:0]           ResStateBFlip;

wire  [STATE_DWIDTH - 1:0]           ResStateCFlip;

wire  [STATE_DWIDTH - 1:0]           ResStateDFlip;

reg   [2:0]                          sending_cnt;

reg   [2:0]                          sending_cnt_r;

reg                                  MsgDgstVld;

wire                                 MsgDgstVld_c;



assign ResStateAFlip =  byte_flip(ResStateAReg);

assign ResStateBFlip =  byte_flip(ResStateBReg);

assign ResStateCFlip =  byte_flip(ResStateCReg);

assign ResStateDFlip =  byte_flip(ResStateDReg);

assign MsgDigest_wire = {ResStateAFlip, ResStateBFlip, ResStateCFlip, ResStateDFlip};



assign DataVldExt = DataVld | DataVldTemp;

assign Md5Data = DataIn;



assign MsgDgstVld_c = (sending_cnt != 0);



always @(posedge clk or negedge rst_n)

  begin

    if (!rst_n) begin

      RoundNum <= 0;

      DataVldTemp <= 0;

    end

    else begin

      if (DataVldExt) begin

        RoundNum <= (RoundNum == 63) ? 0 : RoundNum + 1;

        DataVldTemp <= (RoundNum != 63);

      end

      else begin

        RoundNum <= 0;

        DataVldTemp <= 0;

      end

    end

  end 



always @(posedge clk or negedge rst_n)

  begin

     if (!rst_n) begin

        MsgDgstVld_send <= 1'b0;

        MsgDgstVld <= 1'b0;

     end 

     else begin

        MsgDgstVld_send <= (RoundNum == 63);

        MsgDgstVld <= MsgDgstVld_c;

     end

  end



always @(posedge clk or negedge rst_n)  begin

   if (!rst_n) begin

       sending_cnt_r <= 3'b0;

   end

   else begin

      sending_cnt_r <= sending_cnt;

   end

end



always @(MsgDgstVld_send or sending_cnt_r) begin

   if (MsgDgstVld_send & (sending_cnt_r ==0)) begin

      sending_cnt = 3'b001;

   end 

   else if (sending_cnt_r !=0) begin

      sending_cnt = (sending_cnt_r == 3'b100) ? 0 : sending_cnt_r + 1;

   end

   else begin 

      sending_cnt = 3'b0;

   end

end 



always @(posedge clk) begin

   case (sending_cnt)

      3'b001 : begin

         MsgDigest <= MsgDigest_wire[31:0];

      end

      3'b010 : begin

         MsgDigest <= MsgDigest_wire[63:32];

      end

      3'b011 : begin

         MsgDigest <= MsgDigest_wire[95:64];

      end

      3'b100 : begin

         MsgDigest <= MsgDigest_wire[127:96];

      end

      default : begin

         MsgDigest <= 32'b0;

      end

   endcase

end



endmodule

⌨️ 快捷键说明

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