代码审查记录.docx
《代码审查记录.docx》由会员分享,可在线阅读,更多相关《代码审查记录.docx(7页珍藏版)》请在冰点文库上搜索。
![代码审查记录.docx](https://file1.bingdoc.com/fileroot1/2023-5/22/999f9c71-183d-4451-92c8-0ad33ca438bf/999f9c71-183d-4451-92c8-0ad33ca438bf1.gif)
代码审查记录
代码审查记录
密级:
内部公开
文档编号:
****-****-****(文控补充)
代码审查
版本变更记录表
版本
作者
修改日期
修改内容
备注(审查范围)
1.0
董扬辉
2015/11/19
编写内容
2015.7.1-2015.11.20
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)March7,2008--<ThinkLocal,NotGlobal>>.
2.3.2不在if语句中进行过多运算
在判断语句中尽量不要做运算,简单的加减法可以适当使用。
但是如果是比较复杂的除法则可以将此值定义为参数。
否则只会增加资源的浪费。
2.3.3initial使用时尽量不使用非阻塞式赋值
在实际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.3XDC语法问题
语法错误会导致后面的管脚约束全部无效,在synthetic期间导致所在的模块全部被优化。
2.4.4编译问题
set_propertySEVERITY{Warning}[get_drc_checksNSTD-1]
set_propertySEVERITY{Warning}[get_drc_checksRTSTAT-1]
set_propertySEVERITY{Warning}[get_drc_checksUCIO-1]
在使用强制drc报警告情况下,一些意想不到被优化的模块相关的错误报告会转化为警告,导致有时无法查到具体哪个模块在什么期间被优化。
建议在约束文件没有任何问题的情况下使用错误强制转换为警告。
2.4.5编译问题
对同一信号进行约束,最后一条的有效性高于前一条。