diff options
Diffstat (limited to 'hdl/dp_memory.v')
-rw-r--r-- | hdl/dp_memory.v | 24 |
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), |