我在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