【问题标题】:How to set a signal high X-time before rising edge of clock cycle?如何在时钟周期上升沿之前将信号设置为高 X 时间?
【发布时间】:2018-07-30 19:43:45
【问题描述】:

我有一个信号来检查内存块中的数据是否可用并执行一些计算/逻辑(这无关紧要)。

我希望一个名为“START_SIG”的信号在 10 MHz 频率的时钟周期的第一个上升沿之前达到高 X 时间(纳秒)。只有当它检测到有可用数据并根据需要进行进一步计算时,它才会变高。

现在,如何做到这一点?另外,我不能设置延迟,因为这必须是 RTL Verilog。因此,它必须可以在 FPGA(Artix7 系列)上进行综合。

有什么建议吗?

【问题讨论】:

    标签: verilog clock register-transfer-level


    【解决方案1】:

    我怀疑是 XY 问题,如果 start sig 是由与您的处理相同的时钟域中的逻辑产生的,那么您可能无需任何工作就可以满足时序(在 FPGA 术语中 10MHz 非常慢),但如果您真的需要做这样的事情有几种方法(但严重的是你做错了!)。 FPGA逻辑通常与一个或多个时钟同步,通常需要在一个时钟周期内进行微调控制是做错的标志。

    使用 {PLL/MCM/Whatever} 生成两个时钟,一个在 10Mhz 时非常慢,而另一个则快得多,然后从 10MHz 时钟的前一个边沿计算快的一个,以获得您的时序。

    使用 MCMPLL 等(取决于平台)生成两个具有小相移的 10Mhz 时钟,然后选通其中一个。

    使用一长串逆变器对(属性 KEEP(VHDL 但verilog 会有类似的东西)将是你的朋友),定期校准你已知的时钟(它会随着温度、星期几和黄道带的标志而漂移),这对于诸如时间到数字转换器之类的东西来说很整洁,可能与选项二结合使用以进行微调。关于这个的环 oscs 的阴影,但不管用什么。

    【讨论】:

    • 嗨,丹,错字。是 1Mhz 信号。无论如何,我没有意识到这一点。因此,如果 start_sig 依赖于其他信号,那么我不应该担心它开始的确切时间吗?不过,这确实有道理,只是再次澄清这一点,以便我们在同一点上达成一致。由于其他数据依赖于 start_sig,因此 start_sig 仅在收到该数据后才会启动。
    • 如果您的所有逻辑都与该时钟同步(对于 FPGA 来说,1MHz 非常慢)它可能会正常工作,但请注意,外部 IO 通常需要通过寄存器对与时钟同步,并且跨时钟域有其自身的问题。建议迁移到电气工程,在那里您可能会得到更好的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2016-02-25
    相关资源
    最近更新 更多