diff --git a/hdl/src/hash_process.sv b/hdl/src/hash_process.sv index 6b55857054e2137fcceb862511a83f9f566d8a74..b3e228ad4f17b3996590e58ec6a87a4baafc5763 100644 --- a/hdl/src/hash_process.sv +++ b/hdl/src/hash_process.sv @@ -311,17 +311,10 @@ module hash_process ( // If data out handshake has been seen, drop valid next_data_out_valid = 1'b0; end - next_H[0] = a + H[0]; - next_H[1] = b + H[1]; - next_H[2] = c + H[2]; - next_H[3] = d + H[3]; - next_H[4] = e + H[4]; - next_H[5] = f + H[5]; - next_H[6] = g + H[6]; - next_H[7] = h + H[7]; if (last_block) begin if (!data_out_valid) begin // No Data waiting at output - next_data_out = {next_H[0], next_H[1], next_H[2], next_H[3], next_H[4], next_H[5], next_H[6], next_H[7]}; + // Output updated H values + next_data_out = {a + H[0], b + H[1], c + H[2], d + H[3], e + H[4], f + H[5], g + H[6], h + H[7]}; next_data_out_last = 1'b1; next_data_out_valid = 1'b1; // Next State Logic @@ -336,46 +329,23 @@ module hash_process ( next_H[5] = 32'h9b05688c; next_H[6] = 32'h1f83d9ab; next_H[7] = 32'h5be0cd19; - end else begin - // Still Waiting for previous data to be recieved - next_state = 3'd4; - next_data_in_ready = 1'b0; end end else begin + // Update H values for next message block + next_H[0] = a + H[0]; + next_H[1] = b + H[1]; + next_H[2] = c + H[2]; + next_H[3] = d + H[3]; + next_H[4] = e + H[4]; + next_H[5] = f + H[5]; + next_H[6] = g + H[6]; + next_H[7] = h + H[7]; // Next State Logic next_data_in_ready = 1'b1; next_state = 3'd1; end end - 3'd4: begin // Output Handling - if (!(data_out_valid && !data_out_ready)) begin - // If data out handshake has been seen, drop valid - next_data_out_valid = 1'b0; - end - if (!data_out_valid) begin // No Data waiting at output - next_data_out = {next_H[0], next_H[1], next_H[2], next_H[3], next_H[4], next_H[5], next_H[6], next_H[7]}; - next_data_out_last = 1'b1; - next_data_out_valid = 1'b1; - // Next State Logic - next_state = 3'd1; - next_data_in_ready = 1'b1; - // Initialise Hash Value Registers - next_H[0] = 32'h6a09e667; - next_H[1] = 32'hbb67ae85; - next_H[2] = 32'h3c6ef372; - next_H[3] = 32'ha54ff53a; - next_H[4] = 32'h510e527f; - next_H[5] = 32'h9b05688c; - next_H[6] = 32'h1f83d9ab; - next_H[7] = 32'h5be0cd19; - end else begin - // Still Waiting for previous data to be recieved - next_state = 3'd4; - next_data_in_ready = 1'b0; - end - end - default: begin next_state = 3'd0; end