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