`timescale 1 ns / 1 ps `undef VERBOSE_MEM //`undef WRITE_VCD `undef MEM8BIT // define the size of our ROM // simulates ROM by suppressing writes below this address `define ROM_SIZE 32'h0001_00FF module testbench; reg clk = 1; reg resetn = 0; wire trap; always #5 clk = ~clk; initial begin repeat (100) @(posedge clk); resetn <= 1; end wire mem_valid; wire mem_instr; reg mem_ready; wire [31:0] mem_addr; wire [31:0] mem_wdata; wire [3:0] mem_wstrb; reg [31:0] mem_rdata; `include "firmware_dbg.v" picorv32 #( .COMPRESSED_ISA(1), .PROGADDR_RESET(32'h100) ) uut ( .clk (clk ), .resetn (resetn ), .trap (trap ), .mem_valid (mem_valid ), .mem_instr (mem_instr ), .mem_ready (mem_ready ), .mem_addr (mem_addr ), .mem_wdata (mem_wdata ), .mem_wstrb (mem_wstrb ), .mem_rdata (mem_rdata ) ); localparam MEM_SIZE = 4*1024*1024; `ifdef MEM8BIT reg [7:0] memory [0:MEM_SIZE-1]; initial $readmemh("firmware.hex", memory); end `else reg [31:0] memory [0:MEM_SIZE/4-1]; integer x; // simulate hardware assist of clearing RAM and copying ROM data into // memory initial begin // clear memory for (x=0; x