- UID
- 1029342
- 性别
- 男
|
B.always中变量赋值的唯一性
· 组合always块一定要注意敏感量列表中的触发项完整且不冗余;如果不是这样,综合的电路会与实际设计不符合,会报warning;
· 不要再多个always模块中对同一个reg型变量进行赋值;
· 更不能再同一个always中随一个变量双重赋值;
例如:
always@(posedge clk or posedge reset_n)
begin
if(reset_n==1’b0)
out<=1’b0;
else
out<= `DLY1’b1; //out 1 0
out<= `DLY1’b0;
end
· 推荐不要在一个always块里给多个变量赋值。如果将一组条件相同的变量写在一个always块中更有利于可读性的提高和功能的实现时候,可有例外情况,但请尽量多加注释,以增加可读性,并注意在组合always块中不要出现LATCH(不如对状态机的组合always块及它对条件相似的多个变量赋值);
C.always中复位的书写
复位的条件表达式及命名要和always敏感列表中的描述相统一,并且一定要使用异步复位。所有的复位必须低有效。
例如:
//
always@(posedge clk ot negedge rst_n) //
begin
if(rst_n==1’b0)
…
else
…
end
D.always的注释
要在每一个always块之前加一段注释,增加可读性和便于调试。
//cmcarry count which …
always@(posedge clk_xc or negedge rst_n)
begin
if(rst_n==1’b0)
cm_carry_cnt<=1’b0;
else
cm_carry_cnt<=#`DLY1’b1;
end
8.合理的注释
· 代码中应采用英文作详细的注释,注释量应达到代码总量的50%以上。
· 指示应该与代码一致,修改程序的时候一定要修改相应的注释;
· 注释不应重复代码已经表明的内容,而是简介的点明程序的突出特征;
· 注释应该整个一个程序的线索和关键词,它连接整个程序中分散的信息并它帮助理解程序中不能表明的部分。
9.重用化设计
层次结构与模块划分
· 层次设计的原理以简单为主――尽量避免不必要的层次;层次结构设计得好,在综合中就不需要太多的优化过程;
· 模块的划分根据层次设计来决定――模块化对于布线有很大帮助,模块化的设计中要尽量减少全局信号的使用;
· 通用的部分尽量提取出来作为一个共用模块,同时为了适应需求的更改也应提供用户定制模块入库的方式。
参数传递
· 需要传递参数的模块,在多次例化的时候统一都传递参数,不要例化同一个模块,有的传参数,有的不传。
模块划分的技巧:
将不同的时钟域分离开来;
按照不同的设计目标划分成块,分块式应在数据流方向上切分;
在同一模块中实现逻辑资源和算术资源的共享。
二.关于REVIEW
1.Review目的
发现缺陷
降低成本
提高质量 |
|