zoukankan      html  css  js  c++  java
  • 异步复位同步释放

    一、同步复位(by Crazybingo)

    1.代码

    module system_ctrl
    //==================<端口>==================================================
    (
    //globel clock ----------------------------------
    input  wire                 clk                 , //时钟,50Mhz
    input  wire                 rst_n               , //复位,低电平有效
    //user interface --------------------------------
    input  wire                 a                   , //输入信号
    output reg                  b                     //输出信号
    );
    
    //==========================================================================
    //==    同步复位,rst_n作为外部信号输入,clk全局时钟称为“同步时钟”
    //==========================================================================
    always @(posedge clk) begin
        if(!rst_n)
            b <= 0;
        else
            b <= a;
    end
    
    
    
    endmodule

    2.RTL视图

    3.优点

      ①降低了亚稳态的出现概率;

      ②可以使所设计的系统成为100%的同步时序电路,这将大大有利于时序分析,并且综合出来的fmax一般较高;

      ③因为它只有在时钟有效沿到来时才有效,所以可以滤除高于时钟频率的毛刺。

    4.缺点

      ①复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务,同时还要考虑clk skew、组合逻辑路径延时、复位延时等因素;

      ②由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以倘若采用同步复位,综合器就会在寄存器的数据输入端口插入组合逻辑,这样会耗费较多的逻辑资源。

    二、异步复位(by Crazybingo)

    1.代码

     1 module system_ctrl
     2 //==================<端口>==================================================
     3 (
     4 //globel clock ----------------------------------
     5 input  wire                 clk                 , //时钟,50Mhz
     6 input  wire                 rst_n               , //复位,低电平有效
     7 //user interface --------------------------------
     8 input  wire                 a                   , //输入信号
     9 output reg                  b                     //输出信号
    10 );
    11 
    12 //==========================================================================
    13 //==    异步复位,rst_n信号和clk全局时钟信号共同称为“异步时钟”
    14 //==========================================================================
    15 always @(posedge clk or negedge rst_n) begin
    16     if(!rst_n)
    17         b <= 0;
    18     else
    19         b <= a;
    20 end
    21 
    22 
    23 
    24 endmodule

    2.RTL视图

    3.优点

    ①大多数目标器件的DFF都有异步复位端口,因此采用异步复位可以节省资源;

    ②设计相对简单;

    ③异步复位信号识别方便,并且可以很方便地使用FPGA的全局复位端口。

    4.缺点

    ①在复位信号释放(Release)时容易出现问题。具体来说,倘若复位释放时恰好在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致不稳定;

    ②复位信号容易受到毛刺的影响。这是由于时钟抖动或按键触发时的硬件原因造成的。

    三、异步复位的同步化设计(by Crazybingo)

    1.代码

     1 module system_ctrl
     2 //==================<端口>==================================================
     3 (
     4 //globel clock ----------------------------------
     5 input  wire                 clk                 , //时钟,50Mhz
     6 input  wire                 rst_n               , //复位,低电平有效
     7 //user interface --------------------------------
     8 input  wire                 a                   , //输入信号
     9 output reg                  b                     //输出信号
    10 );
    11 
    12 //==========================================================================
    13 //==    异步复位的同步化设计
    14 //==========================================================================
    15 reg        sys_rst_n;
    16 
    17 always @(posedge clk) begin
    18     if(!rst_n)
    19         sys_rst_n <= 0;
    20     else
    21         sys_rst_n <= rst_n;
    22 end
    23 
    24 always @(posedge clk or negedge sys_rst_n) begin
    25     if(!sys_rst_n)
    26         b <= 0;
    27     else
    28         b <= a;
    29 end
    30 
    31 
    32 
    33 endmodule

    2.RTL视图

    3.理解

    ①所谓“异步复位”是针对D触发器的复位端口,它是异步的,但是设计中已经同步了异步复位信号,所以笔者(Crazybingo)认为这只是某种意义上的“异步复位”。

    ②所谓“同步释放”,实际上是由于我们设计了同步逻辑电路,外部复位信号不会在出现释放时与clk信号竞争,整个系统将与全局时钟clk信号同步。

    四、异步复位同步释放(by特权同学)

     1 module system_ctrl
     2 //==================<端口>==================================================
     3 (
     4 //globel clock ----------------------------------
     5 input  wire                 clk                 , //时钟,50Mhz
     6 input  wire                 rst_n               , //复位,低电平有效
     7 //user interface --------------------------------
     8 input  wire                 a                   , //输入信号
     9 output reg                  b                     //输出信号
    10 );
    11 
    12 //==========================================================================
    13 //==    异步复位的同步化设计
    14 //==========================================================================
    15 reg        sys_rst_n_r;
    16 reg        sys_rst_n;
    17 
    18 always @(posedge clk or negedge rst_n) begin
    19     if(!rst_n) begin
    20         sys_rst_n_r <= 0;
    21         sys_rst_n   <= 0;
    22     end
    23     else begin
    24         sys_rst_n_r <= 1;
    25         sys_rst_n   <= sys_rst_n_r;
    26     end
    27 end
    28 
    29 always @(posedge clk or negedge sys_rst_n) begin
    30     if(!sys_rst_n)
    31         b <= 0;
    32     else
    33         b <= a;
    34 end
    35 
    36 
    37 
    38 endmodule

      那我就奇怪了,Crazybingo和特权的,哪一个才是真正的“异步复位同步释放”呢?网上比较多的是特权同学这种,但Crazybingo的好像也没有什么错误。

    参考资料:

    [1]韩彬, 于潇宇, 张雷鸣. FPGA设计技巧与案例开发详解[M]. 电子工业出版社, 2014.

    [2]吴厚航. 深入浅出玩转FPGA[M]. 北京航空航天大学出版社, 2013.

  • 相关阅读:
    BZOJ 3527: [Zjoi2014]力 [快速傅里叶变换]
    BZOJ 2194 [快速傅里叶变换 卷积]
    BZOJ 2179 [快速傅里叶变换 高精度乘法]
    [快速傅立叶变换&快速傅里叶变换]【旧 手写笔记】
    CF 235C. Cyclical Quest [后缀自动机]
    BZOJ 1396&&2865 识别子串[后缀自动机 线段树]
    BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster [广义后缀自动机]
    BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡 [广义后缀自动机 Trie]
    BZOJ 2806: [Ctsc2012]Cheat [广义后缀自动机 单调队列优化DP 二分]
    BZOJ 3473: 字符串 [广义后缀自动机]
  • 原文地址:https://www.cnblogs.com/xianyufpga/p/11346694.html
Copyright © 2011-2022 走看看