隨著功能復(fù)雜度的快速提升,對芯片的要求也是隨著提高,所以現(xiàn)在一款芯片的開發(fā),往往需要數(shù)十人,長達(dá)幾個月的共同開發(fā)才能完成。
因?yàn)?span id="opbygnk" class="candidate-entity-word" data-gid="8269084">Verilog HDL的語法相對開放,所以每個人開發(fā)的Verilog HDL之間的差異也是非常的大。但是一個設(shè)計團(tuán)隊(duì)之間,進(jìn)行RTL模塊的交叉review、相互調(diào)用是非常頻繁的事情,所以為了增強(qiáng)RTL代碼的可移植性,以及review的效率,我們通常在一個項(xiàng)目開始的時候,會統(tǒng)一整理一個RTL編碼規(guī)則,里面的內(nèi)容包括,命名的規(guī)則、單詞的縮略原則,一些標(biāo)準(zhǔn)電路的常用寫法等等。往往這個編碼規(guī)則會寫的很具體,但是個人認(rèn)為,這是非常有必要的。在前面的兩篇文章中,我們已經(jīng)聊了一些,今天的文章,我就繼續(xù)來聊一聊一般常見的規(guī)則。
RTL推薦編碼規(guī)則
- 在一個自然行中,只寫一條語句。因?yàn)閂erilog語法靈活,所以在一行中寫多條語句時沒有問題,但是我還是建議只寫一條,原因是增強(qiáng)了可讀性,進(jìn)而使得維護(hù)更加容易。當(dāng)每行只有一條語句時,我們可以清楚的看清楚RTL塊的起止,方便閱讀,相反,如果有多條語句時,我們比較難去區(qū)別不同begin-end的語句塊。
- begin-end區(qū)分的RTL塊,需要使用縮進(jìn)來進(jìn)行區(qū)分,同一級的begin-end縮進(jìn)相同。縮進(jìn)與縮進(jìn)之間,相差四個空格,依次遞增。不要使用TAB鍵,因?yàn)閷τ诓煌瑱C(jī)器,編輯器,TAB對應(yīng)的縮進(jìn)值是不同的,所以防止出現(xiàn)在進(jìn)行RTL移植之后,出現(xiàn)亂碼的情況,所以統(tǒng)一使用空格進(jìn)行縮進(jìn)。
- 在取名字時,不能出現(xiàn)Verilog HDL或者VHDL的關(guān)鍵字。這條建議非常重要,在RTL中定義的輸入端口、輸出端口、變量、function、task、module等等,禁止使用關(guān)鍵字。
- 在定義輸入、輸出端口以及信號時,每行只定義一個。這么做的目的,也是為了增強(qiáng)可讀性,如果多個信號定義在一行,很容易出現(xiàn)遺漏,發(fā)現(xiàn)不了,一行只定義一個則可以很好地緩解這個問題。并且建議端口進(jìn)行定義時,按照clock、reset、input、output的順序進(jìn)行。
- 在進(jìn)行實(shí)例化模塊時候,應(yīng)該使用顯式的名字映射,而不是位置映射。因?yàn)楫?dāng)信號增多之后,通過位置映射,容易出現(xiàn)信號的丟失,或者連線的錯誤,而這種問題是很難去debug,并且可讀性比較差。
小結(jié)
今天的文章,我們接著之前的文章,給出了一些編碼的規(guī)范,看起來特別瑣碎,但是卻是非常重要。比如說,要使用幾個空格進(jìn)行縮進(jìn)、每行寫幾條語句、每行定義幾個信號等等。如果您對內(nèi)容有什么建議或者疑問,歡迎和我進(jìn)行討論。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實(shí),本站將立刻刪除。