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