当前位置:文档之家› 代码审查记录

代码审查记录

密级:内部公开
文档编号:****-****-****(文控补充)
代码审查
--------------------------------------------------------------------------------------------
--------
怡化金融设备工程中心对本文件资料享受著作权及其它专属权利,未经书面许可,不得将该等文件资料(其全部或任何部分)披露予任何第三方,或进行修改后使用。

目录
1. 概述 (3)
1.1. 测试对象 (3)
1.2. 测试目的 (3)
1.3. 测试流程 (3)
1.4. 代码的工具测试和人工检查 (3)
2. 代码审查结果统计 (4)
2.1. 风险等级 (4)
2.2. 代码审查结果 (4)
2.3. 代码审查详解 (4)
1.概述
1.1. 测试对象
由董扬辉所编写的所有代码。

时间节点为2015年7月1日至2015年11月20日。

1.2. 测试目的
规范代码风格,不断提高代码质量。

包括:
(1)代码的风险评估和警告审计;
(2)代码的鲁棒性和可复用性评估;
(3)代码的易读性和可维护性;
(4)代码风格的统一;
1.3. 测试流程
1.4. 代码的工具测试和人工检查
(1)ISE 编译环境或Codifferous
(2)资深专家
2.代码审查结果统计
2.1. 风险等级
一般
2.2. 代码审查结果
功能实现;可读性还需加强;代码风格还需修改。

2.3. 代码审查详解
2.3.1 寄存器定义不当
FPGA在上电时全局复位时钟将会实现寄存器定义时的值。

但是这种做法并不值得推荐,我们需要每个寄存器进行局部复位。

即在每个块语句复位逻辑中赋初值。

详见WP272 (v1.0.1) March 7, 2008 -- << Get Smart About Reset:Think Local, Not Global>> .
2.3.2 不在if语句中进行过多运算
在判断语句中尽量不要做运算,简单的加减法可以适当使用。

但是如果是比较复杂的除法则可以将此值定义为参数。

否则只会增加资源的浪费。

2.3.3 initial 使用时尽量不使用非阻塞式赋值
在实际XST中intial使用非阻塞时赋值是可以正常编译和使用。

但是在假如initial块中的和always块的复位中对同一寄存器操作不同的值,并且都是采用非阻塞式赋值时modelsim就会报错。

所以想要用initial时需采用阻塞式赋值方法立即赋值。

在有复位的条件下尽量不要使用initial。

若是有状态机可以加initial块初始化状态机保证在无复位或复位失败的情况下保证状态机初始状态。

2.3.4 不使用状态机作为判断条件
原因:资深专家如是说,暂不明。

2.3.5 状态机不能出现在拼接符中
原因:资深专家如是说,暂不明。

2.3.6 输出不能作为判断条件
因为输出时通常都要用寄存器进行输出,输出时在此时判断可能会造成亚稳态。

2.3.7 名称禁用大小写混用
多个parameter 可以使用一个代替,每个使用逗号代替。

2.3.8 变量位置定义
在模块中只要一个always块或例化元件中没有在前一模块中用到。

则可以将变量定义到每个块或元件的前面,便于修改。

若是在变量存在交叉现象则必须在模块的顶端定义。

2.3.9 半主时钟周期信号无法作为触发信号,但能记边沿
解决
2.4.1 闪退
同一assign 有多个分号会导致闪退。

2.4.2 多个XDC约束规则
多个XDC约束规则
第一个约束文件优先读取,然后依次读取。

2.4.3 XDC语法问题
语法错误会导致后面的管脚约束全部无效,在synthetic 期间导致所在的模块全部被优化。

2.4.4 编译问题
set_property SEVERITY {Warning} [get_drc_checks NSTD-1]
set_property SEVERITY {Warning} [get_drc_checks RTSTA T-1]
set_property SEVERITY {Warning} [get_drc_checks UCIO-1]
在使用强制drc报警告情况下,一些意想不到被优化的模块相关的错误报告会转化为警告,导致有时无法查到具体哪个模块在什么期间被优化。

建议在约束文件没有任何问题的情况下使用错误强制转换为警告。

2.4.5 编译问题
对同一信号进行约束,最后一条的有效性高于前一条。

相关主题