Move alt_reset to syscon
authorMatt Johnston <matt@codeconstruct.com.au>
Thu, 27 Oct 2022 03:23:30 +0000 (11:23 +0800)
committerMatt Johnston <matt@codeconstruct.com.au>
Mon, 31 Oct 2022 06:41:15 +0000 (14:41 +0800)
Instead of connecting core_alt_reset to litedram init_done, it moves to
a syscon register bit. This simplifies top- files and future soc_reset
handling. sdram main.c can unset the alt_reset bit after sdram init.

Signed-off-by: Matt Johnston <matt@codeconstruct.com.au>
13 files changed:
core_dram_tb.vhdl
dram_tb.vhdl
fpga/top-acorn-cle-215.vhdl
fpga/top-antmicro-artix-dc-scm.vhdl
fpga/top-arty.vhdl
fpga/top-genesys2.vhdl
fpga/top-nexys-video.vhdl
fpga/top-orangecrab0.2.vhdl
fpga/top-wukong-v2.vhdl
include/microwatt_soc.h
litedram/extras/litedram-wrapper-l2.vhdl
soc.vhdl
syscon.vhdl

index a0251e3bc2a5b38ee3aa80e932d6415c426f9662..4a3a0c3dc933772c43109c626f94a66a8074614f 100644 (file)
@@ -32,7 +32,6 @@ architecture behave of core_dram_tb is
     signal wb_ext_io_out : wb_io_slave_out;
     signal wb_ext_is_dram_csr : std_ulogic;
     signal wb_ext_is_dram_init : std_ulogic;
-    signal core_alt_reset : std_ulogic;
 
     -- SPI
     signal spi_sck     : std_ulogic;
@@ -84,8 +83,7 @@ begin
             spi_flash_cs_n    => spi_cs_n,
             spi_flash_sdat_o  => spi_sdat_o,
             spi_flash_sdat_oe => spi_sdat_oe,
-            spi_flash_sdat_i  => spi_sdat_i,
-            alt_reset => core_alt_reset
+            spi_flash_sdat_i  => spi_sdat_i
             );
 
         flash: entity work.s25fl128s
@@ -135,7 +133,6 @@ begin
             rst             => rst,
             system_clk      => system_clk,
             system_reset    => soc_rst,
-            core_alt_reset  => core_alt_reset,
 
             wb_in           => wb_dram_in,
             wb_out          => wb_dram_out,
index ce22f3090b0da4e319de703ec889ad44ee6c5002..c8e7b2ce5c7ec101afae6343e0178e7a797f0f23 100644 (file)
@@ -58,7 +58,6 @@ begin
             rst                 => rst,
             system_clk          => clk,
             system_reset        => soc_rst,
-            core_alt_reset      => open,
             pll_locked          => open,
 
             wb_in               => wb_in,
index fd5fd5cebabe473805b6bc29532a3521b4e309bb..7f03506c2353fdcf267f897d38117828448014da 100644 (file)
@@ -84,9 +84,6 @@ architecture behaviour of toplevel is
     signal wb_ext_is_dram_csr  : std_ulogic;
     signal wb_ext_is_dram_init : std_ulogic;
 
-    -- Control/status
-    signal core_alt_reset : std_ulogic;
-
     -- SPI flash
     signal spi_sck     : std_ulogic;
     signal spi_cs_n    : std_ulogic;
@@ -162,8 +159,7 @@ begin
            wb_ext_io_in        => wb_ext_io_in,
            wb_ext_io_out       => wb_ext_io_out,
            wb_ext_is_dram_csr  => wb_ext_is_dram_csr,
-           wb_ext_is_dram_init => wb_ext_is_dram_init,
-           alt_reset           => core_alt_reset
+           wb_ext_is_dram_init => wb_ext_is_dram_init
            );
 
     -- SPI Flash. The SPI clk needs to be fed through the STARTUPE2
