那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺談Verilog HDL代碼編寫(xiě)風(fēng)格

FPGA之家 ? 來(lái)源:硅農(nóng) ? 2023-11-20 10:04 ? 次閱讀

消失了好久,沒(méi)有寫(xiě)文章,也沒(méi)有做筆記,因?yàn)樽罱仝s一個(gè)比賽,時(shí)間很緊,昨天周六終于結(jié)束了,所以趁著周末這會(huì)兒有時(shí)間,寫(xiě)點(diǎn)東西,記錄下來(lái)。首先我學(xué)習(xí)FPGA才一年多,我知道自己沒(méi)有資格談?wù)撘恍┍容^深層次的問(wèn)題,對(duì)于這個(gè)行業(yè)來(lái)說(shuō)可能我才是一直腳踩在門(mén)外面。所以這篇文章是寫(xiě)給一些剛開(kāi)始學(xué)習(xí)FPGA、Verilog HDL的同學(xué),我看過(guò)一些大神寫(xiě)的代碼,然后盡量模仿大神寫(xiě)法,經(jīng)過(guò)好幾個(gè)大神的影響和自己的習(xí)慣摸索,最終算是總結(jié)出了一套自己的代碼書(shū)寫(xiě)風(fēng)格,當(dāng)然我的代碼風(fēng)格還是一直在進(jìn)化中。現(xiàn)在將自己的一些經(jīng)驗(yàn)總結(jié)出來(lái),希望對(duì)剛開(kāi)始學(xué)習(xí)FPGA的朋友有所幫助。

首先,第一我還是要強(qiáng)調(diào)的是編輯器的作用,工欲善其事,必先利其器。之前整理過(guò)一篇,如何高效的編寫(xiě)Verilog HDL——菜鳥(niǎo)篇,點(diǎn)擊查看。其中我介紹了使用notepad++的一些小技巧,當(dāng)然還有很多網(wǎng)友使用gvim編輯器,對(duì)gVim編輯器,我也了解了很多,雖然上手比較麻煩,但是一勞永逸,我之后也是打算學(xué)習(xí)該編輯器的使用的,目前,時(shí)間比較緊,所以就暫且先用notepad++吧。熟悉verilog的人都知道,Verilog HDL設(shè)計(jì)其實(shí)使用20%的語(yǔ)法就可以設(shè)計(jì)出90%以上的電路,其中最長(zhǎng)用的便是always塊了,用軟件自帶的IDE的話編寫(xiě)效率其實(shí)是很差的。所以說(shuō)一個(gè)好的順手的編輯器至關(guān)重要,對(duì)于我們這些苦逼的技術(shù)工作者來(lái)說(shuō),經(jīng)常看電腦屏幕一看就是一整天,然后還天天看,所以用Notepad++更換主題可以更好的為革命保護(hù)視力,

點(diǎn)擊設(shè)置——語(yǔ)言格式設(shè)置,可設(shè)置編輯器主題

0783b2a6-8745-11ee-939d-92fbcf53809c.jpg

這里我選擇的是如圖所示的主題,我比較喜歡這個(gè)比較暗的顏色,

078ec970-8745-11ee-939d-92fbcf53809c.png

最終呈現(xiàn)的效果便如下圖所示,是不是看起來(lái)很舒服呢!

07948dec-8745-11ee-939d-92fbcf53809c.jpg

第二、代碼的端口命名、內(nèi)部寄存器的命名。下圖是我們最近做的項(xiàng)目,可以看出在端口眾多的情況下,端口的命名有多重要,基本上從信號(hào)的命名就可以直接聯(lián)想到該信號(hào)的作用,同理,內(nèi)部使用寄存器的命名也是如此。對(duì)于使用的系統(tǒng)時(shí)鐘命令最好是用clk+后綴,加上時(shí)鐘的頻率。這樣不僅自己看起來(lái)方便,別人看起來(lái)也方便。因?yàn)楹芏嗲闆r下,不同開(kāi)發(fā)板的晶振是不一樣的,但是編寫(xiě)者知道,其他人就未必知道了。我還真見(jiàn)過(guò)always@(posedge A or negedge B)這樣寫(xiě)的人的,當(dāng)然他也是剛開(kāi)始學(xué)習(xí)了。

