diff options
| author | Jan Tuomi <jan@jantuomi.fi> | 2024-12-30 17:33:01 +0200 |
|---|---|---|
| committer | Jan Tuomi <jan@jantuomi.fi> | 2024-12-30 17:33:01 +0200 |
| commit | 9b073ffbd7f9e7262bc4cb2e5991ceb6bc50cb54 (patch) | |
| tree | 72248342f8639004a27219d0126ac239e400e032 /atk16_fpga | |
| parent | 59765a21eeaadf6e632061f7184d0e60488cea69 (diff) | |
Fix timings
Diffstat (limited to 'atk16_fpga')
| -rw-r--r-- | atk16_fpga/sram.v | 47 |
1 files changed, 10 insertions, 37 deletions
diff --git a/atk16_fpga/sram.v b/atk16_fpga/sram.v index 9942bb3..8d62e48 100644 --- a/atk16_fpga/sram.v +++ b/atk16_fpga/sram.v @@ -15,46 +15,19 @@ module sram( input wire [15:0] data_in, output reg [15:0] data_out ); - reg [15:0] mem [0:262143]; // 256K x 16 memory - reg [17:0] last_addr = -1; - reg [15:0] last_data_in = -1; - reg last_wr_n, last_rd_n, last_cs_n = 0; - reg trigger = 0; - always @(posedge trigger) begin - if (cs_n == 1'b0) begin - if (wr_n == 1'b0) begin - mem[addr] = 16'hx; - //$display("wrote %04h at time %0d ns", mem[addr], $time); - #7 mem[addr] = data_in; - //$display("wrote %04h at time %0d ns", mem[addr], $time); - end - if (rd_n == 1'b0) begin - data_out = 16'hx; - //$display("read %04h at time %0d ns", data_out, $time); - #7 data_out = mem[addr]; - //$display("read %04h at time %0d ns", data_out, $time); - end + always @(cs_n or wr_n or rd_n or addr or data_in) begin + if (cs_n == 1'b1) begin + data_out <= #3 16'hx; end - end - - always @(*) begin - if (addr !== last_addr || - data_in !== last_data_in || - wr_n !== last_wr_n || - rd_n !== last_rd_n || - cs_n !== last_cs_n - ) begin - //$display("SRAM: addr=%h data_in=%h", addr, data_in); - last_addr = addr; - last_data_in = data_in; - last_wr_n = wr_n; - last_rd_n = rd_n; - last_cs_n = cs_n; - trigger = 0; - #3 trigger = 1; + if (cs_n == 1'b0 && wr_n == 1'b0) begin + mem[addr] <= #3 16'hx; + mem[addr] <= #7 data_in; + end + if (cs_n == 1'b0 && rd_n == 1'b0) begin + data_out <= #3 16'hx; + data_out <= #7 mem[addr]; end end - endmodule |
