DC靜態時序分析之時鐘篇

DC靜態時序分析之時鐘篇

博主微信:flm13724054952,不懂的有疑惑的也可以加微信諮詢,歡迎大家前來投稿,謝謝!

引言介紹

在芯片設計或者FPGA設計裏面,根據有無時鐘,將電路設計分爲時序邏輯電路設計跟組合邏輯電路設計兩部分。對設計的電路進行時序分析來說,時鐘是不可或缺的。本文主要介紹關於在靜態時序分析中時鐘的基礎知識跟常用SDC指令。

基礎知識

在介紹時鐘的詳細指令前,先介紹在靜態時序分析中關於時鐘的一些基礎知識跟概念,例如clock tree(時鐘樹),clock jitter(時鐘抖動),clock latency(時鐘延遲),clock skew(時鐘偏斜),clock uncertainty(時鐘不確定),clock transition(時鐘轉化),clock gating(時鐘門控),clock fanout(時鐘扇出)。

clock tree(時鐘樹)

clock tree時鐘樹是指從時鐘源source出發,經過佈局佈線通過各種buffer到達不同時序模塊(時序器件)而形成類似一種樹的網絡結構就叫做時鐘樹。
作用:通常可以通過對時鐘的佈局佈線來達到減少時鐘對時序模塊的skew影響,使時序更加收斂;也可以通過與clock gating結合,控制模塊的打開關閉,起到節省電路功耗的作用。

clock latency(時鐘延遲)

clock latency時鐘延遲指的是在時鐘源出發到某個時鐘器件觸發端的延遲,時鐘源可以爲芯片外部晶振或者芯片內部的PLL鎖相環。例如下圖所示這裏的clock latency爲單獨指clka或者clkb。
在這裏插入圖片描述

clock jitter(時鐘抖動)

clock jitter時鐘抖動是指時鐘在週期上存在頻率的不確定性,叫做時鐘抖動; 通常造成時鐘抖動是因爲時鐘源晶振本身的穩定性,又或者工作環境的溫度,電壓對其造成了影響。
影響:通常clock jitter跟clock skew是影響時鐘信號穩定性的主要因素,對電路的時序分析也存在影響。
在這裏插入圖片描述

clock skew(時鐘偏斜)

clock skew時鐘偏斜指的是從時鐘源出發到不同時序器件之間的延遲。例如下圖所示,clock latency單指的是clka或者clkb,而clock skew指的是時鐘經過不同buffer跟走線到達不同時序器件rega跟clkb的延遲,這裏的clock skew指的是clk到達寄存器觸發端的clka與clkb的沿的相位差。
影響:skew 通常是時鐘相位上的不確定,造成 skew 的原因很多。由於時鐘源到達不同寄存器所經歷路徑的驅動和負載的不同,時鐘邊沿的位置有所差異,因此就帶來了skew。
在這裏插入圖片描述

clock uncertainty(時鐘不確定)

clock uncertainty時鐘不確定性通常指的是時鐘在時序器件引腳的不確定性,可以直接理解爲clock skew跟clock jitter的和。
影響:通常來說clock uncertainty越小,時鐘的建立時間餘量就越大。約容易滿足時序路徑上的建立時間,一般來說uncertainty一般爲時鐘週期的10%到30%。
一般可以設置set_clock_uncertainty 10%T(30%T)…

clock transition(時鐘轉化)

clock transition通常指的是clock 信號的 slew 時間。分爲上升沿時間和下降沿時間。
在這裏插入圖片描述

clock gating(時鐘門)

clock gating時鐘門指的是,從時鐘源到模塊時鐘的時鐘樹枝裏“與”各模塊的控制使能信號,通過使能信號來控制各模塊的時鐘是否打開。從而達到將一些不需要一直工作的模塊停掉,達到節省電路功耗的目的。

clock fanout(時鐘扇出)

clcok fanout時鐘扇出指的是時鐘源通過各級buff到達各時序模塊的個數。
常用指令set_max_fanout 20 [get_clock clk] ##這裏20指的是你電路設計扇出到了多少時序器件。

時鐘約束

生成主時鐘

create_clock -period 40 -waveform [0 20] -name clk [get_ports clk]
上述指令是生成周期爲40ns頻率爲25MHZ的時鐘clk;生成時鐘指令的各參數介紹如下圖所示:
生成指令的參數介紹
如果生成多個主時鐘時的相位是不一致異步的,那麼就要用set_clock_groups來對不同主時鐘之間的相位約束;
例如下圖所示:當時鍾wbClk跟bftClk兩個主時鐘的相位是異步的;應當這樣子來進行約束:
create_clock -period 50 wbClk [get_ports wbClk]
create_clock -period 20 bftClk [get_ports bftClk]
set_clock_groups -asynchronous -group wbClk -group bftClk
當如果兩個主時鐘wbClk跟bftClk的相位是一致的,即可以不用set_clock_groups來進行約束。
在這裏插入圖片描述

生成同源時鐘

正如上面介紹所說create_clock是生成主時鐘的(頂層的),工程師也可以通過一種方式來生成自定義時鐘給模塊電路,好處就是可以使主時鐘跟自定義時鐘同源同相而避免了上面所說的存在時鐘的skew的影響。如下所示apcnt_top爲頂層,apcnt_clk爲子模塊。clkin到頂層跟clkin到子模塊,存在skew的延遲。而通過create_generate_clock可以使頂層跟子模塊同源同相。減少skew的影響。
module apcnt_top

apcnt_clk
u_apcnt_clk
();

endmdoule
module apcnt_clk(clkin ,clk_a);

always@(posedge clkin or negedge nrst)
begin
if(!nrst)
clk_a <= 0;
else
clk_a <= ~clk_a;
end
always@(posedge clk_a)

endmodule
具體約束指令如下所示:
create_clock -period 50 -name clk_in [get_ports clkin]
create_generate_clock -divide_by 1 -source clkin -name clk_in [get_pins u_apcnt_clk\clkin]
又或者
create_clock -period 50 -name clk_in [get_ports clkin]
create_generate_clock -multiple_by 1 -source clkin -name clk_in [get_pins u_apcnt_clk\clkin]

生成虛擬時鐘

一般來說只有在創建輸入輸出約束的時候纔會創建虛擬時鐘。與主時鐘不同的就是,虛擬時鐘是自己內部電路設計產生的捕獲時鐘,所以沒有對應的物理引腳。例如下面代碼所示,clkin爲有物理頁腳的輸入主時鐘,而clk_a只是我們內部電路設計的捕獲虛擬時鐘,沒有對應的port。
always@(posedge clkin or negedge nrst)
begin
if(!nrst)
clk_a <= 0;
else
clk_a <= ~clk_a;
end
always@(posedge clk_a)

也就是來說,對這類虛擬時鐘在捕獲數據時,應當考慮對他的約束,具體約束指令如下所示:
create_clock -period 10 -name clkin [get_ports clk_in]
create_clock -period 20 -name clk_a
set_input_delay 4 -clock clk_a [get_ports din]
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章