zoukankan      html  css  js  c++  java
  • FPGA基础之异步复位和同步释放电路的详细解释

    转载自http://blog.csdn.net/lg2lh/article/details/8488224

    在有大量异步复位触发器的设计中,假设rst_async_n撤除时发生在clk上升沿,则可能发生亚稳态事件(有些触发器判定为1,有些判定为0,有些甚至会振荡)。

    若使用“异步复位,同步释放”的方式,则可以避免。也可以说“异步信号的同步化”。


    如上图,第一个方框内是异步复位和同步释放电路(电路图中的4个触发器都是异步复位,低电平有效)。有两个D触发器构成。第一级D触发器的输入时VCC,第二级触发器输出是可以异步复位,同步释放后的复位信号。

    所谓异步复位和同步释放,是指复位信号是异步有效的,即复位的发生与clk无关。后半句“同步释放”是指复位信号的释放则与clk相关,即同步的。

    下面说明一下如何实现异步复位和同步释放的:

    异步复位:显而易见,rst_async_n异步复位后,rst_sync_n将拉低,即实现异步复位。

    同步释放:这个是关键,看如何实现同步释放,即当复位信号rst_async_n撤除时,由于双缓冲电路的作用,rst_sync_n复位信号不会随着rst_async_n的撤除而撤除。

    假设rst_async_n撤除时发生在clk上升沿,如果不加此电路则可能发生亚稳态事件。但是加上此电路以后,假设第一级D触发器clk上升沿时rst_async_n正好撤除,则D触发器1输出高电平“1”,此时第二级触发器也会更新输出,但是输出值为前一级触发器次clk来之前时的Q1输出状态。显然Q1之前为低电平,故第二级触发器输出保持复位低电平,直到下一个clk来之后,才随着变为高电平。

    module ex1 ( 
    output rst_sync_n, 
    input clk, rst_async_n);
    
    
    reg rst_s1, rst_s2;
    always @ (posedge clk, posedge rst_async_n)
    if (rst_async_n) begin 
    rst_s1 <= 1'b0;
    rst_s2 <= 1'b0;
    end
    else begin
    rst_s1 <= 1'b1;
    rst_s2 <= rst_s1;
    end
    
    assign rst_sync_n = rst_s2; 
    endmodule


  • 相关阅读:
    火焰图&perf命令
    C10K问题
    cocosStudio中使用PageView,ListView和ScrollView
    vim基本命令
    Git命令学习总结(-)
    可在 html5 游戏中使用的 js 工具库
    待飞日记(第十一篇)
    待飞日记(第十篇)
    待飞日记(第八天和第九天)
    高质量C++/C编程指南
  • 原文地址:https://www.cnblogs.com/season-peng/p/6713532.html
Copyright © 2011-2022 走看看