Step 1: 在地球圖案上按滑鼠右鍵
2023年7月22日 星期六
2023年4月11日 星期二
Vim設定檔
set autoindent
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set mouse=a
set breakindent
set linebreak
set showbreak=>>
2023年3月29日 星期三
Linux新增使用者指令
在Linux系統中新增使用者:
useradd 使用者名稱
useradd -g 主要群組 使用者名稱
useradd -g 主要群組 -G 次要群組1,次要群組2 使用者名稱
創建完成後會自動在/home目錄下建立一個使用者的家目錄
更改使用者所屬的群組
usermod -g 主要群組 使用者名稱
usermod -a -G 次要群組 使用者名稱
2023年3月7日 星期二
一些 Python 中好用的功能
查詢一個 Object 中有哪些可用的 Method:
dir(object_name)
查詢一個 Method 的使用方式:
help(object_name.method_name)
寫在一個檔案 (module)、函式 (function) 和類別 (class) 最開頭的多行註解會自動轉為 module、function、class 的 __doc__ 變數的內容,會被當成 help message 印出。
2022年12月16日 星期五
自動修復 Hold Time Violation 的程式
In Tcl File:
In Python File:
2022年12月14日 星期三
自動修復 Short Error 的程式
In Tcl File:
verify_lvs > lvs_result.txt
set short_nets [exec python get_short_nets.py lvs_result.txt]
while {$short_nets != {}} {
remove_net_routing $short_nets
route_zrt_eco -nets $short_nets -reroute modified_nets_only
verify_lvs > lvs_result.txt
set short_nets [exec python3 get_short_nets.py lvs_result.txt]
}
}
In Python File:
2022年11月30日 星期三
Clock Gating 是什麼?怎麼做?
在同步數位邏輯電路中,所有 flip-flop 都是由一個 clock 訊號來觸發。由於 clock 是不斷地進行振盪的訊號,即使 flip-flop 的資料沒有改變,只要 clock 訊號變化,都會造成 flip-flop 上的能源消耗。為了降低晶片的功耗,clock gating 是一樣很重要的技術。
其中 E 是一個 enable 訊號,當 E = 1 時,代表 flip-flop 需要被觸發。當 E = 0 時,代表 flip-flop 不需要運作。GCLK 是 gated clock,是由一個 AND gate 產生,只有當 Q = 1 時,GCLK 才會等於 CLK,否則 GCLK 都是 0。
從波形中可以看出,當 E 改變時,Q 並不會馬上跟著改變,而要等到 CLK = 0 的時候,Q 才會變成 E。這樣做的用意是為了避免 GCLK 上產生毛刺 (glitch)。由於 clock 的 rising/falling edge 會觸發運算,在 clock 上的 glitch 是不允許的。
各位可以試著畫圖看看,假如直接讓 E 來控制 AND gate,當 E 從 1 變成 0 時,會使 GCLK 產生一個 glitch。(請記得 E 訊號是由 clock rising edge 觸發的,因此它總是會稍晚於 clock rising edge。)
大家應該也有注意到,除了 E 以外,還有一個 TE 訊號,這是 test enable 訊號。當我們要進行測試時,必須透過 scan chain 來進行,此時必須讓 clock 能夠送到所有的 flip-flop 上,因此當 TE = 1 時,GCLK 會一直等於 CLK。
要如何加入 clock gating 呢?目前的 Design Compiler 都有支援,可以自動根據 RTL code 來判斷哪些 flip-flop 要執行 clock gating 來降低 power consumption。由於 Clock Gating Cell 本身會占用面積,也是會耗電,假如每個 flip-flop 都進行 clock gating,並非最好的做法。這部份 Design Compiler 也會協助判斷。
只要在進行合成的時候,在 compile 指令後面加上一個 -gate_clock 的選項即可,如下:
compile_ultra -gate_clock




