新聞中心

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

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

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

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


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

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

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

        1.3一致的排版

        A. 一致的縮排

        	//統(tǒng)一的縮排取4個(gè)空格寬度
        	//輸入輸出信號(hào)的寬度定義與關(guān)鍵字之間,信號(hào)名與寬度之間要用tab分開;所有寬度定義對(duì)所有信號(hào)名對(duì)齊,代碼風(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 中僅有一個(gè)語(yǔ)句行時(shí),不要使用begin end; 如果有多個(gè)語(yǔ)句行時(shí),begin end和if ()或else ()空四個(gè)格。	格式如下:
        	if  (…)
        	…	
        	else if (…)
        	else 
        	//******************************************************************** 	
        	if  (…)
        		…	
        	else if (…)
        		    begin
        			…
        			…(
        		    end
        	else

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

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

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

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



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

        評(píng)論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 桑植县| 唐河县| 区。| 大城县| 山东| 鸡西市| 喀什市| 花垣县| 肇州县| 荆州市| 雷波县| 藁城市| 蒙阴县| 古蔺县| 营山县| 清涧县| 宽甸| 融水| 伊宁市| 弥勒县| 垫江县| 屯昌县| 济宁市| 潜山县| 绥棱县| 天祝| 湖北省| 安溪县| 古浪县| 芦山县| 双城市| 贵阳市| 锡林郭勒盟| 林西县| 潮州市| 华池县| 阜城县| 嵊州市| 江津市| 麻江县| 昌都县|