復(fù)位信號(hào)也直觀只要,我習(xí)慣上寫(xiě)的而是rst+后綴,高電平有效還是低電平有效,rst_n(低電平有效negedge),rst_p(高電平有效posedge),我看過(guò)一些書(shū)上的復(fù)位信號(hào)命名的是clr,其實(shí)這兩種命名的方法根本沒(méi)有區(qū)別,一般情況下,我們復(fù)位都是將寄存器置數(shù)為0,也相當(dāng)于清零,但也不排除,復(fù)位是給置數(shù)的情況,所以我習(xí)慣上使用rst_n來(lái)復(fù)位,及低電平復(fù)位。

其他的信號(hào)也就類(lèi)似的,總結(jié)下來(lái)上就是,給信號(hào)起一目了然的名字,盡量使用縮寫(xiě),不要信號(hào)的名字太長(zhǎng),信號(hào)的名字和功能作用中間用下劃線隔開(kāi),要習(xí)慣性的給信號(hào)后面編寫(xiě)注釋?zhuān)o你編寫(xiě)的代碼塊做注釋?zhuān)o你編寫(xiě)的模塊做注釋?zhuān)?qǐng)記住你的代碼不是給你一個(gè)人寫(xiě)的。

07a6fb8a-8745-11ee-939d-92fbcf53809c.jpg

第三、代碼的工整。從上圖中可以看到,我在定義端口的時(shí)候是直接定義在module內(nèi)部的,很多人的寫(xiě)法是先在module內(nèi)部定義一遍端口,然后再module下面再寫(xiě)一遍input/output定義,其實(shí)這兩種方式都可以,那么我為什么選擇直接寫(xiě)在module內(nèi)部呢,,,因?yàn)槲覒邪 T诰帉?xiě)代碼的時(shí)候多用空格和TAB,把定義的信號(hào)對(duì)齊,這樣寫(xiě)出代碼是很漂亮的,每一段代碼之間應(yīng)該用分隔線隔開(kāi),這樣整體看起來(lái)很清晰。

07abad92-8745-11ee-939d-92fbcf53809c.jpg

模塊端口的實(shí)例化也是,這樣的代碼自己看著漂亮,別人看著也舒服,而且從頂往下看都會(huì)很明了。

07bc7604-8745-11ee-939d-92fbcf53809c.jpg

第四、在設(shè)計(jì)中多實(shí)用時(shí)序邏輯,尤其是直接需要輸出的端口。在我最近做的那個(gè)項(xiàng)目里,我使用了一些組合邏輯來(lái)做控制,但是后來(lái)發(fā)現(xiàn)這樣會(huì)有一個(gè)弊端,每次系統(tǒng)上電的時(shí)候會(huì)有一段不穩(wěn)定時(shí)間,在這段時(shí)間里,我的那幾個(gè)控制模塊就無(wú)規(guī)則的在亂啟動(dòng),即使是在復(fù)位的情況下,這樣可能會(huì)引起一些麻煩造成系統(tǒng)的不穩(wěn)定,如果采用是時(shí)序邏輯的話,就完全可以避免這個(gè)問(wèn)題了,在系統(tǒng)上電的時(shí)候,復(fù)位低有效,等上電穩(wěn)定后,將復(fù)位鍵變?yōu)楦唠娖健?/p>

