soc/cores/uart: add FT245 FIFO mode support (sync & async)

This commit is contained in:
Florent Kermarrec 2019-08-04 12:22:35 +02:00
parent a496760cb6
commit ce5c58592b
2 changed files with 15 additions and 1 deletions

View File

@ -13,6 +13,7 @@ from litex.soc.interconnect.csr_eventmanager import *
from litex.soc.interconnect import stream from litex.soc.interconnect import stream
from litex.soc.interconnect.wishbonebridge import WishboneStreamingBridge from litex.soc.interconnect.wishbonebridge import WishboneStreamingBridge
# RS232 PHY ----------------------------------------------------------------------------------------
class RS232PHYInterface: class RS232PHYInterface:
def __init__(self): def __init__(self):
@ -157,6 +158,7 @@ class RS232PHYModel(Module):
pads.sink_ready.eq(self.source.ready) pads.sink_ready.eq(self.source.ready)
] ]
# UART ---------------------------------------------------------------------------------------------
def _get_uart_fifo(depth, sink_cd="sys", source_cd="sys"): def _get_uart_fifo(depth, sink_cd="sys", source_cd="sys"):
if sink_cd != source_cd: if sink_cd != source_cd:
@ -165,6 +167,18 @@ def _get_uart_fifo(depth, sink_cd="sys", source_cd="sys"):
else: else:
return stream.SyncFIFO([("data", 8)], depth, buffered=True) return stream.SyncFIFO([("data", 8)], depth, buffered=True)
def UARTPHY(pads, clk_freq, baudrate):
# FT245 async FIFO mode (baudrate ignored)
if hasattr(pads, "rd_n") and hasattr(pads, "wr_n"):
from litex.soc.cores.usb_fifo import FT245PHYAsynchronous
return FT245PHYAsynchronous(pads, clk_freq)
# FT245 sync FIFO mode (baudrate ignored)
if hasattr(pads, "rd_n") and hasattr(pads, "wr_n") and hasattr(pads, "oe_n"):
from litex.soc.cores.usb_fifo import FT245PHYSynchronous
return FT245PHYSynchronous(pads, clk_freq)
# RS232
else:
return RS232PHY(pads, clk_freq, baudrate)
class UART(Module, AutoCSR): class UART(Module, AutoCSR):
def __init__(self, phy, def __init__(self, phy,

View File

@ -315,7 +315,7 @@ class SoCCore(Module):
if uart_stub: if uart_stub:
self.submodules.uart = uart.UARTStub() self.submodules.uart = uart.UARTStub()
else: else:
self.submodules.uart_phy = uart.RS232PHY(platform.request(uart_name), clk_freq, uart_baudrate) self.submodules.uart_phy = uart.UARTPHY(platform.request(uart_name), clk_freq, uart_baudrate)
self.submodules.uart = ResetInserter()(uart.UART(self.uart_phy)) self.submodules.uart = ResetInserter()(uart.UART(self.uart_phy))
self.add_csr("uart_phy", allow_user_defined=True) self.add_csr("uart_phy", allow_user_defined=True)
self.add_csr("uart", allow_user_defined=True) self.add_csr("uart", allow_user_defined=True)