`timescale 1ns/100ps module RAM_4096x16(mem_bus, address, ram_rd_nwr); inout [15:0] mem_bus; input [11:0] address; input ram_rd_nwr; reg [15:0] RAM [0:4096]; wire [15:0] temp_bus; integer i; assign temp_bus = RAM[address[11:0]]; assign mem_bus = (ram_rd_nwr == 1'b1)? temp_bus: 16'bzzzzzzzzzzzzzzzz; initial begin for( i = 0; i < 4096; i = i + 1 ) RAM[i] = 0; $readmemh("RAM.data", RAM); // for( i = 0; i < 16; i = i + 1 ) // $display("$%h == 0x%h", i, RAM[i]); end always @(negedge ram_rd_nwr) begin if(ram_rd_nwr == 1'b0) begin #1 RAM[address] = mem_bus; if((address & 12'hff0) == 12'he00) $display($time, ": address $%h was writen with 0x%h", address, mem_bus); end end endmodule