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在上电时全局复位时钟将会实现寄存器定义时的值。但
2、是这种做法并不值得推荐,我们需要每个寄存器进行局部复位。即在每个块语句复位逻辑中赋初值。详见WP272 (v1.0.1) March 7, 2008 - .2.3.2 不在if语句中进行过多运算在判断语句中尽量不要做运算,简单的加减法可以适当使用。但是如果是比较复杂的除法则可以将此值定义为参数。否则只会增加资源的浪费。2.3.3 initial 使用时尽量不使用非阻塞式赋值在实际XST中intial使用非阻塞时赋值是可以正常编译和使用。但是在假如initial块中的和always块的复位中对同一寄存器操作不同的值,并且都是采用非阻塞式赋值时modelsim就会报错。所以想要用initial时需
3、采用阻塞式赋值方法立即赋值。在有复位的条件下尽量不要使用initial。若是有状态机可以加initial块初始化状态机保证在无复位或复位失败的情况下保证状态机初始状态。2.3.4 不使用状态机作为判断条件原因:资深专家如是说,暂不明。2.3.5 状态机不能出现在拼接符中2.3.6 输出不能作为判断条件因为输出时通常都要用寄存器进行输出,输出时在此时判断可能会造成亚稳态。2.3.7 名称禁用大小写混用多个parameter 可以使用一个代替,每个使用逗号代替。2.3.8 变量位置定义在模块中只要一个always块或例化元件中没有在前一模块中用到。则可以将变量定义到每个块或元件的前面,便于修改。若
4、是在变量存在交叉现象则必须在模块的顶端定义。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 RTSTAT-1set_property SEVERITY Warning get_drc_checks UCIO-1 在使用强制drc报警告情况下,一些意想不到被优化的模块相关的错误报告会转化为警告,导致有时无法查到具体哪个模块在什么期间被优化。建议在约束文件没有任何问题的情况下使用 错误强制转换为警告。2.4.5 编译问题对同一信号进行约束,最后一条的有效性高于前一条。