@@ -231,7 +227,6 @@ begin
        led1 <= pll_rst;
         led2 <= not system_clk_locked;
        led3 <= '0';
-       core_alt_reset <= '0';
 
         -- Vivado barfs on those differential signals if left
         -- unconnected. So instanciate a diff. buffer and feed
@@ -289,7 +284,6 @@ begin
                rst             => pll_rst,
                system_clk      => system_clk,
                system_reset    => soc_rst,
-                core_alt_reset  => core_alt_reset,
                pll_locked      => system_clk_locked,
 
                wb_in           => wb_dram_in,
index b8fd75f74017375be8955ed0bde94d938fa39e03..bd0dcd592b9d2791926e20f4f8d9f663db1fa155 100644 (file)
@@ -121,9 +121,6 @@ architecture behaviour of toplevel is
     -- for conversion from non-pipelined wishbone to pipelined
     signal wb_sddma_stb_sent   : std_ulogic;
 
-    -- Control/status
-    signal core_alt_reset : std_ulogic;
-
     -- Status LED
     signal led0_b_pwm : std_ulogic;
     signal led0_r_pwm : std_ulogic;
@@ -240,9 +237,7 @@ begin
 
             -- DMA wishbone
             wishbone_dma_in      => wb_sddma_in,
-            wishbone_dma_out     => wb_sddma_out,
-
-            alt_reset            => core_alt_reset
+            wishbone_dma_out     => wb_sddma_out
             );
 
 
@@ -303,8 +298,6 @@ begin
                 pll_locked_out => system_clk_locked
                 );
 
-       core_alt_reset <= '0';
-
         d11_led <= '0';
         d12_led <= soc_rst;
         d13_led <= system_clk;
@@ -376,7 +369,6 @@ begin
                 rst             => pll_rst,
                 system_clk      => system_clk,
                 system_reset    => dram_sys_rst,
-                core_alt_reset  => core_alt_reset,
                pll_locked      => system_clk_locked,
 
                 wb_in           => wb_dram_in,
index ecdd5d42281dfd401ec94b87f8ddc6ded6ca90cf..b6b8913bc42d857123ed01b775a28158ae5b89e8 100644 (file)
@@ -139,9 +139,6 @@ architecture behaviour of toplevel is
     -- for conversion from non-pipelined wishbone to pipelined
     signal wb_sddma_stb_sent   : std_ulogic;
 
-    -- Control/status
-    signal core_alt_reset : std_ulogic;
-
     -- Status LED
     signal led0_b_pwm : std_ulogic;
     signal led0_r_pwm : std_ulogic;
@@ -258,9 +255,7 @@ begin
 
             -- DMA wishbone
             wishbone_dma_in      => wb_sddma_in,
-            wishbone_dma_out     => wb_sddma_out,
-
-            alt_reset            => core_alt_reset
+            wishbone_dma_out     => wb_sddma_out
             );
 
     --uart_pmod_rts_n <= '0';
@@ -333,7 +328,6 @@ begin
         led0_b_pwm <= '1';
         led0_r_pwm <= '1';
         led0_g_pwm <= '0';
-        core_alt_reset <= '0';
 
         -- Vivado barfs on those differential signals if left
         -- unconnected. So instanciate a diff. buffer and feed
@@ -402,7 +396,6 @@ begin
                 rst             => pll_rst,
                 system_clk      => system_clk,
                 system_reset    => dram_sys_rst,
-                core_alt_reset  => core_alt_reset,
                 pll_locked      => system_clk_locked,
 
                 wb_in           => wb_dram_in,
index ecdaa66c3e108dff51e53cee43be7f9c03990684..d876362dd5375ed24fa9f4aeeb7ae7e84ea28043 100644 (file)
@@ -87,9 +87,6 @@ architecture behaviour of toplevel is
     signal wb_ext_is_dram_csr  : std_ulogic;
     signal wb_ext_is_dram_init : std_ulogic;
 
