* 0x00004000. rdata and ready must be driven to zero if the
* address is not within the range of this module.
*/
- wire decode = (bus_addr & ~32'h00003FFF) == 32'h00000000;
- /* verilator lint_off WIDTH */
- wire [13:0] ramaddr = bus_addr & 32'h3FFC; /* mask off lower two bits
+ wire decode = bus_addr[31:14] == 18'b0;
+ wire [13:0] ramaddr = {bus_addr[13:2], 2'b0}; /* mask off lower two bits
* for word alignment */
- /* verilator lint_on WIDTH */
-
+
reg [31:0] data [(16384 / 4 - 1):0];
reg [31:0] temprdata = 0;
/* This is not allowed to be conditional -- stupid Xilinx
* blockram. */
- temprdata <= data[ramaddr[13:2]];
+ temprdata <= (bus_wr && decode) ? bus_wdata : data[ramaddr[13:2]];
lastread <= ramaddr;
end
endmodule