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

📄 datapadunit.v

📁 hmac的verilog代码, 通过控制字选择进行sha1运算或hmac运算
💻 V
📖 第 1 页 / 共 2 页
字号:
			begin				if (hashover)					nextstate = digestready;				else 					nextstate = waitmd2;			end		digestready:			begin				resultready = 1;				nextstate = idle;			end		lengtherror:			begin				error = 1;				if (en && !wr && (addr == 2) && lenerror)					nextstate = idle;				else					nextstate = lengtherror;			end	endcase		end//receive the key and process the keyalways @(posedge clk)	begin		if (reset)			begin				keyreg <= 0;					keyreadyreg <= 0;			end		else if (currentstate == rxkey)			begin				case (keycnt)					0: keyreg[159:128] <= datatmp;					1: keyreg[127:96]  <= datatmp;					2: keyreg[95:64]   <= datatmp;					3: keyreg[63:32]   <= datatmp;					4: keyreg[31:0]    <= datatmp;				endcase			end		else if (currentstate == hmackeyready)			keyreadyreg <= 1;		else			begin				keyreg <= keyreg;				keyreadyreg <= keyreadyreg;			end	end//receive the datalength and comput the whole length automaticallyalways @(posedge clk)	begin		if (reset)			begin				datalength <= 0;			end		else if ((currentstate == rxlength) && !padflg)			begin				datalength[63:9] <= datalength[63:9] + 1;			end		else if ((currentstate == rxlength) && padflg && !modsel)			begin				datalength[8:0] <= datalength[8:0] + datatmp[8:0];			end		else if ((currentstate == rxlength) && padflg && modsel)			begin				datalength[8:0] <= datalength[8:0] + datatmp[8:0];				datalength[63:9] <= datalength[63:9] + 1;			end		else if (digestreadyreg && padflg)			datalength <= 0;		else			begin				datalength <= datalength;			end	end	//receive data and pad dataalways @(posedge clk)	begin		if (reset)			begin				paddata <= 0;				procsel <= 0;			end		else			begin				case (currentstate)					idle,rxkey: 							begin								paddata <= paddata;								procsel <= 0;							end					sendikey:						begin							paddata[511:352] <= keyreg ^ {20{ipad}};							paddata[351:0]   <= {44{ipad}};							procsel <=1;						end					waitiv1: paddata <= paddata;					sendokey:						begin							paddata[511:352] <= keyreg ^ {20{opad}};							paddata[351:0]   <= {44{opad}};							procsel <=2;						end					waitiv2:						begin							procsel <= 2;						end					hmackeyready,rxlength: paddata <= paddata;					rxdata:						case (datacnt)							0:  paddata[511:480] <= datatmp;							1:  paddata[479:448] <= datatmp;							2:  paddata[447:416] <= datatmp;							3:  paddata[415:384] <= datatmp;							4:  paddata[383:352] <= datatmp;							5:  paddata[351:320] <= datatmp;							6:  paddata[319:288] <= datatmp;							7:  paddata[287:256] <= datatmp;							8:  paddata[255:224] <= datatmp;							9:  paddata[223:192] <= datatmp;							10: paddata[191:160] <= datatmp;							11: paddata[159:128] <= datatmp;							12: paddata[127:096] <= datatmp;							13: paddata[095:064] <= datatmp;							14: paddata[063:032] <= datatmp;							15: paddata[031:000] <= datatmp;						endcase					datapad:						begin							case (datalength[8:5])								0: 									begin										case (datalength[4:3])													0: paddata[511:480] <= 32'h80000000;													1: paddata[511:480] <= paddata[511:480] + 32'h00800000;													2: paddata[511:480] <= paddata[511:480] + 32'h00008000;													3: paddata[511:480] <= paddata[511:480] + 32'h00000080;										endcase										paddata[479:0] <= 0;																					end								1: 									begin										case (datalength[4:3])											0: paddata[479:448] <= 32'h80000000;											1: paddata[479:448] <= paddata[479:448] + 32'h00800000;											2: paddata[479:448] <= paddata[479:448] + 32'h00008000;											3: paddata[479:448] <= paddata[479:448] + 32'h00000080;										endcase										paddata[447:0] <= 0;										end								2: 									begin										case (datalength[4:3])											0: paddata[447:416] <= 32'h80000000;											1: paddata[447:416] <= paddata[447:416] + 32'h00800000;											2: paddata[447:416] <= paddata[447:416] + 32'h00008000;											3: paddata[447:416] <= paddata[447:416] + 32'h00000080;										endcase										paddata[415:0] <= 0;									end								3: 									begin										case (datalength[4:3])											0: paddata[415:384] <= 32'h80000000;											1: paddata[415:384] <= paddata[415:384] + 32'h00800000;											2: paddata[415:384] <= paddata[415:384] + 32'h00008000;											3: paddata[415:384] <= paddata[415:384] + 32'h00000080;										endcase										paddata[383:0] <= 0;									end								4: 									begin										case (datalength[4:3])											0: paddata[383:352] <= 32'h80000000;											1: paddata[383:352] <= paddata[383:352] + 32'h00800000;											2: paddata[383:352] <= paddata[383:352] + 32'h00008000;											3: paddata[383:352] <= paddata[383:352] + 32'h00000080;										endcase										paddata[351:0] <= 0;									end								5: 									begin										case (datalength[4:3])											0: paddata[351:320] <= 32'h80000000;											1: paddata[351:320] <= paddata[351:320] + 32'h00800000;											2: paddata[351:320] <= paddata[351:320] + 32'h00008000;											3: paddata[351:320] <= paddata[351:320] + 32'h00000080;										endcase										paddata[319:0] <= 0;									end								6: 									begin										case (datalength[4:3])											0: paddata[319:288] <= 32'h80000000;											1: paddata[319:288] <= paddata[319:288] + 32'h00800000;											2: paddata[319:288] <= paddata[319:288] + 32'h00008000;											3: paddata[319:288] <= paddata[319:288] + 32'h00000080;										endcase										paddata[287:0] <= 0;									end								7: 									begin										case (datalength[4:3])											0: paddata[287:256] <= 32'h80000000;											1: paddata[287:256] <= paddata[287:256] + 32'h00800000;											2: paddata[287:256] <= paddata[287:256] + 32'h00008000;											3: paddata[287:256] <= paddata[287:256] + 32'h00000080;										endcase										paddata[255:0] <= 0;									end								8: 									begin										case (datalength[4:3])											0: paddata[255:224] <= 32'h80000000;											1: paddata[255:224] <= paddata[255:224] + 32'h00800000;											2: paddata[255:224] <= paddata[255:224] + 32'h00008000;											3: paddata[255:224] <= paddata[255:224] + 32'h00000080;										endcase										paddata[223:0] <= 0;									end								9: 									begin										case (datalength[4:3])											0: paddata[223:192] <= 32'h80000000;											1: paddata[223:192] <= paddata[223:192] + 32'h00800000;											2: paddata[223:192] <= paddata[223:192] + 32'h00008000;											3: paddata[223:192] <= paddata[223:192] + 32'h00000080;										endcase										paddata[191:0] <= 0;									end								10: 									begin										case (datalength[4:3])											0: paddata[191:160] <= 32'h80000000;											1: paddata[191:160] <= paddata[191:160] + 32'h00800000;											2: paddata[191:160] <= paddata[191:160] + 32'h00008000;											3: paddata[191:160] <= paddata[191:160] + 32'h00000080;										endcase										paddata[159:0] <= 0;									end								11: 									begin										case (datalength[4:3])											0: paddata[159:128] <= 32'h80000000;											1: paddata[159:128] <= paddata[159:128] + 32'h00800000;											2: paddata[159:128] <= paddata[159:128] + 32'h00008000;											3: paddata[159:128] <= paddata[159:128] + 32'h00000080;										endcase										paddata[127:0] <= 0;									end								12: 									begin										case (datalength[4:3])											0: paddata[127:096] <= 32'h80000000;											1: paddata[127:096] <= paddata[127:096] + 32'h00800000;											2: paddata[127:096] <= paddata[127:096] + 32'h00008000;											3: paddata[127:096] <= paddata[127:096] + 32'h00000080;										endcase										paddata[95:0] <= 0;									end								13: 									begin										case (datalength[4:3])											0: paddata[095:064] <= 32'h80000000;											1: paddata[095:064] <= paddata[095:064] + 32'h00800000;											2: paddata[095:064] <= paddata[095:064] + 32'h00008000;											3: paddata[095:064] <= paddata[095:064] + 32'h00000080;										endcase										paddata[63:0] <= 0;									end								14: 									begin										case (datalength[4:3])											0: paddata[063:032] <= 32'h80000000;											1: paddata[063:032] <= paddata[063:032] + 32'h00800000;											2: paddata[063:032] <= paddata[063:032] + 32'h00008000;											3: paddata[063:032] <= paddata[063:032] + 32'h00000080;										endcase										paddata[031:000] <= 0;									end								15: 									begin										case (datalength[4:3])											0: paddata[031:000] <= 32'h80000000;											1: paddata[031:000] <= paddata[031:000] + 32'h00800000;											2: paddata[031:000] <= paddata[031:000] + 32'h00008000;											3: paddata[031:000] <= paddata[031:000] + 32'h00000080;										endcase									end							endcase						end						lengthpad:							begin								paddata[63:0] <= datalength;							end						senddata:							begin								paddata <= paddata;							end						expad:							begin								if (datalength[8:3]==0)									begin										paddata[511] <= 1;										paddata[510:64] <= 0;										paddata[63:0] <= datalength;									end								else									begin										paddata[511:64] <= 0;										paddata[63:0] <= datalength;									end							end						sendmd1:							begin								paddata[511:352] <= md1in;								paddata[351] <=1;								paddata[350:64] <=0;								paddata[63:0] <=32'h000002a0;								procsel <= 3;							end						//receive the digest from hashunit, and send it to the wtprounit						//waitmd2://this state may be reduced						//digestready://set the digestready flag in status reg						//lengtherror://set the lengtherror flag in status reg						//hmackeyready://set the hmackeyready flag in status reg						waitmd2:							begin								procsel <= 3;								paddata <= paddata;							end						digestready,lengtherror,hmackeyready: paddata <= paddata;				endcase			end	endendmodule	

⌨️ 快捷键说明

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