-    -- Control/status
-    signal core_alt_reset : std_ulogic;
-
     -- SPI flash
     signal spi_sck     : std_ulogic;
     signal spi_cs_n    : std_ulogic;
@@ -165,8 +162,7 @@ begin
            wb_ext_io_in        => wb_ext_io_in,
            wb_ext_io_out       => wb_ext_io_out,
            wb_ext_is_dram_csr  => wb_ext_is_dram_csr,
-           wb_ext_is_dram_init => wb_ext_is_dram_init,
-           alt_reset           => core_alt_reset
+           wb_ext_is_dram_init => wb_ext_is_dram_init
            );
 
     -- SPI Flash. The SPI clk needs to be fed through the STARTUPE2
@@ -234,7 +230,6 @@ begin
        led1 <= pll_rst;
         led2 <= not system_clk_locked;
        led3 <= '0';
-       core_alt_reset <= '0';
 
         -- Vivado barfs on those differential signals if left
         -- unconnected. So instanciate a diff. buffer and feed
@@ -292,7 +287,6 @@ begin
                rst             => pll_rst,
                system_clk      => system_clk,
                system_reset    => soc_rst,
-                core_alt_reset  => core_alt_reset,
                pll_locked      => system_clk_locked,
 
                wb_in           => wb_dram_in,
index beb4045f7fe5712a155b6456e911e9f636106911..f18f80e76424c1ff21d1c311ebf148f85aa00a28 100644 (file)
@@ -128,9 +128,6 @@ architecture behaviour of toplevel is
     -- for conversion from non-pipelined wishbone to pipelined
     signal wb_sddma_stb_sent   : std_ulogic;
 
-    -- Control/status
-    signal core_alt_reset : std_ulogic;
-
     -- SPI flash
     signal spi_sck     : std_ulogic;
     signal spi_cs_n    : std_ulogic;
@@ -220,9 +217,7 @@ begin
 
             -- DMA wishbone
             wishbone_dma_in     => wb_sddma_in,
-            wishbone_dma_out    => wb_sddma_out,
-
-           alt_reset           => core_alt_reset
+            wishbone_dma_out    => wb_sddma_out
            );
 
     -- SPI Flash. The SPI clk needs to be fed through the STARTUPE2
@@ -282,7 +277,6 @@ begin
        led0 <= '1';
        led1 <= not soc_rst;
         led2 <= '0';
-       core_alt_reset <= '0';
 
         -- Vivado barfs on those differential signals if left
         -- unconnected. So instanciate a diff. buffer and feed
@@ -350,7 +344,6 @@ begin
                rst             => pll_rst,
                system_clk      => system_clk,
                 system_reset   => dram_sys_rst,
-                core_alt_reset  => core_alt_reset,
                pll_locked      => system_clk_locked,
 
                wb_in           => wb_dram_in,
index ada940cce3452d1bea37c28c51f796478e330b6a..f773323c17d3d35893de98358837989000682e64 100644 (file)
@@ -110,9 +110,6 @@ architecture behaviour of toplevel is
     -- for conversion from non-pipelined wishbone to pipelined
     signal wb_sddma_stb_sent   : std_ulogic;
 
-    -- Control/status
-    signal core_alt_reset : std_ulogic;
-
     -- Status LED
     signal led0_b_pwm : std_ulogic;
     signal led0_r_pwm : std_ulogic;
@@ -231,9 +228,7 @@ begin
 
             -- DMA wishbone
             wishbone_dma_in      => wb_sddma_in,
-            wishbone_dma_out     => wb_sddma_out,
-
-            alt_reset            => core_alt_reset
+            wishbone_dma_out     => wb_sddma_out
             );
 
     -- SPI Flash
@@ -284,7 +279,6 @@ begin
         led0_b_pwm <= '1';
         led0_r_pwm <= '1';
         led0_g_pwm <= '0';
-        core_alt_reset <= '0';
 
     end generate;
 
