在IC設(shè)計(jì)端的諸多崗位中,只要提到基礎(chǔ)知識(shí)和必備技能,就一定少不了Verilog。
按照20年芯片設(shè)計(jì)老兵的說法“1. 知道m(xù)odule的基本框架。2. 知道怎么寫assign,和always塊。3. 其他沒有了?!?/p>
也就是說用VerilogHDL做設(shè)計(jì)不要追求花架子,要多花心思在電路設(shè)計(jì)上。
Verilog是什么?
Verilog HDL是目前世界上最流行的硬件描述語(yǔ)言之一,是用文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語(yǔ)言。
使用Verilog能夠清楚地展現(xiàn)邏輯電路圖、表達(dá)式等等,還可以用來表示數(shù)字邏輯系統(tǒng)所完成的邏輯功能。?(需要借助EDA工具)
Verilog為何誕生?
IC行業(yè)諸多工具、崗位的出現(xiàn),都是源于行業(yè)和市場(chǎng)的需求。
電路設(shè)計(jì)復(fù)雜度的不斷提高,傳統(tǒng)的電路原理圖設(shè)計(jì)方法的工作量越來越大。但與之對(duì)應(yīng)的是:設(shè)計(jì)效率和正確性不斷降低,驗(yàn)證的難度不斷提高。這樣的現(xiàn)狀已經(jīng)無(wú)法滿足市場(chǎng)對(duì)于IC產(chǎn)品高性能、低功耗、快上市的需求。1985年,Gateway Design Automation公司為其仿真器產(chǎn)品Verilog-XL開發(fā)了Verilog語(yǔ)言。1989年,Cadence收購(gòu)Gateway公司,并繼續(xù)推廣Verilog語(yǔ)言。后來Verilog受到了越來越多工程師的歡迎,IEEE也制定了Verilog IEEE標(biāo)準(zhǔn)。
Verilog有何特點(diǎn)?
Verilog的語(yǔ)法風(fēng)格類似于C語(yǔ)言,對(duì)于有C語(yǔ)言基礎(chǔ)的同學(xué)來說,還是比較友好的。但是Verilog和C還是有本質(zhì)上的區(qū)別,C語(yǔ)言是一種軟件開發(fā)語(yǔ)言,主要是控制硬件實(shí)現(xiàn)某些功能。而Verilog作為硬件描述語(yǔ)言,其實(shí)最終還是為了產(chǎn)生實(shí)際的硬件電路或者對(duì)硬件電路進(jìn)行仿真。
【示例1】
左邊是與門電路符號(hào),右邊是把左邊電路轉(zhuǎn)換成verilog描述。
【示例2】
左邊是異步復(fù)位觸發(fā)器電路,右邊是把觸發(fā)器電路轉(zhuǎn)換成verilog描述。也就是說,Verilog的代碼并不僅僅是一行行代碼,而是一塊一塊硬件模塊。
基本語(yǔ)法介紹
Verilog語(yǔ)言采用模塊化設(shè)計(jì),以模塊集合的形式來描述數(shù)字系統(tǒng)。模塊(module)可以理解為verilog HDL語(yǔ)言的基本描述單位,它用于描述某個(gè)電路的功能或結(jié)構(gòu),以及該模塊和其他模塊通信的輸入輸出端口。模塊支持層次嵌套,一個(gè)模塊可由若干子模塊構(gòu)成,模塊所構(gòu)建的硬件電路可以是基本門電路也可以是一個(gè)復(fù)雜的系統(tǒng)電路。每個(gè)模塊必須以module開頭,以endmodule結(jié)尾;設(shè)計(jì)模塊還需要定義端口,用input、output、inout分別描述輸入、輸出、雙向端口;模塊中間的Verilog程序的書寫類似C語(yǔ)言,每條語(yǔ)句以分號(hào)結(jié)束;使用“/*…*/”和“//”可以對(duì)多行或一行程序進(jìn)行注釋。
1. 用assign描述持續(xù)賦值
assign語(yǔ)句一般用于組合邏輯電路賦值,也稱之持續(xù)賦值,例如下圖電路結(jié)構(gòu)可描述為:
assign f=((a&b)|(c&d));
2.用always描述過程塊賦值
例:16位的計(jì)數(shù)器模塊設(shè)計(jì)
3.?模塊實(shí)例化(調(diào)用模塊)
Verilog中一個(gè)模塊調(diào)用另一個(gè)模塊是通過實(shí)例化來實(shí)現(xiàn)的,這樣就能建立起層次化的設(shè)計(jì)結(jié)構(gòu)。
例如在其他模塊調(diào)用上面的16位計(jì)數(shù)器模塊。
如何提高Verilog編碼水平?
Verilog是IC設(shè)計(jì)工作中必不可少的。首先一定要熟悉最基本的語(yǔ)法知識(shí),對(duì)于技術(shù)類的崗位來說,只學(xué)基礎(chǔ)知識(shí)顯然是不夠的,還需要不斷練習(xí)和仿真,養(yǎng)成良好的代碼編寫習(xí)慣。
作為芯片設(shè)計(jì)端的工程師,心中對(duì)于要實(shí)現(xiàn)的電路必須門清。
“至少你必須在頭腦中把RTL級(jí)的行為構(gòu)建出來。然后再用assign (組合邏輯)加always (時(shí)序邏輯)把你的想法描述出來?!?/p>
這里給新手幾條建議:深入理解Verilog概念和語(yǔ)法;實(shí)踐編寫代碼;閱讀和分析優(yōu)秀的代碼;調(diào)試和驗(yàn)證代碼;參與開源項(xiàng)目和社區(qū),多交流多學(xué)習(xí)。
最重要的還是“心中有電路”,Verilog也好、EDA也好,都只是實(shí)現(xiàn)電路的工具。工具的掌握是基本功,長(zhǎng)期下功夫還是要在電路結(jié)構(gòu)和電路設(shè)計(jì)上。