第五、如果一個(gè)工程里,同一個(gè)宏定義需要在多個(gè)文件里調(diào)用的話,建議使用調(diào)用文件。比如我在寫(xiě)VGA驅(qū)動(dòng)的時(shí)候,行掃描、場(chǎng)掃描和各種顏色的定義參數(shù)需要在多個(gè)模塊中使用,所以可在模塊內(nèi)部直接寫(xiě)如下圖所示部分,把”`define”定義放在一個(gè)單獨(dú)的文件里面,”parameter”參數(shù)定義肯定必須是在模塊內(nèi)部了,檢查重復(fù)定義。

07ccef3e-8745-11ee-939d-92fbcf53809c.jpg

07d482bc-8745-11ee-939d-92fbcf53809c.jpg

第六、使用異步復(fù)位、同步置數(shù)的設(shè)計(jì)思想(可以了解一下異步復(fù)位、同步釋放),而且一個(gè)always塊里,盡量值操作一個(gè)寄存器。一個(gè)模塊的代碼不要寫(xiě)的太多,使用模塊化設(shè)計(jì),而且在頂層文件里盡量不了寫(xiě)代碼,為了在檢查RTL圖的時(shí)候比較方便明了的看出各個(gè)模塊之間的連線圖。模塊內(nèi)部不應(yīng)該使用內(nèi)部使用,同一個(gè)模塊內(nèi)的時(shí)鐘應(yīng)該是同一個(gè)時(shí)鐘驅(qū)動(dòng)下的,如果要使用別的時(shí)鐘進(jìn)行驅(qū)動(dòng)的話,必須使用時(shí)鐘使能而不是時(shí)鐘觸發(fā),保持所有always塊是同一個(gè)時(shí)鐘上升沿觸發(fā),如果確實(shí)要使用內(nèi)部時(shí)鐘門(mén)控時(shí)鐘或內(nèi)部的復(fù)位信號(hào)將它們放在頂層將這些信號(hào)的產(chǎn)生放在頂層的一個(gè)獨(dú)立模塊這樣所有的子模塊分別使用單一的時(shí)鐘和復(fù)位信號(hào)。對(duì)于使用if——else if——else或case語(yǔ)句必須把所有的情況都寫(xiě)上,避免生成鎖存器。最重要的第一點(diǎn),寄存器類(lèi)型的數(shù)據(jù)應(yīng)該有復(fù)位,我不習(xí)慣使用initial語(yǔ)句進(jìn)行初始化,一般都是用異步復(fù)位來(lái)為維持系統(tǒng)的穩(wěn)定。還有平時(shí)寫(xiě)代碼的時(shí)候盡量不要使用for循環(huán),當(dāng)然有些必要的時(shí)候也是可以用的。

第七、如果你遇到實(shí)在不好解決、苦思冥想都有邏輯錯(cuò)誤的設(shè)計(jì),那么這個(gè)時(shí)候,你就可以考慮一下?tīng)顟B(tài)機(jī)了。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21796

    瀏覽量

    605991
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110390
  • HDL
    HDL
    +關(guān)注

    關(guān)注

    8

    文章

    328

    瀏覽量

    47468
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4825

    瀏覽量

    69043
  • 編輯器
    +關(guān)注

    關(guān)注

    1

    文章

    806

    瀏覽量

    31290

原文標(biāo)題:淺談Verilog HDL代碼編寫(xiě)風(fēng)格

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    正弦振蕩用verilog HDL如何編寫(xiě)

    正弦振蕩用verilog HDL如何編寫(xiě)
    發(fā)表于 04-15 22:00

    Verilog HDL代碼書(shū)寫(xiě)規(guī)范

    :① 邏輯功能正確,②可快速仿真,③ 綜合結(jié)果最優(yōu)(如果是hardware model),④可讀性較好。2. 范圍本規(guī)范涉及Verilog HDL編碼風(fēng)格,編碼中應(yīng)注意的問(wèn)題, Testbench的編碼
    發(fā)表于 12-08 14:36

    勇敢的芯伴你玩轉(zhuǎn)Altera FPGA連載35:Verilog代碼風(fēng)格概述

    `勇敢的芯伴你玩轉(zhuǎn)Altera FPGA連載35:Verilog代碼風(fēng)格概述特權(quán)同學(xué),版權(quán)所有配套例程和更多資料下載鏈接:http://pan.baidu.com/s/1i5LMUUD 所謂
    發(fā)表于 12-27 10:07

    Verilog HDL代碼描述對(duì)狀態(tài)機(jī)綜合的研究

    有許多可綜合狀態(tài)機(jī)的Verilog代碼描述風(fēng)格,不同代碼描述風(fēng)格經(jīng)綜合后得到電路的物理實(shí)現(xiàn)在速度和面積上有很大差別。優(yōu)秀的
    發(fā)表于 12-24 00:52 ?30次下載
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b><b class='flag-5'>代碼</b>描述對(duì)狀態(tài)機(jī)綜合的研究

    基本組合邏輯功能雙向管腳的Verilog HDL代碼

    電子發(fā)燒友網(wǎng)核心提示: 本例程是Verilog HDL代碼:關(guān)于基本組合邏輯功能中雙向管腳的功能實(shí)現(xiàn)源代碼Verilog
    發(fā)表于 10-15 11:28 ?1637次閱讀

    Verilog HDL入門(mén)教程

    本文主要介紹了Verilog HDL 語(yǔ)言的一些基本知識(shí),目的是使初學(xué)者能夠迅速掌握HDL設(shè)計(jì)方法,初步了解并掌握Verilog HDL語(yǔ)言
    發(fā)表于 07-15 15:27 ?0次下載

    Verilog HDL入門(mén)教程之Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)教程

    本文檔的主要內(nèi)容詳細(xì)介紹的是Verilog HDL入門(mén)教程之Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)教程。
    發(fā)表于 09-20 15:51 ?83次下載
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>入門(mén)教程之<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>數(shù)字系統(tǒng)設(shè)計(jì)教程

    Verilog HDL入門(mén)教程

    本文主要介紹了Verilog HDL 語(yǔ)言的一些基本知識(shí),目的是使初學(xué)者能夠迅速掌握HDL 設(shè)計(jì)方法,初步了解并掌握Verilog HDL語(yǔ)
    發(fā)表于 02-11 08:00 ?99次下載
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>入門(mén)教程

    如何使用Verilog HDL描述可綜合電路?

    1、如何使用Verilog HDL描述可綜合電路 Verilog 有什么奇技淫巧?我想最重要的是理解其硬件特性。Verilog HDL語(yǔ)言僅
    的頭像 發(fā)表于 04-04 11:19 ?4261次閱讀
    如何使用<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>描述可綜合電路?

    Verilog HDL入門(mén)教程-Verilog HDL的基本語(yǔ)法

    Verilog HDL入門(mén)教程-Verilog HDL的基本語(yǔ)法
    發(fā)表于 01-07 09:23 ?179次下載

    什么樣的Verilog代碼風(fēng)格是好的風(fēng)格

    寫(xiě)代碼是給別人和多年后的自己看的。 關(guān)于Verilog代碼設(shè)計(jì)的一些風(fēng)格和方法之前也寫(xiě)過(guò)一些Verilog有什么奇技淫巧?
    的頭像 發(fā)表于 10-24 15:23 ?1605次閱讀

    如何使用參數(shù)化編寫(xiě)可重用的verilog代碼

    我們將介紹如何使用verilog參數(shù)和generate語(yǔ)句來(lái)編寫(xiě)可重用的verilog 代碼。 與大多數(shù)編程語(yǔ)言一樣,我們應(yīng)該嘗試使盡可能多的
    的頭像 發(fā)表于 05-11 15:59 ?1172次閱讀

    Vivado HDL編寫(xiě)示例

    Vivado 軟件提供了HDL編寫(xiě)中常用的示例,旨在幫助初學(xué)者更好地理解和掌握HDL編程,這里分享一下verilog代碼示例。
    的頭像 發(fā)表于 05-16 16:58 ?1115次閱讀

    一本Verilog HDL代碼對(duì)應(yīng)電路的書(shū),助你快速編寫(xiě)可綜合模型

    建立用于RTL綜合的Verilog標(biāo)準(zhǔn)化子集。他是貝爾實(shí)驗(yàn)室所開(kāi)發(fā)的ArchSyn綜合系統(tǒng)的主要設(shè)計(jì)者之一。他曾為AT&T和Lucent的許多設(shè)計(jì)師講授Verilog HDL語(yǔ)言和Verilo
    的頭像 發(fā)表于 05-26 16:59 ?1468次閱讀
    一本<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b><b class='flag-5'>代碼</b>對(duì)應(yīng)電路的書(shū),助你快速<b class='flag-5'>編寫(xiě)</b>可綜合模型

    Verilog編碼風(fēng)格的建議

    良好的編碼風(fēng)格,有助于代碼的閱讀、調(diào)試和修改。雖然 Verilog 代碼可以在保證語(yǔ)法正確的前提下任意編寫(xiě),但是潦草的編碼
    的頭像 發(fā)表于 06-01 16:27 ?758次閱讀
    <b class='flag-5'>Verilog</b>編碼<b class='flag-5'>風(fēng)格</b>的建議
    百家乐官网赌博策略| 百家乐官网信誉平台现金投注| 百家乐代理| 百家乐开户代理| 太阳城百家乐官网如何看路| 澳门顶级赌场手机在线链接| 百家乐是否能赢| 百家乐官网娱乐平台备用网址| 新郑市| 大发888支付宝代充| 澳门赌百家乐打法| 百家乐官网游戏打水| 百家乐官网咨询网址| 百家乐偷码| 百家乐官网游戏筹码| 中国百家乐官网游戏| 团风县| 大发888在线服务| 百家乐赌场群| 百家乐官网园qq群| 哪个百家乐官网技巧平台信誉好| 赌博堕天录漫画| 太阳城会员| 百家乐注册彩金| 属鼠跟属虎做生意| 百家乐官网娱乐网真人娱乐网| 沙巴百家乐官网现金网| 博彩通排名| 大发888 代充| 大中华百家乐的玩法技巧和规则| gt百家乐平台| 百家乐官网平台| 百家乐官网专业术语| 百家乐公式| 金煌棋牌官网| 太阳城官方网| 路单百家乐的玩法技巧和规则 | 馆陶县| 百家乐真人游戏| 大发888娱乐城 真钱| 嘉兴太阳城大酒店|