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

下载本文档

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

文档简介

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

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

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

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

5、iable W_SBUS_DATA_BITS对parameter R_ram_addr_p3任意的 pipeline stage 指示 0 低电平有效的信号的后缀为_n 当一个信号低电平有效时,它必须用后缀_n命名,_n的含义为negative;只是低电平有效的信号才能用_n结尾。举例: I_reset_n1 时钟信号名含_clk或_clock时钟信号的命名必须含_clk或_clock,并要求在信号名中再加入该信号速度的指示,非时钟信号的命名不能含有clock或clk。举例:I_system_clk_32M,I_ram_clk_8k或I_system_32M_clk

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

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

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

9、5O_EPLD_38M需要2分频后送出O_RST2BOOTCPLDn ,/R7RST_INMPreset和MSreset的输出结果);0 注释应简明扼要、重点突出注释应逻辑清晰、用语准确,应完整体现设计的目的、关键代码块的功能和重要信号的特征。1 END语句说明对于有嵌套结构复杂和带有case语句中的END语句要加以注释,说明模块结束,改进代码的可读性,易于识别模块边界。举例:always ()begin:<block name>end /<block name>或case () /<case function>endcase /

10、<case function>3.3 编程风格3.3.1编写代码格式要整齐代码缩排的格式要一致(即相同类型的代码语句要对准,一般缩进为3到4个空格为好),增加代码的可读性。在编写一个代码块时(如begin、case、if语句等),首先要定好框架,并符合3种编码风格中的一种。第一种代码书写格式:always (posedge I_clk or negedge I_reset_n) begin if (I_reset_n) begin R_a <=1'b0; R_b <=1'b0; R_c <=1'b0; end else begin R_a

11、<=I_a; R_b <=I_b; R_c <=I_a; end end第二种代码书写格式:always (posedge I_clk or negedge I_reset_n) begin if (I_reset_n) begin R_a <=1'b0; R_b <=1'b0; R_c <=1'b0; end else begin R_a <=I_a; R_b <=I_b; R_c <=I_a; endend第三种代码书写格式:always (posedge I_clk or negedge I_reset_n)

12、begin if (I_reset_n) begin R_a <=1'b0; R_b <=1'b0; R_c <=1'b0; end else begin R_a <=I_a; R_b <=I_b; R_c <=I_a; endend3.3.2 一行一条Verilog语句每行只写一条语句,增加程序的可读性,便于用设计工具进行代码的语法分析。举例:使用: W_upper_en = (W_p5type && W_xadr10) ; W_lower_en = (W_p5type && ! W_xadr10);

13、禁止: W_upper_en = (W_p5type && W_xadr10); W_lower_en = (W_p5type && ! W_xadr10);例外:允许注释和Verilog语句在同一行上时。3.3.3 一行一个端口声明端口定义应该是独立的,每行只写一个端口声明语句,增加代码的可读性,便于代码理解,便于用脚本文件分析代码语法。举例:使用:input a; /port a descriptioninput b; /port b description 禁止:input a, b;input a, b;3.3.4 在定义端口时,按照端口类型或端口功能定

14、义端口顺序将端口进行分类进行定义,便于理解和调用。注:可以按照信号的方向按输入、输出、双向来定义。也可以按照端口功能来定义端口顺序。建议按照端口功能来定义,同功能组的信号再按照输入、输出、双向来定义。比如LocalBus总线信号,一般定义顺序为(推荐使用):input wire 15:0I_localbus_addr;input wire I_localbus_cs;input wire I_localbus_wr;input wire I_localbus_rd;inout wire 15:0IO_localbus_data;3.3.5 保持端口顺序一致端口声明顺序应与模块声明中端口的顺序一致。3.3.6 声明内部net所有内部net必须声明,不能隐含。Verilog可隐含定义内部net,但内部net必须声明,以避免混淆。3.3.7 在一个段内声明所有内部net内部net的声明要跟在模块的I/O端口声明之后。例外:自动生成的代码。3.3.8 对于数字位宽的表述要完整对数字的表述一定要完整,写全所有非0的位,避免将16'hffff写成16'hf之类的低级错误。3.3.9 总线位顺序按高到低保持一致当描述多bit总线时,必须保持bit顺序的一致性,增强可读性,减少总线之间无意的顺序交换。例如:R_reg7:0,R

温馨提示

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

评论

0/150

提交评论