Line 684... |
Line 684... |
variable err_v : std_ulogic;
|
variable err_v : std_ulogic;
|
begin
|
begin
|
rdata_v := (others => '0');
|
rdata_v := (others => '0');
|
ack_v := '0';
|
ack_v := '0';
|
err_v := '0';
|
err_v := '0';
|
|
-- OR all module's response signals: only the module that is actually
|
|
-- been accessed is allowed to set it's bus output signals
|
for i in resp_bus'range loop
|
for i in resp_bus'range loop
|
rdata_v := rdata_v or resp_bus(i).rdata; -- read data
|
rdata_v := rdata_v or resp_bus(i).rdata; -- read data
|
ack_v := ack_v or resp_bus(i).ack; -- acknowledge
|
ack_v := ack_v or resp_bus(i).ack; -- acknowledge
|
err_v := err_v or resp_bus(i).err; -- error
|
err_v := err_v or resp_bus(i).err; -- error
|
end loop; -- i
|
end loop; -- i
|
Line 938... |
Line 940... |
|
|
-- IO Access? -----------------------------------------------------------------------------
|
-- IO Access? -----------------------------------------------------------------------------
|
-- -------------------------------------------------------------------------------------------
|
-- -------------------------------------------------------------------------------------------
|
io_acc <= '1' when (p_bus.addr(data_width_c-1 downto index_size_f(io_size_c)) = io_base_c(data_width_c-1 downto index_size_f(io_size_c))) else '0';
|
io_acc <= '1' when (p_bus.addr(data_width_c-1 downto index_size_f(io_size_c)) = io_base_c(data_width_c-1 downto index_size_f(io_size_c))) else '0';
|
io_rden <= io_acc and p_bus.re and (not p_bus.src); -- PMA: no_execute for IO region
|
io_rden <= io_acc and p_bus.re and (not p_bus.src); -- PMA: no_execute for IO region
|
-- the default NEORV32 peripheral/IO devices in the IO area can only be written in word mode (reduces HW complexity)
|
io_wren <= io_acc and p_bus.we and and_reduce_f(p_bus.ben); -- only full-word write accesses are allowed (reduces HW complexity)
|
io_wren <= io_acc and p_bus.we and and_reduce_f(p_bus.ben) and (not p_bus.src); -- PMA: write32 only, no_execute for IO region
|
|
|
|
|
|
-- Custom Functions Subsystem (CFS) -------------------------------------------------------
|
-- Custom Functions Subsystem (CFS) -------------------------------------------------------
|
-- -------------------------------------------------------------------------------------------
|
-- -------------------------------------------------------------------------------------------
|
neorv32_cfs_inst_true:
|
neorv32_cfs_inst_true:
|
Line 1578... |
Line 1579... |
dmi_resp_valid_o => dmi.resp_valid, -- response valid when set
|
dmi_resp_valid_o => dmi.resp_valid, -- response valid when set
|
dmi_resp_ready_i => dmi.resp_ready, -- ready to receive respond
|
dmi_resp_ready_i => dmi.resp_ready, -- ready to receive respond
|
dmi_resp_data_o => dmi.resp_data,
|
dmi_resp_data_o => dmi.resp_data,
|
dmi_resp_err_o => dmi.resp_err, -- 0=ok, 1=error
|
dmi_resp_err_o => dmi.resp_err, -- 0=ok, 1=error
|
-- CPU bus access --
|
-- CPU bus access --
|
|
cpu_debug_i => debug_mode, -- CPU is in debug mode
|
cpu_addr_i => p_bus.addr, -- address
|
cpu_addr_i => p_bus.addr, -- address
|
cpu_rden_i => p_bus.re, -- read enable
|
cpu_rden_i => p_bus.re, -- read enable
|
cpu_wren_i => p_bus.we, -- write enable
|
cpu_wren_i => p_bus.we, -- write enable
|
cpu_data_i => p_bus.wdata, -- data in
|
cpu_data_i => p_bus.wdata, -- data in
|
cpu_data_o => resp_bus(RESP_OCD).rdata, -- data out
|
cpu_data_o => resp_bus(RESP_OCD).rdata, -- data out
|