通常RTL設(shè)計(jì)要求對(duì)芯片/module的輸入信號(hào)進(jìn)行reg_in打拍處理,對(duì)芯片/module的輸出也要求做reg_out打拍處理,這是良好的代碼習(xí)慣,為時(shí)序收斂留下足夠裕量,也避免頂層例化綜合后的子模塊時(shí)出現(xiàn)模塊間IO時(shí)序不滿足的情況。綜合階段可根據(jù)設(shè)計(jì)、工藝需求,設(shè)置IO的input/output為時(shí)鐘周期的40%-60%。
但是,芯片timing sign off階段會(huì)偶爾遇到IO時(shí)序少量違例,比如,輸入reg的hold違例、輸出reg的setup違例,本質(zhì)原因是EDA時(shí)序分析工具會(huì)在輸出輸入外部假定一個(gè)理想化的不帶clock propagation time的寄存器做時(shí)序分析。
比如,在set_propagated_clock命令后,下圖左邊寄存器的CLK2端就不帶clock propagation time,而CLK1(與CLK2同頻同相)就帶insertion delay, 擁有時(shí)鐘latency,這樣輸入IO的hold違例就可能發(fā)生,setup反而更容易滿足。
同理,在set_propagated_clock命令后,輸出IO的setup違例就可能發(fā)生,hold反而更容易滿足。
以輸出IO的register的setup建立時(shí)間為例,launch clock的data path上由于存在1.5ns的propagation time/clock latency,發(fā)生了時(shí)序違例。這是因?yàn)橥獠考俣ǖ膔egister是沒有propagation time/clock latency。而保持時(shí)間則反而容易滿足。
虛擬時(shí)鐘應(yīng)運(yùn)而生,那么如何創(chuàng)建虛擬時(shí)鐘?其有什么好處呢?
create_clock -name vclk -period 10
注意,創(chuàng)建虛擬時(shí)鐘不用指定clk pin/port。
set_input_delay8-clockvclk[get_portsdata_in ] set_output_delay8-clockvclk[get_portsdata_out]EDA工具會(huì)基于虛擬時(shí)鐘,根據(jù)芯片/模塊內(nèi)部時(shí)鐘的實(shí)際insertion delay評(píng)估IO外部假定寄存器的propagation time,這樣時(shí)序分析就可以規(guī)避不必要的“假”違例,當(dāng)然也可以不指定virtual clock,只是每次分析時(shí)序時(shí)都需要檢查并排除這種“假”違例,影響了工作效率。
在約束set_input_delay/set_output_delay時(shí),可以指定真實(shí)時(shí)鐘CLKP,也可以指定虛擬時(shí)鐘vCLKP,并且創(chuàng)建與CLKP同頻率的虛擬時(shí)鐘vCLKP時(shí),無需指定時(shí)鐘端口,參考腳本如下:
setperiod5 create_clock-nameCLKP-period$period[get_portsCLKP] create_clock-namevCLKP-period$period
在約束set_input_delay/set_output_delay時(shí),是否使用虛擬時(shí)鐘在CTS之前是沒有區(qū)別的,可以認(rèn)為都是理想時(shí)鐘,畢竟clock tree還沒實(shí)際建立,時(shí)序評(píng)估還不能使用propagated clock。而在CTS之后就有如下需要注意的地方:
1)如果指定的是真實(shí)時(shí)鐘,那么下圖中的Virtual flip-flop虛擬寄存器的時(shí)鐘延遲就被忽略了,或者說該虛擬寄存器會(huì)被EDA工具認(rèn)為是理想模型,不帶clock propagated time。 2)如果指定的是虛擬時(shí)鐘,工具往往可以根據(jù)內(nèi)部真實(shí)時(shí)鐘的平均延遲來估算外部虛擬寄存器的時(shí)鐘延遲,更加合理。
為了讓頂層的時(shí)序更容易滿足,一般會(huì)在IN2REG和REG2OUT過約束,可設(shè)置外部延遲為60%的時(shí)鐘周期,給內(nèi)部的數(shù)據(jù)路徑留40%的空間。具體根據(jù)實(shí)際項(xiàng)目需求、設(shè)計(jì)規(guī)格、工藝條件等決定。
另外,set_input_delay要指定-max和-min選項(xiàng),分別對(duì)應(yīng)setup和hold時(shí)序檢查,如果只指定其中一個(gè)選項(xiàng)或都不指定,那么工具在檢查setup和hold時(shí),會(huì)使用相同的值。
#參考值為0.6,根據(jù)實(shí)際情況調(diào)整 set_input_delay[expr0.6*$period]-clockvCLKP[get_portsCIN]
-
芯片
+關(guān)注
關(guān)注
459文章
51952瀏覽量
433987 -
寄存器
+關(guān)注
關(guān)注
31文章
5402瀏覽量
122871 -
RTL
+關(guān)注
關(guān)注
1文章
388瀏覽量
60533 -
虛擬時(shí)鐘
+關(guān)注
關(guān)注
0文章
5瀏覽量
6639
原文標(biāo)題:為什么要用虛擬時(shí)鐘Virtual clock?
文章出處:【微信號(hào):全棧芯片工程師,微信公眾號(hào):全棧芯片工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
虛擬時(shí)鐘指數(shù)逼近的無線傳感器網(wǎng)絡(luò)時(shí)鐘同步協(xié)議
創(chuàng)建ubuntu虛擬機(jī)
如何使用虛擬儀器技術(shù)創(chuàng)建合成儀器
2012 labview創(chuàng)建虛擬硬件問題
FPGA沙龍:SDR源同步接口時(shí)序約束方法沙龍精彩內(nèi)容回顧!
如何利用NAS網(wǎng)絡(luò)存儲(chǔ)創(chuàng)建虛擬主機(jī)?
項(xiàng)目的創(chuàng)建及虛擬環(huán)境的配置
如何創(chuàng)建虛擬機(jī)?
Imagination和Mobica合作創(chuàng)建汽車虛擬化環(huán)境

FPGA虛擬時(shí)鐘的使用方法

創(chuàng)建具有更寬LCD TFT屏幕的時(shí)鐘

創(chuàng)建Root權(quán)限虛擬環(huán)境

創(chuàng)建Arduino字時(shí)鐘

評(píng)論