arty: Add software reset from syscon

Signed-off-by: Matt Johnston <matt@codeconstruct.com.au>
pull/409/head
Matt Johnston 2 years ago
parent 1f5a2e8aaa
commit 56f1c41e9c

@ -104,6 +104,8 @@ architecture behaviour of toplevel is
-- Reset signals: -- Reset signals:
signal soc_rst : std_ulogic; signal soc_rst : std_ulogic;
signal pll_rst : std_ulogic; signal pll_rst : std_ulogic;
signal sw_rst : std_ulogic;
signal periph_rst : std_ulogic;


-- Internal clock signals: -- Internal clock signals:
signal system_clk : std_ulogic; signal system_clk : std_ulogic;
@ -216,6 +218,7 @@ begin
-- System signals -- System signals
system_clk => system_clk, system_clk => system_clk,
rst => soc_rst, rst => soc_rst,
sw_soc_reset => sw_rst,


-- UART signals -- UART signals
uart0_txd => uart_main_tx, uart0_txd => uart_main_tx,
@ -299,6 +302,7 @@ begin


nodram: if not USE_LITEDRAM generate nodram: if not USE_LITEDRAM generate
signal ddram_clk_dummy : std_ulogic; signal ddram_clk_dummy : std_ulogic;
signal gen_rst : std_ulogic;
begin begin
reset_controller: entity work.soc_reset reset_controller: entity work.soc_reset
generic map( generic map(
@ -310,9 +314,11 @@ begin
pll_locked_in => system_clk_locked and eth_clk_locked, pll_locked_in => system_clk_locked and eth_clk_locked,
ext_rst_in => ext_rst_n, ext_rst_in => ext_rst_n,
pll_rst_out => pll_rst, pll_rst_out => pll_rst,
rst_out => soc_rst rst_out => gen_rst
); );


soc_rst <= gen_rst;

clkgen: entity work.clock_generator clkgen: entity work.clock_generator
generic map( generic map(
CLK_INPUT_HZ => 100000000, CLK_INPUT_HZ => 100000000,
@ -345,8 +351,7 @@ begin
has_dram: if USE_LITEDRAM generate has_dram: if USE_LITEDRAM generate
signal dram_init_done : std_ulogic; signal dram_init_done : std_ulogic;
signal dram_init_error : std_ulogic; signal dram_init_error : std_ulogic;
signal dram_sys_rst : std_ulogic; signal gen_rst : std_ulogic;
signal rst_gen_rst : std_ulogic;
begin begin


-- Eventually dig out the frequency from the generator -- Eventually dig out the frequency from the generator
@ -365,7 +370,7 @@ begin
pll_locked_in => eth_clk_locked, pll_locked_in => eth_clk_locked,
ext_rst_in => ext_rst_n, ext_rst_in => ext_rst_n,
pll_rst_out => pll_rst, pll_rst_out => pll_rst,
rst_out => rst_gen_rst rst_out => open
); );


-- Generate SoC reset -- Generate SoC reset
@ -374,7 +379,7 @@ begin
if ext_rst_n = '0' then if ext_rst_n = '0' then
soc_rst <= '1'; soc_rst <= '1';
elsif rising_edge(system_clk) then elsif rising_edge(system_clk) then
soc_rst <= dram_sys_rst or not eth_clk_locked or not system_clk_locked; soc_rst <= gen_rst or not eth_clk_locked or not system_clk_locked;
end if; end if;
end process; end process;


@ -395,7 +400,7 @@ begin
clk_in => ext_clk, clk_in => ext_clk,
rst => pll_rst, rst => pll_rst,
system_clk => system_clk, system_clk => system_clk,
system_reset => dram_sys_rst, system_reset => gen_rst,
pll_locked => system_clk_locked, pll_locked => system_clk_locked,


wb_in => wb_dram_in, wb_in => wb_dram_in,
@ -431,6 +436,8 @@ begin


end generate; end generate;


periph_rst <= soc_rst or sw_rst;

has_liteeth : if USE_LITEETH generate has_liteeth : if USE_LITEETH generate


component liteeth_core port ( component liteeth_core port (
@ -520,7 +527,7 @@ begin
liteeth : liteeth_core liteeth : liteeth_core
port map( port map(
sys_clock => system_clk, sys_clock => system_clk,
sys_reset => soc_rst, sys_reset => periph_rst,
mii_eth_clocks_tx => eth_clocks_tx, mii_eth_clocks_tx => eth_clocks_tx,
mii_eth_clocks_rx => eth_clocks_rx, mii_eth_clocks_rx => eth_clocks_rx,
mii_eth_rst_n => eth_rst_n, mii_eth_rst_n => eth_rst_n,
@ -608,7 +615,7 @@ begin
litesdcard : litesdcard_core litesdcard : litesdcard_core
port map ( port map (
clk => system_clk, clk => system_clk,
rst => soc_rst, rst => periph_rst,
wb_ctrl_adr => wb_sdcard_adr, wb_ctrl_adr => wb_sdcard_adr,
wb_ctrl_dat_w => wb_ext_io_in.dat, wb_ctrl_dat_w => wb_ext_io_in.dat,
wb_ctrl_dat_r => wb_sdcard_out.dat, wb_ctrl_dat_r => wb_sdcard_out.dat,

Loading…
Cancel
Save