首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Verilog代码标准(5)

Verilog代码标准(5)

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目的

         发现缺陷
         降低成本
         提高质量
继承事业,薪火相传
返回列表