You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UART FIFO是否需跨时钟域逻辑与格雷码?附场景说明

问题解答

一、发送FIFO是否需要跨时钟域(CDC)逻辑及读写指针格雷码?

不需要,原因如下:

  • 从提供的波特率生成模块代码能看出,baudclk是由axi_aclk分频生成的,所有时钟翻转动作都在axi_aclk的上升沿触发,属于同源同步时钟——两者有固定相位关系,并非完全独立的异步时钟。
  • CDC逻辑(比如双寄存器同步)和格雷码转换,核心是解决异步时钟域之间数据/指针传输的亚稳态风险、多bit跳变采样错误问题。而同步同源时钟间的交互,只要通过常规时序约束(比如Xilinx FPGA的时钟约束)确保建立/保持时间达标,就不会有异步时钟的不确定性风险,因此不需要额外的CDC逻辑和格雷码处理。

二、能否移除CDC逻辑及FIFO?

  • CDC逻辑可完全移除:如上述分析,两个时钟属于同步域,原本为跨异步时钟设计的CDC逻辑没有存在必要。
  • FIFO不能移除:FIFO在这里的核心作用是速率匹配缓冲——AXI总线的axi_aclk频率通常远高于UART波特率对应的baudclk频率(比如AXI时钟100MHz,UART 115200波特率对应的baud16时钟仅1.8432MHz),AXI侧写入数据的速度远快于UART侧发送速度,必须靠FIFO暂存数据,避免溢出丢失。你采用的Sunburst Design无格雷码beh_fifo,本身适合同步时钟域场景,完全可以保留作为速率缓冲使用。

内容的提问来源于stack exchange,提问作者bruin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 21:53:13