[i2c, dv] Add i2c_stretch_timeout and i2c_fifo_full tests (v2)

1) i2c_stretch_timeout: stretch_timeout interrupt is aggressively trigerred and verified.
 - Add i2c_stretch_timeout_vseq
 - Update i2c_testplan.md
 - Fix invalid format programmed to fmt_fifo (i2c_rx_tx_vseq.sv)
 - Refactor code and clean nits

2) i2c_fifo_full: verify full status of both rx_fifo and fmt_fifo
 - Add i2c_fifo_full_vseq
 - Update i2c_testplan.md

Signed-off-by: Tung Hoang <hoang.tung@wdc.com>
diff --git a/hw/dv/sv/i2c_agent/i2c_device_driver.sv b/hw/dv/sv/i2c_agent/i2c_device_driver.sv
index 7917814..e87628d 100644
--- a/hw/dv/sv/i2c_agent/i2c_device_driver.sv
+++ b/hw/dv/sv/i2c_agent/i2c_device_driver.sv
@@ -15,7 +15,7 @@
 
   virtual task get_and_drive();
     uint num_stretch_host_clks;
-    uint rd_data_cnt = 0;
+    bit [7:0] rd_data_cnt = 8'd0;
     i2c_item rsp_item;
 
     @(posedge cfg.vif.rst_ni);
@@ -45,12 +45,12 @@
           join
         end
         RdData: begin
-          `DV_CHECK_MEMBER_RANDOMIZE_FATAL(rd_data)
-          rd_data_cnt++;
-          `DV_CHECK_LE(rd_data_cnt, 256);
+          if (rd_data_cnt == 8'd0) `DV_CHECK_MEMBER_RANDOMIZE_FATAL(rd_data)
           for (int i = 7; i >= 0; i--) begin
             cfg.vif.device_send_bit(cfg.timing_cfg, rd_data[rd_data_cnt][i]);
           end
+          // rd_data_cnt is rollled back (no overflow) after reading 256 bytes
+          rd_data_cnt++;
           `uvm_info(`gfn, $sformatf("driver, trans %0d, byte %0d  %0x",
               rsp_item.tran_id, rsp_item.num_data+1, rd_data[rd_data_cnt]), UVM_DEBUG)
         end
diff --git a/hw/dv/sv/i2c_agent/i2c_driver.sv b/hw/dv/sv/i2c_agent/i2c_driver.sv
index 5c05325..f445fd2 100644
--- a/hw/dv/sv/i2c_agent/i2c_driver.sv
+++ b/hw/dv/sv/i2c_agent/i2c_driver.sv
@@ -10,11 +10,9 @@
   virtual task reset_signals();
     `uvm_info(`gfn, "driver in reset progress", UVM_HIGH)
     @(negedge cfg.vif.rst_ni);
-    cfg.vif.scl_o <= 1'b0;
-    cfg.vif.sda_o <= 1'b0;
-    @(posedge cfg.vif.rst_ni);
     cfg.vif.scl_o <= 1'b1;
     cfg.vif.sda_o <= 1'b1;
+    @(posedge cfg.vif.rst_ni);
     `uvm_info(`gfn, "driver out of reset", UVM_HIGH)
   endtask : reset_signals
 
diff --git a/hw/dv/sv/i2c_agent/i2c_item.sv b/hw/dv/sv/i2c_agent/i2c_item.sv
index dfabc9b..7319b3c 100644
--- a/hw/dv/sv/i2c_agent/i2c_item.sv
+++ b/hw/dv/sv/i2c_agent/i2c_item.sv
@@ -26,10 +26,8 @@
   constraint fbyte_c     { fbyte      inside {[0 : 127]}; }
   constraint rcont_c     {
      solve read, stop before rcont;
-     if (read) {
-       // for read request, rcont and stop must be complementary set
-       rcont  == ~stop;
-     }
+     // for read request, rcont and stop must be complementary set
+     read -> rcont == ~stop;
   }
 
   `uvm_object_utils_begin(i2c_item)