您好,欢迎进入山西润盛进出口有限公司!

咨询服务热线

15383419322

Verilog HDL基础知识9之代码规范

发布时间:2024-02-26 11:19人气:

1.1标准的文件头


在每一个版块的开头一定要使用统一的文件头,其中包括作者名,模块名,创建日期,概要,更改记录,版权等必要信息。 统一使用以下的文件头:其中*为必需的项目

//******************************************************** // //Copyright(c)2016,ECBC //Allrightsreserved // //Filename:MODULE_NAME.v //Modulename:MODULE_NAME //Author:STEP //Description: //Email:Author’semail //Data:2016/08/01 //Version:currentversion,justthis:v1.0 // //Abstract: // //Modificationhistory //VersionData(2016/08/01)V1.0 //Description // //*************************************************************


1.2标准的module格式

对于模块的书写采用统一的格式便于项目内部成员的理解和维护,我们用批处理建立了一个MODULE模块,其内容解释如下:端口定义按照输入,输出,双向的顺序:模块名、模块例化名统一,例化名前加大写U以区分 ( 多次例化另加标识 ),三者关系:文件名 :xxx .v (小写)模块名 :XXX (大写)例化名 :UXXX (大写)IP 内部所有的模块名都要加IP名或者IP名简称作前缀,如USBCTRL、USBTX_FIFO。

//***************************** //DEFINEMODULEPORT // //****************************** // moduleMODULE_NAME //模块名一行 ( //括号顶格,端口部分换行 //INPUT //尽量先输入,后输出定义 input_port_1, //可同时按接口对象等分类,一行一个 … input_port_m, //OUTPUT output_port_1, … output_port_m,); //***************************** //DEFINEPARAMETER //****************************** parameter… //参数名采用大写 //****************************** //DEFINEINPUT //****************************** input rst_n; //reset,(activelow). //input到寄存器名之间四个tab键,注意对齐 input clk_*; //clocksignal,50M. //注意注释的格式,简洁有力,尽量使用英文 input[n:0] a_din; //***** //此处是在模块名部分没有声明端口类型时用 input[k:0] b_din; //***** //注释尽量不要挨到前面,然后全左对齐 //****************************** //DEFINEOUTPUT //****************************** output[m:0] a_dout; //***** //位宽定义和output之间加一个tab或空格,统一即可 output[i:0] b_dout; //***** //****************************** //OUTPUTATRRIBUTE //****************************** //REGS reg[m:0] a_dout;//***** //WIRES wire[i:0] b_dout;//***** //****************************** //INSTSNCEMODULE //****************************** MODULE_NAME_A U_MODULE_NAME_A( //例化名从和模块名相距四个tab,括号后换行 .A (A ), //端口和例化名对齐,后3个tab再括号连线 .B (B ), //括号内3个tab的宽度,全对齐 .C (C ), );… //****************************** //MAINCODE //****************************** …… …… …… //******************************// 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中,一定要用beginend区分,格式和代码风格统一如下: always@(postedgeclkornegedgerst_n) begin if(rst_n==1’b0) syn_rst<=‘DLY1’b0; else begin if(a==b) syn_rst<=‘DLY1’b1; else syn_rst<=‘DLY1’b0; end end //ifelse中仅有一个语句行时,不要使用beginend;如果有多个语句行时,beginend和if()或else()空四个格。 格式如下: if(…) … elseif(…) else //******************************************************************** if(…) … elseif(…) 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”,如 rstne.无条件寄存的寄存信号在原信号上加ff1、ff2… 如原信号 datain, 寄存一拍datainff1,寄存两拍datainff2f.不能用 ”reg”,作为最后的后缀名,因为综合工具会给寄存器自动加上reg, 如果命名里就用reg作为后缀名则扰乱了网表的可读性。

  • 联系方式
  • 传 真:
  • 手 机:15383419322
  • 电 话:15383419322
  • 地 址:山西太原市杏花岭区解放路 175 号万达中心 A 座 33 楼 3301 室
友情链接
plc控制器
自动化设备
自动化设备
伺服驱动器
在线咨询

咨询电话:

15383419322

  • 微信扫码 关注我们

Copyright © 2022-2024 山西润盛进出口有限公司 版权所有 晋ICP备2021008479号-14

晋公网安备 14010702070906号

扫一扫咨询微信客服
15383419322