Verilog代码书写规范写在前面代码书写规范在团队开发中占据着重要地位,统一、有序的命名能大幅减少设计人员之间的冗余工作,还可便于团队成员对代码的查错和验证。但是不要使书写的规范阻碍代码的书写效率,有些规范并不是硬性的规定,比较的灵活,最重要的是能达到代码书写效率与代码规范性的平衡。——电子系FPGA小组2010年11月25日于北京交通大学1、基本原则顶层模块不含任何逻辑,只包括对底层模块实例化的语句。每一个Verilog文件只含有一个模块,每个模块可含有多个过程块(always、initial等),每一个always块只对一个信号进行赋值。2、命名规则模块名、信号名应该尽量做到可以表达出其完整的功能,使程序的阅读者可以见名知意,名称一般不少于两个字符,而大小写在此不做规定。下面为一些利用标准命名方法定义的模块名和信号名:moduleALU;//ArithmaticLogicalUnitmoduleDMI;//DataMemoryInterfacemoduleDEC;//DecoderwireCPUMMU_WrReq;//CPU发送给MMU的写请求信号一些标准形式的缩写:clockclkclearclrresetrstwritewrreadrdFrequency-FreqVariable-Varsetst在一个工程中如果存在多个不同频率的时钟信号,可在clk后面添加相应的频率值以示区分,例如:wireclk_768MHz;//定义一个768MHz的时钟信号低电平有效的信号命名:低电平有效的信号后一律加下划线和字母n,假如未加则视为高有效。wirerst_n;//低有效的复位信号wireFifoFull_n;//低有效的fifo满标志3、注释勤写注释是好习惯,但这并不意味着每句语句都要写,视情况而定。注释可以分为模块文件的注释、程序各部分的注释、单条语句的注释。注释全部用英文。关键的语句、不 易理解的语句一定要写注释。这里详细说明模块文件的注释。模块文件的注释主要可以分为创作信息和修改信息两个部分:a)创作信息,可以包括“模块名”、“作者”、“时间”、“版本号”、“功能描述”b)修改信息,包括“修改人”、“修改日期”、“版本号”、“修改描述”其中创作信息只有一栏,而修改信息可以有多栏4、模块的端口列表端口类型分为input、output、inout三种,每行只写一个端口,并需要对端口进行注释,格式如下:5、端口定义(Interfacedefinition)与模块定义时的端口列表一样,需要分为input、output、inout三种,每行只写一个端口,并需要对端口进行注释,格式如下:6、信号声明和功能定义(Signalstatement)需要声明和定义的信号包括接口信号(Interfacesignals)和内部信号(Internalsignal),一般先声明接口信号,再声明内部信号,每行只写一个信号,格式如下: 7、参数定义(Parameterdefinitions)可以将参数名第一个字母大写,或是将参数名整体大写,格式如下:8、主程序(Mainprogram)always块中要采用TAB缩进的格式,并且begin-end不要省略。主程序中的if-else主程序中的case 9、模块的例化(Moduleinstance)模块的例化要采用端口名关联方式,每行只写一个端口,同时也需要对端口进行注释,格式如下:假如调用的模块中含有用parameter定义的参数,并且需要对参数进行修改,就用defparam语句进行操作,其中需要用到成员运算符(.)来修改不同层次的参数。