做為一個數位IC設計初學者,好的coding習慣是很重要的。它能讓你的程式被別人讀懂,而且程式的穩定度也比較高。那什麼是好的coding習慣。
1. 只使用positive edge (negative edge) clock來做為取樣的時間點(sampling data time).
在coding時,堅持只使用clock的一邊(edge)來做為你取樣的時間點(sampling data time)。這樣子可以增加程式的易讀外,也能讓你的程式行為(behavior)單純,在synthesis時比較好處理。且在做ATPG時,也比較容易處理。
只用單一邊做為你的時間點,它的穩定度比較高。這就像是你在高速公路上開車,在單一車道上快速行駛安全? 還是一直變換車道超車來加快速度安全? 建議初學者還是要堅持只使用一邊的clock edge來做為你取樣的時間點。
2. 儘量使用單純的語法,少用for, while, function等複雜語法。
十年前的工具沒有那麼的強大,無法解譯複雜語法;但現在因為synthesis工具已經愈來愈完善且強大,所以看得懂複雜語法,所以大家都在使用。但是身為數位IC工程師,你的流程是一貫的,你知道這些複雜語法所產生的netlist是什麼情形嗎?如果你不知道,當你要ECO時,該怎麼做?如果工具錯譯程式的時候,你知道要怎麼處理嗎?你會發現問題的點在哪嗎?如果你不知道怎麼樣從front-end到back-end的流程中去貫徹複雜語法的使用,建議你還是只用簡單的語法。
3. 語法的使用一定要完整.
舉例來說,如果使用if,那一定要記得把else之後的語法補齊。如果使用case,那default就一定要加。這是方便你知道你自己是否有寫combinational loop的程式在裏頭。
4. 有規則的命名
如果是input port宣告,就一定會在最後面加上i。如果是output port宣告,就一定會在最後面加上o 。例如data_i, data_o,這樣子我們馬上就可以知道這是輸入訊號還是輸出訊號。
5. 一個程式裏面,只有一個module.
我常看到初學者,把很多module放在同一個.v檔中。在閱讀時,真的滿容易造成混淆。建議初學者要習慣一個module就一個.v檔。
6.少用include。
很多人都會做一些檔頭(.vh),來節省程式上重複使用的問題。這是好事,使用include常常會造成在simulation或synthesis時要做很多的設定。其實.vh檔你也可以寫在filelist上,只要檔頭比程式先被編譯即可。在synthesis時也是同樣的道理。這樣子別人在閱讀你的程式時,一目了然你到底有多少程式檔案需要被閱讀。
以上只是個人的意見,謹提供參考!