OpenCores
URL https://opencores.org/ocsvn/md5/md5/trunk

Subversion Repositories md5

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 1 to Rev 2
    Reverse comparison

Rev 1 → Rev 2

/trunk/hash_core.v
0,0 → 1,222
/********************************************************************************
* Module Name : hash_core
* Description : MD5 computation
* Outputs Message Digest
*
*
********************************************************************************
* Esencia Technology Proprietary and Confidential
* All rights reserved (c) 2004 by Esencia Technolgy
********************************************************************************/
module hash_core (
//Inputs
clk,
rst_n,
stateVld,
stateAIn,
stateBIn,
stateCIn,
stateDIn,
dataIn,
dataVld,
RoundNum,
 
//Outputs
msgDgstVld,
msgDigest
);
 
`include "md5_params.vh"
`include "ah_params.vh"
input clk;
input rst_n;
input dataVld;
input [DATA_WIDTH - 1:0] dataIn;
input stateVld;
input [STATE_DWIDTH - 1:0] stateAIn;
input [STATE_DWIDTH - 1:0] stateBIn;
input [STATE_DWIDTH - 1:0] stateCIn;
input [STATE_DWIDTH - 1:0] stateDIn;
 
output msgDgstVld;
output [DATA_WIDTH -1:0] msgDigest;
output [5:0] RoundNum;
 
wire [STATE_DWIDTH - 1:0] StateAReg;
wire [STATE_DWIDTH - 1:0] StateBReg;
wire [STATE_DWIDTH - 1:0] StateCReg;
wire [STATE_DWIDTH - 1:0] StateDReg;
wire [STATE_DWIDTH - 1:0] A_Reg;
wire [STATE_DWIDTH - 1:0] B_Reg;
wire [STATE_DWIDTH - 1:0] C_Reg;
wire [STATE_DWIDTH - 1:0] D_Reg;
wire [STATE_DWIDTH - 1:0] Md5StateAComb;
wire [STATE_DWIDTH - 1:0] Md5StateBComb;
wire [STATE_DWIDTH - 1:0] Md5StateCComb;
wire [STATE_DWIDTH - 1:0] Md5StateDComb;
wire [STATE_DWIDTH - 1:0] MuxedStateAComb;
wire [STATE_DWIDTH - 1:0] MuxedStateBComb;
wire [STATE_DWIDTH - 1:0] MuxedStateCComb;
wire [STATE_DWIDTH - 1:0] MuxedStateDComb;
wire [STATE_DWIDTH - 1:0] MuxedStateEComb;
wire [STATE_DWIDTH - 1:0] ResStateAReg;
wire [STATE_DWIDTH - 1:0] ResStateBReg;
wire [STATE_DWIDTH - 1:0] ResStateCReg;
wire [STATE_DWIDTH - 1:0] ResStateDReg;
wire [BLOCK_SIZE-1:0] BlockData;
wire [DATA_WIDTH - 1 :0] WtDataIntmdt;
wire [STATE_DWIDTH - 1:0] AddResFinal1;
wire [STATE_DWIDTH - 1:0] AddResFinal2;
wire [STATE_DWIDTH - 1:0] AddResFinal3;
wire msgDgstVld;
wire [DATA_WIDTH -1:0] msgDigest;
wire Md5MsgDgstVld;
wire [MD5_MSG_DIGEST -1:0] Md5MsgDigest;
wire [DATA_WIDTH -1 :0] Md5DataIn;
wire MuxedDataVld;
wire [DATA_WIDTH -1 :0] MuxedDataIn;
wire [STATE_DWIDTH - 1:0] Md5Addend0A;
wire [STATE_DWIDTH - 1:0] Md5Addend0B;
wire [STATE_DWIDTH - 1:0] Md5Addend1A;
wire [STATE_DWIDTH - 1:0] Md5Addend1B;
wire [STATE_DWIDTH - 1:0] Md5Addend3A;
wire [STATE_DWIDTH - 1:0] Md5Addend3B;
wire [STATE_DWIDTH - 1:0] MuxedAddend0A;
wire [STATE_DWIDTH - 1:0] MuxedAddend0B;
wire [STATE_DWIDTH - 1:0] MuxedAddend1A;
wire [STATE_DWIDTH - 1:0] MuxedAddend1B;
wire [STATE_DWIDTH - 1:0] MuxedAddend2A;
wire [STATE_DWIDTH - 1:0] MuxedAddend2B;
wire [5:0] RoundNum;
 
md5_top u_md5_top_0 (
 
.clk(clk),
.rst_n(rst_n),
.dataIn(dataIn),
.dataVld(dataVld),
 
.ResStateAReg(ResStateAReg),
.ResStateBReg(ResStateBReg),
.ResStateCReg(ResStateCReg),
.ResStateDReg(ResStateDReg),
.AddRes1(AddResFinal1),
.AddRes2(AddResFinal3),
 
.StateAReg(StateAReg),
.StateBReg(StateBReg),
.StateCReg(StateCReg),
.StateDReg(StateDReg),
.BlockData(BlockData),
 
.Md5FuncValue(Md5Addend0A),
.TValue(Md5Addend1B),
.XValue(Md5Addend1A),
.AddendState1(Md5Addend0B),
.AddendState2(Md5Addend3B),
.ShiftedAddend(Md5Addend3A),
.RoundNum(RoundNum),
 
.Md5Data(Md5DataIn),
.StateAComb(Md5StateAComb),
.StateBComb(Md5StateBComb),
.StateCComb(Md5StateCComb),
.StateDComb(Md5StateDComb),
 
.msgDgstVld(Md5MsgDgstVld),
.msgDigest(msgDigest)
 
);
 
