色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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編碼風(fēng)格的建議

冬至子 ? 來(lái)源:數(shù)字IC與好好生活的兩居室 ? 作者:除夕之夜啊 ? 2023-06-01 16:27 ? 次閱讀

良好的編碼風(fēng)格,有助于代碼的閱讀、調(diào)試和修改。雖然 Verilog 代碼可以在保證語(yǔ)法正確的前提下任意編寫(xiě),但是潦草的編碼風(fēng)格往往是一錘子買(mǎi)賣(mài)。有時(shí)回看自己編寫(xiě)的代碼,既看不出信號(hào)的意義,也不了解模塊的功能,還得從邏輯上一步步分析,就會(huì)消耗大量的時(shí)間和精力去消化,嚴(yán)重影響設(shè)計(jì)進(jìn)度。

為了不讓別人或自己由衷的感嘆出:這特喵的是哪個(gè)“小傻寶”寫(xiě)的代碼!下面對(duì)編碼風(fēng)格進(jìn)行一定意義上的建議。

關(guān)于命名

◆信號(hào)變量、模塊等一定要使用有意義的名字,且信號(hào)名稱(chēng)在模塊間穿梭時(shí)也應(yīng)該保持不變,以便代碼自身就具有清晰的說(shuō)明信息,增強(qiáng)可讀性。

◆當(dāng)名字單詞數(shù)量過(guò)多時(shí),可以使用首字母大寫(xiě)或下劃線“_”進(jìn)行拼接。個(gè)人喜歡后者,比較清晰。

reg     DataToDestinationClock ;
  reg     data_to_destination_clock ; //推薦

◆建議使用單詞縮寫(xiě)的方式對(duì)信號(hào)進(jìn)行命名,并懂得取舍,避免過(guò)長(zhǎng)的信號(hào)命名。例如 clock 縮寫(xiě)為 clk, destination 縮寫(xiě)為 dest,source 縮寫(xiě)為 src 等。

reg     data_to_destination_clock ;
  reg     des_data ; //推薦

◆巧用數(shù)字代表英文字母,例如 2 代表 to, 4 代表 for, 可以省略一丟丟代碼空間。

reg     clk_for_test, sig_uart_to_spi ;
  reg     clk4test, sig_uart2spi ; //推薦

◆雖然 Verilog 區(qū)分大小寫(xiě),但是建議一般功能模塊的名稱(chēng)、端口、信號(hào)變量等全部使用小寫(xiě),parameter 使用大寫(xiě),一些電源、pad 等特殊端口使用大寫(xiě)。只為編寫(xiě)代碼方便,容易區(qū)分常量變量,不用考慮大小寫(xiě)不一樣但名字相同的信號(hào)變量的差異。

parameter         DW = 8 ; //常量
  reg [DW-1 : 0]    wdata ;  //變量

寄存器變量一般加后綴 “_r”, 延遲打拍的變量加后綴“_r1”、“_r2”等。主要有兩大好處。一是 RTL 設(shè)計(jì)時(shí)容易根據(jù)變量類(lèi)型對(duì)數(shù)據(jù)進(jìn)行操作。二是綜合后網(wǎng)表的信號(hào)名字經(jīng)常會(huì)改變,加入后綴容易在綜合后網(wǎng)表中找到與 RTL 中對(duì)應(yīng)的信號(hào)變量。

wire      dout_en ;
  reg       dout_en_r ;
  ...  //dout_en_r 的邏輯
  assign    dout_en = dout_en_r ;

◆其他尾綴:_d 可以表示延遲后的信號(hào),_t 可以表示暫時(shí)存儲(chǔ)的信號(hào),_n 可以表示低有效的信號(hào),_s 可以表示 slave 信號(hào),_m 可以表示 master 信號(hào)等。

◆避免使用關(guān)鍵字對(duì)信號(hào)進(jìn)行命名,例如 in, out, x, z 均不建議作為變量。

◆文件名字保持與設(shè)計(jì)的 module 名字一致,文件內(nèi)盡量只包含一個(gè)設(shè)計(jì)模塊。

關(guān)于注釋

◆每一個(gè)設(shè)計(jì)模塊開(kāi)頭,都應(yīng)該包含文件說(shuō)明信息,包括版權(quán)、模塊名字、作者、日期、梗概、修改記錄等信息。例如:

