很多小伙伴開始學習時序約束的時候第一個疑惑就是標題,有的人可能會疑惑很久。不明白時序約束是什么作用,更不明白怎么用。
FPGA內(nèi)部結(jié)構(gòu)=LUT+觸發(fā)器+走線+嵌入式模塊(RAM,乘法器等)。下圖大致描述了它的抽象結(jié)構(gòu)。
以上公式告訴我們:信號是通過走線和各個模塊產(chǎn)生連接。然后信號通過走線必然有延遲,有人認為電信是光速走線延時應該很短,可以忽略(全局時鐘線的延時在時序緊張的情況下是不可忽略的),然而走線延遲可能超過你的想像。
1.電信號在走線槽里面?zhèn)鞑ゲ⒉皇枪馑?,走線上有分布電感和地平面有分布電容,二者值越大,對電容充電時間越長,走線延遲越長,這寫參數(shù)自然由工藝和封裝來決定,和我們設(shè)計無關(guān),但是卻對我們的設(shè)計方法產(chǎn)生重大影響,傳輸模型如下:
2.除了傳輸線模型的延時以外,走線本身會經(jīng)過很多類似路由器的結(jié)構(gòu)去改變走線方向,在資源緊張的情況下可能會走過多個路由,這也就是為什么FPGA內(nèi)部走線會很繞的原因,經(jīng)過多級路由的走線延時會大大增加,在時序報告里面也可以看到的走線延遲=傳輸線延遲+路由延遲。
3.如果設(shè)計里面組合邏輯很多那么信號就會經(jīng)過多個LUT,這也會產(chǎn)生延遲,在時序報告里面可以看見組合邏輯延遲和邏輯級數(shù)這2個選項。
綜合以上3點,F(xiàn)PGA內(nèi)部延時不可忽略!并且常常達到ns級!。
上圖為實際生成的數(shù)字電路模型,從中看出
根據(jù)上圖公式,tnet和tlogic一旦增加,最小時鐘周期就會增加,也就意味著系統(tǒng)可以跑的最高頻率會下降。
那么編譯器怎么知道哪個是你的時鐘,你的主時鐘需要跑多少MHZ呢?如果編譯器設(shè)計高了,會編譯時間增長甚至報錯,低了會導致實際上板產(chǎn)生競爭冒險,從而導致錯誤。所以為了避免以上問題,我們需要高速編譯器這個時鐘到底要多快,還有,相位關(guān)系,占空比。這樣編譯器才能根據(jù)我們的需求去對比延時所算出來會不會競爭冒險。所有的時序約束都是要告訴編譯器,我的時鐘和數(shù)據(jù)要滿足怎樣的關(guān)系,然后交給編譯器去計算最糟糕的情況下能不能滿足條件,還差多少ns就會不滿足條件。
所以,為了告訴編譯器時鐘參數(shù)就有了
create_clock -name clk -period 10 [get_ports sysclk],這句xdc命令告訴編譯器,時鐘clk,從sysclk(get ports 后面攝取的是頂層要分配引腳的物理引腳,get pins后面攝取的是生成的某個寄存器或者器件的引腳,get nets攝取的是里面生成的某根線)這個引腳輸入,時鐘周期是10ns,由于相位和占空比未聲明,所以初相位為0,占空比為50%。如下圖:
如果想調(diào)節(jié)初相位90°和占空比25%:
create_clock -name devclk -period 10 -waveform {2.5 5} [get_ports sysclk]
這里-waveform {2.5 5}代表第一個跳變沿在第2.5ns處產(chǎn)生,第二個跳變沿在5ns處產(chǎn)生從而形成下圖的時鐘,這樣就可以把所有的相位和占空比關(guān)系都描述清除。
編譯器會根據(jù)時鐘sysclk的周期和相位,在整個sysclk時鐘域,計算延遲后對比sysclk和對應寄存器的數(shù)據(jù)端口進行對比,看是否滿會產(chǎn)生競爭冒險,不滿足的地方會報告出來。
-
嵌入式系統(tǒng)
+關(guān)注
關(guān)注
41文章
3682瀏覽量
131365 -
乘法器
+關(guān)注
關(guān)注
9文章
212瀏覽量
37961 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2039瀏覽量
62138 -
LUT
+關(guān)注
關(guān)注
0文章
50瀏覽量
12848 -
FPGA系統(tǒng)
+關(guān)注
關(guān)注
0文章
10瀏覽量
7158
發(fā)布評論請先 登錄
VIVADO時序約束及STA基礎(chǔ)
FPGA時序約束之衍生時鐘約束和時鐘分組約束
FPGA中的時序約束設(shè)計

深入了解時序約束以及如何利用時序約束實現(xiàn)FPGA 設(shè)計的最優(yōu)結(jié)果

FPGA時序約束簡介

評論