對(duì)初學(xué)者關(guān)于Coding Style的建議
為了避免走彎路,編者特別提醒邏輯設(shè)計(jì)的初學(xué)者以下幾個(gè)問(wèn)題:
FPGA/CPLD、ASIC的邏輯設(shè)計(jì)所采用的硬件描述(HDL)語(yǔ)言是同軟件語(yǔ)言(如C,C++等)是有本質(zhì)區(qū)別的!雖然Verilog很多語(yǔ)法規(guī)則和C語(yǔ)言相似,但是Verilog是硬件描述語(yǔ)言,它的本質(zhì)作用在于描述硬件。雖然它使用了C語(yǔ)言的形式,但是Verilog描述的硬件的抽象,它的最終實(shí)現(xiàn)結(jié)果是芯片內(nèi)部的硬件電路。所以評(píng)判一段HDL代碼的優(yōu)劣的最終標(biāo)準(zhǔn)是:其描述并實(shí)現(xiàn)的硬件電路的性能(包括面積和速度兩個(gè)方面)。初學(xué)者,特別是由軟件轉(zhuǎn)行的初學(xué)者,片面追求代碼的整潔,簡(jiǎn)短,這是錯(cuò)誤的!是與評(píng)價(jià)HDL的標(biāo)準(zhǔn)背道而馳的!正確的編碼方法是,首先要做到對(duì)所需實(shí)現(xiàn)的硬件電路“心有成竹”,對(duì)該部分硬件的結(jié)構(gòu)與連接十分清晰,然后用合適的HDL語(yǔ)句表達(dá)出來(lái)即可。
HDL語(yǔ)言描述是分層次的。其中比較重要的層次有系統(tǒng)級(jí)(System)、算法級(jí)(Algorithm)、寄存器傳輸級(jí)(RTL)、邏輯級(jí)(Logic)、門(mén)級(jí)(Gate)、電路開(kāi)關(guān)級(jí)(Switch)設(shè)計(jì)等。由于綜合器的編譯與優(yōu)化功能越來(lái)越強(qiáng)大,目前一般的FPGA設(shè)計(jì)代碼都采用RTL級(jí)描述。RTL代碼的最大特點(diǎn)是“可綜合”。我們這里討論的Coding Style也是主要針對(duì)RTL級(jí)代碼而言,其它層次的代碼風(fēng)格并非本次討論的主題。
雖然目前綜合器越來(lái)越強(qiáng)大,其綜合優(yōu)化效果也越來(lái)越顯著。但是讀者必須明確,綜合器的優(yōu)化程度和正確性最終取決于設(shè)計(jì)的Coding Style的優(yōu)劣。被動(dòng)的依靠綜合器的優(yōu)化能力是大錯(cuò)特錯(cuò)的。好的設(shè)計(jì)能使綜合器發(fā)揮最大的優(yōu)勢(shì),得到最佳綜合優(yōu)化效果;壞的設(shè)計(jì)不但綜合優(yōu)化效果大打折扣,甚至造成不同的綜合器得到差異巨大的綜合結(jié)果。本專(zhuān)輯中“為什么XST與Synplify的綜合結(jié)果不一樣?”一文就討論了代碼風(fēng)格對(duì)綜合結(jié)果的影響。