FPGA設(shè)計(jì)時(shí)序約束五、設(shè)置時(shí)鐘不分析路徑
一、背景
????在進(jìn)行時(shí)序分析時(shí),工具默認(rèn)對(duì)所有的時(shí)序路徑進(jìn)行分析,在實(shí)際的設(shè)計(jì)中,存在一些路徑不屬于邏輯功能的,或者不需要進(jìn)行時(shí)序分析的路徑,使用set_false_path對(duì)該路徑進(jìn)行約束,時(shí)序分析時(shí)工具將會(huì)直接忽略路徑不進(jìn)行分析。
1.1 設(shè)置false path的場(chǎng)景? ?
可以設(shè)置為false path的路徑包括
a)跨時(shí)鐘域中添加的進(jìn)行兩次同步的邏輯單元
b) 只在FPGA通電啟動(dòng)時(shí)的寄存器
c)復(fù)位或測(cè)試的邏輯模塊
d)異步的分布式RAM中讀時(shí)鐘和寫(xiě)時(shí)鐘之間的路徑
下面,展示一個(gè)對(duì)于上面提到的非功能單元的路徑,在兩個(gè)觸發(fā)器中級(jí)聯(lián)了兩個(gè)選擇器,選擇器的選項(xiàng)信號(hào)相同。

1.2 set_false_path的優(yōu)勢(shì)
a)減少運(yùn)行時(shí)間:將一些路徑設(shè)置為false path后,時(shí)序分析工具無(wú)需耗費(fèi)時(shí)間對(duì)該路徑進(jìn)行分析,也不需要對(duì)非功能模塊路徑進(jìn)行優(yōu)化,可以節(jié)省時(shí)間
b)提高QOR(quality of results):將路徑設(shè)置為false path可以極大地提高QOR,綜合,布局后的質(zhì)量,優(yōu)化設(shè)計(jì)也會(huì)極大地受工具嘗試解決的時(shí)序問(wèn)題影響。
????因?yàn)槿绻枪δ苣K的路徑存在時(shí)序違例時(shí),工具可能嘗試去修復(fù)這些違例,這不僅會(huì)導(dǎo)致設(shè)計(jì)因?yàn)檫壿嫃?fù)制而變大,也可能因?yàn)榉枪δ苣K有更大的違例而忽略了實(shí)際功能模塊的違例問(wèn)題。只有正確的設(shè)置約束才能獲取最好的結(jié)果。
二、set_false_path
2.1 設(shè)置說(shuō)明
進(jìn)入Timing Constraints,選擇Exceptions中Set False Path

Set False Path設(shè)置界面如下

Start Point:設(shè)置false path的起點(diǎn),可以為Cell pins,clocks,cells,I/O ports;
Through Points:設(shè)置false path經(jīng)過(guò)的中間路徑,可以為Nets,cells,cell pins;
End Points:設(shè)置false path的終點(diǎn),可以為Cell pins,clocks,cells,I/O ports;

Setup/Hold:設(shè)置False path的路徑的分析類型為Setup 或hold,不勾選時(shí),兩者都會(huì)為False Path
Rise/Fall:設(shè)置False path的路徑中生效的邊沿,不勾選時(shí),不會(huì)進(jìn)行邊沿區(qū)分
Remove existing path exceptions before setting false path:勾選后,如果設(shè)置的路徑上已存在其他exceptions約束,則會(huì)將其覆蓋,不勾選則保留原有的約束。
備注:當(dāng)使用through時(shí)沒(méi)有設(shè)置-from和-to參數(shù)時(shí)需注意,所有經(jīng)過(guò)through設(shè)置的線路都會(huì)被視為false path。
2.2 細(xì)節(jié)區(qū)分
a)多個(gè)-through時(shí),順序不同結(jié)果不同,下面兩條約束不是等價(jià)的,第一條表示先通過(guò)cell1/pin1,再通過(guò)cell2/pin2的路徑,第二條約束則相反
b)get_cells連接多個(gè)單元時(shí),表示從復(fù)位端口reset到多個(gè)cells(ff1_reg,ff2_reg,ff3_reg)中的路徑都將設(shè)為false path
c)不對(duì)兩個(gè)異步時(shí)鐘clk1,clk2間的路徑進(jìn)行分析,只會(huì)將從clk1到clk2間的路徑設(shè)置為false path
d)如果要對(duì)clk1到clk2,clk2到clk1的路徑都設(shè)置為false path,則需要兩條約束命令
e)當(dāng)需要對(duì)多個(gè)異步時(shí)鐘間都不進(jìn)行時(shí)序分析時(shí),對(duì)異步時(shí)鐘兩兩間設(shè)置false path則太繁瑣,此時(shí)可使用set_clock_groups代替
f)在兩個(gè)寄存器間的非正常邏輯功能路徑中,設(shè)置false path可以只使用兩個(gè)through,而不用指定start point和end point

命令中MUX1/a0和MUX2/a1位置不能換,交換后則表示先經(jīng)過(guò)MUX2/a1再經(jīng)過(guò)MUX1/a0
f)對(duì)于異步雙端口分布式RAM,寫(xiě)操作和RAM的時(shí)鐘是同步的,讀操作可以不同步,因此,在寫(xiě)時(shí)鐘和讀時(shí)鐘間設(shè)置false path符合設(shè)計(jì)需求,rd_clk為讀時(shí)鐘,wr_clk為寫(xiě)時(shí)鐘,有兩種約束方式可以實(shí)現(xiàn)

方法一、設(shè)置從寫(xiě)寄存器到讀寄存器的false path
?方法二、設(shè)置從寫(xiě)使能端口WE到RAM的路徑
三、工程示例
工程代碼
主時(shí)鐘和生成時(shí)鐘約束
未設(shè)置set_false_path時(shí),異步時(shí)鐘路徑create_clk1存在到gen_clk_4的路徑,下圖藍(lán)色線所示路徑

設(shè)置create_clk1到gen_clk_4的false path約束,inter-clock paths中只剩gen_clk_3到gen_clk_4的路徑,無(wú)create_clk1到gen_clk_4的路徑

四、參考資料
用戶手冊(cè):ug903-vivado-using-constraints-en-us-2022.2.pdf
鏈接:https://pan.baidu.com/s/17AK_-J4wRXiFLtLTorlrwg?pwd=mylt?
提取碼:mylt??