2
2
from migen .bank .description import *
3
3
from migen .bank .eventmanager import *
4
4
from migen .genlib .record import Record
5
- from migen .actorlib .fifo import FIFO
5
+ from migen .actorlib .fifo import SyncFIFO , AsyncFIFO
6
+
7
+
8
+ def _get_uart_fifo (depth , sink_cd = "sys" , source_cd = "sys" ):
9
+ if sink_cd != source_cd :
10
+ fifo = AsyncFIFO ([("data" , 8 )], depth )
11
+ return ClockDomainsRenamer ({"write" : sink_cd , "read" : source_cd })(fifo )
12
+ else :
13
+ return SyncFIFO ([("data" , 8 )], depth )
6
14
7
15
8
16
class UART (Module , AutoCSR ):
@@ -22,7 +30,7 @@ def __init__(self, phy,
22
30
# # #
23
31
24
32
# TX
25
- tx_fifo = FIFO ([( "data" , 8 )], tx_fifo_depth , source_cd = phy_cd )
33
+ tx_fifo = _get_uart_fifo ( tx_fifo_depth , source_cd = phy_cd )
26
34
self .submodules += tx_fifo
27
35
28
36
tx_irqs = {
@@ -40,7 +48,7 @@ def __init__(self, phy,
40
48
41
49
42
50
# RX
43
- rx_fifo = FIFO ([( "data" , 8 )], rx_fifo_depth , sink_cd = phy_cd )
51
+ rx_fifo = _get_uart_fifo ( rx_fifo_depth , sink_cd = phy_cd )
44
52
self .submodules += rx_fifo
45
53
46
54
rx_irqs = {
0 commit comments