diff --git a/hdl/src/sha256_engine.sv b/hdl/src/sha256_engine.sv index e5d50397a9943bed05a5eebdf04ea030b6b29f4d..dd0cd2b86e05bd3f87fd78e58b8f16b6de26a57d 100644 --- a/hdl/src/sha256_engine.sv +++ b/hdl/src/sha256_engine.sv @@ -57,6 +57,11 @@ module sha256_engine ( logic message_block_valid; logic message_block_ready; + logic [511:0] message_block_buffered; + logic message_block_last_buffered; + logic message_block_valid_buffered; + logic message_block_ready_buffered; + logic [255:0] hash; logic hash_last; logic hash_valid; @@ -89,9 +94,9 @@ module sha256_engine ( .en (en), .sync_rst (sync_rst), .data_in ({cfg_size, cfg_scheme}), - .data_in_valid (cfg_in_valid), - .data_in_ready (cfg_in_ready), - .data_in_last (cfg_in_last), + .data_in_valid (cfg_valid), + .data_in_ready (cfg_ready), + .data_in_last (cfg_last), .data_out ({cfg_size_buffered,cfg_scheme_buffered}), .data_out_last (cfg_last_buffered), .data_out_valid (cfg_valid_buffered), @@ -119,8 +124,10 @@ module sha256_engine ( .data_out_ready (message_block_ready) ); - // Hash Compression (Peform Hash Calculation) - sha256_hash_compression hash_calculator ( + // Intermediate FIFO + fifo_vr #(16, // Depth + 512 // Data Width + ) message_block_buffer ( .clk (clk), .nrst (nrst), .en (en), @@ -129,6 +136,23 @@ module sha256_engine ( .data_in_valid (message_block_valid), .data_in_ready (message_block_ready), .data_in_last (message_block_last), + .data_out (message_block_buffered), + .data_out_last (message_block_last_buffered), + .data_out_valid (message_block_valid_buffered), + .data_out_ready (message_block_ready_buffered) + ); + + + // Hash Compression (Peform Hash Calculation) + sha256_hash_compression hash_calculator ( + .clk (clk), + .nrst (nrst), + .en (en), + .sync_rst (sync_rst), + .data_in (message_block_buffered), + .data_in_valid (message_block_valid_buffered), + .data_in_ready (message_block_ready_buffered), + .data_in_last (message_block_last_buffered), .data_out (hash), .data_out_last (hash_last), .data_out_valid (hash_valid), diff --git a/hdl/verif/tb_sha256_message_build.sv b/hdl/verif/tb_sha256_message_build.sv index 1040c7e1f9d6bcdb7bcf9be80b22c70a117a4847..ba24019f7be43ad5ba10e5f6c66b90c1b5676ae2 100644 --- a/hdl/verif/tb_sha256_message_build.sv +++ b/hdl/verif/tb_sha256_message_build.sv @@ -154,12 +154,12 @@ module tb_sha256_message_build; $error("data_out missmatch! packet %d | recieve: %x != check: %x", packet_num, data_out, data_out_check); $finish; end - // $display("data_out match! packet %d | recieve: %x != check: %x", packet_num, data_out, data_out_check); + $display("data_out match! packet %d | recieve: %x != check: %x", packet_num, data_out, data_out_check); assert (data_out_last == data_out_last_check) else begin $error("data_out_last missmatch! packet %d | recieve: %x != check: %x", packet_num, data_out_last, data_out_last_check); $finish; end - // $display("data_out_last match! packet %d | recieve: %x != check: %x", packet_num, data_out_last, data_out_last_check); + $display("data_out_last match! packet %d | recieve: %x != check: %x", packet_num, data_out_last, data_out_last_check); if ((data_out_queue.size() > 0) && (data_out_last_queue.size() > 0)) begin data_out_check <= data_out_queue.pop_front(); data_out_last_check <= data_out_last_queue.pop_front();