代码审查记录文本

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.3.9半主时钟周期信号无法作为触发信号,但能记边沿
2.3.4 不使用状态机作为判断条件
原因:资深专家如是说,暂不明。

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

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

2.3.8 变量位置定义 wire
[15: t
“ wv_ bitl£ wvdatIt
wv_ack_dat wv
_ack_ti
luart
wv_ p ac k_e nd w 匚 am dat
rx
uart rx^uut (
. rst
(1 ,dO
_ c 1 kP 4rn (alk24m )r
* EKd (rxd } ,
■rx_dnc (wxxdnQ h . rx_dat
(wv_rx_dat
}
J ;
在模块中只要一个 always 块或例化元件中没有在前一模块中用到。

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






















义。

UW ouge - UW UUgM UKip ,■
———
;//always® (p OS&dg e elk) 〃无法抓到半个时钟周期的林冲作为触发信号' //begin
『// Lr(-cLken) {ll f d2) <- {I'toz,I'ba);
// ftlse -{dl,d2] <= [ffl, dU;
t //end
//assiqn dat_rx = (up_edge_ff2)? 'b0,dat_rx_tmp1f4:151}:dat_rx;
assign dat rx = dat rx tniD 1 ■
2.4.1 闪退
assign ori ch[1-32 1:0*32]f ori chi,16 r dO],
ori_ch [2 r32 1: 1 32]{ori_ch2f16 T dO ],
or?i_ch [3■32-1:2*32]{0r L i ch3
ori2ch[4-32-1:3*32]ori ch4,16P0],
ori ch[5-32-1:>3W]口ri ch5,16 r dO),
ori ch[6^ 32-1: 5 32](ori ch€,16T dO),
ori_chI 7 32 -1:€*J2]ori ch7f161dO),
oui ch[6 32-1:7+32]ori ch6f16r dO),
ori ch [9-32-1:8 +32]ori ch9f16r dO),
ori ch [10 32 1-[ori chid T16r d0) ;|
ori_cb[11*32-1:10*32]ori chi1f L 6r d.0} f
ori二匚:11*32];ori_chl216r
dO);
3
// ---
always
fcegin ■
d-
*■
-- Comb i natori (posed^e
elk)
X 1 ■
al Logi< 2 of STATE
同一assign有多个分号会导致闪退。

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

clt en - 1'D C
ch flag <- (clc cut —z'd3) 11 bl:11bfl
cat rx tmpl = dtt TX tap
dat_rx fupfdgjlf行r t0 dat_rx_tiE?l[4 U] 而t_r,
dat_f rcc_se[L_va 1 id ((client 0'di client S'dSy ch_cnt CH_CHT_DCiNZ) 1r; 1
解决
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编译问题
对同一信号进行约束,最后一条的有效性高于前一条。

相关文档
最新文档