FPGA設(shè)計(jì)時(shí)序約束三、設(shè)置時(shí)鐘組set_clock_groups
一、背景
????Vivado中時(shí)序分析工具默認(rèn)會分析設(shè)計(jì)中所有時(shí)鐘相關(guān)的時(shí)序路徑,除非時(shí)序約束中設(shè)置了時(shí)鐘組或false路徑。使用set_clock_groups命令可以使時(shí)序分析工具不分析時(shí)鐘組中時(shí)鐘的時(shí)序路徑,使用set_false_path約束則會雙向忽略時(shí)鐘間的時(shí)序路徑
????使用-group參數(shù)可以將一個(gè)時(shí)鐘設(shè)置到多個(gè)時(shí)鐘組中,如果時(shí)鐘組中沒有時(shí)鐘,則時(shí)鐘組為空組。只有至少兩個(gè)組都是非空組,為有效組時(shí)set_clock_groups約束才有效。如果只有一個(gè)組有效,其他組是空的,流程將會報(bào)錯(cuò)。
二、時(shí)鐘間關(guān)系
2.1 時(shí)鐘關(guān)系分類
????兩個(gè)時(shí)鐘的關(guān)系可以是同步時(shí)鐘,異步時(shí)鐘,非擴(kuò)展時(shí)鐘。
????同步時(shí)鐘:??兩個(gè)時(shí)鐘的相位關(guān)系是可預(yù)知的,常見的是兩個(gè)時(shí)鐘來源于相同的根時(shí)鐘或者共同的周期,如生成時(shí)鐘和主時(shí)鐘。
????異步時(shí)鐘:當(dāng)兩個(gè)是時(shí)鐘的相位關(guān)系不可預(yù)知時(shí),則為異步時(shí)鐘,例如來源兩個(gè)晶振的時(shí)鐘,通過不同的輸入端口進(jìn)入到FPGA內(nèi)部,無法知道兩者的相位關(guān)系
????非擴(kuò)展時(shí)鐘:當(dāng)兩個(gè)時(shí)鐘在1000個(gè)周期內(nèi)仍無無法找到共同的邊沿,在這種情況下,最差的setup關(guān)系在超過1000個(gè)周期上,但是時(shí)序分析工具將無法確認(rèn)這是最差的情況。典型的例子是兩個(gè)奇數(shù)倍分頻的時(shí)鐘,如clk0和clk1都是由MMCMs產(chǎn)生的生成時(shí)鐘,周期分別為5.125ns和6.666ns。它們的上升沿在1000個(gè)周期內(nèi)不存在重合。時(shí)序分析工具有一個(gè)0.01ns的setup路徑裕量,盡管兩個(gè)時(shí)鐘有已知的相位關(guān)系,但它們的波形使得無法進(jìn)行正確的時(shí)序分析。
異步時(shí)鐘中,slack值可以按常規(guī)方法計(jì)算,但計(jì)算出的值不一定正確。因此,非擴(kuò)展時(shí)鐘通常作為異步時(shí)鐘。
2.2 時(shí)鐘關(guān)系查看
時(shí)鐘Vivado中Report Clock Interaction可以查看時(shí)鐘間的關(guān)系

????下圖顏色方塊中,橫坐標(biāo)表示目的時(shí)鐘,縱坐標(biāo)表示源時(shí)鐘,黑色No path表示不存在時(shí)序路徑,藍(lán)色User ignored Paths為用戶設(shè)置了不分析的約束,紅色Timed(Unsafe)表示異步時(shí)鐘或非擴(kuò)展的時(shí)鐘,顏色塊下方的列表也顯示了時(shí)序的詳細(xì)信息。

三、異步時(shí)鐘組
3.1 優(yōu)先級
異步時(shí)鐘和非擴(kuò)展時(shí)鐘是沒法正確地進(jìn)行時(shí)序分析,??在它們之間的時(shí)序路徑在分析時(shí)應(yīng)該使用set_clock_groups進(jìn)行忽略。相比于其他時(shí)序例外的命令,set_clock_groups的優(yōu)先級最高,如果需要對異步時(shí)鐘進(jìn)行分析,則不能對該時(shí)鐘使用set_clock_groups命令。
3.2 使用格式
在Timing Constraints窗口中,Clocks列下選擇Set Clock Groups

?進(jìn)入Set Clock Groups界面

Group name:設(shè)置時(shí)鐘組的名稱
Group 1: 添加屬于Group 1中的時(shí)鐘,點(diǎn)擊最右側(cè)的“+”可以設(shè)置多個(gè)組
The specified clocks are: 設(shè)置時(shí)鐘組里的時(shí)鐘與其他時(shí)鐘的關(guān)系,可為asynchronous,logically exclusive,physically exclusive。
-asynchronous:約束為異步時(shí)鐘組
-logically_exclusive:約束為邏輯互斥的時(shí)鐘組
-physically_exclusive:約束為物理線路互斥的時(shí)鐘組,設(shè)計(jì)中不能同時(shí)存在,最終表現(xiàn)的效果和-logically_exclusive是相同的。
約束命令示例:
3.3?asynchronous和exclusive
參數(shù)asynchronous表示創(chuàng)建異步時(shí)鐘組,使用場景如數(shù)據(jù)在不同速率的時(shí)鐘間通過FIFO進(jìn)行傳輸時(shí),使用異步時(shí)鐘組隔離時(shí)序關(guān)系。
參數(shù)exclusive表示時(shí)鐘組里的時(shí)鐘為互斥關(guān)系,例如,同一個(gè)節(jié)點(diǎn)中存在多個(gè)時(shí)鐘,當(dāng)同一時(shí)間內(nèi)只能一個(gè)時(shí)鐘生效,常用在時(shí)鐘多路復(fù)用上。
3.4?結(jié)果示例
以設(shè)計(jì)中存在4個(gè)時(shí)鐘clk1,clk2,clk3,clk4為例,時(shí)鐘之間均存在可分析的時(shí)序路徑。對時(shí)鐘進(jìn)行不同的時(shí)鐘組約束,約束后的分析結(jié)果如下,Y表示進(jìn)行時(shí)序分析,N表示不進(jìn)行時(shí)序分析,參數(shù)使用asynchronous。
a)場景1:

b)場景2
時(shí)鐘組內(nèi)部的時(shí)鐘間進(jìn)行時(shí)序分析,和外部的時(shí)鐘不會進(jìn)行時(shí)序分析

c)場景3
設(shè)置多個(gè)groups時(shí),groups之間的clk不會進(jìn)行時(shí)序分析

d)場景4
設(shè)置多個(gè)group時(shí),group內(nèi)部的時(shí)鐘間會進(jìn)行時(shí)序分析,group間不會進(jìn)行時(shí)序分析

總結(jié):set_clock_group中g(shù)roup內(nèi)部的時(shí)鐘只能組內(nèi)間進(jìn)行分析,不能跨組或與非約束中的時(shí)鐘進(jìn)行時(shí)序分析
四、參考資料
用戶手冊:ug903-vivado-using-constraints-en-us-2022.2.pdf
鏈接:https://pan.baidu.com/s/17AK_-J4wRXiFLtLTorlrwg?pwd=mylt?
提取碼:mylt?