如果 UART 模块有单时钟输入(称为
axi_aclk
),则波特率时钟是根据除数寄存器(axi_aclk
和 DLL
)从 DLM
生成的。
下面以xmit fifo的时钟为例(fifo的写端口由
axi_clk
驱动,读端口由baudclk
驱动:
+------------>---------------------+
| |
| v
--> axi_aclk ---> [baudrate generator] +-->[xmt fifo] <--
| ^
| |
+----------------------------------+
baudclk
我的问题是,在这种情况下,
xmt fifo
的实现是否需要时钟域交叉逻辑(以及用于读/写指针的格雷码),为什么?
这两个时钟可能是同步的。 Baudclk可以通过门控时钟来实现。例如,屏蔽 4 个 axi_aclk 时钟脉冲中的 3 个以生成 4 分频 baudclk。
_ _ _ _ _ _ _ _ _ _
axi_aclk _| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_
_ _ _
baudclk _| |_____________| |_____________| |_____
axi_aclk -> clk buffer -+---------------> DFF (axi_aclk)
|
+-> clk gating -> DFF (baudclk)
在axi_aclk上创建时钟树,axi_aclk和baudclk域的DFF将被平衡。