当前位置 博文首页 > zhoujianjayj的博客:Verilog代码规范(二)-- 时钟复位

    zhoujianjayj的博客:Verilog代码规范(二)-- 时钟复位

    作者:[db:作者] 时间:2021-08-30 22:26

    代码规范(二)

    上次代码规范主要介绍了模块格式,信号命名,注释,表头等内容,今天主要介绍一些时钟复位的相关内容;


    一、时钟部分

    1. 时钟生成和门控放在某个特定模块crm中统一管理。

    如果时钟在某个模块的内部产生,则spyglass会报W401的warning,提示时钟信号不是当前模块的输入信号。

    ?

    2. 块中使用不止一个时钟,会导致不可综合

    虽然很多综合工具支持多时钟的综合,但是并非好的代码习惯;除非你确认综合工具支持多时钟输入的综合,否则依然建议只有单时钟输入,将原来的代码块拆分;

    module mod(in1, in2, clk1, clk2, out1);
    input in1, in2;
    input clk1, clk2;
    output out1; 
    reg out1;
     always@(posedge clk1 or posedge clk2)
     out1 = in1 ^ in2;
    endmodule

    ?

    3. 在同一个always中,不可以存在多个时钟

    从器件上来说,cell只有一个时钟驱动,因此多个时钟出现在同一个always中,理论上是 不可综合的设计。

    ?

    4. 除非特别设计,否则在模块中同时使用时钟的上升沿和下降沿


    二、 复位部分

    1. 使用异步复位同步释放

    (1)同步复位和异步复位的概念

    同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。用Verilog描述如下:

    always @ (posedge clk) begin
    	if (!Rst_n)
    	  ...
      end

    异步复位:它是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。用Verilog描述如下:

    always @ (posedge clk,negedge Rst_n) begin
    	if (!Rst_n)
    	  ...
      end

    (2)各自的优缺点:

    同步复位的优点大概有3条:

    • 有利于仿真器的仿真。
    • 可以使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高。
    • 因为他只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。

    同步复位的缺点主要有以下几条:

    • 复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑,诸如:clk skew,组合逻辑路径延时,复位延时等因素。
    • 由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。

    异步复位的优点有:

    • 大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源。
    • 设计相对简单。
    • 异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。

    异步复位的缺点有:

    • 在复位信号释放(release)的时候容易出现问题。具体就是说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚稳态。
    • 复位信号容易受到毛刺的影响。

    综上,一般都推荐使用异步复位,同步释放的方式,而且复位信号低电平有效。这样就两全其美了。(后续会有文章介绍同步复位异步释放的相关内容)

    ?

    2. 复位信号不能接静态信号0/1;

    这种情况spyglass的check item中也有体现,如果接0/1,那么必须要确认确实符合design意图。

    ?

    3. 在同一个设计单元中,复位信号或者置位信号不可同时使用其正负极;

    一般出现在两个不同IP,一个需要positive reset,一个需要negative reset,但顶层统一输入negative reset给两个IP时就会报错;

    还有一种情况就是design就是这么设计的(基本不会这么做);

    ?

    4. 在同一个always中,不可以存在多个异步复位或者置位

    不符合器件的原理,始终要明白寄存器只有一个复位输入端;

    ?

    5. 异步复位/置位信号不是module的input信号

    和时钟一样,所有的时钟复位信号不应该在模块内部自己产生,需要由统一的crn管理时钟复位。这样有利于综合和dft的设计。

    ?

    6. 复位/置位在同步和异步电路中同时使用

    基本不会有这种使用场景,对DFT测试capture和scan是不利的,务必出现这样的设计。

    ?

    cs