diff options
author | Flavian Kaufmann <flavian@flaviankaufmann.ch> | 2024-05-12 21:27:41 +0200 |
---|---|---|
committer | Flavian Kaufmann <flavian@flaviankaufmann.ch> | 2024-05-12 21:27:41 +0200 |
commit | deb7d0a6fc76d5250c238d479cf97d4755abef01 (patch) | |
tree | 395c266ff4757e83e151d1286d6d2388e63d9a9c /src/memory_interface.v | |
parent | 008059fbe4e960a10bb4c444013129e0aaa02818 (diff) | |
download | riscv_cpu-deb7d0a6fc76d5250c238d479cf97d4755abef01.tar.gz riscv_cpu-deb7d0a6fc76d5250c238d479cf97d4755abef01.zip |
refactoring
Diffstat (limited to 'src/memory_interface.v')
-rw-r--r-- | src/memory_interface.v | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/memory_interface.v b/src/memory_interface.v new file mode 100644 index 0000000..0b89e39 --- /dev/null +++ b/src/memory_interface.v @@ -0,0 +1,58 @@ +module memory_interface ( + input clk, + input rstn, + input we, + input [31:0] addr, + output reg [31:0] rd, + input [31:0] wd +); + +reg ram_we; +wire [31:0] ram_read_data, rom_read_data; + +ram #(.N(32), .SIZE(1024)) ram( + .clk(clk), + .rst(!rstn), + .we(ram_we), + .addr(addr), + .data_read(ram_read_data), + .data_write(wd) +); + +rom #(.N(32), .SIZE(1024)) rom( + .clk(clk), + .addr(addr), + .data_read(rom_read_data) +); + + +// 0000 0000 Reserved +// 0000 FFFF +// +// 0001 0000 ROM +// 000F FFFF +// +// 0010 0000 RAM +// FF0F FFFF +// +// FF10 0000 Reserved +// FFFF FFFF + + +always @(*) begin + if (addr[31:16] >= 16'h0001 && addr[31:16] <= 16'h000F) begin + ram_we <= 0; + rd <= rom_read_data; + end else if (addr[31:16] >= 16'h0010 && addr[31:16] <= 16'hFF0F) begin + ram_we <= we; + rd <= ram_read_data; + end else if (addr[31:16] >= 16'hFF10 && addr[31:16] <= 16'hFFFF) begin + ram_we <= 0; + rd <= 0; + end else begin + ram_we <= 0; + rd <= 0; + end +end + +endmodule |