Updates for ROM

- Allow FPGA to use real ROM
- Allow reset to be used in prim_rom
- Qualify tlul_adapter_sram response to block d_valid if there are no pending
  requests
diff --git a/hw/ip/prim/abstract/prim_rom.sv b/hw/ip/prim/abstract/prim_rom.sv
index 1bd8439..b0adecc 100644
--- a/hw/ip/prim/abstract/prim_rom.sv
+++ b/hw/ip/prim/abstract/prim_rom.sv
@@ -9,6 +9,7 @@
   parameter  int Aw        = $clog2(Depth)
 ) (
   input                        clk_i,
+  input                        rst_ni,
   input        [Aw-1:0]        addr_i,
   input                        cs_i,
   output logic [Width-1:0]     dout_o,
@@ -21,6 +22,7 @@
       .Depth(Depth)
     ) u_impl_generic (
       .clk_i,
+      .rst_ni,
       .addr_i,
       .cs_i,
       .dout_o,
diff --git a/hw/ip/prim_generic/rtl/prim_generic_rom.sv b/hw/ip/prim_generic/rtl/prim_generic_rom.sv
index c400c67..398a9fb 100644
--- a/hw/ip/prim_generic/rtl/prim_generic_rom.sv
+++ b/hw/ip/prim_generic/rtl/prim_generic_rom.sv
@@ -8,6 +8,7 @@
   parameter  int Aw        = $clog2(Depth)
 ) (
   input                        clk_i,
+  input                        rst_ni,
   input        [Aw-1:0]        addr_i,
   input                        cs_i,
   output logic [Width-1:0]     dout_o,
@@ -22,8 +23,12 @@
     end
   end
 
-  always_ff @(posedge clk_i) begin
-    dvalid_o <= cs_i;
+  always_ff @(posedge clk_i or negedge rst_ni) begin
+    if (!rst_ni) begin
+      dvalid_o <= 1'b0;
+    end else begin
+      dvalid_o <= cs_i;
+    end
   end
 
   // ******************************************************************************
diff --git a/hw/ip/tlul/rtl/tlul_adapter_sram.sv b/hw/ip/tlul/rtl/tlul_adapter_sram.sv
index 3004a05..fac39c4 100644
--- a/hw/ip/tlul/rtl/tlul_adapter_sram.sv
+++ b/hw/ip/tlul/rtl/tlul_adapter_sram.sv
@@ -125,7 +125,7 @@
   }; // Store the request only. Doesn't have to store data
   assign reqfifo_rready = tl_o.d_valid & tl_i.d_ready ;
 
-  assign rspfifo_wvalid = rvalid_i ;
+  assign rspfifo_wvalid = rvalid_i & reqfifo_rvalid;
   assign rspfifo_wdata  = '{
     data:  rdata_i,
     error: rerror_i[1]  // Only care for Uncorrectable error
diff --git a/hw/top_earlgrey/doc/top_earlgrey.tpl.sv b/hw/top_earlgrey/doc/top_earlgrey.tpl.sv
index 3d78507..92d564e 100644
--- a/hw/top_earlgrey/doc/top_earlgrey.tpl.sv
+++ b/hw/top_earlgrey/doc/top_earlgrey.tpl.sv
@@ -274,6 +274,7 @@
     .Depth(${rom_depth})
   ) u_rom_${m["name"]} (
     .clk_i,
+    .rst_ni   (ndmreset_n),
     .cs_i     (${m["name"]}_req),
     .addr_i   (${m["name"]}_addr),
     .dout_o   (${m["name"]}_rdata),
diff --git a/hw/top_earlgrey/rtl/top_earlgrey.sv b/hw/top_earlgrey/rtl/top_earlgrey.sv
index 0e5733f..4a6fad9 100644
--- a/hw/top_earlgrey/rtl/top_earlgrey.sv
+++ b/hw/top_earlgrey/rtl/top_earlgrey.sv
@@ -219,6 +219,7 @@
     .Depth(2048)
   ) u_rom_rom (
     .clk_i,
+    .rst_ni   (ndmreset_n),
     .cs_i     (rom_req),
     .addr_i   (rom_addr),
     .dout_o   (rom_rdata),
diff --git a/hw/top_earlgrey/top_earlgrey_nexysvideo.core b/hw/top_earlgrey/top_earlgrey_nexysvideo.core
index ecd16ba..334ca5d 100644
--- a/hw/top_earlgrey/top_earlgrey_nexysvideo.core
+++ b/hw/top_earlgrey/top_earlgrey_nexysvideo.core
@@ -26,11 +26,6 @@
   # XXX: The VMEM file should be added to the sources of the Vivado project to
   # make the Vivado dependency tracking work. However this requires changes to
   # fusesoc first.
-  SRAM_INIT_FILE:
-    datatype: str
-    description: SRAM initialization file in vmem hex format
-    default: "../../../../../sw/boot_rom/boot_rom.vmem"
-    paramtype: vlogdefine
   ROM_INIT_FILE:
     datatype: str
     description: SRAM initialization file in vmem hex format
@@ -49,10 +44,7 @@
       - files_constraints
     toplevel: top_earlgrey_nexysvideo
     parameters:
-      - SRAM_INIT_FILE
-      # To initialize the ROM, uncomment below and set ROM_INIT_FILE to a
-      # path of a VMEM file containing the ROM code.
-      #- ROM_INIT_FILE
+      - ROM_INIT_FILE
       - PRIM_DEFAULT_IMPL=xilinx
     tools:
       vivado: