一、背景
Vivado中時序分析工具默認(rèn)會分析設(shè)計中所有時鐘相關(guān)的時序路徑,除非時序約束中設(shè)置了時鐘組或false路徑。使用set_clock_groups命令可以使時序分析工具不分析時鐘組中時鐘的時序路徑,使用set_false_path約束則會雙向忽略時鐘間的時序路徑
使用-group參數(shù)可以將一個時鐘設(shè)置到多個時鐘組中,如果時鐘組中沒有時鐘,則時鐘組為空組。只有至少兩個組都是非空組,為有效組時set_clock_groups約束才有效。如果只有一個組有效,其他組是空的,流程將會報錯。
二、時鐘間關(guān)系
2.1 時鐘關(guān)系分類
兩個時鐘的關(guān)系可以是同步時鐘,異步時鐘,非擴展時鐘。
同步時鐘: 兩個時鐘的相位關(guān)系是可預(yù)知的,常見的是兩個時鐘來源于相同的根時鐘或者共同的周期,如生成時鐘和主時鐘。
異步時鐘:當(dāng)兩個是時鐘的相位關(guān)系不可預(yù)知時,則為異步時鐘,例如來源兩個晶振的時鐘,通過不同的輸入端口進入到FPGA內(nèi)部,無法知道兩者的相位關(guān)系。
非擴展時鐘:當(dāng)兩個時鐘在1000個周期內(nèi)仍無無法找到共同的邊沿,在這種情況下,最差的setup關(guān)系在超過1000個周期上,但是時序分析工具將無法確認(rèn)這是最差的情況。典型的例子是兩個奇數(shù)倍分頻的時鐘,如clk0和clk1都是由MMCMs產(chǎn)生的生成時鐘,周期分別為5.125ns和6.666ns。它們的上升沿在1000個周期內(nèi)不存在重合。時序分析工具有一個0.01ns的setup路徑裕量,盡管兩個時鐘有已知的相位關(guān)系,但它們的波形使得無法進行正確的時序分析。
異步時鐘中,slack值可以按常規(guī)方法計算,但計算出的值不一定正確。因此,非擴展時鐘通常作為異步時鐘。
2.2 時鐘關(guān)系查看
時鐘Vivado中Report Clock Interaction可以查看時鐘間的關(guān)系
下圖顏色方塊中,橫坐標(biāo)表示目的時鐘,縱坐標(biāo)表示源時鐘,黑色No path表示不存在時序路徑,藍色User ignored Paths為用戶設(shè)置了不分析的約束,紅色Timed(Unsafe)表示異步時鐘或非擴展的時鐘,顏色塊下方的列表也顯示了時序的詳細信息。
三、異步時鐘組
3.1 優(yōu)先級
異步時鐘和非擴展時鐘是沒法正確地進行時序分析, 在它們之間的時序路徑在分析時應(yīng)該使用set_clock_groups進行忽略。相比于其他時序例外的命令,set_clock_groups的優(yōu)先級最高,如果需要對異步時鐘進行分析,則不能對該時鐘使用set_clock_groups命令。
3.2 使用格式
在Timing Constraints窗口中,Clocks列下選擇Set Clock Groups
進入Set Clock Groups界面
Group name:設(shè)置時鐘組的名稱
Group 1: 添加屬于Group 1中的時鐘,點擊最右側(cè)的“+”可以設(shè)置多個組
The specified clocks are: 設(shè)置時鐘組里的時鐘與其他時鐘的關(guān)系,可為asynchronous,logically exclusive,physically exclusive。
-asynchronous:約束為異步時鐘組
-logically_exclusive:約束為邏輯互斥的時鐘組
-physically_exclusive:約束為物理線路互斥的時鐘組,設(shè)計中不能同時存在,最終表現(xiàn)的效果和-logically_exclusive是相同的。
約束命令示例:
set_clock_groups -name clk_group -asynchronous -group[get_clocks{create_clk1 gen_clk_2}]
3.3 asynchronous和exclusive
參數(shù)asynchronous表示創(chuàng)建異步時鐘組,使用場景如數(shù)據(jù)在不同速率的時鐘間通過FIFO進行傳輸時,使用異步時鐘組隔離時序關(guān)系。
參數(shù)exclusive表示時鐘組里的時鐘為互斥關(guān)系,例如,同一個節(jié)點中存在多個時鐘,當(dāng)同一時間內(nèi)只能一個時鐘生效,常用在時鐘多路復(fù)用上。
3.4 結(jié)果示例
以設(shè)計中存在4個時鐘clk1,clk2,clk3,clk4為例,時鐘之間均存在可分析的時序路徑。對時鐘進行不同的時鐘組約束,約束后的分析結(jié)果如下,Y表示進行時序分析,N表示不進行時序分析,參數(shù)使用asynchronous。
a)場景1:
set_clock_groups -name clk_group -asynchronous -group[get_clocksclk1]
b)場景2
set_clock_groups -name clk_group -asynchronous -group[get_clocks{clk1 clk2}]
時鐘組內(nèi)部的時鐘間進行時序分析,和外部的時鐘不會進行時序分析
c)場景3
set_clock_groups -name clk_group -asynchronous -group[get_clocksclk1] -group[get_clocksclk2]
設(shè)置多個groups時,groups之間的clk不會進行時序分析
d)場景4
set_clock_groups -name clk_group -asynchronous -group[get_clocks{clk1 clk2}] -group[get_clocks{clk3 clk4}]
設(shè)置多個group時,group內(nèi)部的時鐘間會進行時序分析,group間不會進行時序分析
總結(jié):set_clock_group中g(shù)roup內(nèi)部的時鐘只能組內(nèi)間進行分析,不能跨組或與非約束中的時鐘進行時序分析
-
命令
+關(guān)注
關(guān)注
5文章
733瀏覽量
22762 -
時序約束
+關(guān)注
關(guān)注
1文章
118瀏覽量
13646 -
Vivado
+關(guān)注
關(guān)注
19文章
834瀏覽量
68388
原文標(biāo)題:FPGA時序約束之設(shè)置時鐘組set_clock_groups
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
FPGA時序約束的基礎(chǔ)知識

FPGA主時鐘約束詳解 Vivado添加時序約束方法

FPGA時序約束之衍生時鐘約束和時鐘分組約束
FPGA時序約束之建立時間和保持時間

Xilinx FPGA編程技巧之常用時序約束詳解
Xilinx FPGA編程技巧之常用時序約束詳解
FPGA實戰(zhàn)演練邏輯篇56:VGA驅(qū)動接口時序設(shè)計之3時鐘約束
時序約束之時鐘組約束
FPGA中的時序約束設(shè)計

評論