【问题标题】:Crossing clock domains within a device跨设备内的时钟域
【发布时间】:2013-10-16 15:01:43
【问题描述】:

我正在用 VHDL 设计一个导频插入模块,以在 FPGA 上实现,该 FPGA 是 OFDM 系统的一部分。对于来自调制组件的每 48 个字,导频插入将添加导频音和 NULL 以填充 64 通道 IFFT 的剩余通道。我正在尝试实现该系统的流式操作,因此它将不断产生 64 个样本,用于以固定延迟向 IFFT 的串行输入。

我的方法是使用双端口 RAM,一个端口用于接收调制字,另一个端口用于写入 IFFT。每个端口都运行在一个独立的时钟上,在设备外部我有一个 4/3 时钟分频器,因此输出每 48 个时钟接收 64 个时钟到输入。

我的问题是这是否是一种有效的设计策略,以及我应该注意哪些类型的陷阱。另外,如果有人对我如何实现这一点有其他建议,我将不胜感激。

谢谢, 技术专家

【问题讨论】:

    标签: vhdl fft fpga ifft


    【解决方案1】:

    那么驱动 48 逻辑的时钟是从驱动 64 逻辑的时钟衍生而来的吗?如果是这种情况,那么您知道您的时钟具有保证关系,您无需担心时钟漂移。这让您的工作更轻松。

    您是否有需要 RAM 的理由?您是否需要能够乱序访问 RAM 的值?如果可以的话,我建议使用 FIFO,它会让你的工作更轻松。您无需跟踪读/写地址。

    只需确保隔离两个时钟域即可。我建议将所有写入 RAM 或 FIFO 的逻辑放在一个文件中,并将所有读取 RAM 或 FIFO 的逻辑放在另一个文件中。 RAM/FIFO 可以存在于例化两个较低级别组件的顶层。

    这将帮助您确保在陌生的地方没有跨越时钟域。 RAM/FIFO 应该是您在两个域之间的唯一接口。

    【讨论】:

    • 谢谢!我正在使用两个端口 RAM,因此我可以独立读写(在不同的内存位置),而不必担心同时执行这两个进程时会发生什么。 FIFO 可能需要一种在上升沿读取并在下降沿写入的方案或类似的方案,以防止冲突访问。
    • @technocratic 不正确!您可以将写入端口与 FIFO 上的读取端口分开处理。只要你遵守 2 条规则:1. 永远不要写入完整的 FIFO 2. 永远不要从空的 FIFO 中读取。
    • 请注意,编写自己的异步 FIFO 是一个重大挑战,要正确和验证。
    猜你喜欢
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多