寫verilog代碼要有硬件的概念
因為Verilog是一種硬件描述語言,所以在寫Verilog語言時,首先要有所要寫的module在硬件上如何實現(xiàn)的概念,而不是去想編譯器如何去解釋這個module. 比如在決定是否使用reg定義時,要問問自己物理上是不是真正存在這個register, 如果是,它的clock是什么? D端是什么?Q端是什么?有沒有清零和置位?同步還是異步?再比如上面討論的三態(tài)輸出問題,首先想到的應(yīng)該是在register的輸出后面加一個三態(tài)門,而不是如何才能讓編譯器知道要“賦值”給一個信號為三態(tài)。同樣,Verilog中沒有“編譯”的概念,而只有綜合的概念。
本文引用地址:http://cafeforensic.com/article/201710/365621.htm寫硬件描述語言的目的是為了綜合,所以說要想寫的好就要對綜合器有很深的了解,這樣寫出來的代碼才有效率。
有些東西完全是沒有意義的,像有些書上的很多程序,完全是不可綜合的比如產(chǎn)生一個10ms方波什么的程序,用什么#10 ~clk,這樣的語句硬件不可能做的那里面很多程序是用來verificaTIon的,不是綜合的。張老師那本書用來當(dāng)初級教材還是不錯的,但是想通過它來掌握verilog是不夠的。曾經(jīng)接觸過motorola蘇州設(shè)計中心的一位資深工程師,他忠告了一句:就是用verilog描述電路的時候,一定要清楚它實現(xiàn)的電路,很多人只顧學(xué)習(xí)verilog語言,而不熟悉它實現(xiàn)的電路,這是設(shè)計不出好的電路來的
一般寫verilog code時,對整個硬件的結(jié)構(gòu)應(yīng)該是很清楚了,最好有詳細的電路圖畫出,時序問題等都應(yīng)該考慮清楚了??梢钥粗鴪D直接寫code。
要知道,最初Verilog是為了實現(xiàn)仿真而發(fā)明的.不可綜合的Verilog語句也是很重要的.因為在實際設(shè)計電路時,除了要實現(xiàn)一個可綜合的module外,你還要知道它的外圍電路是怎樣的,以及我的這個電路與這些外圍電路能否協(xié)調(diào)工作.這些外圍電路就可以用不可綜合的語句來實現(xiàn)而不必管它是如何實現(xiàn)的.因為它們可能已經(jīng)實際存在了,我僅是用它來模擬的.所以,在寫verilog的時候應(yīng)該要先明確我是用它來仿真的還是綜合的.要是用來綜合的話,就必須要嚴(yán)格地使用可綜合的語句,而且不同的寫法可能產(chǎn)生的電路會有很大差別,這時就要懂一些verilog綜合方法的知識.就像前面說的,腦子里要有一個硬件的概念.特別是當(dāng)綜合報錯時,就要想一想我這種寫法能不能用硬件來實現(xiàn),verilog畢竟還不是C,很多寫法是不可實現(xiàn)的.要是這個module僅是用來仿真的,就要靈活得多了,這時你大可不必太在意硬件實現(xiàn).只要滿足它的語法,實現(xiàn)你要的功能就行了.
有網(wǎng)友說關(guān)于#10 clk=~clk的問題,雖然這種語句是不可綜合的,但是在做simulaTIon和verificaTIon是常常用它在estbench中來產(chǎn)生一個clock信號。再比如常常用到的大容量memory, 一般是不會在片上實現(xiàn)的,這個時候也需要一個unsynthesizable module. mengxy所言切中肯罄。
我們設(shè)計的module的目的是為了可以綜合出功能正確,符合標(biāo)準(zhǔn)的電路來。我想這是個反復(fù)的過程,就像我們在寫design flow中總要注明前仿真,綜合后的仿真,以及后仿真等。仿真是用來驗證我們的設(shè)計的非常重要的手段。而verilog里那些看是無聊的語句這個時候就會發(fā)揮很大的作用。我想,用過verilog_xl的兄弟應(yīng)該深有體會。verilog_xl里的操作,可以用verilog里的系統(tǒng)命令來完成。通過最近的應(yīng)聘我也深有體會,很多公司看中你在寫code時,是否考慮到TIming,architecture,DFT等,這也說明verilog中的任何語句都是非常重要的。
要寫代碼前必須對具體的硬件有一個比較清晰的概念但是想一次完成可綜合代碼就太夸張了,verilog的自頂向下設(shè)計方法就是從行為建模開始的,功能驗證了以后再轉(zhuǎn)向可綜合模型.太在意與可綜合令初期設(shè)計變得太累
很同意這種看法,在做邏輯結(jié)構(gòu)設(shè)計時,綜合的因素是要考慮的,但是有很多東西不能考慮的過于細致,就是在設(shè)計的時候不能過于緊卡時延,面積等因素,因為這樣以來綜合后優(yōu)化的余量就會很小,反而不利與設(shè)計的優(yōu)化,如果在時延和面積要求不是很緊張的情況下,其實代碼寫的行為級,利用綜合工具進行優(yōu)化也是一種方法。偶就聽說有一家很有名的公司,非常相信綜合工具的優(yōu)化能力,從來不作綜合后仿真的,hehe.當(dāng)然,如果面積和時延的要求很高,最好還是把代碼寫的底層一點,調(diào)用庫單元時,也要充分考慮其面積和時延的因素。
評論