Skip to content

Commit

Permalink
cpu/gowin_emcu: Add interfaces directly to instances and simplify/cle…
Browse files Browse the repository at this point in the history
…anup to remove some warnings.
  • Loading branch information
enjoy-digital committed Jan 4, 2024
1 parent c61d2de commit 718c26d
Showing 1 changed file with 90 additions and 35 deletions.
125 changes: 90 additions & 35 deletions litex/soc/cores/cpu/gowin_emcu/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from litex.soc.interconnect import wishbone
from litex.soc.interconnect import ahb

# Gowin EMCU ---------------------------------------------------------------------------------------
# Gowin EMCU (Enhanced MCU / Cortex M3) ------------------------------------------------------------

class GowinEMCU(CPU):
variants = ["standard"]
Expand Down Expand Up @@ -61,7 +61,10 @@ def __init__(self, platform, variant="standard"):
# CPU Instance.
# -------------

bus_reset_n = Signal()
bus_reset_n = Signal()
ahb_flash = ahb.AHBInterface(data_width=32, address_width=32)
ahb_targexp0 = ahb.AHBInterface(data_width=32, address_width=32)

self.cpu_params = dict(
# Clk/Rst.
i_FCLK = ClockSignal("sys"),
Expand All @@ -71,20 +74,95 @@ def __init__(self, platform, variant="standard"):
o_MTXHRESETN = bus_reset_n,

# RTC.
i_RTCSRCCLK = Signal(), # TODO: RTC Clk In.
i_RTCSRCCLK = 0b0, # RTC Clk In.

# GPIOs.
i_IOEXPINPUTI = Signal(), # TODO: GPIO Input (16-bit).
o_IOEXPOUTPUTO = Signal(), # TODO: GPIO Output (16-bit).
o_IOEXPOUTPUTENO = Signal(), # TODO: GPIO Output Enable (16-bit).
i_IOEXPINPUTI = 0x0000, # GPIO Input (16-bit).
o_IOEXPOUTPUTO = Open(16), # GPIO Output (16-bit).
o_IOEXPOUTPUTENO = Open(16), # GPIO Output Enable (16-bit).

# UART0.
i_UART0RXDI = 0b0,
o_UART0TXDO = Open(),
o_UART0BAUDTICK = Open(),

# UART1.
i_UART1RXDI = 0b0,
o_UART1TXDO = Open(),
o_UART1BAUDTICK = Open(),

# Interrupts.
i_GPINT = Open(),
o_INTMONITOR = Signal(),
i_GPINT = 0,
o_INTMONITOR = Open(),

# Flash.
i_FLASHERR = Signal(),
i_FLASHINT = Signal(),

# Debug/JTAG.
o_DAPTDO = Open(),
o_DAPJTAGNSW = Open(),
o_DAPNTDOEN = Open(),
i_DAPSWDITMS = 0,
i_DAPTDI = 0,
i_DAPNTRST = 0,
i_DAPSWCLKTCK = 0,

# TARGFLASH0 / AHBLite Master.
o_TARGFLASH0HSEL = ahb_flash.sel,
o_TARGFLASH0HADDR = ahb_flash.addr,
o_TARGFLASH0HTRANS = ahb_flash.trans,
o_TARGFLASH0HSIZE = ahb_flash.size,
o_TARGFLASH0HBURST = ahb_flash.burst,
o_TARGFLASH0HREADYMUX = Open(),
i_TARGFLASH0HRDATA = ahb_flash.rdata,
i_TARGFLASH0HRUSER = 0b000,
i_TARGFLASH0HRESP = ahb_flash.resp,
i_TARGFLASH0EXRESP = 0b0,
i_TARGFLASH0HREADYOUT = ahb_flash.readyout,

# TARGEXP0 / AHBLite Master.
o_TARGEXP0HSEL = ahb_targexp0.sel,
o_TARGEXP0HADDR = ahb_targexp0.addr,
o_TARGEXP0HTRANS = ahb_targexp0.trans,
o_TARGEXP0HWRITE = ahb_targexp0.write,
o_TARGEXP0HSIZE = ahb_targexp0.size,
o_TARGEXP0HBURST = ahb_targexp0.burst,
o_TARGEXP0HPROT = ahb_targexp0.prot,
o_TARGEXP0MEMATTR = Open(2),
o_TARGEXP0EXREQ = Open(),
o_TARGEXP0HMASTER = Open(4),
o_TARGEXP0HWDATA = ahb_targexp0.wdata,
o_TARGEXP0HMASTLOCK = ahb_targexp0.mastlock,
o_TARGEXP0HREADYMUX = Open(),
o_TARGEXP0HAUSER = Open(),
o_TARGEXP0HWUSER = Open(4),
i_TARGEXP0HRDATA = ahb_targexp0.rdata,
i_TARGEXP0HREADYOUT = ahb_targexp0.readyout,
i_TARGEXP0HRESP = ahb_targexp0.resp,
i_TARGEXP0EXRESP = 0b0,
i_TARGEXP0HRUSER = 0b000,

# INITEXP0 / AHBLite Slave.
o_INITEXP0HRDATA = Open(32),
o_INITEXP0HREADY = Open(),
o_INITEXP0HRESP = Open(),
o_INITEXP0EXRESP = Open(),
o_INITEXP0HRUSER = Open(3),
i_INITEXP0HSEL = 0b0,
i_INITEXP0HADDR = 0x00000000,
i_INITEXP0HTRANS = 0b00,
i_INITEXP0HWRITE = 0b0,
i_INITEXP0HSIZE = 0b000,
i_INITEXP0HBURST = 0b000,
i_INITEXP0HPROT = 0b0000,
i_INITEXP0MEMATTR = 0b00,
i_INITEXP0EXREQ = 0b0,
i_INITEXP0HMASTER = 0b0000,
i_INITEXP0HWDATA = 0x00000000,
i_INITEXP0HMASTLOCK = 0b0,
i_INITEXP0HAUSER = 0b0,
i_INITEXP0HWUSER = 0b0000,
)

