Cross 函數(shù)經(jīng)常被用來處理仿真波形,從而獲得波形通過某個特定閾值時對應(yīng)的x軸數(shù)值。
在Number of occurrences”限定為“single”的情況下,通過變換“Edge Number”,能得到何種功效呢?
“Edge Number”的含義
“Edge Number”你填寫過什么值呢?它的含義是什么呢?
簡單而言,“Edge Number”指定cross函數(shù)將返回第幾個信號沿通過給定閾值時對應(yīng)的x軸數(shù)值。當(dāng)這個參數(shù)為正數(shù)時, 從左往右數(shù) ;當(dāng)參數(shù)為負(fù)數(shù)時, 從右往左數(shù) 。例子如下圖所示:
理論看完了,大家可以想想“Edge Number”為啥會如此設(shè)置,有哪些具體應(yīng)用實例呢?尤其還能寫“負(fù)數(shù)”的“Edge Number”。
例子****1:POR的釋放時間
普通青年知道的。。。
POR(Power On Reset)作為一個常用的模擬模塊,用來檢測電源上電的情況。在上電過程中,當(dāng)電源電壓小于給定閾值時,POR輸出高電平。當(dāng)電源電壓高于給定閾值時,POR輸出低電平。
當(dāng)POR的輸出沒有毛刺(Glitch)的時候(如下圖所示),可以通過獲取第一個下降沿的時間來獲得POR的釋放時間。對應(yīng)的cross函數(shù)為:
cross(VT(“/POR”), 0.5, 1,“falling”, nil, nil, nil)
資深工程師所考慮的。。。
但是當(dāng)POR的輸出有毛刺時,特別是毛刺的個數(shù)不確定時(受到工藝,電壓或者溫度的影響),那么通過使用負(fù)值的“Edge Number”參數(shù)來獲取最后一個下降沿,則是一個很好的方法。
cross(VT(“/POR”), 0.5, -1 ,“falling”, nil, nil, nil)
例子2: 閉環(huán)負(fù)反饋系統(tǒng)的相位裕度
普通青年知道的。。。
對于一個閉環(huán)負(fù)反饋系統(tǒng),一個重要指標(biāo)就是系統(tǒng)的穩(wěn)定性。這個指標(biāo)通常是通過“相位裕度”來衡量的。
相位裕度的計算是,當(dāng)環(huán)路增益為1(0dB)時,對應(yīng)的相移和180度之間的差值。大多數(shù)仿真工具中,默認(rèn)計算相位裕度的方法為(例如:調(diào)用“phase Margin”函數(shù)):
如在下圖所示的開環(huán)頻響波形中:
首先獲得單位增益頻率,UGF, (Unit Gain Frequency)
UGF = cross(Gain, 0, 1 ,“falling”, nil, nil, nil)
此后計算相位裕度
PM = 180 – (Phase(0) –Phase(UFG))
其中Phase(x)是給定頻率下,對應(yīng)的相移。
這里需要注意的是,在獲取UGF時,是通過cross函數(shù)選則增益曲線中從左往右的第一個過零點。
資深工程師所考慮的。。。
下面考慮這樣一種情況(簡化起見,相位曲線沒有做出針對性調(diào)整)
如上圖所示,當(dāng)增益曲線隨頻率增加,穿過0dB線后,由于高頻零極點的存在,再次上升,并產(chǎn)生一個大于0dB的尖峰。
如果仍然采用默認(rèn)的相位裕度計算方法,以從左往右的第一個過零點為UGF,那么在上述情況下,會獲得一個錯誤的相位裕度。并且因為這個開環(huán)增益在更高頻率上仍有單位增益,此時可能由于大于180度的相移,而最終造成閉環(huán)后系統(tǒng)開始震蕩。
解決方法很簡單,僅僅需要把cross函數(shù)中的“Edge Number”參數(shù)從“1”,改為“-1”即可:
UGF = cross(Gain, 0, -1 ,“falling”, nil, nil, nil)
PM = 180 – (Phase(0) –Phase(UFG))
這樣,永遠(yuǎn)是最高頻的一個增益過零點被記為UGF。
在上面的例子中,“EdgeNumber”的參數(shù)可以為正數(shù),也可以為負(fù)數(shù),那么這個參數(shù)可不可以為零呢?答案是可以的。
對應(yīng)開篇舉得正弦波的例子,當(dāng)使用“0”作為cross函數(shù)的參數(shù)時,函數(shù)返回的是一個“l(fā)ist”,里面包含了波形所有通過給定閾值時對應(yīng)的x軸的數(shù)值,而次序是從左往右。如下圖所示的CIW窗口。Cross函數(shù)和他的返回值依次給出。
這里簡單說明下,“l(fā)ist”是SKILL語言中的一個數(shù)據(jù)類型,可以理解為數(shù)列。而Cadence中的API都是通過SKILL語言給出的。而且大家常用的OCEAN也是SKILL中的一部分。
如果以“0”作為“EdgeNumber”參數(shù)的cross函數(shù),在ADE(L/XL/GXL)的表達式中直接使用,會得到“evalerr”。這是因為“l(fā)ist”不是ADE(L/XL/GXL)接受的數(shù)據(jù)類型。
在ADE(L/XL/GXL)可以輸出的結(jié)果要么是波形(waveform),或者是個實數(shù)。在上面的截圖中,cross函數(shù)是在CIW窗口中直接輸入的,這個時候Cadence把他當(dāng)作SKILL腳本來處理。這里返回值的類型不受限制。
那么以“0”作為“EdgeNumber”參數(shù)的cross函數(shù)有用么?答案是:非常有用。
例子3:POR的輸出是否有毛刺
資深玩家所知道的。。。
為什么要設(shè)置函數(shù)來檢查POR的輸出是否有毛刺呢?第一個是為了效率,例如在處理大量仿真結(jié)果的時候(2000 個Monte Calro仿真),已經(jīng)無法來肉眼檢查每一個波形;第二個是為了可靠性,假如毛刺很靠近第一個下降沿,如果沒有充分的放大,就會很容易的漏掉。
如何來實現(xiàn)檢查毛刺的函數(shù):
length函數(shù)是SKILL語言中的一個基本函數(shù),它可以用來獲取一個“l(fā)ist”中有多少個項。那么通過length和cross函數(shù)的組合:
length( cross( VT(“/POR”), 0.5, 0 , “falling”, nil, nil, nil) )
則可以獲取POR的輸出中有多少個下降沿。
當(dāng)下降沿個數(shù)大于1時,則表示有毛刺的產(chǎn)生。
除此之外,還可以利用如果以“0”作為“Edge Number”參數(shù)的cross函數(shù)獲取電荷泵每個周期輸出電荷的數(shù)量,然后以波形的方式輸出。
由此可以很直觀的觀察各種外界環(huán)境(PVT)對電荷泵輸出能力的影響。這樣的后處理會稍微復(fù)雜一下,沒有辦法通過幾個簡單函數(shù)的組合在ADE的表達式中實現(xiàn)。
需要通過SKILL語言,把他包裝成“User Defined Skill Function”,然后在Calculator中調(diào)用。
-
仿真器
+關(guān)注
關(guān)注
14文章
1031瀏覽量
84736 -
電源電壓
+關(guān)注
關(guān)注
3文章
1061瀏覽量
24522 -
Cross
+關(guān)注
關(guān)注
0文章
2瀏覽量
6794
發(fā)布評論請先 登錄
評論