顯示具有 RF circuit 標籤的文章。 顯示所有文章
顯示具有 RF circuit 標籤的文章。 顯示所有文章

2012年11月25日 星期日

將sonnet檔轉換到virtuoso上

做高頻電路討厭的就是,頻率太高的情況下,寄生的電容電感會在電路各處藏汙納垢(XD)。
所以在設計的過程,就需要跑很多電磁模擬,把這些寄生的效應一併考慮到模擬之中。
(會吃你一堆電腦的記憶體跟花一堆時間,這也是我為什麼有時間打這篇文章的原因,哈哈)
麻煩就在於,每次在電磁模擬軟體(實驗室用Sonnet)上畫完架構,然後開始跑,確定結果沒錯之後,又要在電路下線的軟體(實驗室用Virtuoso)上畫一遍。
最近學到,該怎麼把sonnet上的檔案匯到virtuoso上面,在這裡記錄一下。

理論上,我們只要把sonnet檔案匯出到GDSII檔,這是IC layout通用格式,幾乎所有的工具都支援;之後再從virtuoso讀入GDSII檔案即可。
遇到的麻煩是,在進行電磁模擬時,我們會在sonnet裡面建好電路一層一層的架構,但Virtuoso的環境卻是依所用的製程而定,它完全看不懂我們是在講什麼?
所以如果直接匯入的話,就會變成有些層virtuoso不知道該對應給誰,變得完全無法編輯,總之會出現各式各樣的問題。
幸好Virtuoso並沒有這麼笨,在匯入檔案的選項中,可以自行指定層與層的Map file,透過這個,理當能「無損的」將sonnet檔案匯入virtuoso中。

1. sonnet to GDSII:
在sonnet中,是將電路板切成一層一層不同的介質,然後可以在每層介質中填入金屬,去摸擬其中的電磁效應,我們要的就是這金屬的pattern。
下面是一個sonnet層數設定的截圖,從最上面的空氣……到最底層的substrate

合理的推斷,GDSII也是將一層一層的資料給記錄下來,但要怎麼知道?
我用的是開源的klayout打開gds下去看,得到如下的畫面:

發現到sonnet轉gds的規則很簡單,原本在sonnet設在第幾層的金屬,就會被轉到gds第幾層;很可惜的,sonnet中層與層間連接的via的資訊全都消失了,不過很多金屬不用重畫還是可以省下很多時間。

 2. GDSII to Virtuoso:
有了上面的資料之後,再來就是編寫map file: 一個map file 的格式如下:
#Cadence layer name  Cadence layer purpose Stream layer number Stream data type
#
TopMetal2 drawing 0-63 0-63

每一行分為四個子資料,分別是:在此製程中的某層的名稱;該層的用途;對應在stream檔中的層數;該層的資料。
像上面這種寫法,會把0-63層的資料都變成TopMetal2。
purpose的部分,大概有drawing, pin, net三種可以選擇,但從sonnet過來的話大概都是要要轉成drawing的。
stream layer number就是方才用klayout看到的layer編號;stream data type這部分則不是很清楚,但sonnet轉出來好像也不會特別去設定。
根據上面的轉出來的資料,可以自行編寫對應的map,data type不清楚就用0-63全部截下來:
#Cadence layer name  Cadence layer purpose Stream layer number Stream data type
#
TopMetal2 drawing 2 0-63
TopMetal1 drawing 3 0-63
MIM drawing 4 0-63
Metal5 drawing 6 0-63
Metal1 drawing 10 0-63
這樣各層就能夠轉換成功了:


不過另一方面,據說從sonnet匯入virtuoso時,有機會發生一些off-grid的問題,這就是一時之間無法解決的問題了。

結論:
這篇介紹了如何將電磁模擬軟體Sonnet上的繪圖,直接轉換到Cadence Virtuoso上面,我很喜歡 「work hard, after you know you are working smart」類似的話
如果可以直接匯入圖形(work smart),就不要花時間重畫(work hard)了。
理論上如果你用的是Sonnect V13以上的話,其實Sonnet已經含有和Virtuoso的介面了。 http://www.sonnetsoftware.com/products/sonnet-suites/ef_translators_cvbridge.html

參考資料:
1. GDSII format description: http://www.buchanan1.net/stream_description.shtml
2. Layermap format description:
http://www-bsac.eecs.berkeley.edu/~cadence/tools/layermap.html
3. open source gds editor, klayout:
http://www.klayout.de/

2012年11月16日 星期五

放大器的級間穩定

做多級的RF的放大器時,除了看一般的stability factor K值外,還需要去測試電路每級放大器的級間穩定。
實驗室一直遵照學長流傳下來的投影片:將電路從中切開,一邊看stability circle,另一邊看ADS裡面的「Map1 circle」跟「Map2 circle」這個東西,然後看看兩個圓有沒有相交在一起,可是這個Map 1/2 circle是啥鬼東西?極間穩定又是什麼?

