1、時序錯誤的影響
一個設(shè)計的時序報告中,design run 時序有紅色,裕量(slack)為負數(shù)時,表示時序約束出現(xiàn)違例,雖然個別違例不代表你的工程就有致命的問題,但是這是一個風險(時序報告是按照工藝、電壓以及溫度的上下限給出的結(jié)果)。當違例數(shù)較多,也就意味著設(shè)計在實際環(huán)境中出現(xiàn)問題的概率也會越大。
時間裕量包括建立時間裕量和保持時間裕量(setup slack和hold slack)。從字面上理解,所謂“裕量”即富余的、多出的。什么意思呢?即保持最低要求的建立時間或保持時間所多出的時間,那么“裕量”越多,意味著時序約束越寬松。
2、如何查看具體錯誤的時序路徑
上述錯誤的時序,雙擊可以看到詳細的時鐘路徑和數(shù)據(jù)路徑,右鍵可以看到具體代碼中的原理圖。個人比較喜歡先查看原理圖可以很直觀的看到到底是哪一塊的代碼錯了。
在調(diào)試的過程中發(fā)現(xiàn),基本上時序錯誤都是代碼的錯誤,比如沒有跨時鐘操作(跨時鐘需要打兩拍,跨時鐘一些信號前后初始化不一致);數(shù)據(jù)路徑過長(主要是針對位寬較大的數(shù)據(jù),路徑又長。解決辦法是在該路徑上添加寄存器)。出現(xiàn)時序錯誤,先從代碼邏輯上找問題,代碼邏輯排查完了,在考慮時序怎么約束。
3、clock interaction
時序錯誤還可以通過下圖查看,以前特別愛用里面的指令 set false path 和 set clock groups。自從意識到大部分的時序錯誤都是邏輯錯誤導(dǎo)致以后,基本沒用到這兩句話。有一次盲目的使用set false path 指令,沒有對 set false path 的用法有深刻理解, 導(dǎo)致代碼邏輯不正常后,就更不會輕易用這些優(yōu)化指令了。
擴展:
1)set_false_path
設(shè)置偽路徑后,不再對特殊路徑進行時序分析。特殊路徑如測試邏輯、添加同步電路后的跨時鐘域路徑等。在兩個時鐘域之間應(yīng)該相互設(shè)置為set_false:(注意:只是不對特殊路徑進行時序分析,而不是只要出現(xiàn)錯誤就能用這句話)
set_false_path -from [get_clocks clk_a] -to [get_clocks clk_b]
set_false_path -from [get_clocks clk_b] -to [get_clocks clk_a]
2)set_clock_groups :添加完以后事這樣的
set_clock_groups -asynchronous -group clk_a -group clk_b clk_a和clk_b是異步時鐘
設(shè)置異步時鐘
更多信息可以來這里獲取==>>電子技術(shù)應(yīng)用-AET<<