小百岳
[桃園] 石門山 551m
[新竹] 十八尖山 130m
[新竹] 鵝公髻山 1,579m
[苗栗] 火炎山 596m
[苗栗] 哈堪尼山加里山縱走 2,220m
其它
[新竹] 觀霧國家森林遊樂區
榛山步道
雲霧步道
觀霧瀑布步道
檜山巨木群步道
[台中] 鳶嘴山 2,180m
[台南] 糖子恩山 642m
[桃園] 石門山 551m
[新竹] 十八尖山 130m
[新竹] 鵝公髻山 1,579m
[苗栗] 火炎山 596m
[苗栗] 哈堪尼山加里山縱走 2,220m
[新竹] 觀霧國家森林遊樂區
榛山步道
雲霧步道
觀霧瀑布步道
檜山巨木群步道
[台中] 鳶嘴山 2,180m
[台南] 糖子恩山 642m
安裝 Icarus: sudo apt-get install iverilog
安裝 GTKWave: sudo apt-get install gtkwave
使用方式:
1. 編譯: iverilog -o out test.v
iverilog -o out -s top_module -c file_list.txt
iverilog -o out test.v -Dmacro=value
2. 模擬與產生波形檔: vvp -n out -lxt2
3. 開啟波形檔: gtkwave wave.vcd &
testbench 中需加入以下指令以產生波形檔
initial begin
$dumpfile("wave.vcd");
$dumpvars;
end
由於我的晶片內部有 0.9V 和 3.3V 不同的電壓區域,在使用 ICC 進行 routing 時,預設的 minimum spacing 是針對兩條線都是同電壓的情況,假如兩條線不同電壓,他們的 minimum spacing 會稍微大一點。為了避免不同電壓的繞線發生 DRC error,需要針對不同的線設置 routing rule。以下程式先定義一個稱為 MVDD 的 routing rule,將 M1~M5 的 minimum spacing 設定為 0.1um。接下來將此 routing rule 套用到所有連接至 macroA 的 net 上。
在 standard IO library中,一般用來送 core power 的 PAD,常見名稱為 PVDD1DGZ、PVSS1DGZ。他們的 pin 在libray 中有被定義為 power pin,因此 ICC 可以辨認出來他們是 power pin。
但是 PVDD1DGZ 只能用來送 core VDD,一般電壓比較低,假如我們需要從外部送進一個比較高的電壓,就需要使用能夠承受較高電壓的 analog PAD,但是有些 PAD 的 pin 在 library 中是被定義為 signal pin,可能原先並非被設計用來送 power 的。
當我們用這種 PAD 來送 power 時,會遇到一些問題。
1. derive_pg_connection 無法將 power net 連接到 power pad 上,會顯示 PAD pin 無效的訊息。原因就是因為 PAD pin 在 library 中並未被定義成 power pin。解決方法是改用 connect_net VDD33A [get_pin VDD33A_*/AVDD] 其中 VDD33A 是 power net 的名稱,VDD33A_* 是 power pad 的名稱,AVDD 是他的 pin name。
2. 當我們用以上的方法將 power net 和 power pad 連起來以後,會遇到第二個問題。由於 power net 是我們在 ICC 中創造出來的,ICC 可以辨認出他是 power,但 power pad 的 pin 卻無法被辨認為 power pin。因此當我們進行 connect_tie_cells 時,ICC 會認為 VDD33A_*/AVDD 是一個 signal pin,但是他被連接到 power,因此 ICC 會將所有的 VDD33A_*/AVDD 連接 tie cell。解決方法是在 connect_tie_cells 時,用 -objects [remove_from_collection [get_cells -hier *] [get_cells VDD33A_*]] 將所有的VDD33A_* pad 排除。
1. schematic 完成後測量電流,得到各區域所需電流大小,決定電源網路所使用的金屬層以及寬度,盡量將電源網路做成 grid,並且水平與垂直方向所使用金屬層需考量到後續使用 EDA 軟體進行 place and route 的走線問題。
2. 垂直方向 power/ground 金屬層盡量低於水平方向金屬層,因為 standard cell 的 power/ground rail 是水平的,若垂直方向的 power/ground 高於水平方向,在水平方向的 strap下方的 rail 會被擋住,無法換層連接到 strap 或 ring 上。
3. 無論 power/ground 或 signal,出 pin 時盡量不用 M1。由於 rail 使用M1, macro 的 power/ground 若也從 M1 出 pin,將造成 power/ground 連上 ring 的一路上都無法鋪設 rail,將造成空間的浪費,也常在此發生 DRC error。signal pin 若從 M1 出 pin 容易被 rail 阻擋,造成後續無法繞線。
4. 用來做為 power/ground ring 和 strap 的金屬層,盡量就不用來出 signal pin,比方說,水平 M6 垂直 M5 若為 power/ground ring,從 macro 出 pin 時避免使用 M6 和 M5。第一個原因是在 place and route 時 power strap 規劃會很複雜,垂直 M5 power strap 很容易不小心撞到 macro 上下側的 M5 signal pin。第二個原因是,上下側的 M6 signal pin 連出來時會撞上水平 M6 power/ground,左右側的 M5 signal pin 出來時會撞上垂直 M5 power/ground,必須打 VIA 換層,容易造成 macro 邊緣發生壅塞。
5. 後續進行 place and route 時,由於走線較長會有比較大的負載,Macro 的輸出要用 buffer 將訊號推力加大,避免訊號 delay 和 transition time 太長。
1. 放在靠近 corner 的 power/ground 可能無法接到 core power/ground ring 上,或是連接會不完全,建議在靠近 corner 的地方放給 IO pad 供電用的 VDDPST / VSSPST,或是擺放 signal IO pad。
在使用 IC Compiler 進行 place and route 時,有些 timing 或 load 比較在意的繞線,可以在進行 route 之前,使用 create_custom_wire 指令進行連接。
Setup -> LVS Options