)
port map(
clk => clk,
- rst => icache_rst,
+ rst => rst_icache,
i_in => fetch1_to_icache,
i_out => icache_to_fetch2,
+ m_in => mmu_to_icache,
flush_in => flush,
stall_out => icache_stall_out,
wishbone_out => wishbone_insn_out,
loadstore1_0: entity work.loadstore1
port map (
clk => clk,
- rst => core_rst,
+ rst => rst_ls1,
l_in => execute1_to_loadstore1,
+ e_out => loadstore1_to_execute1,
l_out => loadstore1_to_writeback,
d_out => loadstore1_to_dcache,
d_in => dcache_to_loadstore1,
)
port map (
clk => clk,
- rst => core_rst,
+ rst => rst_dcache,
d_in => loadstore1_to_dcache,
d_out => dcache_to_loadstore1,
+ m_in => mmu_to_dcache,
+ m_out => dcache_to_mmu,
stall_out => dcache_stall_out,
wishbone_in => wishbone_data_in,
wishbone_out => wishbone_data_out
-- Syscon signals
signal dram_at_0 : std_ulogic;
-- signal core_reset : std_ulogic;
+ signal do_core_reset : std_ulogic;
signal wb_syscon_in : wishbone_master_out;
signal wb_syscon_out : wishbone_slave_out;
signal dmi_core_dout : std_ulogic_vector(63 downto 0);
signal dmi_core_req : std_ulogic;
signal dmi_core_ack : std_ulogic;
+
+ -- Delayed/latched resets and alt_reset
+ signal rst_core : std_ulogic := '1';
+ signal rst_uart : std_ulogic := '1';
+ signal rst_xics : std_ulogic := '1';
+ signal rst_bram : std_ulogic := '1';
+ signal rst_dtm : std_ulogic := '1';
+ signal rst_wbar : std_ulogic := '1';
+ signal rst_wbdb : std_ulogic := '1';
+ signal alt_reset_d : std_ulogic;
+
begin
- rst_core <= rst or core_reset;
+ resets: process(system_clk)
+ begin
+ if rising_edge(system_clk) then
++ rst_core <= rst or do_core_reset;
+ rst_uart <= rst;
+ rst_xics <= rst;
+ rst_bram <= rst;
+ rst_dtm <= rst;
+ rst_wbar <= rst;
+ rst_wbdb <= rst;
+ alt_reset_d <= alt_reset;
+ end if;
+ end process;
+
-- Processor core
- core_reset <= rst or do_core_reset;
processor: entity work.core
generic map(
SIM => SIM,