Vhdl 消除保持时间冲突(Xilinx HDL)

Vhdl 消除保持时间冲突(Xilinx HDL),vhdl,xilinx,synthesis,Vhdl,Xilinx,Synthesis,我在FPGA中实现DSO控制器,我遇到了太多保持时间冲突的问题(到目前为止,最好的p&R结果是3个保持时间错误,其中大约有-2ns的延迟) 我的问题的核心是,我有先进先出缓冲器,从ADC采样抽取器输入,然后输出到同步FT245(60MHz)。 输入抽取器可设置为2次幂的抽取(例如1、2、4、8、16…),这也可划分ADC采样的时钟频率(150MHz) 我现在的方法是,当我捕获数据时,我向缓冲区提供分频(或直接,如果抽取比为0)时钟频率,然后当我将样本推送到PC时,我从FT245切换到提供60MH

我在FPGA中实现DSO控制器,我遇到了太多保持时间冲突的问题(到目前为止,最好的p&R结果是3个保持时间错误,其中大约有-2ns的延迟)

我的问题的核心是,我有先进先出缓冲器,从ADC采样抽取器输入,然后输出到同步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时钟域设置它,所以它是异步的)以及使用某个模块的结果需要多长时间。 问题是,我不知道它是否显示了这3个违反后,完成PAR,如果它是最后的,没有其他违反只是阴影这3个违规?< /P>

是否可以通过PAR模拟验证它是否能在船上工作?我会在船上尝试,但我必须等待2周的BGA焊接,我只有4周的时间来完成论文,所以我想确保我的设计将工作。

先进先出可以作为异步。60Mhz和150Mhz两个主时钟域之间的边界桥。严格分离两个时钟域的逻辑。应该只有少数已知的慢速控制信号(足够慢,可以应用假路径定时约束)用于通信。例如,GUI将时钟比率写入60Mhz侧的寄存器中。然后,它向快速端发出信号,表示有一个新值。快速端在收到通知后的几个周期内捕获该值(例如,对元稳定性进行额外关注的上升沿检测)。快速端的功能逻辑始终使用同样在快速端的该阴影寄存器的输出

对于快速ADC端的时钟划分,您可以使用完整的时钟,并按照您所描述的方式启用(我也希望如此),或者您可以自行划分时钟。划分时钟时,请确保遵循Xilinx文档中的示例。例如,有时需要一个时钟缓冲器来分配时钟


如果存在剩余的保持路径冲突,请查看源和目标FF的时钟和时钟到达时间。有时,当目的地FF的捕获时钟延迟时,数据将提前。路由器可以通过简单地延迟数据来解决这个问题。当安装要求不允许进一步延迟时(当两个时钟之间的不确定度太高的情况下),它不能修复它。

我接受这个答案,因为感谢您的建议,我成功地获得了与计时得分0的PAR。