<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統 > 設計應用 > Verilog HDL基礎知識9之代碼規范

          Verilog HDL基礎知識9之代碼規范

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

          1.1標準的文件頭


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

          本文引用地址:http://www.ex-cimer.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標準的module格式

          對于模塊的書寫采用統一的格式便于項目內部成員的理解和維護,我們用批處理建立了一個MODULE模塊,其內容解釋如下:
          端口定義按照輸入,輸出,雙向的順序:
          模塊名、模塊例化名統一,例化名前加大寫U以區分 ( 多次例化另加標識 ),三者關系:
          文件名 :xxx .v (小寫)
          模塊名 :XXX (大寫)
          例化名 :U
          XXX (大寫)
          IP 內部所有的模塊名都要加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… 				//參數名采用大寫 	
          	// ******************************
          	// 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或空格,統一即可
          	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			),	//括號內3個tab的寬度,全對齊
          					.C	(C			),
          					); …
           	// ******************************
          	//MAIN CODE  
          	// ******************************
          	… …
          	… …
          	… …	
          	// ******************************  //
          	endmodule									//結尾頂格,中間部分均從一個tab開始

          1.3一致的排版

          A. 一致的縮排

          	//統一的縮排取4個空格寬度
          	//輸入輸出信號的寬度定義與關鍵字之間,信號名與寬度之間要用tab分開;所有寬度定義對所有信號名對齊,代碼風格統一如下:     
          	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 區分,格式和代碼風格統一如下:
          	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 一致的信號命名風格

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

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

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



          評論


          相關推薦

          技術專區

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();