時(shí)序約束之時(shí)鐘約束詳解
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在同步電路設(shè)計(jì)中,各功能邏輯單元之間的數(shù)據(jù)傳輸由一個(gè)同步信號(hào)控制,這個(gè)執(zhí)行統(tǒng)一指揮的信號(hào)就是時(shí)鐘信號(hào),因此需要在設(shè)計(jì)之初創(chuàng)建時(shí)鐘,基于該時(shí)鐘頻率進(jìn)行優(yōu)化設(shè)計(jì),使設(shè)計(jì)性能達(dá)到時(shí)序收斂的目的。
創(chuàng)建時(shí)鐘
時(shí)鐘信號(hào)為一個(gè)周期性信號(hào),定義時(shí)鐘需要包括以下主要信息:
(1)時(shí)鐘源點(diǎn)
時(shí)鐘源點(diǎn)可以根據(jù)情況定義為設(shè)計(jì)中一個(gè)端口,一個(gè)網(wǎng)絡(luò),也可以是一個(gè)邏輯單元的PIN腳。為端口時(shí)用[get_ports 端口名],為網(wǎng)絡(luò)時(shí)用[get_nets 網(wǎng)絡(luò)名],為PIN腳時(shí)用[get_pins 引腳名]。
(2)時(shí)鐘周期
時(shí)鐘周期定義為時(shí)鐘的震蕩周期,為時(shí)鐘頻率的倒數(shù)。時(shí)鐘周期是時(shí)序分析中最基本的、最小的時(shí)間單元。用{-period period_value}表示
(3)時(shí)鐘占空比
時(shí)鐘占空比主要定義時(shí)鐘高低電平在一個(gè)時(shí)鐘周期內(nèi)的分布情況。用-[waveform edge_list]表示
通過使用SDC命令creat_clock來(lái)創(chuàng)建時(shí)鐘,比如通過該命令定義一個(gè)從CLK端口輸出并且時(shí)鐘周期為10、占空比為50%的時(shí)鐘信號(hào),命令如下。
creat_clock -period 10 -waveform { 0 5 } [ get_ports clk ]
如上圖所示,該命令可以對(duì)所有內(nèi)部觸發(fā)器到觸發(fā)器類型的路徑進(jìn)行約束。
(4)命名時(shí)鐘
每個(gè)時(shí)鐘定義都會(huì)給時(shí)鐘信號(hào)命名。用 -name選項(xiàng)可以指定一個(gè)字符串作為時(shí)鐘名稱。當(dāng)-name選項(xiàng)沒有明確指定字符串并且時(shí)鐘已被聲明時(shí),工具將指定自己的名字給時(shí)鐘信號(hào)命名。時(shí)鐘信號(hào)一旦被定義并且命名,所有其他依賴于此時(shí)鐘信號(hào)的SDC指令只需要提到時(shí)鐘信號(hào)的名稱,而不用提供其他任何特征。當(dāng)提到時(shí)鐘信號(hào)名字的時(shí)候,時(shí)鐘信號(hào)的所有特征就都知道了。時(shí)鐘名稱提供了更加簡(jiǎn)單的方法來(lái)統(tǒng)稱時(shí)鐘信號(hào)的所有特征。
下面以定義一個(gè)占空比不是50%的時(shí)鐘為例。
creat_clock -name BDYCLK -period 15 -waveform {5 12} [get_ports CLK]
時(shí)鐘信號(hào)波形如下圖所示。
(4)時(shí)鐘轉(zhuǎn)換延時(shí)
時(shí)鐘轉(zhuǎn)換延時(shí)定義時(shí)鐘在高低電平狀態(tài)下切換所需要的延時(shí)。
通過SDC命令set_clock_transition來(lái)定義時(shí)鐘轉(zhuǎn)換延時(shí)信息,示例命令如下:
set_clock_transition -rise 0.1 [get_clocks clk]
set_clock_transition -fall 0.12 [get_clocks clk]
以上命令定義名為clk的時(shí)鐘信號(hào)上升轉(zhuǎn)換延時(shí)為0.1ns,下降轉(zhuǎn)換延時(shí)為0.12ns。
(5)時(shí)鐘不確定性
由于實(shí)際時(shí)鐘本身與理想時(shí)鐘有一定的誤差,所以通過時(shí)鐘不確定來(lái)涵蓋這些實(shí)際的導(dǎo)致誤差的因素,比如時(shí)鐘抖動(dòng)、時(shí)鐘偏斜等因素。
由于芯片內(nèi)部各個(gè)觸發(fā)器的位置不同,導(dǎo)致每個(gè)觸發(fā)器到時(shí)鐘源點(diǎn)的距離不相同,所以時(shí)鐘源點(diǎn)的時(shí)鐘信號(hào)到達(dá)每個(gè)觸發(fā)器的時(shí)間與理想情況的時(shí)間有誤差。如下圖所示,假設(shè)路徑P1的時(shí)間為0.5ns,路徑P2的時(shí)間為1ns,路徑P3的時(shí)間為1.2ns,路徑P4的時(shí)間為1.3ns。那么,時(shí)鐘不確定性的延時(shí)為0.8ns。
通過使用SDC命令set_clock_uncertainty來(lái)定義時(shí)鐘不確定性信息,示例如下:
set_clock_uncertainty -setup 0.2 [get_clocks clk]
set_clock_uncertainty -hold 0.05 [get_clocks clk]
以上命令定義名為CLK時(shí)鐘信號(hào)的不確定性為:建立時(shí)間為0.2ns,保持時(shí)間為0.05ns。其結(jié)果如下圖所示。
設(shè)計(jì)中可能存在由不同的時(shí)鐘信號(hào)驅(qū)動(dòng)的時(shí)序路徑,如下圖所示。
不同時(shí)鐘域之間也可以定義時(shí)鐘不確定性,示例命令如下:
set_clock_uncertainty -from CLK1 -to CLK2 -hold 0.05
set_clock_uncertainty -from CLK2 -to CLK1 -hold 0.05
set_clock_uncertainty -from CLK1 -to CLK2 -setup 0.1
set_clock_uncertainty -from CLK2 -to CLK1 -setup 0.1
以上命令定義名為CLK1和CLK2時(shí)鐘之間的不確定性為:建立時(shí)間為0.1ns,保持時(shí)間為0.05ns。
(6)時(shí)鐘延遲
時(shí)鐘信號(hào)從時(shí)鐘源輸出端到達(dá)時(shí)序單元時(shí)鐘輸入端是需要傳播時(shí)間的。時(shí)鐘延遲由時(shí)鐘源點(diǎn)到達(dá)時(shí)鐘定義的端口的延時(shí)(source latency)和時(shí)鐘定義的端口到時(shí)序單元時(shí)鐘輸入端的延時(shí)(network latency)兩部分組成,如下圖所示。
通過使用SDC命令set_clock_latency來(lái)定義時(shí)鐘延遲信息,示例命令如下:
set_clock_latency 1.8 -rise [all_clocks]
set_clock_latency 2.1 -fall [all_clocks]
以上命令定義了時(shí)鐘網(wǎng)絡(luò)延遲:上升延遲為1.8ns,下降延遲為2.1ns。
set_clock_latency 0.851 -source -min [get_clocks CLK]
set_clock_latency 1.322 -source -max [get_clocks CLK]
以上命令定義了時(shí)鐘源信號(hào)到達(dá)時(shí)鐘CLLK輸出端的延時(shí),最大延遲為1.322ns,最小延遲為0.851ns。
時(shí)鐘網(wǎng)絡(luò)延遲與時(shí)鐘源延遲的一個(gè)明顯區(qū)別是,時(shí)鐘網(wǎng)絡(luò)延遲是時(shí)鐘樹生成前的設(shè)置。當(dāng)實(shí)際時(shí)鐘樹生成后,時(shí)鐘網(wǎng)絡(luò)延遲的設(shè)置將會(huì)通過命令set_propagated_clock被時(shí)鐘樹的實(shí)際結(jié)果替代,而時(shí)鐘源延遲會(huì)一直存在,即使使用實(shí)際的時(shí)鐘樹傳播延時(shí)信息。





