色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          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://cafeforensic.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)部成員的理解和維護,我們用批處理建立了一個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)閉