diff options
| author | Jan Tuomi <jan@jantuomi.fi> | 2024-12-29 21:05:56 +0200 |
|---|---|---|
| committer | Jan Tuomi <jan@jantuomi.fi> | 2024-12-29 21:05:56 +0200 |
| commit | f1096f78f89e10b867b6ff7689d0a8777855b451 (patch) | |
| tree | b23af05d56a814e8f4ead16295e850f58af27214 /atk16_fpga/bram_fsm.v | |
| parent | 5636fc7373b51306c8a3b8ba703831f67fdbf685 (diff) | |
Rename mem_fsm -> bram_fsm
Diffstat (limited to 'atk16_fpga/bram_fsm.v')
| -rw-r--r-- | atk16_fpga/bram_fsm.v | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/atk16_fpga/bram_fsm.v b/atk16_fpga/bram_fsm.v new file mode 100644 index 0000000..763b853 --- /dev/null +++ b/atk16_fpga/bram_fsm.v @@ -0,0 +1,58 @@ +`default_nettype none + +`define ST_IDLE 3'd0 +`define ST_READ 3'd1 +`define ST_WRITE 3'd2 + +module bram_fsm( + input clk, + input [15:0] addr, + input [15:0] data_in, + input read_en, + input write_en, + + output wire [15:0] data_out, + output reg done +); + reg wr, rd; + reg [15:0] bram_addr; + reg [2:0] state = 0; + bram bram_inst( + .clk(clk), + .addr(bram_addr), + .cs_n(1'd0), + .wr_n(~wr), + .rd_n(~rd), + .bram_data_in(data_in), + .bram_data_out(data_out) + ); + + always @(posedge clk) begin + case (state) + `ST_IDLE: begin + done <= 0; + if (~done && read_en) begin + state <= `ST_READ; + bram_addr <= addr; + rd <= 1; + wr <= 0; + end + else if (~done && write_en) begin + state <= `ST_WRITE; + bram_addr <= addr; + rd <= 0; + wr <= 1; + end + end + `ST_READ: begin + state <= `ST_IDLE; + done <= 1; + end + `ST_WRITE: begin + state <= `ST_IDLE; + done <= 1; + end + endcase + end + +endmodule |
