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