你能举一个“完全不稳定”的例子吗?
只要设计满足时序(并且正确指定时序),就可以保证信号足够稳定以供芯片使用。
对于它的价值,几乎每个FPGA设计都在每种类型的FPGA上使用大量的组合(即时间无关)逻辑 - 从XC2000到Virtex Ultrascale +。
由于所有这些都可以正常工作,我的猜测是你的代码中存在导致问题的东西。
显而易见的原因是:
(1)错误指定的时序(或忽略的时序故障)。
在几MHz时,很难失败计时,所以你可以在很大程度上忘记它。
然而,在200MHz时,你将会进入一个在Spartan 6上获得正确的时机确实很重要的地区。
(2)没有注意时钟域。
例如,如果time1_r和time2_r来自FPGA振荡器,而time_sel来自摄像机,那么您实际上并没有任何关于它们如何相互关联的信息。
如果time_sel在FPGA上的时钟上升沿之前发生变化,则在时钟边沿发生之前没有时间来改变time_o。
纠正这一点可能需要重新考虑不同时钟如何相互作用,以及如何安全地处理它们。
在原帖中查看解决方案
你能举一个“完全不稳定”的例子吗?
只要设计满足时序(并且正确指定时序),就可以保证信号足够稳定以供芯片使用。
对于它的价值,几乎每个FPGA设计都在每种类型的FPGA上使用大量的组合(即时间无关)逻辑 - 从XC2000到Virtex Ultrascale +。
由于所有这些都可以正常工作,我的猜测是你的代码中存在导致问题的东西。
显而易见的原因是:
(1)错误指定的时序(或忽略的时序故障)。
在几MHz时,很难失败计时,所以你可以在很大程度上忘记它。
然而,在200MHz时,你将会进入一个在Spartan 6上获得正确的时机确实很重要的地区。
(2)没有注意时钟域。
例如,如果time1_r和time2_r来自FPGA振荡器,而time_sel来自摄像机,那么您实际上并没有任何关于它们如何相互关联的信息。
如果time_sel在FPGA上的时钟上升沿之前发生变化,则在时钟边沿发生之前没有时间来改变time_o。
纠正这一点可能需要重新考虑不同时钟如何相互作用,以及如何安全地处理它们。
在原帖中查看解决方案
举报