aboutsummaryrefslogtreecommitdiff
path: root/hdl/dp_memory.v
diff options
context:
space:
mode:
Diffstat (limited to 'hdl/dp_memory.v')
-rw-r--r--hdl/dp_memory.v24
1 files changed, 20 insertions, 4 deletions
diff --git a/hdl/dp_memory.v b/hdl/dp_memory.v
index dd5dff9..9db03c3 100644
--- a/hdl/dp_memory.v
+++ b/hdl/dp_memory.v
@@ -33,8 +33,15 @@ module bus_control #(
output wbm_stb_o
);
- wire i_bram_select;
+ wire i_bram_select;
+ wire d_bram_select;
+ wire [31:0] external_data;
+ wire external_data_wren;
+ wire external_data_rden;
+
+ wire done_please;
+
reg [31:0] memory[addr_low:addr_high];
initial begin
@@ -42,8 +49,15 @@ module bus_control #(
end
assign i_bram_select = (i_addr <= addr_high && i_addr >= addr_low) ? 1'b1 : 1'b0;
+ assign d_bram_select = (d_addr <= addr_high && d_addr >= addr_low) ? 1'b1 : 1'b0;
assign i_instr_out = (i_read_en && i_bram_select) ? memory[i_addr] : 0;
+ assign d_data_out = (d_read_en && d_bram_select) ? memory[d_addr] : external_data;
+
+ assign external_data_wren = !d_bram_select && d_write_en;
+ assign external_data_rden = !d_bram_select && d_read_en;
+
+ assign done_please = d_bram_select && (d_read_en || d_write_en);
master_wb mwb_inst(
@@ -52,11 +66,13 @@ module bus_control #(
.done_o(wb_done_o),
- .d_read_en(d_read_en),
- .d_write_en(d_write_en),
+ .d_read_en(external_data_rden),
+ .d_write_en(external_data_wren),
.d_addr(d_addr),
.d_write_data(d_write_data),
- .d_data_out(d_data_out),
+ .d_data_out(external_data),
+
+ .wbm_done_pls_i(done_please),
.wbm_dat_i(wbm_dat_i),
.wbm_ack_i(wbm_ack_i),