targets/minispartan6: add USBSoC (working, should also be usable on pipistrello)

This commit is contained in:
Florent Kermarrec 2015-05-01 16:16:48 +02:00
parent da0fe2ecfb
commit 23ba1ccb52
1 changed files with 37 additions and 0 deletions

View File

@ -2,12 +2,17 @@ from fractions import Fraction
from migen.fhdl.std import * from migen.fhdl.std import *
from migen.genlib.resetsync import AsyncResetSynchronizer from migen.genlib.resetsync import AsyncResetSynchronizer
from migen.actorlib.fifo import SyncFIFO
from misoclib.mem.sdram.module import AS4C16M16 from misoclib.mem.sdram.module import AS4C16M16
from misoclib.mem.sdram.phy import gensdrphy from misoclib.mem.sdram.phy import gensdrphy
from misoclib.mem.sdram.core.lasmicon import LASMIconSettings from misoclib.mem.sdram.core.lasmicon import LASMIconSettings
from misoclib.soc.sdram import SDRAMSoC from misoclib.soc.sdram import SDRAMSoC
from misoclib.com.liteusb.common import *
from misoclib.com.liteusb.phy.ft245 import FT245PHY
from misoclib.com.liteusb.core import LiteUSBCore
from misoclib.com.liteusb.frontend.uart import LiteUSBUART
class _CRG(Module): class _CRG(Module):
def __init__(self, platform, clk_freq): def __init__(self, platform, clk_freq):
@ -77,4 +82,36 @@ class BaseSoC(SDRAMSoC):
AS4C16M16(clk_freq)) AS4C16M16(clk_freq))
self.register_sdram_phy(self.sdrphy) self.register_sdram_phy(self.sdrphy)
class USBSoC(BaseSoC):
csr_map = {
"usb_dma": 16,
}
csr_map.update(BaseSoC.csr_map)
usb_map = {
"uart": 0,
"dma": 1
}
def __init__(self, platform, **kwargs):
BaseSoC.__init__(self, platform, with_uart=False, **kwargs)
self.submodules.usb_phy = FT245PHY(platform.request("usb_fifo"), self.clk_freq)
self.submodules.usb_core = LiteUSBCore(self.usb_phy, self.clk_freq, with_crc=False)
# UART
usb_uart_port = self.usb_core.crossbar.get_port(self.usb_map["uart"])
self.submodules.uart = LiteUSBUART(usb_uart_port)
# DMA
usb_dma_port = self.usb_core.crossbar.get_port(self.usb_map["dma"])
usb_dma_loopback_fifo = SyncFIFO(user_description(8), 1024, buffered=True)
self.submodules += usb_dma_loopback_fifo
self.comb += [
usb_dma_port.source.connect(usb_dma_loopback_fifo.sink),
usb_dma_loopback_fifo.source.connect(usb_dma_port.sink)
]
default_subtarget = BaseSoC default_subtarget = BaseSoC