FPGA编码风格

1.对所有的信号名、变量名和端口名都用小写,这样是为了和业界保持习惯一致;对常量名和用户定义类型用大写。

2.使用有意义的信号名、端口名、函数名和参数 名

3.信号名长度不要太长

4.对于时钟信号使用clk作为信号名,如果设计中存在多个时钟,使用clk作为时钟信号的前缀

5.对于来自同一驱动源的信号在不同的子模块中采用相同的名字,这要求在芯片总体设计时就定义好顶层子模块间连接线的名字,端口和连接线端口的信号尽可能采用相同的名字

6.对于低电平有效的信号,应该以一个下划线跟一个小写字母n表示。注意在同一个设计中要使用同一个小写字母表示低电平有效。

7.对于复位信号使用rst作为信号名,如果复位信号是低电平有效,建议使用rst_n。

8.当描述多比特总线时,使用一致的定义顺序,对于verilog建议采用bus_signal[x:0]的表示

9.尽量遵循业界已经习惯的一些约定。如*_reg表示寄存器输出,—a表示异步信号,_pn表示多周期路径第n个周期使用的信号,_nxt表示锁存前的信号,_z表示三态信号等

10.在源文件、批处理文件的开始应该包含一个文件头、文件头一般包含的内容有:文件名,作者,模块的实现功能概述和关键特征描述,文件创建和修改的记录,包括修改时间、修改的内容等

11.使用适当的always进程、函数、端口定义、信号含义、变量含义或信号组、变量组的意义等。注释应该放在它所注释的代码附近,要求简明扼要,只要足够说明设计意图即可,避免过于复杂

12.每一行语句独立成行。景观VHDL和verilog都允许一行可以写多个语句,但是每个语句独立成行可以增加可读性和可维护性。同时保持每行小于或等于72个字符,这样都是为了提高代码的可读性

13.建议采用缩进提高续行和嵌套语句的可读性。缩进一般采用两个空格,如果空格太多则在深层嵌套时限制行长。同时缩进避免使用TAB键,这样可以避免不同机器TAB键的设置不同限制代码的可移植能力

14.在RTL源码的设计中任何元素包括端口、信号、变量、函数、任务、模块等的命名都不能取Verilog和VHDl语言的关键

15.在进行模块的端口声明时,每行只声明一个端口,并建议采用一下顺序:输入信号的clk、rst、enables other control signals 、data and address signals.然后再声明输出信号的clk,rst,enables other control signal,data signals.

16.在例化模块时,使用名字相关的显式映射而不要采用位置相关的映射,这样可以提高代码的可读性和方便debug连线错误。

17.如果同一段代码需要重复多次,尽可能使用函数,如果有可能,可以将函数通用化,以使得他们可以复用。注意内部函数的定义一般要添加注释,这样可以提高代码的可读性。

18.尽可能使用循环语句和寄存语句组来提高源代码的可读性,这样可以有效的减少代码行数

19.对一些重要的always语句块定义一个有意义的标号,这样有助于调试。注意括号名不要与信号名、变量名重复

20.代码编写时的数据类型只是用IEEE定义的标准类型

21.在设计中不要直接使用数字,作为例外,可以使用0和1.建议采用参数定义代替直接的数字。同时,在定义常量时,如果一个常量依赖于另一个常量,建议在定义该常量时用表达式表示出这种关系。

22.不要再源代码中使用嵌入式的dc_shell综合命令。这是因为其他的综合工具并不认得这些隐含命令,从而导致错误或较差的综合结果,除非编译开关的打开和关闭可以嵌入到代码中。

23.避免冗长的逻辑和子表达式。

24.避免采用内部三态电路,建议多路选择电路代替内部三态电路。

你可能感兴趣的:(FPGA)