在之前的文章里面介紹了Canny算法的原理和基于Python的參考模型,之后呢在FPGA上完成了Canny算法的實(shí)現(xiàn),可是遇到了時(shí)序不收斂的問(wèn)題,記錄一下。
可以看到時(shí)序的建立時(shí)間不滿足。
我們?cè)诩s束的主時(shí)鐘頻率是200MHz,也就是5ns,但是建立時(shí)間是-2.12ns,也就是說(shuō)這個(gè)工程只能跑到7.12ns也就是140.45MHz,遠(yuǎn)遠(yuǎn)不能滿足我們預(yù)先的設(shè)計(jì)。
在之前文章里面介紹過(guò)怎么在SpinalHDL里面估計(jì)一個(gè)模塊可以跑到的最大頻率,可以參見(jiàn):SpinalHDL--快速評(píng)估代碼性能
怎么根據(jù)時(shí)序約束和建立保持時(shí)間裕量來(lái)分析工程能跑到的最大頻率可以參考下面:
首先來(lái)看一下PR之后是哪條路徑不收斂,究竟是同一時(shí)鐘域下的還是跨時(shí)鐘域的路徑,兩者的處理方式不一樣。
可以看到是Intra-clock paths爆紅了,也就是同一時(shí)鐘域下的路徑時(shí)序不收斂。
接下來(lái)看具體的時(shí)序路徑:
可以看到logic delay遠(yuǎn)遠(yuǎn)比net delay大,那么我們就需要去降低logic delay,也就是要把我們的組合邏輯搞簡(jiǎn)單一點(diǎn)。如果是net delay比較大就要考慮是不是布線擁塞的問(wèn)題了,兩者的處理方式不太一樣。
再來(lái)看一下它的電路圖,可以看到在左邊的寄存器輸出之后經(jīng)過(guò)LUT,Carry等組合邏輯之后,給到DSP的輸入端。一般來(lái)說(shuō)DSP的幾級(jí)pipline最好的都用上,這樣DSP可以跑到更高的頻率。
再來(lái)看一下具體的路徑報(bào)告:
可以看到logic的延時(shí)占到了82%,因此如果要解決這個(gè)時(shí)序?yàn)槔?,就必須要把logic delay給降低。
兩者的比例可以參考,七系列的FPGA和UltraScale系列的FPGA不太一樣:
來(lái)看一下這一個(gè)時(shí)序?yàn)槔龑?duì)應(yīng)的代碼:
可以看到其實(shí)挺復(fù)雜的,有減法,有乘法。其中減法是被vivado用LUT+Carry搭了起來(lái),乘法用的DSP。
要解決這個(gè)問(wèn)題,就是把這一大段代碼進(jìn)行流水拆開(kāi)嘛,把減法拆一級(jí)流水,乘法器拆為三級(jí)流水。
將代碼修改為以下的樣子,再來(lái)綜合一下
可以看到時(shí)序就收斂了。
再來(lái)看一下生成電路結(jié)構(gòu):
可以看到FDCE之后仍然是LUT+Carry的形式,用于做減法運(yùn)算,然后再接入DSP的輸入,在源碼里面做完減法之后還有這兩級(jí)寄存器,但是在電路圖里面看不到他們了,這是因?yàn)檫@兩級(jí)寄存器被DSP給吸收掉了,用于提高DSP的時(shí)鐘頻率,這兩級(jí)寄存器會(huì)利用DSP單元內(nèi)部的寄存器來(lái)實(shí)現(xiàn),并不會(huì)增加我們的資源占用,DSP核里面的資源不用也是浪費(fèi)。
上圖為DSP單元里面的寄存器排布,可以看到有六級(jí)。
本篇介紹了一次時(shí)序調(diào)優(yōu)的過(guò)程,就是重新計(jì)算流水線,看看哪里是時(shí)序瓶頸。這種重新計(jì)算流水線的方式代價(jià)還是比較大的,需要重新修改代碼,所以在設(shè)計(jì)初期就應(yīng)該考慮到這個(gè)問(wèn)題,比如DSP的流水線寄存器,BRAM的輸出寄存器這些在設(shè)計(jì)初期就考慮使用到它們,來(lái)獲取更好的時(shí)序。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1630文章
21801瀏覽量
606320 -
寄存器
+關(guān)注
關(guān)注
31文章
5369瀏覽量
121264 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1747瀏覽量
131844 -
時(shí)序收斂
+關(guān)注
關(guān)注
0文章
14瀏覽量
7626 -
python
+關(guān)注
關(guān)注
56文章
4809瀏覽量
85070
原文標(biāo)題:記錄一次時(shí)序收斂的過(guò)程
文章出處:【微信號(hào):FPGA開(kāi)源工坊,微信公眾號(hào):FPGA開(kāi)源工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
進(jìn)行RTL代碼設(shè)計(jì)需要考慮時(shí)序收斂的問(wèn)題
![進(jìn)行RTL代碼設(shè)計(jì)需要考慮<b class='flag-5'>時(shí)序</b><b class='flag-5'>收斂</b>的問(wèn)題](https://file.elecfans.com/web1/M00/C7/DC/o4YBAF9t-ByAL_xhAAAO8kuVqWE143.png)
UltraFast設(shè)計(jì)方法時(shí)序收斂快捷參考指南
![UltraFast設(shè)計(jì)方法<b class='flag-5'>時(shí)序</b><b class='flag-5'>收斂</b>快捷參考指南](https://file.elecfans.com/web2/M00/1B/84/pYYBAGGE2wiAcruZAAANWGykQVk985.png)
FPGA時(shí)序收斂學(xué)習(xí)報(bào)告
FPGA時(shí)序約束的幾種方法
FPGA時(shí)序約束的幾種方法
記錄一次STM32H743 CANFD調(diào)試過(guò)程中的一次BUG
一次波過(guò)程的等值電路
![<b class='flag-5'>一次</b>波<b class='flag-5'>過(guò)程</b>的等值電路](https://file1.elecfans.com//web2/M00/A5/2A/wKgZomUMNzKAINCAAAAJoe8rPL8558.gif)
基于MCMM技術(shù)IC時(shí)序收斂的快速實(shí)現(xiàn)
![基于MCMM技術(shù)IC<b class='flag-5'>時(shí)序</b><b class='flag-5'>收斂</b>的快速實(shí)現(xiàn)](https://file.elecfans.com/web2/M00/4A/18/pYYBAGKhvJeASublAAAxvxIKqBo633.png)
核電廠一次屏蔽深穿透計(jì)算
嘮一嘮解決FPGA約束中時(shí)序不收斂的問(wèn)題
![嘮<b class='flag-5'>一</b>嘮解決FPGA約束中<b class='flag-5'>時(shí)序</b>不<b class='flag-5'>收斂</b>的問(wèn)題](https://file1.elecfans.com/web2/M00/8B/73/wKgaomSZQOeAIxV6AAKO4n_AM0Y810.jpg)
記錄一次使用easypoi時(shí)與源碼博弈的過(guò)程
![<b class='flag-5'>記錄</b><b class='flag-5'>一次</b>使用easypoi時(shí)與源碼博弈的<b class='flag-5'>過(guò)程</b>](https://file1.elecfans.com//web2/M00/F7/9C/wKgZomaFDNWAUBBTAABY3eh4Fgc454.png)
評(píng)論