sorting out missing clock somewhere
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Thu, 15 Oct 2020 17:05:44 +0000 (18:05 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Thu, 15 Oct 2020 17:05:44 +0000 (18:05 +0100)
src/soc/simple/core.py
src/soc/simple/issuer.py
src/soc/simple/issuer_verilog.py

index a788fb5a132c7cd518dbdfb06214b6f33f2e6110..babd3b2a921afbed4c73264fe2546ddb97d1400b 100644 (file)
@@ -122,6 +122,8 @@ class NonProductionCore(Elaboratable):
         m = Module()
         # for testing purposes, to cut down on build time in coriolis2
         if hasattr(self.pspec, "nocore") and self.pspec.nocore == True:
+            x = Signal() # dummy signal
+            m.d.sync += x.eq(~x)
             return m
         comb = m.d.comb
 
index 64350c96ab1bc7a93ee089a4c68dd28afcc457b3..0d1fa1f22fc506ecf28dd2f29b698e57fd4b8d71 100644 (file)
@@ -117,7 +117,7 @@ class TestIssuerInternal(Elaboratable):
         m = Module()
         comb, sync = m.d.comb, m.d.sync
 
-        m.submodules.core = core = self.core
+        m.submodules.core = core = DomainRenamer("coresync")(self.core)
         m.submodules.imem = imem = self.imem
         m.submodules.dbg = dbg = self.dbg
         if self.jtag_en:
@@ -156,7 +156,8 @@ class TestIssuerInternal(Elaboratable):
         # clock delay power-on reset
         cd_por  = ClockDomain(reset_less=True)
         cd_sync = ClockDomain()
-        m.domains += cd_por, cd_sync
+        core_sync = ClockDomain("coresync")
+        m.domains += cd_por, cd_sync, core_sync
 
         ti_rst = Signal(reset_less=True)
         delay = Signal(range(4), reset=3)
@@ -458,25 +459,25 @@ class TestIssuer(Elaboratable):
         m = Module()
         comb = m.d.comb
 
-        if self.pll_en:
-            # TestIssuer runs at internal clock rate
-            m.submodules.ti = ti = DomainRenamer("intclk")(self.ti)
-        else:
-            # TestIssuer runs at direct clock
-            m.submodules.ti = ti = self.ti
+        # TestIssuer runs at direct clock
+        m.submodules.ti = ti = self.ti
+        cd_int = ClockDomain("coresync")
+
         # ClockSelect runs at PLL output internal clock rate
         m.submodules.clksel = clksel = DomainRenamer("pllclk")(self.clksel)
         m.submodules.pll = pll = self.pll
 
         # add 2 clock domains established above...
-        cd_int = ClockDomain("intclk")
         cd_pll = ClockDomain("pllclk")
         m.domains += cd_pll
 
         # internal clock is set to selector clock-out.  has the side-effect of
         # running TestIssuer at this speed (see DomainRenamer("intclk") above)
-        intclk = ClockSignal("intclk")
-        comb += intclk.eq(clksel.core_clk_o)
+        intclk = ClockSignal("coresync")
+        if self.pll_en:
+            comb += intclk.eq(clksel.core_clk_o)
+        else:
+            comb += intclk.eq(ClockSignal())
 
         # PLL clock established.  has the side-effect of running clklsel
         # at the PLL's speed (see DomainRenamer("pllclk") above)
@@ -488,9 +489,9 @@ class TestIssuer(Elaboratable):
         comb += pll.clk_24_i.eq(clksel.clk_24_i)
 
         # now wire up ResetSignals.  don't mind them all being in this domain
-        int_rst = ResetSignal("intclk")
+        #int_rst = ResetSignal("coresync")
         pll_rst = ResetSignal("pllclk")
-        comb += int_rst.eq(ResetSignal())
+        #comb += int_rst.eq(ResetSignal())
         comb += pll_rst.eq(ResetSignal())
 
         return m
index 30ca32b43ce938a356453c615a9938de739fb4bd..92ec2f54a25815ec82e7c7948c6a47a1d785610b 100644 (file)
@@ -13,7 +13,10 @@ if __name__ == '__main__':
                                      "verilog generator")
     parser.add_argument("output_filename")
     parser.add_argument("--enable-xics", action="store_true",
-                        help="Disable interrupts",
+                        help="Enable interrupts",
+                        default=True)
+    parser.add_argument("--enable-core", action="store_true",
+                        help="Enable main core",
                         default=True)
     parser.add_argument("--use-pll", action="store_true", help="Enable pll",
                         default=False)
@@ -46,7 +49,7 @@ if __name__ == '__main__':
                          # set to 32 to make data wishbone bus 32-bit
                          #wb_data_wid=32,
                          xics=args.enable_xics, # XICS interrupt controller
-                         #nocore=True,          # to help test coriolis2 ioring
+                         nocore=not args.enable_core, # test coriolis2 ioring
                          use_pll=args.use_pll,  # bypass PLL
                          gpio=args.enable_testgpio, # for test purposes
                          debug=args.debug,      # set to jtag or dmi