某年某月某日...
有些時(shí)候在寫(xiě)完代碼之后呢,Vivado時(shí)序報(bào)紅,Timing一欄有很多時(shí)序問(wèn)題。
這種時(shí)候我們往往會(huì)想,明明用的時(shí)鐘頻率不算高,整個(gè)片子的資源用的也不算特別多,為什么會(huì)有這么多時(shí)序問(wèn)題呢?
先說(shuō)結(jié)論:
代碼習(xí)慣不好,代碼風(fēng)格太差。
時(shí)序問(wèn)題,很明顯,是跟時(shí)鐘息息相關(guān)的,對(duì)于某一個(gè)操作時(shí)鐘,一旦其頻率確定,其對(duì)于路徑之間的最小時(shí)間要求也隨之確定。
在寫(xiě)完代碼后,隨著資源使用的確定,布局布線(xiàn)的深入,則某些信號(hào)之間的路徑延遲也隨之確定,由于FPGA芯片中各個(gè)資源的原始布局都是確定的,那么對(duì)于資源的選取則至關(guān)重要,合理的資源選取將決定時(shí)序的優(yōu)劣。
資源選取來(lái)源于哪里呢,最直觀的就是代碼。
下面分情況說(shuō)明:
1,report methodology
在綜合后,就可以report methodology,查看時(shí)鐘存在的隱患,爭(zhēng)取在設(shè)計(jì)前期就解決問(wèn)題。
2,時(shí)鐘約束
約束好主時(shí)鐘對(duì)應(yīng)的周期,管腳,除了特殊情況需要進(jìn)行過(guò)約束外,一般管腳的時(shí)鐘頻率是多少就約多少。
3,跨時(shí)鐘處理
對(duì)于跨時(shí)鐘域的復(fù)位信號(hào)、單bit信號(hào)、多bit信號(hào)、數(shù)組等,使用xpm原語(yǔ)進(jìn)行處理,或者用目標(biāo)時(shí)鐘信號(hào)打幾拍
4,抓信號(hào)別跨時(shí)鐘
抓取信號(hào)時(shí),除了set up debug外,使用ila時(shí),別跨時(shí)鐘抓信號(hào)
5,Ram設(shè)置
Ram的設(shè)置中,最好勾選含有register的選項(xiàng),有助于時(shí)序優(yōu)化,ram避免直接級(jí)聯(lián),同時(shí)例化多個(gè)相同ram時(shí)對(duì)于ram輸入作防優(yōu)化處理
6,流水寄存器
一個(gè)信號(hào)用于多個(gè)狀態(tài)的控制,或者狀態(tài)機(jī)中,控制較為復(fù)雜,一個(gè)信號(hào)位寬較大,反復(fù)使用,也最好多使用幾級(jí)寄存器進(jìn)行流水,也就是常說(shuō)的,沒(méi)事多打兩拍
7,Set false path
在使用Set false path時(shí),不到萬(wàn)不得已,不對(duì)兩個(gè)時(shí)鐘域的信號(hào)進(jìn)行整個(gè)Set false,而是只對(duì)單個(gè)信號(hào)進(jìn)行set false,哪里冒出來(lái)了,就對(duì)哪里進(jìn)行set false。
這樣就可以防止某些確實(shí)存在的時(shí)序問(wèn)題、需要改代碼來(lái)解決的時(shí)序問(wèn)題被隱藏,以免在調(diào)試的
后期,引起各種莫名其妙的問(wèn)題,且不知道怎么去查。
8,set_max_delay
善于使用set_max_delay、set_min_delay、set_multicycle_p。
9,重定時(shí)(retiming)
感興趣可去了解。
因此,在時(shí)序報(bào)紅,也就是有時(shí)序問(wèn)題時(shí),需要從時(shí)序問(wèn)題的本質(zhì)出發(fā),即是什么導(dǎo)致了時(shí)序問(wèn)題。比如,RAM直接級(jí)聯(lián),判斷條件過(guò)于復(fù)雜,跨時(shí)鐘處理不合理,狀態(tài)機(jī)過(guò)于復(fù)雜,信號(hào)位寬太大,相同信號(hào)驅(qū)動(dòng)模塊過(guò)多等。
另外,應(yīng)盡可能少用時(shí)序例外約束,同時(shí)在使用時(shí)序例外約束時(shí)要使約束對(duì)象足夠準(zhǔn)確,這樣一方面可以避免因?yàn)閷?duì)象不匹配導(dǎo)致過(guò)多約束或遺漏約束的情形,另一方面也能有效縮短編譯時(shí)間。
總之,代碼風(fēng)格在很大程度上決定了時(shí)序性能的好壞,決定了所寫(xiě)模塊能達(dá)到的時(shí)鐘頻率上限。實(shí)現(xiàn)同樣的功能,有些人寫(xiě)的代碼處理時(shí)鐘可以到100多MHz,而有些人可以到400多MHz。
審核編輯:湯梓紅
-
時(shí)序
+關(guān)注
關(guān)注
5文章
397瀏覽量
37772 -
代碼
+關(guān)注
關(guān)注
30文章
4886瀏覽量
70239 -
Vivado
+關(guān)注
關(guān)注
19文章
828瀏覽量
68198
原文標(biāo)題:Vivado-時(shí)序問(wèn)題隨筆-1
文章出處:【微信號(hào):FPGA通信小白成長(zhǎng)之路,微信公眾號(hào):FPGA通信小白成長(zhǎng)之路】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
VIVADO時(shí)序約束及STA基礎(chǔ)
如何在Vitis中把設(shè)置信息傳遞到底層的Vivado

一文詳解Vivado時(shí)序約束

vivado:時(shí)序分析與約束優(yōu)化
可以在Vivado時(shí)序分析器工具中指定溫度和電壓值來(lái)估算設(shè)計(jì)時(shí)序嗎?
時(shí)序約束與時(shí)序分析 ppt教程
Vivado中的靜態(tài)時(shí)序分析工具Timing Report的使用與規(guī)范

【時(shí)序約束資料包】培訓(xùn)課程Timing VIVADO
關(guān)于Vivado時(shí)序分析介紹以及應(yīng)用

Vivado進(jìn)行時(shí)序約束的兩種方式

Vivado時(shí)序案例分析之解脈沖寬度違例

如何讀懂Vivado時(shí)序報(bào)告

如何在Vivado中添加時(shí)序約束呢?

如何讀懂FPGA開(kāi)發(fā)過(guò)程中的Vivado時(shí)序報(bào)告?

評(píng)論