1. 極間穩定的意義:


先考慮上圖的模型,在一個主動的電晶體兩旁接上matching的電路,stability circle的定義是,在什麼樣的$\Gamma_L$(or $\Gamma_S$)下,會讓$\Gamma_{in}$(out) >1,在$\Gamma_{in}$(out) > 1時,電路幾乎確定會不穩定,將$\Gamma_{in}$(out)=1的邊線畫出來的圓,就是穩定圓(stability circle)。
電路設計完後,一定會看看stability factor K是否全頻帶都大於1,就是要確認電路整體的$\Gamma_{in}$(out)都在穩定的範圍內。
可是若我們把電路切開,這個模型就不適用了,前後接的不是被動的matching電路,這時候我們就要確保,前端的load stability circle,和向後端可能看到任何一點阻抗,都不會相交;否則很不巧的該阻抗出現,電路就不穩定了;這就是極間穩定背後的原理。

所以說map1/2 circle是啥鬼?從上面的定義來看,我認為它所畫的是:當source(load)呈現任何被動阻抗時(也就是實部小於一,落在smith chart上的任何阻抗),會在另一邊load(source)上呈現的阻抗。
實際用複數變換來驗證看看:
$\Gamma_{in} = w = \frac{a \Gamma_L+b}{c\Gamma_L+d}$
改換上式為下式,兩行的abcd並不是相同的:
$\Gamma_L = \frac{a \Gamma_{in}+b}{c \Gamma_{in}+d}$
a=1, b= $-S_{11}$, c= $S_{22}$, d= $-\Delta$
其中 $\Delta = S_{11}S_{22}-S_{12}S_{21}$
這個 $|\Gamma_L|=1$經轉換後會畫出一個圓,其圓心和半徑為:
$C_L = \frac{c^*d-a^*b}{a^2-c^2} = \frac{-S_{11}|S_{22}^2|+S_{12}S_{21}S_{22}^*+S_{11}}{1-|S22|^2} = S_{11}+\frac{S_{12}S_{21}S_{22}^*}{1-|S22|^2}$
$r = \frac{ad-bc}{a^2-c^2} = |\frac{S_{12}S_{21}}{1-|S22|^2}|$
若兩圓相交,就表示有load會讓$\Gamma_L$呈現某阻抗,而該阻抗會落在不穩定圓中,也就使電路在這級不穩定(新細明體:你死了Q_Q)

2. 實際資料:

Linux有問題先查manpage,ADS遇到鬼先問F1 help,結果help裡面解釋是這麼寫的:
Used in Small-signal S-parameter simulations: The function maps the set of terminations with unity magnitude at port 1 to port 2. The circles are defined by the loci of terminations on one port as seen at the other port. A source-mapping circle is created for each value of the swept variable(s). This measurement is supported for 2-port networks only.
大概的意思是一樣的,依著help的註解找到了計算的ael原始碼,下面是map2的原始碼:
defun map2_center_and_radius(sParam, center, radius)
{
    decl S12xS21 = sParam(1,2)*sParam(2,1);
    decl s11MagSq = pow(abs(sParam(1,1)),2);
     *center = sParam(2,2)+S12xS21*conj(sParam(1,1))/(1-s11MagSq);
     *radius = abs(S12xS21)/(1-s11MagSq);
}
可見所做的是以$S_{11}+\frac{S_{12}S_{21}S_{22}^*}{1-|S22|^2}$為圓心,$|\frac{S_{12}S_{21}}{1-|S22|^2}|$為半徑的圓,和我們所計算的結果相符。

附件:

如何在blogger裡面插入方程式?目前找到兩種解決方案
第一種是用這篇文章中所建議的方式:
http://www.codecogs.com/latex/integration/blogger/install.php
照著裡面的步驟做即可,不過它是將LaTeX轉成圖片,再替換掉原本的文字,所以很醜...
而且測試發現Firefox會當掉(媽的連IE都可以了…),原因不明。
第二種是現在的作法:
方法同上,但code是在下面這個blog裡面找到的
http://aishuxue.blogspot.tw/2012/01/latex-blogspot.html

<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js" type="text/javascript">
MathJax.Hub.Config({
 extensions: ["tex2jax.js","TeX/AMSmath.js","TeX/AMSsymbols.js"],
 jax: ["input/TeX", "output/HTML-CSS"],
 tex2jax: {
     inlineMath: [ ['$','$'], ["\\(","\\)"] ],
     displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
 },
 "HTML-CSS": { availableFonts: ["TeX"] }
});
</script>
這個結果超漂亮的啊!!!,實在太強了!
在chrome跟firefox裡面都可以用,IE我倒不知道,反正懶得理他。

致謝:

本篇文章感謝503實驗室強者我同學曾奕恩,以及強者我學長陳柏翰學長在複數變換方面的指導。

2012年10月5日 星期五

傳輸線穩態解與暫態解



