data/full_repos/permissive/496266817/rtl/pbkdf2_1_ct.v
1: b'%Warning-WIDTH: data/full_repos/permissive/496266817/rtl/pbkdf2_1_ct.v:812: Operator ASSIGN expects 2 bits on the Assign RHS, but Assign RHS\'s CONST \'1\'h0\' generates 1 bits.\n                                                                          : ... In instance pbkdf2_1_ct\n                sel_prev_hash_reg   = 1\'b0;  \n                                    ^\n                ... Use "/* verilator lint_off WIDTH */" and lint_on around source to disable this message.\n%Error: Exiting due to 1 warning(s)\n'
module pbkdf2_1_ct(

		input	 	wire				clk						,
		input	 	wire				reset_n					,
		input	 	wire				init					,
		input	 	wire				sha256_digest_valid		,

		output 		wire				sha256_init				,
		output 		wire				sha256_first_block		,
		output 		wire	[1:0]		sel_block_in_i_hash		,
		output 		wire				sel_block_in_o_hash		,
		output 		wire				sel_block_in			,
		output 		wire	[1:0]		sel_prev_hash			,
		output 		wire				update_mem_0			,
		output 		wire				update_mem_1			,
		output 		wire				update_ixor_mem			,
		output 		wire				update_oxor_mem			,
		output		wire				update_out_4			,
		output		wire				update_out_3			,
		output		wire				update_out_2			,
		output		wire				update_out_1			,
		output 		wire	[2:0]		index					,		
		output		wire				valid			
);




	parameter	S0_IDLE 				= 	5'd0;
	parameter	S1_KHASH_0				=	5'd1;
	parameter	S2_STORE_KHASH_0		=	5'd2;
	parameter	S3_KHASH_1				=	5'd3;
	parameter	S4_STORE_KHASH_1		=	5'd4;
	parameter	S5_IHASH_0				=	5'd5;
	parameter	S6_STORE_IHASH_0		=	5'd6;
	parameter	S7_OHASH_0				=	5'd7;
	parameter	S8_STORE_OHASH_0		=	5'd8;
	parameter	S9_IHASH_1				=	5'd9;
	parameter	S10_STORE_IHASH_1		=	5'd10;
	parameter	S11_IHASH_2				=	5'd11;
	parameter	S12_STORE_IHASH_2		=	5'd12;
	parameter	S13_OHASH_1				=	5'd13;
	parameter	S14_STORE_OHASH_1		=	5'd14;
	parameter	S15_IHASH_3				=	5'd15;
	parameter	S16_STORE_IHASH_3		=	5'd16;
	parameter	S17_OHASH_2				=	5'd17;
	parameter	S18_STORE_OHASH_2		=	5'd18;
	parameter	S19_IHASH_4				=	5'd19;
	parameter	S20_STORE_IHASH_4		=	5'd20;
	parameter	S21_OHASH_3				=	5'd21;
	parameter	S22_STORE_OHASH_3		=	5'd22;
	parameter	S23_IHASH_5				=	5'd23;
	parameter	S24_STORE_IHASH_5		=	5'd24;
	parameter	S25_OHASH_4				=	5'd25;
	parameter	S26_STORE_OHASH_4		=	5'd26;
	parameter	S27_DONE				=	5'd27;
	



	reg		[4:0]	pbkdf2_state_reg;
	

	wire 	[4:0]	pbkdf2_state_wire;



	assign 	pbkdf2_state_wire = pbkdf2_state_reg;
	



	reg		[4:0]	pbkdf2_next_state_reg;
	

	wire 	[4:0]	pbkdf2_next_state_wire;



	assign 	pbkdf2_next_state_wire = pbkdf2_next_state_reg;
	



	
	reg				sha256_init_reg				;
	reg				sha256_first_block_reg		;
	reg		[1:0]	sel_block_in_i_hash_reg		;
	reg				sel_block_in_o_hash_reg		;
	reg				sel_block_in_reg			;
	reg		[1:0]	sel_prev_hash_reg			;
	reg				update_mem_0_reg			;
	reg				update_mem_1_reg			;
	reg				update_ixor_mem_reg			;
	reg				update_oxor_mem_reg			;
	reg				update_out_4_reg			;
	reg				update_out_3_reg			;
	reg				update_out_2_reg			;
	reg				update_out_1_reg			;
	reg 	[2:0]	index_reg	                ;
	reg				valid_reg					;
	

	assign	sha256_init 		= sha256_init_reg			;
	assign	sha256_first_block 	= sha256_first_block_reg	;
	assign	sel_block_in_i_hash = sel_block_in_i_hash_reg	;
	assign	sel_block_in_o_hash = sel_block_in_o_hash_reg	;
	assign	sel_block_in 		= sel_block_in_reg			;
	assign	sel_prev_hash 		= sel_prev_hash_reg			;
	assign	update_mem_0 		= update_mem_0_reg			;
	assign	update_mem_1 		= update_mem_1_reg			;
	assign	update_ixor_mem 	= update_ixor_mem_reg		;
	assign	update_oxor_mem 	= update_oxor_mem_reg		;
	assign	update_out_4 		= update_out_4_reg			;
	assign	update_out_3 		= update_out_3_reg			;
	assign	update_out_2 		= update_out_2_reg			;
	assign	update_out_1 		= update_out_1_reg			;
	assign	index 				= index_reg					;
	assign	valid				= valid_reg					;
	


	always @(posedge clk or negedge reset_n)begin: update_state
		if(reset_n == 1'b0) begin
			pbkdf2_state_reg <= S0_IDLE;
		end
		else begin
			pbkdf2_state_reg <= pbkdf2_next_state_wire;
		end
	end	


	always @(pbkdf2_state_wire or init or sha256_digest_valid) begin: update_next_state
		case (pbkdf2_state_wire)
			S0_IDLE: begin
				if(init == 1'b1) begin
					pbkdf2_next_state_reg = S1_KHASH_0;
				end
				else begin
					pbkdf2_next_state_reg = S0_IDLE;
				end
			end
			S1_KHASH_0: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S2_STORE_KHASH_0;
				end
				else begin
					pbkdf2_next_state_reg = S1_KHASH_0;
				end
			end
			S2_STORE_KHASH_0: begin
				pbkdf2_next_state_reg = S3_KHASH_1;
			end
			S3_KHASH_1: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S4_STORE_KHASH_1;
				end
				else begin
					pbkdf2_next_state_reg = S3_KHASH_1;
				end
			end
			S4_STORE_KHASH_1: begin
				pbkdf2_next_state_reg = S5_IHASH_0;
			end
			S5_IHASH_0: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S6_STORE_IHASH_0;
				end
				else begin
					pbkdf2_next_state_reg = S5_IHASH_0;
				end
			end
			S6_STORE_IHASH_0: begin
				pbkdf2_next_state_reg = S7_OHASH_0;
			end
			S7_OHASH_0: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S8_STORE_OHASH_0;
				end
				else begin
					pbkdf2_next_state_reg = S7_OHASH_0;
				end			
			end
			S8_STORE_OHASH_0: begin
				pbkdf2_next_state_reg = S9_IHASH_1;
			end
			S9_IHASH_1: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S10_STORE_IHASH_1;
				end
				else begin
					pbkdf2_next_state_reg = S9_IHASH_1;
				end		
			end
			S10_STORE_IHASH_1: begin
				pbkdf2_next_state_reg = S11_IHASH_2;
			end
			S11_IHASH_2: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S12_STORE_IHASH_2;
				end
				else begin
					pbkdf2_next_state_reg = S11_IHASH_2;
				end		
			end
			S12_STORE_IHASH_2: begin
				pbkdf2_next_state_reg = S13_OHASH_1;
			end
			S13_OHASH_1: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S14_STORE_OHASH_1;
				end
				else begin
					pbkdf2_next_state_reg = S13_OHASH_1;
				end		
			end
			S14_STORE_OHASH_1: begin
				pbkdf2_next_state_reg = S15_IHASH_3;
			end
			S15_IHASH_3: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S16_STORE_IHASH_3;
				end
				else begin
					pbkdf2_next_state_reg = S15_IHASH_3;
				end		
			end
			S16_STORE_IHASH_3: begin
				pbkdf2_next_state_reg = S17_OHASH_2;
			end
			S17_OHASH_2: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S18_STORE_OHASH_2;
				end
				else begin
					pbkdf2_next_state_reg = S17_OHASH_2;
				end		
			end
			S18_STORE_OHASH_2: begin
				pbkdf2_next_state_reg = S19_IHASH_4;
			end
			S19_IHASH_4: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S20_STORE_IHASH_4;
				end
				else begin
					pbkdf2_next_state_reg = S19_IHASH_4;
				end		
			end
			S20_STORE_IHASH_4: begin
				pbkdf2_next_state_reg = S21_OHASH_3;
			end
			S21_OHASH_3: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S22_STORE_OHASH_3;
				end
				else begin
					pbkdf2_next_state_reg = S21_OHASH_3;
				end		
			end
			S22_STORE_OHASH_3: begin
				pbkdf2_next_state_reg = S23_IHASH_5;
			end
			S23_IHASH_5: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S24_STORE_IHASH_5;
				end
				else begin
					pbkdf2_next_state_reg = S23_IHASH_5;
				end		
			end
			S24_STORE_IHASH_5: begin
				pbkdf2_next_state_reg = S25_OHASH_4;
			end
			S25_OHASH_4: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S26_STORE_OHASH_4;
				end
				else begin
					pbkdf2_next_state_reg = S25_OHASH_4;
				end		
			end
			S26_STORE_OHASH_4: begin
				pbkdf2_next_state_reg = S27_DONE;
			end
			S27_DONE: begin
				if(init == 1'b0) begin
					pbkdf2_next_state_reg = S0_IDLE;
				end
				else begin
					pbkdf2_next_state_reg = S27_DONE;
				end			
			end
			default: begin
				pbkdf2_next_state_reg = S0_IDLE;
			end
		endcase
	end
	
	always @(pbkdf2_state_wire) begin : output_state
		case (pbkdf2_state_wire)
			S0_IDLE: begin
				sha256_init_reg 		= 1'b0;
                sha256_first_block_reg 	= 1'b1;
                sel_block_in_i_hash_reg = 2'd0;
                sel_block_in_o_hash_reg = 1'b0;
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd0;
                update_mem_0_reg 		= 1'b0;	
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S1_KHASH_0: begin
				sha256_init_reg 		= 1'b1;
                sha256_first_block_reg 	= 1'b1;
                sel_block_in_i_hash_reg = 2'd0;
                sel_block_in_o_hash_reg = 1'b0;
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd0;
                update_mem_0_reg 		= 1'b0;	
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;	
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S2_STORE_KHASH_0: begin
				sha256_init_reg 		= 1'b0;
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd1;
                sel_block_in_o_hash_reg = 1'b0;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'b0;
                update_mem_0_reg 		= 1'b1;
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;	
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S3_KHASH_1: begin
				sha256_init_reg 		= 1'b1;
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd1;
                sel_block_in_o_hash_reg = 1'b0;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'b0;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;	
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;				
			end
			S4_STORE_KHASH_1: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b1;
                sel_block_in_i_hash_reg = 2'd2;
                sel_block_in_o_hash_reg = 1'b0;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd0;
                update_mem_0_reg 		= 1'b1;
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;	
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S5_IHASH_0: begin
				sha256_init_reg 		= 1'b1;
                sha256_first_block_reg 	= 1'b1;
                sel_block_in_i_hash_reg = 2'd2;
                sel_block_in_o_hash_reg = 1'b0;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd0;
                update_mem_0_reg 		= 1'b0; 
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;	
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S6_STORE_IHASH_0: begin
				sha256_init_reg			= 1'b0;	
                sha256_first_block_reg 	= 1'b1;
                sel_block_in_i_hash_reg = 2'd0;	
                sel_block_in_o_hash_reg = 1'b0;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd0;
                update_mem_0_reg 		= 1'b0; 
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b1;
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S7_OHASH_0: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b1;
                sel_block_in_i_hash_reg = 2'd0;	
                sel_block_in_o_hash_reg = 1'b0;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd0;
                update_mem_0_reg 		= 1'b0; 
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S8_STORE_OHASH_0: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd0;
                sel_block_in_o_hash_reg = 1'b0;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd2;
                update_mem_0_reg 		= 1'b0; 
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b1;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S9_IHASH_1: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd0;
                sel_block_in_o_hash_reg = 1'b0;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd2;
                update_mem_0_reg 		= 1'b0; 
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S10_STORE_IHASH_1: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b0;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0; 
                update_mem_1_reg 		= 1'b1;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd1;
				valid_reg				= 1'b0;
			end
			S11_IHASH_2: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b1;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0; 
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd1;
				valid_reg				= 1'b0;
			end
			S12_STORE_IHASH_2: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;	
                sel_block_in_o_hash_reg = 1'b1;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd3;
                update_mem_0_reg 		= 1'b1;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd1;
				valid_reg				= 1'b0;
			end
			S13_OHASH_1: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;	
                sel_block_in_o_hash_reg = 1'b1;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd3;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd1;
				valid_reg				= 1'b0;
			end
			S14_STORE_OHASH_1: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b1;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b1;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd2;
				valid_reg				= 1'b0;
			end
			S15_IHASH_3: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b0;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd2;
				valid_reg				= 1'b0;
			end
			S16_STORE_IHASH_3: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;	
                sel_block_in_o_hash_reg = 1'b1;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd3;
                update_mem_0_reg 		= 1'b1;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd2;
				valid_reg				= 1'b0;
			end
			S17_OHASH_2: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;	
                sel_block_in_o_hash_reg = 1'b1;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd3;
                update_mem_0_reg 		= 1'b0;	
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd2;
				valid_reg				= 1'b0;				
			end
			S18_STORE_OHASH_2: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b1;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b1;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd3;
				valid_reg				= 1'b0;				
			end
			S19_IHASH_4: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b1;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd3;
				valid_reg				= 1'b0;
			end
			S20_STORE_IHASH_4: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;	
                sel_block_in_o_hash_reg = 1'b1;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd3;
                update_mem_0_reg 		= 1'b1;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd3;
				valid_reg				= 1'b0;
			end
			S21_OHASH_3: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;	
                sel_block_in_o_hash_reg = 1'b1;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd3;
                update_mem_0_reg 		= 1'b0;	
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd3;
				valid_reg				= 1'b0;
			end
			S22_STORE_OHASH_3: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b1;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b1;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd4;
				valid_reg				= 1'b0;				
			end
			S23_IHASH_5: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b1;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd4;
				valid_reg				= 1'b0;
			end
			S24_STORE_IHASH_5: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;	
                sel_block_in_o_hash_reg = 1'b1;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd3;
                update_mem_0_reg 		= 1'b1;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd4;
				valid_reg				= 1'b0;
			end
			S25_OHASH_4: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;	
                sel_block_in_o_hash_reg = 1'b1;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd3;
                update_mem_0_reg 		= 1'b0;	
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd4;
				valid_reg				= 1'b0;
			end
			S26_STORE_OHASH_4: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b1;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0; 
				update_out_1_reg		= 1'b1;
                index_reg 				= 3'd4;
				valid_reg				= 1'b0;
			end
			S27_DONE: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b1;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0; 
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd4;
				valid_reg				= 1'b1;
			end
			default: begin
				sha256_init_reg 		= 1'b0;
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd0;
                sel_block_in_o_hash_reg = 1'b0;
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 1'b0;
                update_mem_0_reg 		= 1'b0;	
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;	
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
		endcase
	end	
	
endmodule
module pbkdf2_1_ct(

		input	 	wire				clk						,
		input	 	wire				reset_n					,
		input	 	wire				init					,
		input	 	wire				sha256_digest_valid		,

		output 		wire				sha256_init				,
		output 		wire				sha256_first_block		,
		output 		wire	[1:0]		sel_block_in_i_hash		,
		output 		wire				sel_block_in_o_hash		,
		output 		wire				sel_block_in			,
		output 		wire	[1:0]		sel_prev_hash			,
		output 		wire				update_mem_0			,
		output 		wire				update_mem_1			,
		output 		wire				update_ixor_mem			,
		output 		wire				update_oxor_mem			,
		output		wire				update_out_4			,
		output		wire				update_out_3			,
		output		wire				update_out_2			,
		output		wire				update_out_1			,
		output 		wire	[2:0]		index					,		
		output		wire				valid			
);





	parameter	S0_IDLE 				= 	5'd0;
	parameter	S1_KHASH_0				=	5'd1;
	parameter	S2_STORE_KHASH_0		=	5'd2;
	parameter	S3_KHASH_1				=	5'd3;
	parameter	S4_STORE_KHASH_1		=	5'd4;
	parameter	S5_IHASH_0				=	5'd5;
	parameter	S6_STORE_IHASH_0		=	5'd6;
	parameter	S7_OHASH_0				=	5'd7;
	parameter	S8_STORE_OHASH_0		=	5'd8;
	parameter	S9_IHASH_1				=	5'd9;
	parameter	S10_STORE_IHASH_1		=	5'd10;
	parameter	S11_IHASH_2				=	5'd11;
	parameter	S12_STORE_IHASH_2		=	5'd12;
	parameter	S13_OHASH_1				=	5'd13;
	parameter	S14_STORE_OHASH_1		=	5'd14;
	parameter	S15_IHASH_3				=	5'd15;
	parameter	S16_STORE_IHASH_3		=	5'd16;
	parameter	S17_OHASH_2				=	5'd17;
	parameter	S18_STORE_OHASH_2		=	5'd18;
	parameter	S19_IHASH_4				=	5'd19;
	parameter	S20_STORE_IHASH_4		=	5'd20;
	parameter	S21_OHASH_3				=	5'd21;
	parameter	S22_STORE_OHASH_3		=	5'd22;
	parameter	S23_IHASH_5				=	5'd23;
	parameter	S24_STORE_IHASH_5		=	5'd24;
	parameter	S25_OHASH_4				=	5'd25;
	parameter	S26_STORE_OHASH_4		=	5'd26;
	parameter	S27_DONE				=	5'd27;
	



	reg		[4:0]	pbkdf2_state_reg;
	

	wire 	[4:0]	pbkdf2_state_wire;



	assign 	pbkdf2_state_wire = pbkdf2_state_reg;
	



	reg		[4:0]	pbkdf2_next_state_reg;
	

	wire 	[4:0]	pbkdf2_next_state_wire;



	assign 	pbkdf2_next_state_wire = pbkdf2_next_state_reg;
	



	
	reg				sha256_init_reg				;
	reg				sha256_first_block_reg		;
	reg		[1:0]	sel_block_in_i_hash_reg		;
	reg				sel_block_in_o_hash_reg		;
	reg				sel_block_in_reg			;
	reg		[1:0]	sel_prev_hash_reg			;
	reg				update_mem_0_reg			;
	reg				update_mem_1_reg			;
	reg				update_ixor_mem_reg			;
	reg				update_oxor_mem_reg			;
	reg				update_out_4_reg			;
	reg				update_out_3_reg			;
	reg				update_out_2_reg			;
	reg				update_out_1_reg			;
	reg 	[2:0]	index_reg	                ;
	reg				valid_reg					;
	

	assign	sha256_init 		= sha256_init_reg			;
	assign	sha256_first_block 	= sha256_first_block_reg	;
	assign	sel_block_in_i_hash = sel_block_in_i_hash_reg	;
	assign	sel_block_in_o_hash = sel_block_in_o_hash_reg	;
	assign	sel_block_in 		= sel_block_in_reg			;
	assign	sel_prev_hash 		= sel_prev_hash_reg			;
	assign	update_mem_0 		= update_mem_0_reg			;
	assign	update_mem_1 		= update_mem_1_reg			;
	assign	update_ixor_mem 	= update_ixor_mem_reg		;
	assign	update_oxor_mem 	= update_oxor_mem_reg		;
	assign	update_out_4 		= update_out_4_reg			;
	assign	update_out_3 		= update_out_3_reg			;
	assign	update_out_2 		= update_out_2_reg			;
	assign	update_out_1 		= update_out_1_reg			;
	assign	index 				= index_reg					;
	assign	valid				= valid_reg					;
	


	always @(posedge clk or negedge reset_n)begin: update_state
		if(reset_n == 1'b0) begin
			pbkdf2_state_reg <= S0_IDLE;
		end
		else begin
			pbkdf2_state_reg <= pbkdf2_next_state_wire;
		end
	end	


	always @(pbkdf2_state_wire or init or sha256_digest_valid) begin: update_next_state
		case (pbkdf2_state_wire)
			S0_IDLE: begin
				if(init == 1'b1) begin
					pbkdf2_next_state_reg = S1_KHASH_0;
				end
				else begin
					pbkdf2_next_state_reg = S0_IDLE;
				end
			end
			S1_KHASH_0: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S2_STORE_KHASH_0;
				end
				else begin
					pbkdf2_next_state_reg = S1_KHASH_0;
				end
			end
			S2_STORE_KHASH_0: begin
				pbkdf2_next_state_reg = S3_KHASH_1;
			end
			S3_KHASH_1: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S4_STORE_KHASH_1;
				end
				else begin
					pbkdf2_next_state_reg = S3_KHASH_1;
				end
			end
			S4_STORE_KHASH_1: begin
				pbkdf2_next_state_reg = S5_IHASH_0;
			end
			S5_IHASH_0: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S6_STORE_IHASH_0;
				end
				else begin
					pbkdf2_next_state_reg = S5_IHASH_0;
				end
			end
			S6_STORE_IHASH_0: begin
				pbkdf2_next_state_reg = S7_OHASH_0;
			end
			S7_OHASH_0: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S8_STORE_OHASH_0;
				end
				else begin
					pbkdf2_next_state_reg = S7_OHASH_0;
				end			
			end
			S8_STORE_OHASH_0: begin
				pbkdf2_next_state_reg = S9_IHASH_1;
			end
			S9_IHASH_1: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S10_STORE_IHASH_1;
				end
				else begin
					pbkdf2_next_state_reg = S9_IHASH_1;
				end		
			end
			S10_STORE_IHASH_1: begin
				pbkdf2_next_state_reg = S11_IHASH_2;
			end
			S11_IHASH_2: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S12_STORE_IHASH_2;
				end
				else begin
					pbkdf2_next_state_reg = S11_IHASH_2;
				end		
			end
			S12_STORE_IHASH_2: begin
				pbkdf2_next_state_reg = S13_OHASH_1;
			end
			S13_OHASH_1: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S14_STORE_OHASH_1;
				end
				else begin
					pbkdf2_next_state_reg = S13_OHASH_1;
				end		
			end
			S14_STORE_OHASH_1: begin
				pbkdf2_next_state_reg = S15_IHASH_3;
			end
			S15_IHASH_3: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S16_STORE_IHASH_3;
				end
				else begin
					pbkdf2_next_state_reg = S15_IHASH_3;
				end		
			end
			S16_STORE_IHASH_3: begin
				pbkdf2_next_state_reg = S17_OHASH_2;
			end
			S17_OHASH_2: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S18_STORE_OHASH_2;
				end
				else begin
					pbkdf2_next_state_reg = S17_OHASH_2;
				end		
			end
			S18_STORE_OHASH_2: begin
				pbkdf2_next_state_reg = S19_IHASH_4;
			end
			S19_IHASH_4: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S20_STORE_IHASH_4;
				end
				else begin
					pbkdf2_next_state_reg = S19_IHASH_4;
				end		
			end
			S20_STORE_IHASH_4: begin
				pbkdf2_next_state_reg = S21_OHASH_3;
			end
			S21_OHASH_3: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S22_STORE_OHASH_3;
				end
				else begin
					pbkdf2_next_state_reg = S21_OHASH_3;
				end		
			end
			S22_STORE_OHASH_3: begin
				pbkdf2_next_state_reg = S23_IHASH_5;
			end
			S23_IHASH_5: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S24_STORE_IHASH_5;
				end
				else begin
					pbkdf2_next_state_reg = S23_IHASH_5;
				end		
			end
			S24_STORE_IHASH_5: begin
				pbkdf2_next_state_reg = S25_OHASH_4;
			end
			S25_OHASH_4: begin
				if(sha256_digest_valid == 1'b1) begin
					pbkdf2_next_state_reg = S26_STORE_OHASH_4;
				end
				else begin
					pbkdf2_next_state_reg = S25_OHASH_4;
				end		
			end
			S26_STORE_OHASH_4: begin
				pbkdf2_next_state_reg = S27_DONE;
			end
			S27_DONE: begin
				if(init == 1'b0) begin
					pbkdf2_next_state_reg = S0_IDLE;
				end
				else begin
					pbkdf2_next_state_reg = S27_DONE;
				end			
			end
			default: begin
				pbkdf2_next_state_reg = S0_IDLE;
			end
		endcase
	end
	
	always @(pbkdf2_state_wire) begin : output_state
		case (pbkdf2_state_wire)
			S0_IDLE: begin
				sha256_init_reg 		= 1'b0;
                sha256_first_block_reg 	= 1'b1;
                sel_block_in_i_hash_reg = 2'd0;
                sel_block_in_o_hash_reg = 1'b0;
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd0;
                update_mem_0_reg 		= 1'b0;	
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S1_KHASH_0: begin
				sha256_init_reg 		= 1'b1;
                sha256_first_block_reg 	= 1'b1;
                sel_block_in_i_hash_reg = 2'd0;
                sel_block_in_o_hash_reg = 1'b0;
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd0;
                update_mem_0_reg 		= 1'b0;	
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;	
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S2_STORE_KHASH_0: begin
				sha256_init_reg 		= 1'b0;
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd1;
                sel_block_in_o_hash_reg = 1'b0;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'b0;
                update_mem_0_reg 		= 1'b1;
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;	
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S3_KHASH_1: begin
				sha256_init_reg 		= 1'b1;
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd1;
                sel_block_in_o_hash_reg = 1'b0;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'b0;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;	
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;				
			end
			S4_STORE_KHASH_1: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b1;
                sel_block_in_i_hash_reg = 2'd2;
                sel_block_in_o_hash_reg = 1'b0;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd0;
                update_mem_0_reg 		= 1'b1;
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;	
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S5_IHASH_0: begin
				sha256_init_reg 		= 1'b1;
                sha256_first_block_reg 	= 1'b1;
                sel_block_in_i_hash_reg = 2'd2;
                sel_block_in_o_hash_reg = 1'b0;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd0;
                update_mem_0_reg 		= 1'b0; 
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;	
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S6_STORE_IHASH_0: begin
				sha256_init_reg			= 1'b0;	
                sha256_first_block_reg 	= 1'b1;
                sel_block_in_i_hash_reg = 2'd0;	
                sel_block_in_o_hash_reg = 1'b0;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd0;
                update_mem_0_reg 		= 1'b0; 
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b1;
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S7_OHASH_0: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b1;
                sel_block_in_i_hash_reg = 2'd0;	
                sel_block_in_o_hash_reg = 1'b0;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd0;
                update_mem_0_reg 		= 1'b0; 
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S8_STORE_OHASH_0: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd0;
                sel_block_in_o_hash_reg = 1'b0;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd2;
                update_mem_0_reg 		= 1'b0; 
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b1;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S9_IHASH_1: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd0;
                sel_block_in_o_hash_reg = 1'b0;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd2;
                update_mem_0_reg 		= 1'b0; 
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
			S10_STORE_IHASH_1: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b0;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0; 
                update_mem_1_reg 		= 1'b1;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd1;
				valid_reg				= 1'b0;
			end
			S11_IHASH_2: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b1;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0; 
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd1;
				valid_reg				= 1'b0;
			end
			S12_STORE_IHASH_2: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;	
                sel_block_in_o_hash_reg = 1'b1;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd3;
                update_mem_0_reg 		= 1'b1;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd1;
				valid_reg				= 1'b0;
			end
			S13_OHASH_1: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;	
                sel_block_in_o_hash_reg = 1'b1;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd3;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd1;
				valid_reg				= 1'b0;
			end
			S14_STORE_OHASH_1: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b1;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b1;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd2;
				valid_reg				= 1'b0;
			end
			S15_IHASH_3: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b0;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd2;
				valid_reg				= 1'b0;
			end
			S16_STORE_IHASH_3: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;	
                sel_block_in_o_hash_reg = 1'b1;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd3;
                update_mem_0_reg 		= 1'b1;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd2;
				valid_reg				= 1'b0;
			end
			S17_OHASH_2: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;	
                sel_block_in_o_hash_reg = 1'b1;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd3;
                update_mem_0_reg 		= 1'b0;	
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd2;
				valid_reg				= 1'b0;				
			end
			S18_STORE_OHASH_2: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b1;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b1;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd3;
				valid_reg				= 1'b0;				
			end
			S19_IHASH_4: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b1;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd3;
				valid_reg				= 1'b0;
			end
			S20_STORE_IHASH_4: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;	
                sel_block_in_o_hash_reg = 1'b1;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd3;
                update_mem_0_reg 		= 1'b1;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd3;
				valid_reg				= 1'b0;
			end
			S21_OHASH_3: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;	
                sel_block_in_o_hash_reg = 1'b1;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd3;
                update_mem_0_reg 		= 1'b0;	
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd3;
				valid_reg				= 1'b0;
			end
			S22_STORE_OHASH_3: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b1;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b1;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd4;
				valid_reg				= 1'b0;				
			end
			S23_IHASH_5: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b1;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd4;
				valid_reg				= 1'b0;
			end
			S24_STORE_IHASH_5: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;	
                sel_block_in_o_hash_reg = 1'b1;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd3;
                update_mem_0_reg 		= 1'b1;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd4;
				valid_reg				= 1'b0;
			end
			S25_OHASH_4: begin
				sha256_init_reg 		= 1'b1;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;	
                sel_block_in_o_hash_reg = 1'b1;
                sel_block_in_reg 		= 1'b1;
                sel_prev_hash_reg 		= 2'd3;
                update_mem_0_reg 		= 1'b0;	
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd4;
				valid_reg				= 1'b0;
			end
			S26_STORE_OHASH_4: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b1;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0; 
				update_out_1_reg		= 1'b1;
                index_reg 				= 3'd4;
				valid_reg				= 1'b0;
			end
			S27_DONE: begin
				sha256_init_reg 		= 1'b0;	
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd3;
                sel_block_in_o_hash_reg = 1'b1;	
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 2'd1;
                update_mem_0_reg 		= 1'b0;
                update_mem_1_reg 		= 1'b0;
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0; 
				update_out_1_reg		= 1'b0;
                index_reg 				= 3'd4;
				valid_reg				= 1'b1;
			end
			default: begin
				sha256_init_reg 		= 1'b0;
                sha256_first_block_reg 	= 1'b0;
                sel_block_in_i_hash_reg = 2'd0;
                sel_block_in_o_hash_reg = 1'b0;
                sel_block_in_reg 		= 1'b0;
                sel_prev_hash_reg 		= 1'b0;
                update_mem_0_reg 		= 1'b0;	
                update_mem_1_reg 		= 1'b0;	
                update_ixor_mem_reg 	= 1'b0;	
                update_oxor_mem_reg 	= 1'b0;
				update_out_4_reg		= 1'b0;
				update_out_3_reg		= 1'b0;
				update_out_2_reg		= 1'b0;
				update_out_1_reg		= 1'b0;	
                index_reg 				= 3'd0;
				valid_reg				= 1'b0;
			end
		endcase
	end	
	
endmodule