(原創) 由C語言學習Verilog的思維轉換 (C/C++) (C) (IC Design) (Verilog)
Abstract
Verilog由於在語法上向C靠攏,若熟悉C語言,學Verilog倍感親切,但也由於語法類似,若把Verilog當成C語言來思考,怎很難抓到硬體的精神。
Introduction
Verilog有3點思維與C語言不一樣
1.軟體是循序的,而硬體是並行的
C語言是一行一行的執行,就算組合語言也是一樣,或許你會說threading,但在微觀下仍是循序地執行。但硬體電路就不一樣,電路只要一插上電,所有電路就同時工作。
如以下的Verilog
2 e <= a & b;
3 f <= c & d;
4 end
雖然看起來是 e <= a & b; 在 f <= c & d;前面,但實際上合成電路後如下圖所示
由上圖得知,e和f並沒有先後之分,是並行的。
2.硬體要循序,要靠clock和FSM
或許你會說,『我的演算法就是要循序一步一步的做,如C語言那樣,那怎麼辦?』,若Verilog要這樣,就得靠clock並且搭配FSM,當一個state完成後,進入下一個state,這樣就能依照clock的進行,而達成循序的要求。
3.Verilog程式碼沒有先後之分
除了blocking assignment有先後執行順序,而nonblocking assignment同時執行外,Verilog的程式沒有前後順序之分,所以才稱為硬體『描述』語言,而非硬體『程式』語言,先寫的不代表先執行,後寫的也不代表後執行,只是代表硬體的架構的描述,也就是說,將原來的電路圖,變成文字描述而已。
4.多用RTL Viewer和ModelSim觀察自己寫的code
Verilog寫法小小的差異,合成出來的硬體就可能有天壤之別,多用RTL Viewer觀察合成出來的硬體是否和自己預期的一樣,並多用ModelSim觀察跑出來的波形,這樣會增加你對Verilog的掌握度。
Conclusion
很多人學了Verilog,還是把它當C語言寫,事實上他們只是語法類似,但背後的思維並不一樣,唯有『心中有硬體』,才能設計出好的電路。
Reference
王钿、卓興旺 2007,基於Verilog HDL的數字應用設計,國防工業出版社