diff --git a/flow/simulators/ivlog_sim.sh b/flow/simulators/ivlog_sim.sh
index 8b62d62bfbf2ed3f9f64add58275c3ca9b8cc75d..fb36012dbe7927f5b44a22363377a3551e713788 100755
--- a/flow/simulators/ivlog_sim.sh
+++ b/flow/simulators/ivlog_sim.sh
@@ -13,4 +13,4 @@
 
 mkdir -p $SHA_2_ACC_DIR/simulate/sim/ 
 iverilog -I $SHA_2_ACC_DIR/hdl/verif/ -I $SHA_2_ACC_DIR/hdl/src/ -g2012 -o $SHA_2_ACC_DIR/simulate/sim/$1.vvp $SHA_2_ACC_DIR/hdl/verif/tb_$1.sv
-cd $SHA_2_ACC_DIR/simulate/sim/ && vvp $1.vvp
\ No newline at end of file
+cd $SHA_2_ACC_DIR/simulate/sim/ && vvp $1.vvp $2
\ No newline at end of file
diff --git a/flow/socsim b/flow/socsim
index 23dadfc47df4b2c334595f39125c247f928ad2f6..4c98dbf9a753f3873b7bc88e1312b4040d2ed08c 100755
--- a/flow/socsim
+++ b/flow/socsim
@@ -15,4 +15,4 @@ DEFAULT_SIMULATOR="ivlog"
 if [[ -z "${SIMULATOR}" ]]; then 
     SIMULATOR=$DEFAULT_SIMULATOR
 fi
-$SHA_2_ACC_DIR"/flow/simulators/"$SIMULATOR"_sim.sh" $1
+$SHA_2_ACC_DIR"/flow/simulators/"$SIMULATOR"_sim.sh" $@
diff --git a/hdl/verif/tb_sha256_hash_compression.sv b/hdl/verif/tb_sha256_hash_compression.sv
index 7c272aa9abc429c18508aa8abce49f7ca492d488..8bd190565fb995e9cc56c0511f8c2162aeb7d973 100644
--- a/hdl/verif/tb_sha256_hash_compression.sv
+++ b/hdl/verif/tb_sha256_hash_compression.sv
@@ -1,5 +1,5 @@
 //-----------------------------------------------------------------------------
-// SoC Labs Basic SHA-2 Message Builder Testbench
+// SoC Labs Basic SHA-2 Hash Compression Testbench
 // A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
 //
 // Contributors
@@ -48,10 +48,13 @@ module tb_sha256_hash_compression;
     
     logic [511:0] data_in_queue [$];
     logic data_in_last_queue    [$];
+    int   data_in_gap_queue     [$];
     logic data_in_wait_queue;
     
+    
     logic [255:0] data_out_queue [$];
     logic data_out_last_queue    [$];
+    int   data_out_stall_queue   [$];
     logic data_out_wait_queue;
     
     // Handle Valid and Data for data_in
@@ -60,15 +63,27 @@ module tb_sha256_hash_compression;
             data_in                 <= 512'd0;
             data_in_valid           <=   1'b0;
             data_in_last            <=   1'b0;
+            data_in_gap             <=   0;
             data_in_wait_queue      <=   1'b1;
         end else if (data_in_drive_en) begin