adders u_adders_0 (
//Inputs
.Addend0A(MuxedAddend0A),
.Addend0B(MuxedAddend0B),
.Addend1A(MuxedAddend1A),
.Addend1B(MuxedAddend1B),
.Addend2A(32'b0),
.Addend3A(Md5Addend3A),
.Addend3B(Md5Addend3B),
.StateAReg(StateAReg),
.StateBReg(StateBReg),
.StateCReg(StateCReg),
.StateDReg(StateDReg),
.A_Reg(A_Reg),
.B_Reg(B_Reg),
.C_Reg(C_Reg),
.D_Reg(D_Reg),
 
//Outputs
.ResStateAReg(ResStateAReg),
.ResStateBReg(ResStateBReg),
.ResStateCReg(ResStateCReg),
.ResStateDReg(ResStateDReg),
.AddResFinal1(AddResFinal1),
.AddResFinal2(AddResFinal2),
.AddResFinal3(AddResFinal3)
);
 
ah_regs u_regs_0 (
//Inputs
.rst_n(rst_n),
.clk(clk),
.DataVld(MuxedDataVld),
.DataIn(MuxedDataIn),
.stateVld(stateVld),
.stateAIn(stateAIn),
.stateBIn(stateBIn),
.stateCIn(stateCIn),
.stateDIn(stateDIn),
.StateAComb(MuxedStateAComb),
.StateBComb(MuxedStateBComb),
.StateCComb(MuxedStateCComb),
.StateDComb(MuxedStateDComb),
.StateEComb(MuxedStateEComb),
//Outputs
.StateAReg(StateAReg),
.StateBReg(StateBReg),
.StateCReg(StateCReg),
.StateDReg(StateDReg),
.A_Reg(A_Reg),
.B_Reg(B_Reg),
.C_Reg(C_Reg),
.D_Reg(D_Reg),
.BlockOut(BlockData)
);
 
hash_misc u_hash_misc_0 (
//Inputs
.Md5MsgDgstVld(Md5MsgDgstVld),
.Md5DataIn(Md5DataIn),
.Md5DataVld(dataVld),
.Md5StateAComb(Md5StateAComb),
.Md5StateBComb(Md5StateBComb),
.Md5StateCComb(Md5StateCComb),
.Md5StateDComb(Md5StateDComb),
.Md5Addend0A(Md5Addend0A),
.Md5Addend0B(Md5Addend0B),
.Md5Addend1A(Md5Addend1A),
.Md5Addend1B(Md5Addend1B),
//Output
.msgDgstVld(msgDgstVld),
.MuxedDataIn(MuxedDataIn),
.MuxedDataVld(MuxedDataVld),
.MuxedStateAComb(MuxedStateAComb),
.MuxedStateBComb(MuxedStateBComb),
.MuxedStateCComb(MuxedStateCComb),
.MuxedStateDComb(MuxedStateDComb),
.MuxedStateEComb(MuxedStateEComb),
.MuxedAddend0A(MuxedAddend0A),
.MuxedAddend0B(MuxedAddend0B),
.MuxedAddend1A(MuxedAddend1A),
.MuxedAddend1B(MuxedAddend1B)
);
 
endmodule
trunk/hash_core.v Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/md5_padding.v =================================================================== --- trunk/md5_padding.v (nonexistent) +++ trunk/md5_padding.v (revision 2) @@ -0,0 +1,270 @@ +/******************************************************************************** +* Module : md5_padding +* Description: md5 Padding block +* +******************************************************************************** +* Esencia Technology Proprietary and Confidential +* All rights reserved (c) 2005 by Esencia Technolgy +********************************************************************************/ + + +module md5_padding ( + + //Inputs + clk, + rst_n, + DataVld, + InitVec, + DataIn, + DataFirst, + DataLast, + DataNumb, + RoundNum, + + //Outputs + DataBusy, + Md5DataIn, + Md5DataVld, + Md5StateAIn, + Md5StateBIn, + Md5StateCIn, + Md5StateDIn, + Md5StateVld + ); + +`include "md5_params.vh" +`include "ah_params.vh" +`include "md5_func.vh" + +input clk; +input rst_n; +input DataVld; // Valid flag for Data or InitVec +input [DATA_WIDTH - 1:0] DataIn; // 32 bit DataIn or Initvect +input DataFirst; // First chunk +input DataLast; // Last chunk of data +input [5:0] DataNumb; // Number of valid bits in + // last chuck of data +input [5:0] RoundNum; +input InitVec; // Inidicate Init Vector + +output Md5DataVld; +output [DATA_WIDTH - 1:0] Md5DataIn; +output Md5StateVld; +output [STATE_DWIDTH - 1:0] Md5StateAIn; +output [STATE_DWIDTH - 1:0] Md5StateBIn; +output [STATE_DWIDTH - 1:0] Md5StateCIn; +output [STATE_DWIDTH - 1:0] Md5StateDIn; +output DataBusy; + +reg [3:0] DinCntReg; +reg [3:0] DinCnt; +reg [63:0] PktLength; +wire [63:0] PktLengthBigEnd; + +reg Md5DataVld; +reg Md5DataVldTemp; +reg [DATA_WIDTH - 1:0] Md5DataIn; +reg [DATA_WIDTH - 1:0] Md5DataInTemp; +reg Md5StateVld; +reg [STATE_DWIDTH - 1:0] Md5StateAIn; +reg [STATE_DWIDTH - 1:0] Md5StateBIn; +reg [STATE_DWIDTH - 1:0] Md5StateCIn; +reg [STATE_DWIDTH - 1:0] Md5StateDIn; + +reg [1:0] InitVecCnt; +reg PktEnded; +wire DataBusy; +wire [8:0] PktLengthMod; +reg [2:0] SendDataCur; +reg [2:0] SendDataNxt; +reg Pad1Nxt; // Indicate to pad 1 + // in Next data cycle +reg Pad1NxtReg; +reg Send4SecRnd; +reg Send4SecRndReg; + +assign PktLengthMod = PktLength[8:0]; //PktLength % 512 + +assign DataBusy = PktEnded || (RoundNum > 14) || (SendDataCur == 4) || + (SendDataCur == 5) || (SendDataCur == 6); + +assign PktLengthBigEnd = {PktLength[7:0], PktLength[15:8], PktLength[23:16], + PktLength[31:24], PktLength[39:32], PktLength[47:40], + PktLength[55:48], PktLength[63:56]}; + + +// Send State Value incase of InitVec + +always @(posedge clk or negedge rst_n) begin + if (~rst_n) begin + InitVecCnt <= 3'b0; + Md5StateVld <= 1'b0; + end + else begin + InitVecCnt <= InitVec ? (InitVecCnt == 3) ? 0 : + InitVecCnt + 1 : InitVecCnt; + Md5StateVld <= (InitVecCnt == 3) && InitVec; + end +end + +always @(posedge clk) begin + if (InitVec) begin + case (InitVecCnt) + 3'b000 : begin + Md5StateAIn <= DataIn; + end + 3'b001 : begin + Md5StateBIn <= DataIn; + end + 3'b010 : begin + Md5StateCIn <= DataIn; + end + 3'b011 : begin + Md5StateDIn <= DataIn; + end + endcase + end +end + +// Start Collecting 512 byte (32x16 cycle) +// +always @(posedge clk or negedge rst_n) begin + if (~rst_n) begin + DinCntReg <= 4'b0; + PktLength <= 64'b0; + PktEnded <= 1'b0; + SendDataCur <= 2'b0; + Pad1NxtReg <= 1'b0; + Send4SecRndReg <= 1'b0; + end + else begin + SendDataCur <= SendDataNxt; + Send4SecRndReg <= Send4SecRnd; + Pad1NxtReg <= Pad1Nxt; + PktEnded <= (DinCntReg == 15) ? 1'b0 : DataLast ? + 1'b1 : PktEnded; + DinCntReg <= DinCnt; + if (DataVld) begin + if (DataFirst) begin + PktLength <= DataLast ? DataNumb : 32; + end + else begin + PktLength <= DataLast ? PktLength + DataNumb : + PktLength + 32; + end + end + end +end + +// Data Send FSM to CORE +parameter IDLE = 0; +parameter SEND_DATA = 1; +parameter SECOND_ROUND_CHK0 = 2; +parameter SECOND_ROUND_CHK1 = 3; +parameter WAIT = 4; +parameter WAIT2 = 5; +parameter SECOND_ROUND = 6; + +always @(SendDataCur or PktEnded or DinCntReg + or DataVld or DataLast or DataNumb or + Pad1NxtReg or Send4SecRndReg or RoundNum or + DataIn or PktLengthBigEnd ) begin + Md5DataVldTemp = 1'b0; + Md5DataInTemp = 32'b0; + Pad1Nxt = 1'b0; + Send4SecRnd = 1'b0; + SendDataNxt = 3'b0; + DinCnt = 4'b0; + case (SendDataCur) + IDLE : begin + if (DataVld) begin + SendDataNxt = SEND_DATA; + Md5DataInTemp = DataLast ? PadData(DataNumb, DataIn) : DataIn; + Md5DataVldTemp = 1'b1; + Pad1Nxt = DataLast && (DataNumb == 32); + DinCnt = 0; + end + end + SEND_DATA : begin + DinCnt = DinCntReg + 1; + Md5DataVldTemp = 1'b1; + Pad1Nxt = DataLast && (DataNumb == 32); + SendDataNxt = (DinCntReg < 12) ? SEND_DATA : SECOND_ROUND_CHK0; + Md5DataInTemp = Pad1NxtReg ? 32'h80000000 : DataLast ? PadData(DataNumb, DataIn) : PktEnded ? + 32'b0 : DataIn; + end + SECOND_ROUND_CHK0 : begin + DinCnt = DinCntReg + 1; + Md5DataVldTemp = 1'b1; + SendDataNxt = SECOND_ROUND_CHK1; + Send4SecRnd = DataLast || Pad1NxtReg; + Pad1Nxt = DataLast && (DataNumb == 32); + if (DataLast) begin + Md5DataInTemp = PadData(DataNumb, DataIn); + end + else begin + Md5DataInTemp = Pad1NxtReg ? 32'h80000000 : + PktEnded ? PktLengthBigEnd[63:32] : DataIn; + end + end + SECOND_ROUND_CHK1 : begin + DinCnt = DinCntReg + 1; + Md5DataVldTemp = 1'b1; + SendDataNxt = (Send4SecRndReg || DataLast) ? WAIT : IDLE; + Pad1Nxt = DataLast && (DataNumb == 32); + if (DataLast) begin + Md5DataInTemp = PadData(DataNumb, DataIn); + end + else begin + Md5DataInTemp = Pad1NxtReg ? 32'h80000000 : + PktEnded ? Send4SecRndReg ? 32'b0 : + PktLengthBigEnd[31:0] : DataIn; + end + end + WAIT : begin + DinCnt = 0; + Md5DataVldTemp = 1'b0; + Pad1Nxt = Pad1NxtReg; + SendDataNxt = (RoundNum == 63) ? WAIT2 : WAIT; + end + WAIT2 : begin + DinCnt = 0; + SendDataNxt = SECOND_ROUND; + Pad1Nxt = Pad1NxtReg; + Md5DataVldTemp = 1'b0; + end + SECOND_ROUND : begin + DinCnt = DinCntReg + 1; + Pad1Nxt = (DinCntReg == 0) ? Pad1NxtReg : 1'b0; + Md5DataVldTemp = (DinCntReg <= 15); + SendDataNxt = (DinCntReg == 15) ? IDLE : SECOND_ROUND; + if (DinCntReg < 14) begin + Md5DataInTemp = Pad1Nxt ? 32'h80000000 : 32'b0; + end + else begin + Md5DataInTemp = (DinCntReg == 14) ? PktLengthBigEnd[63:32] : + PktLengthBigEnd[31:0]; + end + end + default : begin + Md5DataVldTemp = 1'b0; + Md5DataInTemp = 32'b0; + Pad1Nxt = 1'b0; + Send4SecRnd = 1'b0; + DinCnt = 4'b0; + end + endcase +end + +// Send Pkt Data 512 byte with padding +always @(posedge clk or negedge rst_n) begin + if (~rst_n) begin + Md5DataVld <= 1'b0; + Md5DataIn <= 32'b0; + end + else begin + Md5DataVld <= Md5DataVldTemp; + Md5DataIn <= Md5DataInTemp; + end +end +endmodule
trunk/md5_padding.v Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/add32.v =================================================================== --- trunk/add32.v (nonexistent) +++ trunk/add32.v (revision 2) @@ -0,0 +1,23 @@ +/******************************************************* +* 32 bit Adder +* +*******************************************************/ + + +module add32 ( + In0, + In1, + Out + ); + +input [31:0] In0; +input [31:0] In1; + +output [31:0] Out; + +wire [31:0] Out; + +assign Out[31:0] = In0 + In1; + +endmodule +
trunk/add32.v Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/es1005.v =================================================================== --- trunk/es1005.v (nonexistent) +++ trunk/es1005.v (revision 2) @@ -0,0 +1,95 @@ +/******************************************************************************** +* Module : es1005 +* Description: MD5 Top level +* +******************************************************************************** +* Esencia Technology Proprietary and Confidential +* All rights reserved (c) 2005 by Esencia Technolgy +********************************************************************************/ + + +module es1005 ( + + //Inputs + clk, + rst_n, + DataVld, + DataIn, + DataFirst, + DataLast, + DataNumb, + InitVec, + + //Outputs + MsgDgstVld, + MsgDigest, + DataBusy + ); + +`include "md5_params.vh" +`include "ah_params.vh" + +input clk; +input rst_n; +input DataVld; // Valid flag for Data or InitVec +input [DATA_WIDTH - 1:0] DataIn; // 32 bit DataIn or Initvect +input DataFirst; // First chunk +input DataLast; // Last chunk of data +input [5:0] DataNumb; // Number of valid bits in + // last chuck of data +input InitVec; // Inidicate Init Vector + +output MsgDgstVld; +output [DATA_WIDTH -1:0] MsgDigest; +output DataBusy; // Inidicate core is busy + +wire MsgDgstVld; +wire DataBusy; +wire [DATA_WIDTH -1:0] MsgDigest; +wire Md5DataVld; +wire [DATA_WIDTH - 1:0] Md5DataIn; +wire Md5StateVld; +wire [STATE_DWIDTH - 1:0] Md5StateAIn; +wire [STATE_DWIDTH - 1:0] Md5StateBIn; +wire [STATE_DWIDTH - 1:0] Md5StateCIn; +wire [STATE_DWIDTH - 1:0] Md5StateDIn; +wire [5:0] RoundNum; + +hash_core u_hash_core ( + + .clk(clk), + .rst_n(rst_n), + .dataIn(Md5DataIn), + .dataVld(Md5DataVld), + .stateVld(Md5StateVld), + .stateAIn(Md5StateAIn), + .stateBIn(Md5StateBIn), + .stateCIn(Md5StateCIn), + .stateDIn(Md5StateDIn), + .RoundNum(RoundNum), + .msgDgstVld(MsgDgstVld), + .msgDigest(MsgDigest) + ); + +md5_padding u_md5_padding ( + + .clk(clk), + .rst_n(rst_n), + .DataVld(DataVld), + .DataIn(DataIn), + .DataFirst(DataFirst), + .DataLast(DataLast), + .DataNumb(DataNumb), + .InitVec(InitVec), + .RoundNum(RoundNum), + .DataBusy(DataBusy), + .Md5DataIn(Md5DataIn), + .Md5DataVld(Md5DataVld), + .Md5StateAIn(Md5StateAIn), + .Md5StateBIn(Md5StateBIn), + .Md5StateCIn(Md5StateCIn), + .Md5StateDIn(Md5StateDIn), + .Md5StateVld(Md5StateVld) + ); + +endmodule
trunk/es1005.v Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/hash_misc.v =================================================================== --- trunk/hash_misc.v (nonexistent) +++ trunk/hash_misc.v (revision 2) @@ -0,0 +1,99 @@ +/******************************************************************************** +* Multiplex-demultiplex logic +********************************************************************************/ + + +module hash_misc ( + + //Inputs + Md5MsgDgstVld, + Md5DataVld, + Md5DataIn, + + Md5StateAComb, + Md5StateBComb, + Md5StateCComb, + Md5StateDComb, + + Md5Addend0A, + Md5Addend0B, + Md5Addend1A, + Md5Addend1B, + + //Output + + msgDgstVld, + MuxedDataVld, + MuxedDataIn, + + MuxedStateAComb, + MuxedStateBComb, + MuxedStateCComb, + MuxedStateDComb, + MuxedStateEComb, + MuxedAddend0A, + MuxedAddend0B, + MuxedAddend1A, + MuxedAddend1B + + ); + +`include "ah_params.vh" +`include "md5_params.vh" + +input Md5DataVld; +input [DATA_WIDTH - 1 :0] Md5DataIn; +input Md5MsgDgstVld; + +input [STATE_DWIDTH - 1:0] Md5StateAComb; +input [STATE_DWIDTH - 1:0] Md5StateBComb; +input [STATE_DWIDTH - 1:0] Md5StateCComb; +input [STATE_DWIDTH - 1:0] Md5StateDComb; + +input [STATE_DWIDTH - 1:0] Md5Addend0A; +input [STATE_DWIDTH - 1:0] Md5Addend0B; +input [STATE_DWIDTH - 1:0] Md5Addend1A; +input [STATE_DWIDTH - 1:0] Md5Addend1B; + +output msgDgstVld; +output [DATA_WIDTH - 1:0] MuxedDataIn; +output MuxedDataVld; +output [STATE_DWIDTH -1:0] MuxedStateAComb; +output [STATE_DWIDTH -1:0] MuxedStateBComb; +output [STATE_DWIDTH -1:0] MuxedStateCComb; +output [STATE_DWIDTH -1:0] MuxedStateDComb; +output [STATE_DWIDTH -1:0] MuxedStateEComb; +output [STATE_DWIDTH - 1:0] MuxedAddend0A; +output [STATE_DWIDTH - 1:0] MuxedAddend0B; +output [STATE_DWIDTH - 1:0] MuxedAddend1A; +output [STATE_DWIDTH - 1:0] MuxedAddend1B; + +wire msgDgstVld; +wire [DATA_WIDTH - 1:0] MuxedDataIn; +wire MuxedDataVld; +wire [STATE_DWIDTH -1:0] MuxedStateAComb; +wire [STATE_DWIDTH -1:0] MuxedStateBComb; +wire [STATE_DWIDTH -1:0] MuxedStateCComb; +wire [STATE_DWIDTH -1:0] MuxedStateDComb; +wire [STATE_DWIDTH -1:0] MuxedStateEComb; +wire [STATE_DWIDTH - 1:0] MuxedAddend0A; +wire [STATE_DWIDTH - 1:0] MuxedAddend0B; +wire [STATE_DWIDTH - 1:0] MuxedAddend1A; +wire [STATE_DWIDTH - 1:0] MuxedAddend1B; + +assign msgDgstVld = Md5MsgDgstVld; +assign MuxedDataIn = Md5DataIn; +assign MuxedDataVld = Md5DataVld; + +assign MuxedStateAComb = Md5StateAComb; +assign MuxedStateBComb = Md5StateBComb; +assign MuxedStateCComb = Md5StateCComb; +assign MuxedStateDComb = Md5StateDComb; +assign MuxedStateEComb = 32'b0; + +assign MuxedAddend0A = Md5Addend0A; +assign MuxedAddend0B = Md5Addend0B; +assign MuxedAddend1A = Md5Addend1A; +assign MuxedAddend1B = Md5Addend1B; + +endmodule
trunk/hash_misc.v Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/adders.v =================================================================== --- trunk/adders.v (nonexistent) +++ trunk/adders.v (revision 2) @@ -0,0 +1,131 @@ +/**************************************************************************** + Adders +****************************************************************************/ + +module adders ( + + //Inputs + Addend0A, + Addend0B, + Addend1A, + Addend1B, + Addend2A, + Addend3A, + Addend3B, + StateAReg, + StateBReg, + StateCReg, + StateDReg, + A_Reg, + B_Reg, + C_Reg, + D_Reg, + + //Outputs + ResStateAReg, + ResStateBReg, + ResStateCReg, + ResStateDReg, + AddResFinal1, + AddResFinal2, + AddResFinal3 + ); + +`include "ah_params.vh" + +input [STATE_DWIDTH - 1:0] Addend0A; +input [STATE_DWIDTH - 1:0] Addend0B; +input [STATE_DWIDTH - 1:0] Addend1A; +input [STATE_DWIDTH - 1:0] Addend1B; +input [STATE_DWIDTH - 1:0] Addend2A; +input [STATE_DWIDTH - 1:0] Addend3A; +input [STATE_DWIDTH - 1:0] Addend3B; +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 [STATE_DWIDTH - 1:0] A_Reg; +input [STATE_DWIDTH - 1:0] B_Reg; +input [STATE_DWIDTH - 1:0] C_Reg; +input [STATE_DWIDTH - 1:0] D_Reg; + +output [STATE_DWIDTH - 1:0] ResStateAReg; +output [STATE_DWIDTH - 1:0] ResStateBReg; +output [STATE_DWIDTH - 1:0] ResStateCReg; +output [STATE_DWIDTH - 1:0] ResStateDReg; +output [STATE_DWIDTH - 1:0] AddResFinal1; +output [STATE_DWIDTH - 1:0] AddResFinal2; +output [STATE_DWIDTH - 1:0] AddResFinal3; + +wire [STATE_DWIDTH - 1:0] AddResFinal1; +wire [STATE_DWIDTH - 1:0] AddResFinal2; +wire [STATE_DWIDTH - 1:0] AddResFinal3; +wire [STATE_DWIDTH - 1:0] AddRes0; +wire [STATE_DWIDTH - 1:0] AddRes1; +wire [STATE_DWIDTH - 1:0] AddRes2; +wire [STATE_DWIDTH - 1:0] AddRes3; +wire [STATE_DWIDTH - 1:0] AddRes4; +wire [STATE_DWIDTH - 1:0] ResStateAReg; +wire [STATE_DWIDTH - 1:0] ResStateBReg; +wire [STATE_DWIDTH - 1:0] ResStateCReg; +wire [STATE_DWIDTH - 1:0] ResStateDReg; + +assign AddResFinal1 = AddRes2; +assign AddResFinal2 = AddRes3; +assign AddResFinal3 = AddRes4; + +add32 u_adder_0 ( + .In0(Addend0A), + .In1(Addend0B), + .Out(AddRes0) + ); + +add32 u_adder_1 ( + .In0(Addend1A), + .In1(Addend1B), + .Out(AddRes1) + ); + +add32 u_adder_2 ( + .In0(AddRes1), + .In1(AddRes0), + .Out(AddRes2) + ); + +add32 u_adder_3 ( + .In0(Addend2A), + .In1(AddRes2), + .Out(AddRes3) + ); + +add32 u_adder_9 ( + .In0(Addend3A), + .In1(Addend3B), + .Out(AddRes4) + ); + +add32 u_adder_4 ( + .In0(StateAReg), + .In1(A_Reg), + .Out(ResStateAReg) + ); + +add32 u_adder_5 ( + .In0(StateBReg), + .In1(B_Reg), + .Out(ResStateBReg) + ); + +add32 u_adder_6 ( + .In0(StateCReg), + .In1(C_Reg), + .Out(ResStateCReg) + ); + +add32 u_adder_7 ( + .In0(StateDReg), + .In1(D_Reg), + .Out(ResStateDReg) + ); + +endmodule
trunk/adders.v Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/md5_comb.v =================================================================== --- trunk/md5_comb.v (nonexistent) +++ trunk/md5_comb.v (revision 2) @@ -0,0 +1,551 @@ +/******************************************************************************** +* 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); + XValue = FX(BlockIn, 10); + TValue = T40; + end + 40 : begin + Md5FuncValue = H(StateBReg, StateCReg, StateDReg); + XValue = FX(BlockIn, 13); + TValue = T41; + end + 41 : begin + Md5FuncValue = H(StateAReg, StateBReg, StateCReg); + XValue = FX(BlockIn, 0); + TValue = T42; + end + 42 : begin + Md5FuncValue = H(StateDReg, StateAReg, StateBReg); + XValue = FX(BlockIn, 3); + TValue = T43; + end + 43 : begin + Md5FuncValue = H(StateCReg, StateDReg, StateAReg); + XValue = FX(BlockIn, 6); + TValue = T44; + end + 44 : begin + Md5FuncValue = H(StateBReg, StateCReg, StateDReg); + XValue = FX(BlockIn, 9); + TValue = T45; + end + 45 : begin + Md5FuncValue = H(StateAReg, StateBReg, StateCReg); + XValue = FX(BlockIn, 12); + TValue = T46; + end + 46 : begin + Md5FuncValue = H(StateDReg, StateAReg, StateBReg); + XValue = FX(BlockIn, 15); + TValue = T47; + end + 47 : begin + Md5FuncValue = H(StateCReg, StateDReg, StateAReg); + XValue = FX(BlockIn, 2); + TValue = T48; + end + 48 : begin + Md5FuncValue = I(StateBReg, StateCReg, StateDReg); + XValue = FX(BlockIn, 0); + TValue = T49; + end + 49 : begin + Md5FuncValue = I(StateAReg, StateBReg, StateCReg); + XValue = FX(BlockIn, 7); + TValue = T50; + end + 50 : begin + Md5FuncValue = I(StateDReg, StateAReg, StateBReg); + XValue = FX(BlockIn, 14); + TValue = T51; + end + 51 : begin + Md5FuncValue = I(StateCReg, StateDReg, StateAReg); + XValue = FX(BlockIn, 5); + TValue = T52; + end + 52 : begin + Md5FuncValue = I(StateBReg, StateCReg, StateDReg); + XValue = FX(BlockIn, 12); + TValue = T53; + end + 53 : begin + Md5FuncValue = I(StateAReg, StateBReg, StateCReg); + XValue = FX(BlockIn, 3); + TValue = T54; + end + 54 : begin + Md5FuncValue = I(StateDReg, StateAReg, StateBReg); + XValue = FX(BlockIn, 10); + TValue = T55; + end + 55 : begin + Md5FuncValue = I(StateCReg, StateDReg, StateAReg); + XValue = FX(BlockIn, 1); + TValue = T56; + end + 56 : begin + Md5FuncValue = I(StateBReg, StateCReg, StateDReg); + XValue = FX(BlockIn, 8); + TValue = T57; + end + 57 : begin + Md5FuncValue = I(StateAReg, StateBReg, StateCReg); + XValue = FX(BlockIn, 15); + TValue = T58; + end + 58 : begin + Md5FuncValue = I(StateDReg, StateAReg, StateBReg); + XValue = FX(BlockIn, 6); + TValue = T59; + end + 59 : begin + Md5FuncValue = I(StateCReg, StateDReg, StateAReg); + XValue = FX(BlockIn, 13); + TValue = T60; + end + 60 : begin + Md5FuncValue = I(StateBReg, StateCReg, StateDReg); + XValue = FX(BlockIn, 4); + TValue = T61; + end + 61 : begin + Md5FuncValue = I(StateAReg, StateBReg, StateCReg); + XValue = FX(BlockIn, 11); + TValue = T62; + end + 62 : begin + Md5FuncValue = I(StateDReg, StateAReg, StateBReg); + XValue = FX(BlockIn, 2); + TValue = T63; + end + 63 : begin + Md5FuncValue = I(StateCReg, StateDReg, StateAReg); + XValue = FX(BlockIn, 9); + TValue = T64; + end + default: begin + Md5FuncValue = 0; + XValue = 0; + TValue = 0; + end + endcase + end + else begin + Md5FuncValue = 0; + XValue = 0; + TValue = 0; + end + end + +always @(AddRes1 or AddRes2 or StateAReg or + StateBReg or StateCReg or StateDReg or + RoundNum or DataVld) + begin + AddendState1 = 0; + AddendState2 = 0; + StateAComb = StateAReg; + StateBComb = StateBReg; + StateCComb = StateCReg; + StateDComb = StateDReg; + ShiftedAddend = 0; + if (DataVld) begin + casex(RoundNum) + 6'b00XX00 : begin + AddendState1 = StateAReg; + AddendState2 = StateBReg; + ShiftedAddend = ROTATE_LEFT(AddRes1, S11); + $display(); + StateAComb = AddRes2; + end + 6'b00XX01 : begin + AddendState1 = StateDReg; + AddendState2 = StateAReg; + ShiftedAddend = ROTATE_LEFT(AddRes1, S12); + $display(); + StateDComb = AddRes2; + end + 6'b00XX10 : begin + AddendState1 = StateCReg; + AddendState2 = StateDReg; + ShiftedAddend = ROTATE_LEFT(AddRes1, S13); + $display(); + StateCComb = AddRes2; + end + 6'b00XX11 : begin + AddendState1 = StateBReg; + AddendState2 = StateCReg; + ShiftedAddend = ROTATE_LEFT(AddRes1, S14); + $display(); + StateBComb = AddRes2; + end + 6'b01XX00 : begin + AddendState1 = StateAReg; + AddendState2 = StateBReg; + ShiftedAddend = ROTATE_LEFT(AddRes1, S21); + $display(); + StateAComb = AddRes2; + end + 6'b01XX01 : begin + AddendState1 = StateDReg; + AddendState2 = StateAReg; + ShiftedAddend = ROTATE_LEFT(AddRes1, S22); + $display(); + StateDComb = AddRes2; + end + 6'b01XX10 : begin + AddendState1 = StateCReg; + AddendState2 = StateDReg; + ShiftedAddend = ROTATE_LEFT(AddRes1, S23); + $display(); + StateCComb = AddRes2; + end + 6'b01XX11 : begin + AddendState1 = StateBReg; + AddendState2 = StateCReg; + ShiftedAddend = ROTATE_LEFT(AddRes1, S24); + $display(); + StateBComb = AddRes2; + end + 6'b10XX00 : begin + AddendState1 = StateAReg; + AddendState2 = StateBReg; + ShiftedAddend = ROTATE_LEFT(AddRes1, S31); + $display(); + StateAComb = AddRes2; + end + 6'b10XX01 : begin + AddendState1 = StateDReg; + AddendState2 = StateAReg; + ShiftedAddend = ROTATE_LEFT(AddRes1, S32); + $display(); + StateDComb = AddRes2; + end + 6'b10XX10 : begin + AddendState1 = StateCReg; + AddendState2 = StateDReg; + ShiftedAddend = ROTATE_LEFT(AddRes1, S33); + $display(); + StateCComb = AddRes2; + end + 6'b10XX11 : begin + AddendState1 = StateBReg; + AddendState2 = StateCReg; + ShiftedAddend = ROTATE_LEFT(AddRes1, S34); + $display(); + StateBComb = AddRes2; + end + 6'b11XX00 : begin + AddendState1 = StateAReg; + AddendState2 = StateBReg; + ShiftedAddend = ROTATE_LEFT(AddRes1, S41); + $display(); + StateAComb = AddRes2; + end + 6'b11XX01 : begin + AddendState1 = StateDReg; + AddendState2 = StateAReg; + ShiftedAddend = ROTATE_LEFT(AddRes1, S42); + $display(); + StateDComb = AddRes2; + end + 6'b11XX10 : begin + AddendState1 = StateCReg; + AddendState2 = StateDReg; + ShiftedAddend = ROTATE_LEFT(AddRes1, S43); + $display(); + StateCComb = AddRes2; + end + 6'b11XX11 : begin + AddendState1 = StateBReg; + AddendState2 = StateCReg; + ShiftedAddend = ROTATE_LEFT(AddRes1, S44); + $display(); + StateBComb = AddRes2; + end + default : begin + AddendState1 = 0; + AddendState2 = 0; + ShiftedAddend = 0; + StateAComb = StateAReg; + StateBComb = StateBReg; + StateCComb = StateCReg; + StateDComb = StateDReg; + end + endcase + end + end +endmodule
trunk/md5_comb.v Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/md5_top.v =================================================================== --- trunk/md5_top.v (nonexistent) +++ trunk/md5_top.v (revision 2) @@ -0,0 +1,152 @@ +/******************************************************************************** +* Module Name : md5_top +* Description : MD5 computation top level +* +* +******************************************************************************** +* Esencia Technology Proprietary and Confidential +* All rights reserved (c) 2004 by Esencia Technolgy +********************************************************************************/ + +module md5_top ( + + //Inputs + clk, + rst_n, + dataVld, + dataIn, + + //from adders + ResStateAReg, + ResStateBReg, + ResStateCReg, + ResStateDReg, + AddRes1, + AddRes2, + + // from Register file + StateAReg, + StateBReg, + StateCReg, + StateDReg, + BlockData, + + //Outputs + // To Adders + Md5FuncValue, + TValue, + XValue, + AddendState1, + AddendState2, + ShiftedAddend, + RoundNum, + + // To Register file + Md5Data, + StateAComb, + StateBComb, + StateCComb, + StateDComb, + + //final output + msgDgstVld, + msgDigest + ); + +`include "ah_params.vh" +`include "md5_params.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; +input [STATE_DWIDTH - 1:0] AddRes1; +input [STATE_DWIDTH - 1:0] AddRes2; + +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] BlockData; + +output [STATE_DWIDTH - 1:0] Md5FuncValue; +output [STATE_DWIDTH - 1:0] TValue; +output [DATA_WIDTH - 1 :0] XValue; +output [STATE_DWIDTH - 1:0] AddendState1; +output [STATE_DWIDTH - 1:0] AddendState2; +output [STATE_DWIDTH - 1:0] ShiftedAddend; +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 [DATA_WIDTH - 1:0] Md5Data; +output [5:0] RoundNum; + +output msgDgstVld; +output [DATA_WIDTH -1:0] msgDigest; + +wire [5:0] RoundNum; +wire [DATA_WIDTH - 1:0] Md5Data; + +wire [STATE_DWIDTH - 1:0] Md5FuncValue; +wire [STATE_DWIDTH - 1:0] TValue; +wire [DATA_WIDTH - 1 :0] XValue; +wire [STATE_DWIDTH - 1:0] AddendState1; +wire [STATE_DWIDTH - 1:0] AddendState2; +wire [STATE_DWIDTH - 1:0] ShiftedAddend; +wire [STATE_DWIDTH - 1:0] StateAComb; +wire [STATE_DWIDTH - 1:0] StateBComb; +wire [STATE_DWIDTH - 1:0] StateCComb; +wire [STATE_DWIDTH - 1:0] StateDComb; +wire DataVldExt; + +md5_ctrl u_md5_ctrl_0 ( + //Inputs + .clk(clk), + .rst_n(rst_n), + .DataVld(dataVld), + .DataIn(dataIn), + .ResStateAReg(ResStateAReg), + .ResStateBReg(ResStateBReg), + .ResStateCReg(ResStateCReg), + .ResStateDReg(ResStateDReg), + + //Outputs + .MsgDgstVld(msgDgstVld), + .MsgDigest(msgDigest), + .DataVldExt(DataVldExt), + .Md5Data(Md5Data), + .RoundNum(RoundNum) + ); + +md5_comb u_md5_comb_0 ( + //Inputs + .RoundNum(RoundNum), + .StateAReg(StateAReg), + .StateBReg(StateBReg), + .StateCReg(StateCReg), + .StateDReg(StateDReg), + .BlockIn(BlockData), + .DataVld(DataVldExt), + .DataIn(dataIn), + .AddRes1(AddRes1), + .AddRes2(AddRes2), + + //Outputs + .Md5FuncValue(Md5FuncValue), + .TValue(TValue), + .XValue(XValue), + .StateAComb(StateAComb), + .StateBComb(StateBComb), + .StateCComb(StateCComb), + .StateDComb(StateDComb), + .AddendState1(AddendState1), + .AddendState2(AddendState2), + .ShiftedAddend(ShiftedAddend) + ); + +endmodule
trunk/md5_top.v Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/ah_regs.v =================================================================== --- trunk/ah_regs.v (nonexistent) +++ trunk/ah_regs.v (revision 2) @@ -0,0 +1,143 @@ +/**************************************************************************** +Register file +****************************************************************************/ + + +module ah_regs ( + + //Inputs + rst_n, + clk, + DataVld, + DataIn, + stateVld, + stateAIn, + stateBIn, + stateCIn, + stateDIn, + StateAComb, + StateBComb, + StateCComb, + StateDComb, + StateEComb, + + //Outputs + StateAReg, + StateBReg, + StateCReg, + StateDReg, + A_Reg, + B_Reg, + C_Reg, + D_Reg, + BlockOut + ); + +`include "ah_params.vh" + +input rst_n; +input clk; +input DataVld; +input [DATA_WIDTH - 1:0] DataIn; +input stateVld; +input [STATE_DWIDTH - 1:0] stateAIn; +input [STATE_DWIDTH - 1:0] stateBIn; +input [STATE_DWIDTH - 1:0] stateCIn; +input [STATE_DWIDTH - 1:0] stateDIn; +input [STATE_DWIDTH - 1:0] StateAComb; +input [STATE_DWIDTH - 1:0] StateBComb; +input [STATE_DWIDTH - 1:0] StateCComb; +input [STATE_DWIDTH - 1:0] StateDComb; +input [STATE_DWIDTH - 1:0] StateEComb; + + +output [STATE_DWIDTH - 1:0] StateAReg; +output [STATE_DWIDTH - 1:0] StateBReg; +output [STATE_DWIDTH - 1:0] StateCReg; +output [STATE_DWIDTH - 1:0] StateDReg; +output [STATE_DWIDTH - 1:0] A_Reg; +output [STATE_DWIDTH - 1:0] B_Reg; +output [STATE_DWIDTH - 1:0] C_Reg; +output [STATE_DWIDTH - 1:0] D_Reg; +output [BLOCK_SIZE-1:0] BlockOut; + +reg [STATE_DWIDTH - 1:0] StateAReg; +reg [STATE_DWIDTH - 1:0] StateBReg; +reg [STATE_DWIDTH - 1:0] StateCReg; +reg [STATE_DWIDTH - 1:0] StateDReg; +reg [STATE_DWIDTH - 1:0] A_Reg; +reg [STATE_DWIDTH - 1:0] B_Reg; +reg [STATE_DWIDTH - 1:0] C_Reg; +reg [STATE_DWIDTH - 1:0] D_Reg; +reg [DATA_WIDTH - 1:0] WtData [15:0]; + +assign BlockOut = {WtData[15], WtData[14], WtData[13], WtData[12], + WtData[11], WtData[10], WtData[9], WtData[8], + WtData[7], WtData[6], WtData[5], WtData[4], + WtData[3], WtData[2], WtData[1], WtData[0]}; + + +always @(posedge clk) + begin + if (DataVld) begin + WtData[0] <= DataIn; + WtData[1] <= WtData[0]; + WtData[2] <= WtData[1]; + WtData[3] <= WtData[2]; + WtData[4] <= WtData[3]; + WtData[5] <= WtData[4]; + WtData[6] <= WtData[5]; + WtData[7] <= WtData[6]; + WtData[8] <= WtData[7]; + WtData[9] <= WtData[8]; + WtData[10] <= WtData[9]; + WtData[11] <= WtData[10]; + WtData[12] <= WtData[11]; + WtData[13] <= WtData[12]; + WtData[14] <= WtData[13]; + WtData[15] <= WtData[14]; + end + end + +always @(posedge clk or negedge rst_n) + begin + if (!rst_n) begin + StateAReg <= 32'b0; + StateBReg <= 32'b0; + StateCReg <= 32'b0; + StateDReg <= 32'b0; + end + else begin + if (stateVld) begin + StateAReg <= stateAIn; + StateBReg <= stateBIn; + StateCReg <= stateCIn; + StateDReg <= stateDIn; + end + else begin + StateAReg <= StateAComb; + StateBReg <= StateBComb; + StateCReg <= StateCComb; + StateDReg <= StateDComb; + end + end + end + +always @(posedge clk or negedge rst_n) + begin + if (!rst_n) begin + A_Reg <= 32'b0; + B_Reg <= 32'b0; + C_Reg <= 32'b0; + D_Reg <= 32'b0; + end + else begin + if (stateVld) begin + A_Reg <= stateAIn; + B_Reg <= stateBIn; + C_Reg <= stateCIn; + D_Reg <= stateDIn; + end + end + end +endmodule
trunk/ah_regs.v Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/md5_ctrl.v =================================================================== --- trunk/md5_ctrl.v (nonexistent) +++ trunk/md5_ctrl.v (revision 2) @@ -0,0 +1,147 @@ +/******************************************************************************** +* 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
trunk/md5_ctrl.v Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.