本章節(jié)主要介紹一些簡(jiǎn)單的時(shí)序約束的概念,主要包括:
四種時(shí)序路徑
時(shí)序路徑的約束語(yǔ)句
輸入轉(zhuǎn)換時(shí)間與電容輸出負(fù)載模型
時(shí)序約束文件的簡(jiǎn)單編寫
關(guān)鍵詞:create_clock、 set_clock_uncertainty、 set_clock_latency、 set_clock_transition、 set_input_delay、 set_ouput_delay、 remove_input_delay、 report_clock、set_load、 set_input_ transition、 set_driving_cell
該章節(jié)在 DC 綜合流程中的位置如下。
4 種時(shí)序路徑
DC 進(jìn)行時(shí)序分析時(shí),都是基于同步時(shí)鐘下的設(shè)計(jì)。 假設(shè)數(shù)據(jù)都在時(shí)鐘上升沿到來(lái) (launch) 或輸出,則 DC 會(huì)將設(shè)計(jì)分割成 4 種時(shí)序路徑,如下圖所示:
Path1 指輸入到寄存器的時(shí)序路徑 (Input-to-Reg Path)
Path2 指寄存器到寄存器的時(shí)序路徑 (Reg-to-Reg Path)
Path3 指寄存器到輸出的時(shí)序路徑 (Reg-to-Output Path)
Path4 指輸入到輸出的時(shí)序路徑 (Input-to-Output Path)
這些路徑的起點(diǎn)和終點(diǎn)必須是固定的類型,說(shuō)明如下:
起點(diǎn)必須是非時(shí)鐘的輸入端 (input port other than a clock port),或觸發(fā)器 (寄存器) 的時(shí)鐘端。
終點(diǎn)必須是非時(shí)鐘的輸出端 (output port other than a clock port),或時(shí)序元件的非時(shí)鐘輸入端 (例如觸發(fā)器的 D 端)。
正常的靜態(tài)時(shí)序分析 (Static Timing Analysis, STA) 主要包括 3 個(gè)步驟:
1> 將設(shè)計(jì)分割成多個(gè)時(shí)序路徑
2> 計(jì)算每條時(shí)序路徑的延時(shí)
3> 時(shí)序路徑和數(shù)據(jù)到達(dá)時(shí)間 (arrival times) 做對(duì)比,判斷時(shí)序約束是否滿足 (meet)
Reg-to-Reg Path 約束
時(shí)序約束時(shí),時(shí)鐘的下降沿只有在雙邊沿時(shí)鐘設(shè)計(jì)中才會(huì)起作用。 所以一般設(shè)計(jì)的時(shí)序約束都與時(shí)鐘上升沿相關(guān)。
假設(shè)一個(gè)含有 Reg-to-Reg Path 的設(shè)計(jì)示意圖如下:
此設(shè)計(jì)中,時(shí)鐘周期 2ns,setup 為 0.2ns,則 FF2 的 clock 端到 FF3 的 D 端的最大延遲為:
Tmax = 2ns-0.2ns = 1.8ns
那么最簡(jiǎn)單的時(shí)鐘約束可以編寫為:
create_clock [get_ports Clk] -name sys_clk \\
-period 2 -waveform "0 1"
create_clock : DC Memory 中創(chuàng)建 clock 的命令 ;
[get_ports Clk] : 為創(chuàng)建的 clock 指定對(duì)應(yīng)設(shè)計(jì)中的源 clock,源 clock 不一定是頂層模塊中的 clock ,也可以是子模塊中的 clock ;
-name sys_clk : 將創(chuàng)建的 clock 命名為 sys_clk,可以省略 ;
-period 2 : 指定創(chuàng)建的 clock 周期為 2ns ;
-waveform "0 1" : 表示時(shí)鐘上升沿時(shí)刻為 0ns、下降沿時(shí)刻為 1ns,以此循環(huán),間接指定了占空比。 此選項(xiàng)也可以省略,則創(chuàng)建的時(shí)鐘默認(rèn)占空比為 50% 。
clock 模型
關(guān)于時(shí)鐘的基本概念,歡迎參考《Verilog 教程高級(jí)篇》中《5.2 時(shí)鐘簡(jiǎn)介》一節(jié)。
時(shí)鐘樹(shù)綜合 (Clock Tree Synthesis, CTS) 一般發(fā)生在 DC 之后的布局布線階段。 DC 階段不進(jìn)行時(shí)鐘樹(shù)綜合,不允許插入緩沖單元 (buffer)。 此時(shí)時(shí)鐘網(wǎng)絡(luò)認(rèn)為是理想的,且具有無(wú)限驅(qū)動(dòng)能力。
例如上述創(chuàng)建的 clock 模型中,時(shí)鐘特性如下:
上升沿、下降沿轉(zhuǎn)換時(shí)間為 0
時(shí)鐘偏移為 0
時(shí)鐘延遲為 0
但是還是建議在 DC 階段對(duì) clock 進(jìn)行建模,估算時(shí)鐘的各種特性,也為布局布線時(shí)的時(shí)鐘樹(shù)綜合留有時(shí)間裕量。 時(shí)鐘特性的建模主要包括:時(shí)鐘偏移、時(shí)鐘延遲與時(shí)鐘轉(zhuǎn)換時(shí)間的估算模擬。
時(shí)鐘偏移建模
時(shí)鐘偏移模型通過(guò)設(shè)置時(shí)鐘的不確定度來(lái)描述。 時(shí)鐘的不確定度參數(shù),也包含了時(shí)鐘抖動(dòng) (jitter)、裕量 (margin) 等參數(shù)信息。
假設(shè)某個(gè)設(shè)計(jì)示意圖如下,時(shí)鐘偏移量為 0.14ns,建立時(shí)間為 0.08ns,則時(shí)鐘不確定度的設(shè)置描述如下:
create_clock [get_ports Clk] -name sys_clk -period 2
# -setup 0.14 表示時(shí)鐘偏移設(shè)置為 0.14
set_clock_uncertainty -setup 0.14 [get_clocks sys_clk]
FF1 到 FF2 的最大延遲,即 FF2 的建立時(shí)間的檢查時(shí)刻為:
2 - 0.14 - 0.08 = 1.78ns
設(shè)置時(shí)鐘不確定度時(shí),也可以指定不同的時(shí)鐘域 (clock domain) :
set_clock_uncertainty -setup 0.14 \\
-from [get_clocks clk1] -to [get_clock clk2]
時(shí)鐘延遲建模
時(shí)鐘延遲模型分為 2 種:時(shí)鐘網(wǎng)絡(luò)延遲 (network latency) 與時(shí)鐘源延遲 (source latency)。
時(shí)鐘網(wǎng)路延遲模型定義了從 clock port 或 pin 端 (create_clock 時(shí)指定的點(diǎn)) 到寄存器 clock 端的延遲。 時(shí)鐘源延遲定義了實(shí)際時(shí)鐘原點(diǎn) (clock origin) 到 clock port 或 pin 端的延遲。 示意圖如下:
如上圖所示,假設(shè)時(shí)鐘周期為 10ns,source latency 為 3ns,network latency 為 1ns,則時(shí)鐘延遲的設(shè)置描述如下:
create_clock -period 10 [get_ports CLK]
# -source 指設(shè)定 source latency,不指定時(shí)設(shè)置 network latency
set_clock_latency -source -max 3 [get_clocks CLK]
set_clock_latency -max 1 [get_clocks CLK]
set_clock_latency 命令表示設(shè)置時(shí)鐘的 latency 屬性,指定 -source 選項(xiàng)時(shí)表示設(shè)置 source latency,不指定時(shí)表示設(shè)置 network latency。 -max 表示指定延遲最大值,當(dāng)然也可以使用 -min 表示指定時(shí)鐘延遲最小值。
布局布線階段,時(shí)鐘樹(shù)綜合之后的具有一定實(shí)際延遲的時(shí)鐘稱為 propagated clock。 DC 階段不進(jìn)行 CTS,所以需要設(shè)置 network latency 。 布局布線階段的 CTS 之后,時(shí)鐘樹(shù)具有實(shí)際的 latency,此時(shí)設(shè)置 network latency 的語(yǔ)句要改成:
# 布局布線時(shí),network latency 需要設(shè)置實(shí)際的 propagated clock
# set_clock_latency -max 1 [get_clocks CLK]
set_propagated_clock [get_ports CLK]
時(shí)鐘轉(zhuǎn)換時(shí)間建模
時(shí)鐘從上升沿跳變到下降沿,或者從下降沿跳變到上升沿時(shí),并不是"直上直下" 的完成電平跳變,而是 "斜坡式" 需要一個(gè)過(guò)渡時(shí)間完成電平跳變。 這個(gè)過(guò)渡時(shí)間稱之為時(shí)鐘的轉(zhuǎn)換時(shí)間 (transition),示意圖如下。
假設(shè)某一設(shè)計(jì)中時(shí)鐘的轉(zhuǎn)換時(shí)間最大值為 0.1ns,則 clock transition 的設(shè)置語(yǔ)句描述如下:
set_clock_transition -max 0.1 [get_clocks CLK]
時(shí)鐘模型小結(jié)
下圖顯示了時(shí)鐘不確定度、時(shí)鐘延遲、時(shí)鐘轉(zhuǎn)換時(shí)間的示意圖,以及在 DC 和布局布線階段的設(shè)置差異性。
uncertainty、latency 以及 transition 等時(shí)鐘特性影響的是時(shí)序路徑的長(zhǎng)度。 latency 作用于所有的時(shí)序路徑,所以時(shí)序分析時(shí)會(huì)產(chǎn)生一種“抵消”的效果,不影響時(shí)序分析結(jié)果 (下一節(jié)介紹)。
工程設(shè)計(jì)時(shí),往往使用 uncertainty 與 margin (時(shí)間裕量) 來(lái)進(jìn)行時(shí)鐘建模,避免繁瑣的設(shè)置,也能為布局布線時(shí)的 CTS 留有一定的時(shí)長(zhǎng)調(diào)節(jié)范圍。
例如,帶有 margin 和 uncertainty 的時(shí)鐘模型描述如下:
set UNCERTAINTY 0.3
# 留有 30% 的裕量,作用在時(shí)鐘周期上
set MARGIN 0.3
set PERIOD 10
create_clock [get_ports CLK] -period [expr $PERIOD*(1-$MARGIN)]
# 時(shí)鐘模型只設(shè)置不確定度參數(shù)
set_clock_uncertainty -setup $UNCERTAINTY [get_clocks CLK]
-
寄存器
+關(guān)注
關(guān)注
31文章
5425瀏覽量
123517 -
約束
+關(guān)注
關(guān)注
0文章
82瀏覽量
12919 -
時(shí)序約束
+關(guān)注
關(guān)注
1文章
118瀏覽量
13634 -
時(shí)序路徑
+關(guān)注
關(guān)注
0文章
12瀏覽量
1446 -
同步時(shí)鐘
+關(guān)注
關(guān)注
0文章
67瀏覽量
3442
發(fā)布評(píng)論請(qǐng)先 登錄
VIVADO時(shí)序約束及STA基礎(chǔ)
FPGA的IO口時(shí)序約束分析
FPGA時(shí)序約束的基礎(chǔ)知識(shí)

FPGA主時(shí)鐘約束詳解 Vivado添加時(shí)序約束方法

FPGA時(shí)序約束之衍生時(shí)鐘約束和時(shí)鐘分組約束
FPGA I/O口時(shí)序約束講解

一文詳解Vivado時(shí)序約束

時(shí)序約束與時(shí)序分析 ppt教程
時(shí)序約束用戶指南
時(shí)序約束的相關(guān)知識(shí)(二)

如何在Vivado中添加時(shí)序約束

評(píng)論