1. 在每个文件的开头加上文件头。格式如下:
//******************
//
//copyright 2007, DTK
//all right reserved
//
//project name: : project_name
//filename : file_name
//author : myname
//data : xxxx/xx/xx
//version : 1.0
//
//module name : module_name
//abstract : xxxxxxxxxxxxxxx
//
//modification history
//---------------------------------
//&Log&
//
//*************************
确定代码里面的每个文件都添加了该文件头。该文件头包含的信息有公司名称、项目名称、代码作者、代码的创建日期、代码的名称、模块名称、对代码的每次的修改情况。通过添加该文件头,可以极大的方便对代码的管理和控制。
2.在每个always里面加上label。
Example:
always @(posedge clk)
begin: ENCODER_REG
…
…
end
加上label以后,在综合的时候,design compile会根据该label来综合。并且可以根据label来进行调用等其它处理。本例中的label是ENCODER_REG。
需要注意的是,label名字不要重复。
3.每个文件下面只有一个模块。
不要在文件中使用include调用代码。如果使用了,会对从底向上的综合造成影响。
避免多个模块在同一个文件之中。
避免多个function或者task在同一个模块中。
将代码和调用分开在不同的文件中。专门成立一个文件,用来调用模块。列如:
fv_adder.v
---------------------
`include "/home/design/sum.v"
`include "/home/design/ecc.v"
`include "/home/design/top.v"
-----------------------
4.给代码加上合适的注释。合适的注释可以提高代码的可读性,缩短测试debug的时间,以及让代码更加规范。
对每个模块的输入和输出添加注释;
对每段逻辑添加注释;
对模块中的每个中间信号添加注释;
对每个模块的功能添加注释;
example1:
always @( poesege clk ) begin : TIME_DELAY
if ( !rst_) begin
data_delay_2reg <= 1'b0;
data_dalay_1reg <= 1'b0;
end //to delay data_in two clock time, to fix xx_xxx module timing;
else begin
data_delay_2reg <= data_delay_1reg;
data_delay_1reg <= data_in;
end
end
上面的列子是对逻辑功能添加注释。
example2:
input [3:0] data_bus; //this signal is fifo data out;
input counter_enable_signal; //it is 8 bit counter enable;
output fifo_enable; //fifo enable signal;
上面的注释,是对模块的输入输出添加的注释。
5.避免snake path出现在路径中
在路径中出现snake path的话,会导致综合工具无法对该路径的逻辑进行优化。
在上面这个图中,组合逻辑被分为两个部分分别连接到两个模块中。对于综合工具(比如design compiler)而言,无法将这些组合逻辑进行优化处理。特别是在一些高速设计中,一些长的snake path会严重的影响到电路的性能,极大的增加组合逻辑的级数。所以在设计的时候我们一定要尽力避免出现snake path。