@@ -341,7 +335,6 @@ begin
                 rst             => pll_rst,
                 system_clk      => system_clk,
                 system_reset    => dram_sys_rst,
-                core_alt_reset  => core_alt_reset,
                 pll_locked      => system_clk_locked,
 
                 wb_in           => wb_dram_in,
index d3f7bd886fda415f8a53f46016aa15d0ab98c6eb..2b6d4e14b3bc355ec0a066978e32dcb118fa46ef 100644 (file)
@@ -128,9 +128,6 @@ architecture behaviour of toplevel is
     -- for conversion from non-pipelined wishbone to pipelined
     signal wb_sddma_stb_sent   : std_ulogic;
 
-    -- Control/status
-    signal core_alt_reset : std_ulogic;
-
     -- SPI flash
     signal spi_sck     : std_ulogic;
     signal spi_cs_n    : std_ulogic;
@@ -225,9 +222,7 @@ begin
 
             -- DMA wishbone
             wishbone_dma_in      => wb_sddma_in,
-            wishbone_dma_out     => wb_sddma_out,
-
-            alt_reset            => core_alt_reset
+            wishbone_dma_out     => wb_sddma_out
             );
 
     -- SPI Flash
@@ -282,8 +277,6 @@ begin
                 pll_locked_out => system_clk_locked
                 );
 
-        core_alt_reset <= '0';
-
         -- Vivado barfs on those differential signals if left
         -- unconnected. So instanciate a diff. buffer and feed
         -- it a constant '0'.
@@ -351,7 +344,6 @@ begin
                 rst             => pll_rst,
                 system_clk      => system_clk,
                 system_reset    => dram_sys_rst,
-                core_alt_reset  => core_alt_reset,
                 pll_locked      => system_clk_locked,
 
                 wb_in           => wb_dram_in,
index ab552874b0db425eb47a90a24839b4e50f828750..3e6830bd66f7ddc186a449d138c7d76bfa21be71 100644 (file)
@@ -52,6 +52,7 @@
 #define   SYS_REG_CTRL_DRAM_AT_0               (1ull << 0)
 #define   SYS_REG_CTRL_CORE_RESET              (1ull << 1)
 #define   SYS_REG_CTRL_SOC_RESET               (1ull << 2)
+#define   SYS_REG_CTRL_ALT_RESET               (1ull << 3)
 #define SYS_REG_DRAMINITINFO           0x30
 #define SYS_REG_SPI_INFO               0x38
 #define   SYS_REG_SPI_INFO_FLASH_OFF_MASK      0xffffffff
index 652e727ab921bbdad34036cfd31e85b947bb0b7d..8069b8e2695639d441ce4e89668525e294e83855 100644 (file)
@@ -44,7 +44,6 @@ entity litedram_wrapper is
         rst             : in std_ulogic;
         system_clk      : out std_ulogic;
         system_reset    : out std_ulogic;
-        core_alt_reset  : out std_ulogic;
         pll_locked      : out std_ulogic;
 
         -- Wishbone ports:
@@ -420,9 +419,6 @@ begin
     assert (REAL_ADDR_BITS = TAG_BITS + ROW_BITS + ROW_OFF_BITS)
         report "geometry bits don't add up" severity FAILURE;
 
-    -- alternate core reset address set when DRAM is not initialized.
-    core_alt_reset <= not init_done;
-
     -- Init code BRAM memory slave 
     init_ram_0: entity work.dram_init_mem
         generic map(
index 7daca5fa52f82c775721cfad1ac3fe71e8d01683..3282ca9d90d58be4b313df8dfc4f5849819618d3 100644 (file)
--- a/soc.vhdl
+++ b/soc.vhdl
@@ -127,10 +127,7 @@ entity soc is
         -- GPIO signals
         gpio_out : out std_ulogic_vector(NGPIO - 1 downto 0);
         gpio_dir : out std_ulogic_vector(NGPIO - 1 downto 0);
-        gpio_in  : in  std_ulogic_vector(NGPIO - 1 downto 0) := (others => '0');
-
-       -- DRAM controller signals
-       alt_reset    : in std_ulogic := '0'
+        gpio_in  : in  std_ulogic_vector(NGPIO - 1 downto 0) := (others => '0')
        );
 end entity soc;
 