/**********************************************************
// Copyright 1891.06.02-2017.07.14
// Contact with willrious@sina.com
================ runoob.v ======================
> > Author       : willrious
> > Date         : 1995.09.07
> > Description  : Welcome
> > note         : (1)To
> >              : (2)My
> > V180121      : World.
************************************************************/

◆注釋?xiě)?yīng)該精煉的表達(dá)出代碼所描述的意義,簡(jiǎn)短的注釋在一行語(yǔ)句代碼之后添加,過(guò)長(zhǎng)的注釋提前一行書(shū)寫(xiě)。

//輸出位寬小于輸入位寬,求取縮小的倍數(shù)及對(duì)應(yīng)的位數(shù)
   parameter       SHRINK       = DWI/DWO ;
   reg [AWI-1:0]         ADDR_WR ; //寫(xiě)地址

◆注釋盡量用英文書(shū)寫(xiě),以保證不同操作系統(tǒng)、不同編輯器下能夠正常顯示。

◆端口信號(hào)中,除一般的時(shí)鐘和復(fù)位信號(hào),其他信號(hào)最好也進(jìn)行注釋。

◆注釋功能非常強(qiáng)大,可以使用注釋信息畫(huà)出時(shí)序圖,甚至可以使用注釋畫(huà)出數(shù)字電路結(jié)構(gòu)圖。

圖片

圖片

關(guān)于優(yōu)化

◆使用圓括號(hào)確定程序的優(yōu)先級(jí)或邏輯結(jié)構(gòu)。為避免操作符優(yōu)先級(jí)問(wèn)題導(dǎo)致設(shè)計(jì)錯(cuò)誤,建議多多使用圓括號(hào)。同時(shí),圓括號(hào)的巧妙使用有時(shí)候也會(huì)優(yōu)化邏輯綜合后的結(jié)構(gòu)。例如:

//往往被綜合成串行的 3 個(gè)加法器
    assign F = A + B + C + D ;
    //往往被綜合成并行的的 2 個(gè)加法器和 1 個(gè)級(jí)聯(lián)的加法器,時(shí)序更加寬松
    assign F = (A + B) + (C + D) ;
//不推薦
    assign flag = cnt == 4'd2 && mode == 2'b01;
    //推薦
    assign flag = (cnt == 4'd2) && (mode == 2'b01);

◆條件語(yǔ)句盡量使用 case 語(yǔ)句代替 if 語(yǔ)句。當(dāng)同級(jí)別的條件判斷語(yǔ)句過(guò)多時(shí),使用 case 語(yǔ)句綜合后的硬件結(jié)構(gòu),往往比 if 語(yǔ)句消耗更少的資源,擁有更好的時(shí)序。

◆狀態(tài)機(jī)編寫(xiě)時(shí),盡量使用 3 段式,以保證代碼具有良好的整潔性和安全性。

◆系統(tǒng)設(shè)計(jì)時(shí),盡量采用模塊按功能分割、然后進(jìn)行模塊例化的方法。相比成千上萬(wàn)行代碼都集成在一個(gè)文件中,模塊分割有利于團(tuán)隊(duì)設(shè)計(jì),便于更新維護(hù)。

關(guān)于美觀

◆端口信號(hào)保證每行一個(gè)信號(hào),逗號(hào)緊跟在端口聲明之后,強(qiáng)迫癥患者請(qǐng)保持逗號(hào)也對(duì)齊。

//不推薦
module even_divisor (input rstn, clk, output clk_div2, clk_div4, clk_div10) ;

//推薦
module even_divisor    (
    input               rstn     ,
    input               clk      ,
    output              clk_div2 ,
    output              clk_div4 ,
    output              clk_div10
    );

◆一行代碼內(nèi)容過(guò)長(zhǎng)時(shí),盡量換行編寫(xiě),無(wú)需使用換行符,例如:

assign rempty    = (rover_flag == rq2_wptr_decode[AWI]) &&
                   (raddr_ex >= rq2_wptr_decode[AWI-1:0]);