# SRAM (32-bit RAM split between 4 SRAMs x 8-bit each).
Expand All @@ -111,6 +189,10 @@ def __init__(self, platform, variant="standard"):
p_BIT_WIDTH_0 = 8,
p_BIT_WIDTH_1 = 8,
p_RESET_MODE = "SYNC",
p_BLK_SEL_0 = Constant(0, 3),
p_BLK_SEL_1 = Constant(0, 3),
i_BLKSELA = 0b000,
i_BLKSELB = 0b000,
o_DO = sram0_rdata[8*i:8*(i + 1)],
i_DI = sram0_wdata[8*i:8*(i + 1)],
i_ADA = Cat(Signal(3), sram0_addr),
Expand Down Expand Up @@ -161,39 +243,12 @@ def __init__(self, bus):
i_NVSTR = 0
)

ahb_flash = ahb.AHBInterface(data_width=32, address_width=32)
self.cpu_params.update(
o_TARGFLASH0HADDR = ahb_flash.addr,
o_TARGFLASH0HBURST = ahb_flash.burst,
o_TARGFLASH0HSIZE = ahb_flash.size,
o_TARGFLASH0HTRANS = ahb_flash.trans,
o_TARGFLASH0HSEL = ahb_flash.sel,
i_TARGFLASH0HRDATA = ahb_flash.rdata,
i_TARGFLASH0HREADYOUT = ahb_flash.readyout,
i_TARGFLASH0HRESP = ahb_flash.resp,
)
flash = ResetInserter()(AHBFlash(ahb_flash))
self.comb += flash.reset.eq(~bus_reset_n)
self.submodules += flash


# Peripheral Bus (AHB -> Wishbone).
# ---------------------------------
ahb_targexp0 = ahb.AHBInterface(data_width=32, address_width=32)
self.cpu_params.update(
o_TARGEXP0HADDR = ahb_targexp0.addr,
o_TARGEXP0HBURST = ahb_targexp0.burst,
o_TARGEXP0HMASTLOCK = ahb_targexp0.mastlock,
o_TARGEXP0HPROT = ahb_targexp0.prot,
o_TARGEXP0HSIZE = ahb_targexp0.size,
o_TARGEXP0HTRANS = ahb_targexp0.trans,
o_TARGEXP0HWDATA = ahb_targexp0.wdata,
o_TARGEXP0HWRITE = ahb_targexp0.write,
o_TARGEXP0HSEL = ahb_targexp0.sel,
i_TARGEXP0HRDATA = ahb_targexp0.rdata,
i_TARGEXP0HREADYOUT = ahb_targexp0.readyout,
i_TARGEXP0HRESP = ahb_targexp0.resp,
)
self.submodules += ahb.AHB2Wishbone(ahb_targexp0, self.pbus)

def connect_uart(self, pads, n=0):
Expand Down

0 comments on commit 718c26d

Please sign in to comment.