新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Verilog HDL基礎(chǔ)知識9之代碼規(guī)范

        Verilog HDL基礎(chǔ)知識9之代碼規(guī)范

        作者: 時間:2024-02-26 來源:電子森林 收藏

        1.1標(biāo)準(zhǔn)的文件頭


        在每一個版塊的開頭一定要使用統(tǒng)一的文件頭,其中包括作者名,模塊名,創(chuàng)建日期,概要,更改記錄,版權(quán)等必要信息。 統(tǒng)一使用以下的文件頭:其中*為必需的項目

        本文引用地址:http://www.104case.com/article/202402/455692.htm
        //********************************************************
        //
        //   Copyright(c)2016, ECBC 
        //   All rights reserved
        //
        //   File name       :   MODULE_NAME.v
        //   Module name     :   MODULE_NAME
        //   Author          :   STEP
        //   Description     :  
        //   Email           :   Author’s email
        //   Data            :   2016/08/01
        //   Version         :   current version, just this: v1.0
        //
        //   Abstract        :   
        //
        //   Modification history
        // Version       Data(2016/08/01)   V1.0
        // Description
        //
        //*************************************************************

        1.2標(biāo)準(zhǔn)的module格式

        對于模塊的書寫采用統(tǒng)一的格式便于項目內(nèi)部成員的理解和維護(hù),我們用批處理建立了一個MODULE模塊,其內(nèi)容解釋如下:
        端口定義按照輸入,輸出,雙向的順序:
        模塊名、模塊例化名統(tǒng)一,例化名前加大寫U以區(qū)分 ( 多次例化另加標(biāo)識 ),三者關(guān)系:
        文件名 :xxx .v (小寫)
        模塊名 :XXX (大寫)
        例化名 :U
        XXX (大寫)
        IP 內(nèi)部所有的模塊名都要加IP名或者IP名簡稱作前綴,如USBCTRL、USBTX_FIFO。

        // *****************************
        //  DEFINE MODULE PORT  
        //
        // ******************************
        //
        module  MODULE_NAME  				//模塊名一行
        (  						//括號頂格,端口部分換行
        	// INPUT  				//盡量先輸入,后輸出定義
        	input_port_1, 				//可同時按接口對象等分類,一行一個
        	…
        	input_port_m,  	// OUTPUT
        	output_port_1,
        	…
        	output_port_m, );
        	// *****************************
        	//  DEFINE PARAMETER  	
        	// ******************************
        	parameter… 				//參數(shù)名采用大寫 	
        	// ******************************
        	// DEFINE INPUT
        	// ******************************
        	input				rst_n   ;    	// reset, (active low) .	
        	//input到寄存器名之間四個tab鍵,注意對齊
        	input				clk_*   ;    	// clock signal , 50M .		
        	//注意注釋的格式,簡潔有力,盡量使用英文
        	input  [n:0]		        a_din   ;    	// *****			
        	//此處是在模塊名部分沒有聲明端口類型時用
        	input  [k:0]		        b_din   ;    	// *****			
        	//注釋盡量不要挨到前面,然后全左對齊 	
        	// ******************************
        	// DEFINE OUTPUT  
        	// ******************************
        	output  [m:0]    	a_dout   ;    	// *****				
        	//位寬定義和output之間加一個tab或空格,統(tǒng)一即可
        	output  [i:0]    	b_dout   ;    	// ***** 	
        	// ******************************
        	// OUTPUT ATRRIBUTE  
        	// ******************************
        	// REGS
        	reg   [m:0]    		a_dout   ;     // *****
        	//WIRES
        	wire  [i:0]     	b_dout   ;     // ***** 
         	// ******************************
        	// INSTSNCE MODULE   
        	// ******************************
        	MODULE_NAME_A  	U_MODULE_NAME_A(					//例化名從和模塊名相距四個tab,括號后換行
        					.A	(A			),	//端口和例化名對齊,后3個tab再括號連線
        					.B	(B			),	//括號內(nèi)3個tab的寬度,全對齊
        					.C	(C			),
        					); …
         	// ******************************
        	//MAIN CODE  
        	// ******************************
        	… …
        	… …
        	… …	
        	// ******************************  //
        	endmodule									//結(jié)尾頂格,中間部分均從一個tab開始

        1.3一致的排版

        A. 一致的縮排

        	//統(tǒng)一的縮排取4個空格寬度
        	//輸入輸出信號的寬度定義與關(guān)鍵字之間,信號名與寬度之間要用tab分開;所有寬度定義對所有信號名對齊,代碼風(fēng)格統(tǒng)一如下:     
        	input   [3:0]   	input_a  ;    // *****
                input		        input_b  ;    // *****
                   …    
                output  [128:0] 	output_a ;
                output  [15:0]  	output_b ;
                output		        output_c ;

        B.一致的 begin end 書寫方式

        	//always 中,一定要用begin end 區(qū)分,格式和代碼風(fēng)格統(tǒng)一如下:
        	always @ (postedge clk or negedge rst_n)	
        	begin
        		if (rst_n==1’b0)
        			syn_rst<= ‘DLY 1’b0;
        		else
        			begin
        				if (a==b)
        					syn_rst<= ‘DLY 1’b1;
        				else
        					syn_rst<= ‘DLY 1’b0;
        			end
        	end
        	//if else 中僅有一個語句行時,不要使用begin end; 如果有多個語句行時,begin end和if ()或else ()空四個格。	格式如下:
        	if  (…)
        	…	
        	else if (…)
        	else 
        	//******************************************************************** 	
        	if  (…)
        		…	
        	else if (…)
        		    begin
        			…
        			…(
        		    end
        	else

        1.4 一致的信號命名風(fēng)格

        簡潔,清晰,有效是基本的信號命名規(guī)則,詳見命名規(guī)范。

        全稱縮寫中文含義
        acknowledgeack應(yīng)答
        adressaddr(ad)地址
        arbiterarb仲裁
        checkchk校驗,如CRC校驗
        clockclk時鐘
        configcfgConfiguration,裝置
        controlctrl控制
        countcnt計數(shù)
        data indin(di)數(shù)據(jù)輸入
        data outdout(do)數(shù)據(jù)輸出
        decodede譯碼
        decreasedec減一
        delaydly
        disabledis不使能
        errorerr錯誤(指示)
        enableen使能
        framefrm
        generategen生成,如CRC生成
        grantgnt申請通過
        increaseinc加一
        inputin(i)
        lengthlen(幀、包)長
        nmportnm網(wǎng)管相關(guān)
        outputout(o)
        packet不推薦packetpkt與幀相同
        prioritypri優(yōu)先級
        pointerptr指針
        rd enableren讀使能
        readrd讀(操作)
        readyrdy應(yīng)答信號或準(zhǔn)備好
        receiverx(幀數(shù)據(jù))接收
        requestreq(服務(wù)、仲裁)請求
        resetrst
        segmentseg
        soucescr源(端口)
        ststisticsstat統(tǒng)計
        timertmr定時器
        switchersfSwitch fabric
        temporarytmp臨時
        transmittx發(fā)送(幀數(shù)據(jù))相關(guān)
        Validvld(v)有效、校驗正確
        wr enablewen寫使能
        writewr寫操作

        a.端口、信號、變量名的所有字母小寫:函數(shù)名、宏定義、參數(shù)定義用大寫
        b.使用簡稱、縮略詞(加上列表)
        c.基于含義命名(避免以數(shù)字命名的簡單做法),含義可分段(最多分三段),每一小段之間加下劃線””,如txdataval;命名長度一般限制在20個字符以內(nèi)。
        d.低電平有效信號,加后綴”
        n”,如 rstn
        e.無條件寄存的寄存信號在原信號上加ff1、ff2… 如原信號 data
        in, 寄存一拍datainff1,寄存兩拍datainff2
        f.不能用 ”reg”,作為最后的后綴名,因為綜合工具會給寄存器自動加上reg, 如果命名里就用reg作為后綴名則擾亂了網(wǎng)表的可讀性。



        關(guān)鍵詞: FPGA verilog HDL 代碼規(guī)范

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 靖宇县| 辉南县| 金昌市| 曲沃县| 子长县| 襄樊市| 武安市| 无极县| 光泽县| 静安区| 衡东县| 津市市| 永胜县| 大足县| 侯马市| 霸州市| 乌鲁木齐县| 楚雄市| 确山县| 休宁县| 曲阳县| 塘沽区| 科尔| 永年县| 江孜县| 安岳县| 淮北市| 故城县| 英山县| 区。| 广饶县| 阿图什市| 界首市| 绍兴县| 昭平县| 越西县| 山丹县| 突泉县| 昔阳县| 睢宁县| 温州市|