這幾天在讀電磁學,發現一個自己沒想過,卻滿基本的問題:
我們先拿一個最芭樂的傳輸線模型,如下所示:
現在假設Vg=1V,Zs = 50Ω,Z0=50Ω,ZL=25Ω,線長λ/4(懶…選個簡單一點的數字)
請問從傳輸線入射的功率為?

解法一:
在Zs和傳輸線的交點分壓
P = ½ * ( 1 * 50/(50+50) )^2 / 50 = 2.5mW
解法二:
25Ω經過傳輸線得到Zin = 100Ω,與Zs=50Ω分壓去解,得到2.222mW

問題:為什麼兩個答案是不一樣的?

--

答案:
兩個解法其實是在不同的條件下去解的。
在第一個解法時,我們看的是輸入的電壓在遇到兩個不同的介面時,電壓的分佈狀況。
第二個解法時,我們是把整個傳輸線和load,等效成一個電阻,去計算功率的分配。
不一樣在哪?
在解法二裡面,我們省略了傳輸線用電阻等效時,已經把電磁波經過不同介面的反射穿透都考慮進去,看看多少的功率被傳到傳輸線和load端(因為傳輸線為無損耗,所以就是在算load消耗的功率);但在解法一,我們只考慮了瞬時的功率分配,後面的效應還沒有考慮。

我們可以把解法一繼續解下去。
V=1/2, ΓL = -1/3,在輸入端無反紙,功率消耗在Zs上,反射功率為(1/6)^2 /2/50 = 0.278mW
所以Vg從傳輸線打入2.5mW,反射回來0.278mW,在傳輸線(或load)上消耗的功率為:
2.5-0.278 = 2.22mW
解法二實際上是在解整個電路的穩態解,解法一只是電路打開一瞬間,在Zs和傳輸線上的暫態。

所以說,哪個是真的?
在現今的電路模擬中多是利用頻域模擬,將一塊電路變成某個S參數、Z參數…的陣列,所做就是將電路的延遲效應給排除,只看電路在穩態下的特性,也就是解法二所做的事情。
但課本中的圖形,有正反向電壓波反彈反彈直到穩態解的,就需要第一種解法才能表示。

--

第二個是同樣概念的問題:
同樣是上面那張圖,現在Zs=50Ω, Z0=25Ω, ZL=50Ω,線長λ/4(懶…一樣選個簡單一點的數字)
求input端的反射係數:
解法一:先算ΓL=1/3經過λ/4線後,Γin=-1/3
解法二:Zin = 25^2/50 = 12.5,得到Γin = (12.5-50)/(12.5+50) = -3/5
問題:為什麼兩個結果不一樣,哪一個是真的?

同樣,第一個解法只是考慮在load端的一個暫態下,每個入射的電壓波會有多少反射;但我問到Γin時,就是要把整個電路等效成一個阻抗,然後看看入射的電壓波有多少會反射。
這時,因為Zs和Z0的不匹配,從ZL看到的阻抗其實不是25Ω,而是12.5Ω,算到Γ=3/5,再經過了λ/4的傳輸線,可得到輸入處的反射係數為-3/5。

結論:
一般微波電路在討論時,是針對穩態解的參數如Z, S matrix下去討論的,這樣的結果和只討論暫態的結果當然不一樣,計算時要稍微注意。

2012年6月11日 星期一

bypass與測試線小技巧

無論是放大器、主動混頻器還是振盪器,都需要外加電線才能運作
這時候我們就面臨到一個問題
當你接一個DC的電線到電源,這段線的長度非常長
即便DC電源是個理想的ground,經過這麼長的線
各頻率的阻抗會散開到smith chart的整個圓周上

因此需要有方法在DC的位置創造一個理想的ground
方法很簡單,用並聯的電容即可
並聯的電容對RF信號來說,就像直接short到ground一樣
也可以說,電容會隨信號充放電,達到穩定的效果
對於愈高頻的電路,電容就要愈小

畫起來大概像這樣
當然這只是示意圖,電容值是預設值沒有改
也不能直接接ground,而是接back via的元件
通常會用一路只有電容的把主要in-band 的頻率cover住
另外一路會用大一點的電容跟串聯電阻,來cover較低的頻率
如此就能做到一個不錯的RF ground.

為了看看這個bypass好不好
通常會加上測試線來試試,其實測試線說穿了就是
用一段長線去模擬真實狀況的DC長線
模擬上長這個樣子
很簡單吧

但是,平時模擬時不會把測試線打開,它會讓模擬跑得久一些些
等到大概模擬完,要開測試線,要一個一個打開又很麻煩
最近發現ADS裡面也支援簡單的script這個小技巧
先拉出一個控制的var,例如叫:testline_valid好了
把上面測試線的Z改成
if (testline_valid == "open") then 20 Ohm else 1e10 Ohm endif
你不想叫"open",要用什麼東西隨你便

總之只要把testline_valid設成你要的值,就可以方便的加入測試線的模擬。