diff --git a/hdl/verif/tb_sha256_engine.sv b/hdl/verif/tb_sha256_engine.sv index 2c2d3bde30a58fea87f0ab55a586b2b44c984e6a..1104d32903f1d3886fb4888270165cdbdbb65544 100644 --- a/hdl/verif/tb_sha256_engine.sv +++ b/hdl/verif/tb_sha256_engine.sv @@ -69,6 +69,10 @@ module tb_sha256_engine; logic cfg_last_queue [$]; logic cfg_wait_queue; + logic [511:0] message_block_queue [$]; + logic message_block_last_queue [$]; + logic message_block_wait_queue; + logic [255:0] data_out_queue [$]; logic data_out_last_queue [$]; logic data_out_wait_queue; @@ -131,6 +135,10 @@ module tb_sha256_engine; logic test_end; int packet_num; + logic [511:0] message_block_data_out_check; + logic message_block_data_out_last_check; + int message_block_packet_num; + // Handle Output Ready Driving always_ff @(posedge clk, negedge nrst) begin: data_out_recieve if (!nrst) begin @@ -172,6 +180,26 @@ module tb_sha256_engine; $finish; end end + // Check Message Block Handshake + if ((message_builder_out_data_valid == 1'b1) && (message_builder_out_data_ready == 1'b1)) begin + assert (message_builder_out_data == message_block_data_out_check) else begin + $error("message block missmatch! packet %d | recieve: %x != check: %x", message_block_packet_num, data_out, message_block_data_out_check); + $finish; + end + $display("message block match! packet %d | recieve: %x != check: %x", message_block_packet_num, message_builder_out_data, message_block_data_out_check); + assert (message_builder_out_data_last == message_block_data_out_last_check) else begin + $error("message block last missmatch! packet %d | recieve: %x != check: %x", message_block_packet_num, message_builder_out_data_last, message_block_data_out_last_check); + $finish; + end + $display("message block last match! packet %d | recieve: %x != check: %x", message_block_packet_num, message_builder_out_data_last, message_block_data_out_last_check); + if ((message_block_queue.size() > 0) && (message_block_last_queue.size() > 0)) begin + message_block_data_out_check <= message_block_queue.pop_front(); + message_block_data_out_last_check <= message_block_last_queue.pop_front(); + if (message_block_data_out_last_check == 1'b1) begin + message_block_packet_num <= message_block_packet_num + 1; + end + end + end end // File Reading Variables @@ -187,21 +215,32 @@ module tb_sha256_engine; logic [255:0] output_data; // Temporary Output Data Storage logic output_data_last; // Temporary Output Data Last + logic [511:0] message_block_data; // Temporary Message Block Data Storage + logic message_block_data_last; // Temporary Message Block Data Last + + logic [511:0] message_builder_out_data; + logic message_builder_out_data_last; + + assign message_builder_out_data = tb_sha256_engine.uut.message_block; + assign message_builder_out_data_last = tb_sha256_engine.uut.message_block_last; + assign message_builder_out_data_valid = tb_sha256_engine.uut.message_block_valid; + assign message_builder_out_data_ready = tb_sha256_engine.uut.message_block_ready; + initial begin $dumpfile("sha256_engine.vcd"); $dumpvars(0, tb_sha256_engine); - for (int i = 0; i < 16; i++) begin - $dumpvars(0, tb_sha256_engine.uut.hash_calculator.M[i]); - end - for (int i = 0; i < 8; i++) begin - $dumpvars(0, tb_sha256_engine.uut.hash_calculator.H[i]); - $dumpvars(0, tb_sha256_engine.uut.hash_calculator.next_H[i]); - end - for (int i = 0; i < 64; i++) begin - $dumpvars(0, tb_sha256_engine.uut.hash_calculator.W[i]); - $dumpvars(0, tb_sha256_engine.uut.hash_calculator.next_W[i]); - $dumpvars(0, tb_sha256_engine.uut.hash_calculator.ssig1_next_W[i]); - end + // for (int i = 0; i < 16; i++) begin + // $dumpvars(0, tb_sha256_engine.uut.hash_calculator.M[i]); + // end + // for (int i = 0; i < 8; i++) begin + // $dumpvars(0, tb_sha256_engine.uut.hash_calculator.H[i]); + // $dumpvars(0, tb_sha256_engine.uut.hash_calculator.next_H[i]); + // end + // for (int i = 0; i < 64; i++) begin + // $dumpvars(0, tb_sha256_engine.uut.hash_calculator.W[i]); + // $dumpvars(0, tb_sha256_engine.uut.hash_calculator.next_W[i]); + // $dumpvars(0, tb_sha256_engine.uut.hash_calculator.ssig1_next_W[i]); + // end data_in_drive_en = 0; cfg_drive_en = 0; data_out_drive_ready = 0; @@ -231,10 +270,21 @@ module tb_sha256_engine; end $fclose(fd); + // Read Message Block data into Queue + fd = $fopen("../stimulus/testbench/inout_message_block_stim_ref.csv", "r"); + while ($fscanf (fd, "%x,%b", message_block_data, message_block_data_last) == 2) begin + message_block_queue.push_back(message_block_data); + message_block_last_queue.push_back(message_block_data_last); + end + $fclose(fd); + // Initialise First Checking Values data_out_check = data_out_queue.pop_front(); data_out_last_check = data_out_last_queue.pop_front(); + message_block_data_out_check = message_block_queue.pop_front(); + message_block_data_out_last_check = message_block_last_queue.pop_front(); + // Enable Hash Compression en = 1;