代码编写规范讲解_第1页
代码编写规范讲解_第2页
代码编写规范讲解_第3页
代码编写规范讲解_第4页
代码编写规范讲解_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、代码书写规范3.1命名规范3. 1. 1 HDL代码命名总则具有意义的命名比注释要好得多。在写代码时,命名应给予充分的重视,任 何命名都应遵循简洁、明了、准确的原则,切忌模棱两可。文件名应由字母、数字及下划线组成命名只能由26个英文字母(a-z, A-Z)、数字(0-9)或者下划线(_)组成。 不允许使用破折号和连续的下划线。文件名的首字符必须是字母笫一个字符只能使用字母,不能使用下划线,避免与一些工具的冲突。用下划线分开多个单词由多个字组成的文件名,每个字要用下划线分开。在保证一致性的情况下, 提高了在修改、验证和调试中的可读性。举例:R_ram_a

2、ddr。 I0信号与信号名的区分为了增加可读性,便于阅读代码的人理解,输入输出口与内部的寄存器、变量名要区分开,采用加前缀的方法,且统一用大写字母。如:Lsiganl ,I_signal2,O_signal3,/表示是输入信号/表示是输入信号表示是输出信号reg 31:0 R_signal4; /表示是本模块内部寄存器信号 wire 7:0 W_signal5; /表示是本模块内部连线信号 Verilog文件名与相应的文档名一致说明文档中所参考的Verilog RTL的信号及模块名必须与FPGA设计说明中 命名相一致,代码和模块名字的注释也要保持一致,易于文档和代码

3、之间的交义 参考。常量用大写字母表示常量必须大写,包括参量名、文本宏名也要大写,以易于变量识别。3. 1. 1.7 net、variable、construct 及 instance 以小写命名(前缀 大写)与建模电路密切相关的硬件结构,在命名时所有字母必须小写,避免混淆及 错误的发生。.net.variable.construct: 如 function、task、named block、module.instance: 如 gates module3. 1. 1.8命名要唯一constructs net、variable的命名要唯一,不能用大小每来区分命名,尽量用 小写完整单

4、词命名,禁用C语言编程中常用的大小写互用且缩写的单词命名方 式。原因:有些工具是不区分大小写的。命名要望文生义标识符的命名必须描述其口的、应当有意义,可以达到望文生义。标识符的命名应该描述“对象做什么”而不是“过程怎么做”,要根据每个 标识符做什么来命名,而不要以其如何实现来命名,这些标识符包括:net、 variable、parameterinstance 名、construct 名(如 function、module、task)。标 识符必须使用英文命名。如果标识符需要多个意义独立的字符串命名,字符吊之间要用下划线隔开。举例:W_set_priority对 net 或 var

5、iableW_SBUS_DATA_BITS对 parameterR_ram_addr_p3任意的pipeline stage指示3. 1. 1. 10低电平有效的信号的后缀为_n当一个信号低电平有效时,它必须用后缀_n命名,_n的含义为negative; 只是低电平有效的信号才能用结尾。举例:I_reset_n3. 1.1.11时钟信号名含_clk或_clock时钟信号的命名必须含_clk或clock,并要求在信号名中再加入该信号速度 的指示,非时钟信号的命名不能含有Clock或elk。举例:I_system_clk_32M, I_ram_clk_8k 或 I_system_32M_clk,I

6、_ram_8K_clk2测试信号的后缀为_test举例:R_paral 1 el_c 1 k_test3寄存器按照功能进行命名,注释需写明寄存器地址采用功能命名时需要进行寄存器说明,指出其寄存器地址。例:R_protocol_reg;/register address is 0x513. 2注释对HDL代码的功能进行注释是必要的,注释语句是对上下文信息的补充说 明。3.2.1其它注释为描述HDL代码及其功能,注释说明是必要的,这有助于其它设计者理解 和维护程序代码。3. 2. 2. 1功能块注释对代码的每个功能块必须加以注释说明,说明其LI的及功能,便于代码理解。3

