diff --git a/pipelined/src/uncore/rom_ahb.sv b/pipelined/src/uncore/rom_ahb.sv
index e6f3b336a..1a136b9d9 100644
--- a/pipelined/src/uncore/rom_ahb.sv
+++ b/pipelined/src/uncore/rom_ahb.sv
@@ -32,45 +32,23 @@
 
 module rom_ahb #(parameter BASE=0, RANGE = 65535) (
   input  logic             HCLK, HRESETn, 
-  input  logic             HSELRam,
+  input  logic             HSELRom,
   input  logic [31:0]      HADDR,
-  input  logic             HWRITE,
   input  logic             HREADY,
   input  logic [1:0]       HTRANS,
-  input  logic [`XLEN-1:0] HWDATA,
-  input  logic [`XLEN/8-1:0] HWSTRB,
-  output logic [`XLEN-1:0] HREADRam,
-  output logic             HRESPRam, HREADYRam
+  output logic [`XLEN-1:0] HREADRom,
+  output logic             HRESPRom, HREADYRom
 );
 
   localparam ADDR_WIDTH = $clog2(RANGE/8);
   localparam OFFSET = $clog2(`XLEN/8);   
-
-  logic [`XLEN/8-1:0] 		  ByteMask;
-  logic [31:0]        HADDRD, RamAddr;
-  logic				  initTrans;
-  logic				  memwrite, memwriteD, memread;
-  logic         nextHREADYRam;
-
-  // a new AHB transactions starts when HTRANS requests a transaction, 
-  // the peripheral is selected, and the previous transaction is completing
-  assign initTrans = HREADY & HSELRam & HTRANS[1]; 
-  assign memwrite = initTrans & HWRITE;  
-  assign memread = initTrans & ~HWRITE;
  
-  flopenr #(1) memwritereg(HCLK, ~HRESETn, HREADY, memwrite, memwriteD); 
-  flopenr #(32)   haddrreg(HCLK, ~HRESETn, HREADY, HADDR, HADDRD);
+  // Never stalls
+  assign HREADYRom = 1'b1;
+  assign HRESPRom = 0; // OK
 
-  // Stall on a read after a write because the RAM can't take both adddresses on the same cycle
-  assign nextHREADYRam = ~(memwriteD & memread);
-  flopr #(1) readyreg(HCLK, ~HRESETn, nextHREADYRam, HREADYRam);
-  assign HRESPRam = 0; // OK
-
-  // On writes or during a wait state, use address delayed by one cycle to sync RamAddr with HWDATA or hold stalled address
-  mux2 #(32) adrmux(HADDR, HADDRD, memwriteD | ~HREADY, RamAddr);
-
-  // single-ported RAM
-  bram1p1rw #(`XLEN/8, 8, ADDR_WIDTH)
-    memory(.clk(HCLK), .we(memwriteD), .bwe(HWSTRB), .addr(RamAddr[ADDR_WIDTH+OFFSET-1:OFFSET]), .dout(HREADRam), .din(HWDATA));  
+  // single-ported ROM
+  brom1p1r #(ADDR_WIDTH, `XLEN)
+    memory(.clk(HCLK), .addr(HADDR[ADDR_WIDTH+OFFSET-1:OFFSET]), .dout(HREADRom));  
 endmodule
   
diff --git a/pipelined/src/uncore/uncore.sv b/pipelined/src/uncore/uncore.sv
index 8e1bdafdc..401ba5b56 100644
--- a/pipelined/src/uncore/uncore.sv
+++ b/pipelined/src/uncore/uncore.sv
@@ -120,10 +120,9 @@ module uncore (
     rom_ahb #(.BASE(`BOOTROM_BASE), .RANGE(`BOOTROM_RANGE))
     bootrom(
       .HCLK, .HRESETn, 
-      .HSELRam(HSELBootRom), .HADDR,
-      .HWRITE, .HREADY, .HTRANS, 
-      .HWDATA, .HWSTRB,
-      .HREADRam(HREADBootRom), .HRESPRam(HRESPBootRom), .HREADYRam(HREADYBootRom));
+      .HSELRom(HSELBootRom), .HADDR,
+      .HREADY, .HTRANS, 
+      .HREADRom(HREADBootRom), .HRESPRom(HRESPBootRom), .HREADYRom(HREADYBootRom));
   end
 
   // memory-mapped I/O peripherals
diff --git a/pipelined/testbench/testbench-linux.sv b/pipelined/testbench/testbench-linux.sv
index e7f64033c..a93b4b990 100644
--- a/pipelined/testbench/testbench-linux.sv
+++ b/pipelined/testbench/testbench-linux.sv
@@ -421,9 +421,9 @@ module testbench;
     ProgramLabelMapFile = {linuxImageDir,"disassembly/vmlinux.objdump.lab"};
     // initialize bootrom
     memFile = $fopen({testvectorDir,"bootmem.bin"}, "rb");
-    readResult = $fread(dut.uncore.bootrom.bootrom.memory.RAM,memFile);
+    readResult = $fread(dut.uncore.bootrom.bootrom.memory.ROM,memFile);
     $fclose(memFile);
-    // initialize RAM
+    // initialize RAM and ROM
     if (CHECKPOINT==0) 
       memFile = $fopen({testvectorDir,"ram.bin"}, "rb");
     else