剛來乍到的工程師,常常會寫一些很炫的技巧,來實現他的硬體設計。我覺得很好,也可以讓我多學學不同的技巧,也是不錯。但是,常常在我問過一些問題後,我就不知道該怎麼說他了。
在這兒想分享一些觀念,希望能有所幫助。
1. 技巧很重要,但是如果你不知道在synthesis階段時,應該要寫什麼樣子的constrain來synthesize你的程式時,建議不要使用,因為你會讓你的整合工程師頭很大。
2. balance clock tree的觀念很重要,請不要告訴你的整合工程師說,你的clock tree 就是要 no balance,timing才會是對的。數位工程師所有的想法都是在balance tree底下設計。只有少數非常特例,才會想要用不balance tree來實作硬體。但那是有特別的流程的。如果你不知道怎麼做,建議不要使用,以免增加你的整合工程師的困擾!
3. 請不要自己自動加快或是變慢clock速度。這種coding style,constrain很難寫,而且很怕你沒有做cross clock domain處理,整合工程師又不知道,然後simulation時出現一大堆meta-stable;或是synthesis時有一大堆register no constrain的報告要看。
4.如果你的負責的方塊(block)裏,有兩個以上的clock domain。如果它們之間有訊號的往來時,請一定做cross clock domain處理。
5.請別把一堆東西寫在同一個always內,然後當我問「那它的netlist長什麼樣子時?」結果卻回答我「誰知道,那麼複雜」。如果不知道,請別用,用那種你知道netlist長什麼樣子的coding style好嗎?
6. 請儘量別用latch,因為它的timing不好分析,建議用D-flip-flop就好;STA比較好看懂.
以上是一些在寫verilog的習慣,希望對初學者能有所幫助。