7、. 2. 2. 2对不常用或不易理解的关键代码行进行注释说明对不常用或不容易理解的代码及其使用限制要进行注释,说明其功能、作用 和其它特征信息,提高代码的可读性。3. 2. 2. 3使用单行注释代码行使用单行注释“”,不使用多行“/*/”注释。代码行注释跟在注释代码之后,处于同一行。代码行注释应简明扼要,控制注释长度避免使单行内容过长。如注释过长且难以简略,可以分行注释。注意放在下一行的注释应从前行注 释左侧对齐,注意分行的注释内容要独占一行,该行不能有其它的代码。若代码本身较长,难以在同一行加以注释,可以在代码的前一行放置注释内 容。注意这行注释要独占一行。3. 2. 2. 4端口信号定义要

8、进行注释每个端口声明必须有注释说明,和端口声明处在同一行。输入端口注释出来 自哪个模块,输出端口注释出输出给到哪个模块。顶层模块中的端口注释中,必须加上该信号在原理图上对应的管脚号和名 称,以便查找,对较复杂的逻辑,引脚信号太多,或总线宽度较大不便描述时, 应加一句注释:引脚参见XXX约束文件(*.ucf/*.lpf/*.qsf)omodule top(/inputI_Clk_25m,/J 12 EPLD_25M 25MHz 主时钟I_Clk_50m,/Hl2 EPLD_50M50MHz 主时钟I_CM_19m ,/J5 CM_EPLD_19M 8530 岀的 19MHz 时钟,做主备时使 用

9、/outputO_EPLD_38m ,/H5O_EPLD_38M 需要 2 分频后送出O_RST2BOOTCPLDn J/R7 RSTJN MPreset 和 MSreset 的输出结果);0注释应简明扼要、重点突出注释应逻辑清晰、用语准确,应完整体现设计的LI的、关键代码块的功能和 重要信号的特征。1 END语句说明对于有嵌套结构复杂和带有case语句中的END语句要加以注释,说明模块 结束,改进代码的可读性,易于识别模块边界。举例:always ()begin: end /或case () / endcase /3. 3编程风格3. 3. 1编写代码格式要整齐代

10、码缩排的格式要一致(即相同类型的代码语句要对准,一般缩进为3到4 个空格为好),增加代码的可读性。在编写一个代码块时(如begin, case、if语 句等),首先要定好框架,并符合3种编码风格中的一种。第一种代码书写格式:always (posedge I_clk or negedge I_reset_n) beginif (I_reset_n) beginR_a =rbO:R_b =TbO;R_c v=lbO;endelse beginR_a =I_a;R_b =I_b;R_c v=I_a;endend第二种代码书写格式:always (posedge I_clk or negedge I

11、_reset_n) begin if (I_wset_n) beginR_a =rbO;R_b =TbO;R_c v=lbO;endelse beginR_a =I_a;R_b =I_b;R_c v=I_a;endend第三种代码书写格式:always (posedge I_clk or negedge I_reset_n)beginif (I_reset_n)beginR_a =rbO;R_b =TbO;R_c=rbO;endelsebeginR_a v=I_a;R_b =Lb;R_c =I_a;endend3. 3. 2 行一条 Ver i log 语句每行只写一条语句,增加程序的可读性,

12、便于用设计工具进行代码的语法分 析。举例:使用:W_upper_en = (W_p5type & W_xadrl 0);Wower_en = (W_p5type & ! W_xadrl0);禁止:W_upper_en = (W_p5type & W_xadrl0): Wower_en =(W_p5type & ! W_xadrl0);例外:允许注释和Verilog语句在同一行上时。3. 3.3 一行一个端口声明端口定义应该是独立的,每行只写一个端口声明语句,增加代码的可读性, 便于代码理解,便于用脚本文件分析代码语法。举例:使用:input a:/port a descriptioninput

13、 b;/port b description禁止:input a, b;input a,b:3. 3.4在定义端口时,按照端口类型或端口功能定义端口顺序将端口进行分类进行定义,便于理解和调用。注:可以按照信号的方向按输入、输出、双向来定义。也可以按照端口功能 来定义端口顺序。建议按照端口功能来定义,同功能组的信号再按照输入、输出、双向来定义。比如LocalBus总线信号,一般定义顺序为(推荐使用):input wire 15:0I_Iocalbus_addr;input wireI_localbiis_cs;input wireI_Iocalbus_wr;input wireLlocalbus

14、_rd;inout wire 15:0IOcalbus_data;3. 3.5保持端口顺序一致端口声明顺序应与模块声明中端口的顺序一致。3. 3. 6声明内部net所有内部net必须声明,不能隐含。Verilog可隐含定义内部net,但内部net 必须声明,以避免混淆。3. 3.7在一个段内声明所有内部net内部net的声明要跟在模块的I/O端口声明之后。例外:自动生成的代码。3. 3.8对于数字位宽的表述要完整对数字的表述一定要完整,写全所有非0的位,避免将16hffff写成16hf 之类的低级错误。3. 3. 9总线位顺序按高到低保持一致当描述多bit总线时,必须保持bit顺序的一致性,增强可读性,减少总线之 间无意的顺序交换。例如:R_reg7:0,R_databus7:0而不能写为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论