<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

1.1標準的文件頭


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

本文引用地址:http://dyxdggzs.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格式

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

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

1.3一致的排版

A. 一致的縮排

	//統一的縮排取4個(gè)空格寬度
	//輸入輸出信號的寬度定義與關(guān)鍵字之間,信號名與寬度之間要用tab分開(kāi);所有寬度定義對所有信號名對齊,代碼風(fē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 書(shū)寫(xiě)方式

	//always 中,一定要用begin end 區分,格式和代碼風(fē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 一致的信號命名風(fēng)格

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

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

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



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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>