我在FPGA中实现DSO控制器,并且遇到太多保持时间违规(到目前为止最好的结果是3个保持时间错误约为-2ns松弛) 。摆脱保持时间违规(赛灵思HDL)
我的问题的核心是我有从ADC采样抽取器输入的FIFO缓冲器,然后输出到同步FT245(60MHz)。 输入抽取器可以被设置为以2的幂(例如,1,2,4,8,16 ...)进行抽取,这也将ADC样本的时钟频率(150MHz)分开。
而我现在的做法是,当我正在捕获数据时,我提供分频(或直接的,如果抽取比为0)时钟频率缓冲,然后当我向PC推送样本时,切换到从FT245提供60MHz时钟。在模拟它可以正常使用,但问题是在放置和路由,该路由器会吐出这个错误:
Route:466 - Unusually high hold time violation detected among 226 connections. The top 20 such instances are printed below. The
router will continue and try to fix it
然后仰卧起坐10-15分钟,直到它给了我时间报告,通知我说,所有的设置时间限制遇到了150MHz时钟有3个保持时间违规(60MHz时钟正常)。
我已经读过这个问题可能是使用门控时钟,FPGA无法正确分配时钟,但我试着用FIFO的门控时钟来代替,我直接连接150MHz时钟到FIFO,并且我在FIFO中选通数据与dataReady(它实际上结束了与以前门控时钟相同的信号),那么我得到了比现在更多(50-60)的保持时间违规。
是否有一些已知的多时钟FIFO的好方法?不仅仅是两个(即使在Xilinx ISE的示例中也很多)。或者是在FPGA中抽取ADC采样的想法不行?
目标FPGA是斯巴达6 LX25速度等级-2(不幸的是我无法让我的手-3速度等级)。
这里是松弛的例子它给我:
Slack (hold path): -2.031ns (requirement - (clock path skew + uncertainty - data path))
Source: decimator_clock_divisor/decimationRatio_0 (FF)
Destination: trigger_analog1/previousValue_2 (FF)
所提到的源信号(和它给了我都是违法行为)并没有改变,很多时候,它实际上是由GUI控制,我不我不知道它怎么会在那里违反时间。它是从抽取器到触发缓冲区的比率(或者我的FIFO缓冲区在其他违例中)的路径。
基本上我的问题是,我是否应该关心这些违规?
因为在改变抽取器的比率之后,在实际开始使用抽取器的触发器结果之前,可能会有数千个时钟周期。
我知道路由器无法知道我多长时间更换一次异步信号(它是异步的,因为我将它设置为60MHz时钟域),并且需要多长时间才能使用某个模块的结果。 问题是,我不知道在完成PAR后,如果它显示出这3个违规行为,如果最终没有其他违规行为被这3个违规行为所遮蔽?
可以发布PAR仿真验证它是否可以在板上工作?我会尝试它,但我必须等待2周BGA焊接,我只剩下4周完成论文,所以我想确保我的设计将工作。
我接受这个答案,因为感谢您的建议,我设法让PAR的计时分数为0。 – 2013-04-10 10:13:57