@@ -166,6 +163,7 @@ architecture behaviour of soc is
     -- Syscon signals
     signal dram_at_0     : std_ulogic;
     signal do_core_reset    : std_ulogic;
+    signal alt_reset     : std_ulogic;
     signal wb_syscon_in  : wb_io_master_out;
     signal wb_syscon_out : wb_io_slave_out;
 
@@ -768,7 +766,8 @@ begin
            wishbone_out => wb_syscon_out,
            dram_at_0 => dram_at_0,
            core_reset => do_core_reset,
-           soc_reset => open -- XXX TODO
+           soc_reset => open, -- XXX TODO
+           alt_reset => alt_reset
            );
 
     --
index 727f4e791e40564e3ebbeedc3f64b3e7786a3fc9..99fa835639b03d573321399f6fc4251755499666 100644 (file)
@@ -34,7 +34,8 @@ entity syscon is
        -- System control ports
        dram_at_0  : out std_ulogic;
        core_reset : out std_ulogic;
-       soc_reset  : out std_ulogic
+       soc_reset  : out std_ulogic;
+       alt_reset  : out std_ulogic
        );
 end entity syscon;
 
@@ -76,10 +77,11 @@ architecture behaviour of syscon is
     -- CLKINFO contains the CLK frequency is HZ in the bottom 40 bits
 
     -- CTRL register bits
-    constant SYS_REG_CTRL_BITS       : positive := 3;
+    constant SYS_REG_CTRL_BITS       : positive := 4;
     constant SYS_REG_CTRL_DRAM_AT_0  : integer := 0;
     constant SYS_REG_CTRL_CORE_RESET : integer := 1;
     constant SYS_REG_CTRL_SOC_RESET  : integer := 2;
+    constant SYS_REG_CTRL_ALT_RESET  : integer := 3;
 
     -- SPI Info register bits
     --
@@ -102,6 +104,7 @@ architecture behaviour of syscon is
     -- Ctrl register
     signal reg_ctrl    : std_ulogic_vector(SYS_REG_CTRL_BITS-1 downto 0);
     signal reg_ctrl_out        : std_ulogic_vector(63 downto 0);
+    signal ctrl_init_alt_reset : std_ulogic;
 
     -- Others
     signal reg_info      : std_ulogic_vector(63 downto 0);
@@ -128,11 +131,12 @@ architecture behaviour of syscon is
     -- Wishbone response latch
     signal wb_rsp        : wb_io_slave_out;
 begin
-
     -- Generated output signals
     dram_at_0 <= '1' when BRAM_SIZE = 0 else reg_ctrl(SYS_REG_CTRL_DRAM_AT_0);
     soc_reset <= reg_ctrl(SYS_REG_CTRL_SOC_RESET);
     core_reset <= reg_ctrl(SYS_REG_CTRL_CORE_RESET);
+    alt_reset <= reg_ctrl(SYS_REG_CTRL_ALT_RESET);
+
 
     -- Info register is hard wired
     info_has_uart <= '1' when HAS_UART       else '0';
@@ -211,12 +215,16 @@ begin
         end if;
     end process;
 
+    -- Initial state
+    ctrl_init_alt_reset <= '1' when HAS_DRAM else '0';
+
     -- Register writes
     regs_write: process(clk)
     begin
        if rising_edge(clk) then
            if (rst) then
-               reg_ctrl <= (others => '0');
+               reg_ctrl <= (SYS_REG_CTRL_ALT_RESET => ctrl_init_alt_reset,
+                        others => '0');
            else
                if wishbone_in.cyc and wishbone_in.stb and wishbone_in.we then
                     -- Change this if CTRL ever has more than 32 bits