◆盡量使用 begin + end 的方式保證執(zhí)行語(yǔ)句間的層疊關(guān)系。begin 與關(guān)鍵字同行,end 另起一行。例如,always 語(yǔ)句塊使用時(shí),或條件語(yǔ)句只有一條執(zhí)行語(yǔ)句時(shí),都可以省略 begin + end 關(guān)鍵字。但為保證結(jié)構(gòu)的完整性,以及后續(xù)代碼的調(diào)試與修改,還是建議加入此類(lèi)關(guān)鍵字。

always @(posedge dout_clk or negedge rstn) begin
      if (!rstn) begin
         dout_en_r       <= 1'b0 ;
      end
      else begin
         dout_en_r       <= rd_en_wir ;
      end
   end

◆盡量使用 tab 鍵和空格,保證語(yǔ)句按照層級(jí)結(jié)構(gòu)對(duì)齊,變量、關(guān)鍵字、操作符之間也應(yīng)該留有空隙,便于邏輯判斷。

generate
      if (DWO >= DWI) begin
         reg [DWI-1:0]         mem [(1<

◆模塊例化時(shí),端口信號(hào)盡量與連接信號(hào)隔開(kāi),并各自對(duì)齊。連接信號(hào)為向量時(shí)指明其位寬,方便閱讀、調(diào)試。

ram   u_ram(
        .CLK_WR          (clk),
        .WR_EN           (wren), //寫(xiě)滿時(shí)禁止寫(xiě)
        .ADDR_WR         (addr),
        .D               (wdata[9:0]),
        .Q               (rdata[31:0])
        );

◆例化多個(gè)相同的模塊時(shí),盡量使用 generate 語(yǔ)句,避免過(guò)長(zhǎng)的例化代碼描述。

聲明:本文內(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)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5336

    瀏覽量

    120232
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110077
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    385

    瀏覽量

    59763
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Verilog阻塞和非阻塞原理分析

    的,以及什么時(shí)候該用“非阻塞賦值”。這篇文章將介紹怎樣設(shè)定“非阻塞賦值”和“阻塞賦值”,給出了重要的使得編碼可以被正確地綜合的編碼指導(dǎo)方針,和避免仿真競(jìng)爭(zhēng)的編碼風(fēng)格細(xì)節(jié)。[hide][
    發(fā)表于 11-23 12:02

    HDL編碼風(fēng)格編碼

    本帖最后由 mr.pengyongche 于 2013-4-30 02:58 編輯 HDL編碼風(fēng)格編碼
    發(fā)表于 08-12 12:09

    編碼風(fēng)格編碼

    本帖最后由 mr.pengyongche 于 2013-4-30 02:56 編輯 編碼風(fēng)格編碼
    發(fā)表于 08-17 09:34

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

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

    Linux內(nèi)核編碼風(fēng)格(編程代碼風(fēng)格推薦)

    現(xiàn)編碼素質(zhì)的重要性。相反沒(méi)有良好的風(fēng)格的代碼讀起來(lái)難看、晦澀,甚至有時(shí)候一個(gè)括號(hào)沒(méi)對(duì)齊就能造成對(duì)程序的曲解或者不理解。我曾經(jīng)就遇見(jiàn)過(guò)這樣的情況,花費(fèi)了很多不必要的時(shí)間在程序的上下文對(duì)照上,還debug了
    發(fā)表于 08-24 09:45

    Gowin HDL編碼風(fēng)格要求及編碼實(shí)現(xiàn)

    本手冊(cè)主要描述高云?HDL 編碼風(fēng)格要求及原語(yǔ)的 HDL 編碼實(shí)現(xiàn),旨在幫助用戶(hù)快速熟悉高云 HDL 編碼風(fēng)格和原語(yǔ)實(shí)現(xiàn),指導(dǎo)用戶(hù)設(shè)計(jì),提高
    發(fā)表于 09-29 06:23

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

    推薦的代碼風(fēng)格。3、代碼風(fēng)格1、規(guī)則總覽在設(shè)計(jì)這個(gè)模塊的時(shí)候,我主要遵從了以下幾條規(guī)則:Verilog2001標(biāo)準(zhǔn)的端口定義DUMMY模塊邏輯型信號(hào)用參數(shù)賦值內(nèi)嵌斷言memory shell2、規(guī)則解釋接下來(lái)
    發(fā)表于 06-02 14:48

    Altera代碼風(fēng)格講義--作者:駿龍小馬

    一個(gè)講解Altera代碼風(fēng)格的講義,適合初學(xué)者看看,verilog的代碼風(fēng)格
    發(fā)表于 11-17 18:07 ?0次下載

    verilog實(shí)現(xiàn)的RS204—188編碼

    這是verilog實(shí)現(xiàn)的RS204—188編碼,附帶測(cè)試文件
    發(fā)表于 01-20 18:24 ?28次下載

    華為的verilog編碼規(guī)范

    華為的verilog編碼規(guī)范
    發(fā)表于 11-01 08:41 ?41次下載
    華為的<b class='flag-5'>verilog</b><b class='flag-5'>編碼</b>規(guī)范

    Verilog HIDL的RTL設(shè)計(jì)風(fēng)格指南資源下載

    Verilog HIDL的RTL設(shè)計(jì)風(fēng)格指南資源下載
    發(fā)表于 04-13 10:09 ?9次下載

    Gowin HDL編碼風(fēng)格用戶(hù)指南

    本手冊(cè)主要描述高云?HDL 編碼風(fēng)格要求及原語(yǔ)的 HDL 編碼實(shí)現(xiàn),旨在 幫助用戶(hù)快速熟悉高云 HDL 編碼風(fēng)格和原語(yǔ)實(shí)現(xiàn),指導(dǎo)用戶(hù)設(shè)計(jì),
    發(fā)表于 09-15 16:02 ?0次下載
    Gowin HDL<b class='flag-5'>編碼</b><b class='flag-5'>風(fēng)格</b>用戶(hù)指南

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

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

    阿里AliOS的編碼風(fēng)格

    其實(shí),我們身邊就有很多“好的資源”值得學(xué)習(xí),比如本文分享的 阿里 AliOS 的編碼風(fēng)格。
    發(fā)表于 06-02 09:26 ?234次閱讀

    二十進(jìn)制編碼器及Verilog HDL描述 Verilog HDL程序的基本結(jié)構(gòu)及特點(diǎn)

    節(jié)通過(guò)硬件描述語(yǔ)言Verilog HDL對(duì)二十進(jìn)制編碼器的描述,介紹Verilog HDL程序的基本結(jié)構(gòu)及特點(diǎn)。
    的頭像 發(fā)表于 08-28 09:54 ?2922次閱讀
    二十進(jìn)制<b class='flag-5'>編碼</b>器及<b class='flag-5'>Verilog</b> HDL描述 <b class='flag-5'>Verilog</b> HDL程序的基本結(jié)構(gòu)及特點(diǎn)
    主站蜘蛛池模板: 伊人久久国产精品| 免费人成在线观看视频不卡| 一个人HD在线观看免费高清视频 | 暖暖视频免费观看社区| cntv官网| 添加一点爱与你电视剧免费观看| 国产美女视频一区二区二三区| 亚洲黄色成人| 麻豆AV久久AV盛宴AV| jijzzizz中国版| 同时被两个男人轮流舔| 韩国免费啪啪漫画无遮拦健身教练| 野花日本完整版在线观看免费高清 | 国产成人精品电影在线观看| 亚洲AV永久无码精品老司机蜜桃| 九九精品视频在线播放| 69精品国产人妻蜜桃国产毛片| 人妻天天爽夜夜爽三区麻豆A片| 国产精品欧美亚洲| 曰产无码久久久久久精品| 免费毛片a在线观看67194 | 浴室里强摁做开腿呻吟的漫画| 嫩草亚洲国产精品| 国产成人欧美日韩在线电影 | 日本国产黄色片| 国产亚洲精品首页在线播放| 中国农村真实bbwbbwbbw| 秋霞在线观看视频一区二区三区| 国产成人综合高清在线观看| 一边捏奶头一边啪高潮会怎么样| 免费视频久久只有精品| 国产精品青青青高清在线密亚 | 黑人娇小BBW| 99精品小视频| 性888xxxx入欧美| 免费A级毛片无码鲁大师| 国产精品97久久AV色婷婷| 影888午夜理论不卡| 无码人妻精品一区二区蜜桃色欲| 工口肉肉彩色不遮挡| 亚洲中文在线偷拍|