经典Verilog代码标准
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、工程建立规范:
1、工程的组成:
(1)一个顶层文件夹
(2)顶层文件夹下,至少包括以下四个子文件夹
a)project文件夹:存放ISE工程文件,包括ise、bit、mac等文件
b)source文件夹:存放verilog源文件
c)explain文件件:存放注释说明文档
d)test文件夹:存放测试程序代码,可进一步分为软件调试程序、硬件调试程序
2、工程的命令:
(3)定层文件夹命令为top_xxx,xxx为工程的识别名称
(4)顶层文件夹的子文件夹分别命名为:project、source、explain、test
二、RTL CODE 规范
1.标准的文件头
在每一个版块的开头一定要使用统一的文件头,其中包括作者名,模块名,创建日期,概要,更改记录,版权等必要信息。
统一使用以下的文件头:
// **************************************************************
// COPYRIGHT(c)2005, Hislicon Technologies Co, Ltd
// All rights reserved.
//
// IP LIB INDEX : IP lib index just sa UTOPIA_B
// IP Name : the top module_name of this ip, usually, is same
// as the small ip classified name just as UTOPIA
// File name : file_name of the file just as “tx_fifo.v”
// Module name : module_name of this file just as “TX_FIFO”
// Full name : complete Emglish nme of this abbreviated
//
// Author : Athor/ID
// Email : Author‟s email
// Data :
// Version : V 1.0
//
//Abstract :
// Called by : Father Module
//
// Modification history
// ------------------------------------------------------------------------------------------------------
// //
// $Log$
//
// *********************************************************************
2. 标准的module 格式(module 整体结构)
对于模块的书写采用统一的格式便于项目内部成员的理解和维护,我们用批处理建立了一个MODULE模块,其内容解释如下:
●端口定义按照输入,输出,双向的顺序:
●模块名、模块例化名统一,例化名前加大写U_以区分(多次
例化另加标识),三者关系:
文件名:xxx .v (小写)
模块名:Xxx (首字母大写)
例化名:U1_xxx (首字母大写)
IP 内部所有的模块名都要加IP名或者IP名简称作前缀,如USB_CTRL、USB_TX_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 clk_* ; // clock signal , 50M .
input [n:0] a_din ; // *****
input [k:0] b_din ; // *****
// ******************************
// DEFINE OUTPUT //
// ******************************
output [m:0] a_dout ; // *****
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(
.A (A ),
.B (B ),
.C (C ),
); …
// ******************************
//MAIN CODE //
// ******************************
… …
… …
… …
// ****************************** //
Endmodule
3.一致的排版
A. 一致的缩排
●统一的缩排取4个空格宽度
●输入输出信号的宽度定义与关键字之间,信号名与宽度之间要用
空格分开;所有宽度定义对所有信号名对齐,代码风格统一如下:input [3:0] input_a ; // *****
input input_b ; // *****
…