+            if (data_in_gap > 0) begin
+                data_in_gap <= data_in_gap -1;
+                data_in_valid <= 1'b0;
+            end else begin
+                data_in_valid <= 1'b1;
+            end
             if (((data_in_valid == 1'b1) && (data_in_ready == 1'b1)) ||
                  (data_in_wait_queue == 1'b1)) begin
                 // Data transfer just completed or transfers already up to date
-                if ((data_in_queue.size() > 0) && (data_in_last_queue.size() > 0)) begin
+                if ((data_in_queue.size() > 0) && (data_in_last_queue.size() > 0) && (data_in_gap_queue.size() > 0)) begin
                     data_in            <= data_in_queue.pop_front();
                     data_in_last       <= data_in_last_queue.pop_front();
-                    data_in_valid      <= 1'b1;
+                    if (data_in_gap_queue[0] == 0) begin
+                        data_in_valid  <= 1'b1;
+                    end else begin
+                        data_in_valid  <= 1'b0;
+                    end
+                    data_in_gap        <= data_in_gap_queue.pop_front();
                     data_in_wait_queue <= 1'b0;
                 end else begin
                     // No data currently avaiable in queue to write but transfers up to date
@@ -79,25 +94,40 @@ module tb_sha256_hash_compression;
         end
     end
     
+    
     logic [255:0] data_out_check;
     logic data_out_last_check;
-    logic check_output;
-    logic test_end;
-    int packet_num;
+    int   data_in_gap;
+    int   data_out_stall;
     
-    // Handle Output Ready Driving
-    always_ff @(posedge clk, negedge nrst) begin: data_out_recieve
-        if (!nrst) begin
-            data_out_ready          <=   1'b0;
-            check_output            <=   1'b0;
-            test_end                <=   1'b0;
-        end else begin
-            // Synchronise Ready to Clock
-            if (data_out_drive_ready) begin
-                data_out_ready <= 1'b1;
-            end else begin
+    int   packet_num;
+    
+    // Handle Output Ready Signal Verification
+    always @(posedge clk) begin
+        // Check Override Control on Ready
+        if (data_out_drive_ready) begin
+            // Count down to zero before enabling Ready
+            if (data_out_stall > 0) begin
+                data_out_stall <= data_out_stall - 1;
                 data_out_ready <= 1'b0;
+            end else begin
+                // Wait for handshake before updating stall value
+                if ((data_out_valid == 1'b1) && (data_out_ready == 1'b1)) begin
+                    if (data_out_stall_queue.size() > 0) begin
+                        if (data_out_stall_queue[0] == 0) begin
+                            data_out_ready <= 1'b1;
+                        end else begin
+                            data_out_ready <= 1'b0;
+                        end
+                        data_out_stall <= data_out_stall_queue.pop_front();
+                    end
+                // Keep Ready Asserted until handshake seen
+                end else begin
+                    data_out_ready <= 1'b1;
+                end
             end
+        end else begin
+            data_out_ready <= 1'b0;
         end
     end
     
@@ -109,14 +139,14 @@ module tb_sha256_hash_compression;
                 $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);
+            if ($test$plusargs ("DEBUG")) $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);
+            if ($test$plusargs ("DEBUG")) $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_check      <= data_out_queue.pop_front();
                 data_out_last_check <= data_out_last_queue.pop_front();
                 if (data_out_last_check == 1'b1) begin
                     packet_num <= packet_num + 1;
@@ -133,47 +163,55 @@ module tb_sha256_hash_compression;
     
     logic [511:0] input_data; // Temporary Input Data Storage
     logic input_data_last;    // Temporary Input Data Last
+    int   input_data_gap;     // Temporary Input Gap
+    
     
     logic [255:0] output_data; // Temporary Output Data Storage
     logic output_data_last;    // Temporary Output Data Last
+    int  output_data_stall;    // Temporary Output Stall 
     
     initial begin
         $dumpfile("sha256_hash_compression.vcd");
-        $dumpvars(0, tb_sha256_hash_compression);
-        for (int i = 0; i < 16; i++) begin
-            $dumpvars(0, tb_sha256_hash_compression.uut.M[i]);
-        end
-        for (int i = 0; i < 8; i++) begin
-            $dumpvars(0, tb_sha256_hash_compression.uut.H[i]);
-            $dumpvars(0, tb_sha256_hash_compression.uut.next_H[i]);
-        end
-        for (int i = 0; i < 64; i++) begin
-            $dumpvars(0, tb_sha256_hash_compression.uut.W[i]);
-            $dumpvars(0, tb_sha256_hash_compression.uut.next_W[i]);
-            $dumpvars(0, tb_sha256_hash_compression.uut.ssig1_next_W[i]);
+        if ($test$plusargs ("DEBUG")) begin
+            $dumpvars(0, tb_sha256_hash_compression);
+            for (int i = 0; i < 16; i++) begin
+                $dumpvars(0, tb_sha256_hash_compression.uut.M[i]);
+            end
+            for (int i = 0; i < 8; i++) begin
+                $dumpvars(0, tb_sha256_hash_compression.uut.H[i]);
+                $dumpvars(0, tb_sha256_hash_compression.uut.next_H[i]);
+            end
+            for (int i = 0; i < 64; i++) begin
+                $dumpvars(0, tb_sha256_hash_compression.uut.W[i]);
+                $dumpvars(0, tb_sha256_hash_compression.uut.next_W[i]);
+                $dumpvars(0, tb_sha256_hash_compression.uut.ssig1_next_W[i]);
+            end
         end
         data_in_drive_en = 0;
         data_out_drive_ready = 0;
         
         // Read input data into Queue
-        fd = $fopen("../stimulus/testbench/inout_message_block_stim_ref.csv", "r");
-        while ($fscanf (fd, "%x,%b", input_data, input_data_last) == 2) begin
+        fd = $fopen("../stimulus/testbench/input_message_block_stim.csv", "r");
+        while ($fscanf (fd, "%x,%b,%d", input_data, input_data_last, input_data_gap) == 3) begin
             data_in_queue.push_back(input_data);
             data_in_last_queue.push_back(input_data_last);
+            data_in_gap_queue.push_back(input_data_gap);
         end
         $fclose(fd);
         
         // Read output data into Queue
         fd = $fopen("../stimulus/testbench/output_hash_ref.csv", "r");
-        while ($fscanf (fd, "%x,%b", output_data, output_data_last) == 2) begin
+        while ($fscanf (fd, "%x,%b,%d", output_data, output_data_last, output_data_stall) == 3) begin
             data_out_queue.push_back(output_data);
             data_out_last_queue.push_back(output_data_last);
+            data_out_stall_queue.push_back(output_data_stall);
         end
         $fclose(fd);
         
         // Initialise First Checking Values
-        data_out_check = data_out_queue.pop_front();      
+        data_out_check      = data_out_queue.pop_front();      
         data_out_last_check = data_out_last_queue.pop_front();
+        data_out_stall      = data_out_stall_queue.pop_front();
         
         // Enable Hash Compression
         en = 1;
diff --git a/hdl/verif/tb_sha256_message_build.sv b/hdl/verif/tb_sha256_message_build.sv
index 7755fceaf9b7d25600391d9e65d72e7997d57cbc..eadec31c943637eace6d8bf6c6174cd5a88825c9 100644
--- a/hdl/verif/tb_sha256_message_build.sv
+++ b/hdl/verif/tb_sha256_message_build.sv
@@ -119,7 +119,7 @@ module tb_sha256_message_build;
             cfg_scheme          <=   2'd0;
             cfg_valid           <=   1'b0;
             cfg_last            <=   1'b0;
-            cfg_gap          <=   0;
+            cfg_gap              <=   0;
             cfg_wait_queue      <=   1'b1;
         end else if (cfg_drive_en) begin
             if (cfg_gap > 0) begin
@@ -196,12 +196,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);
+            if ($test$plusargs ("DEBUG")) $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);
+            if ($test$plusargs ("DEBUG")) $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();
@@ -272,7 +272,7 @@ module tb_sha256_message_build;
         data_out_stall      = data_out_stall_queue.pop_front();
         
         // Defaultly enable Message Builder
-        en  = 1;
+        en = 1;
         
         // Defaultly set Sync Reset Low
         sync_rst  = 0;