xinu2009的个人空间 https://blog.eetop.cn/482824 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

数字逻辑设计中的硬件基础知识(一)

已有 2689 次阅读| 2010-4-12 11:42 |个人分类:FPGA硬件知识

同步电路与异步电路的区别

同步电路与异步电路的主要区别在于电路的触发是否与时钟同步,从行为上讲,就是所有电路是否在同一时钟沿的触发下处理数据

(一)异步电路

·电路的核心逻辑用组合电路实现

·电路的主要信号、输出信号不依赖于任何一个时钟信号

·异步时序电路的最大缺点就是容易产生毛刺

·不利于器件移植,异步时序的正确性完全依赖于每一个逻辑元件大的和布线延迟

·不利于静态时序分析(STA)、设计验证时序性能

(二)同步电路

·电路的核心部分是各种各样的触发器

·电路的主要信号、输出信号都是某个时钟沿触发器产生的

·同步时序电路可以很好的避免毛刺

·利于器件移植和静态时序分析、验证设计时序性能

当然异步电路也有其优势,如:无时钟歪斜等时钟的稳定性问题、低电源消耗、平均效能而非最差效能、模块性、可组合和可复用性。而同步时序电路由于严格按照时钟沿触发的方式工作,因此对时钟的稳定性要求较高,易产生时钟偏斜、抖动等问题。

Verilog里的同步复位与异步复位(转)

转载
 
1.同步复位(Synchronous Reset)

来看一个简单的同步复位的D触发器,Verilog代码如下:

module d_ff (
        clk,
        rst_n,
        datain,
        dataout
    );
    input        clk;
    input        rst_n;
    input        datain;
    ouput        dataout;
    reg            dataout;
    always @ (posedge clk)
    begin
        if (!rst_n)
            dataout    <= 1'b0;
        else
            dataout    <= datain;
    end
endmodule

综合后的RTL图表如下:

ScreenShot001

Altera的MAXII系列的CPLD中,register没有同步复位资源,所以同步复位信号需要通过额外的逻辑电路实现,

同步复位的优点:

1). 抗干扰性高,可以剔除复位信号中周期短于时钟周期的毛刺;

2). 有利于静态时序分析工具的分析;

3). 有利于基于周期的仿真工具的仿真。

同步复位缺点:

1). 占用更多的逻辑资源;

2). 对复位信号的脉冲宽度有要求,必须大于指定的时钟周期,由于线路上的延迟,可能需要多个时钟周期的复位脉冲宽度,且很难保证复位信号到达各个寄存器的时序;

3). 同步复位依赖于时钟,如果电路中的时钟信号出现问题,无法完成复位。

2. 异步复位(Asynchronous Reset)

来看一个简单的异步复位的D触发器,Verilog代码如下:

module prac (
        clk,
        rst_n,
        datain,
        dataout
    );
    input        clk;
    input        rst_n;
    input        datain;
    output        dataout;
    reg            dataout;
    always @ (posedge clk or negedge rst_n)
    begin
        if (!rst_n)
            dataout    <= 1'b0;
        else
            dataout    <= datain;
    end
endmodule

综合后的RTL图表如下:

ScreenShot002

异步复位的优点:

1). 无需额外的逻辑资源,实现简单,而且CPLD有针对复位信号的全局不限资源,可以保证复位管脚到各个寄存器的clock skew最小(注意不是到各个寄存器的延迟最小);

2). 复位信号不依赖于时钟。

同步复位缺点:

1). 复位信号容易受到外界的干扰;

2). 复位信号释放的随机性,可能导致时序违规,使电路处于亚稳态,如下图。

ScreenShot003

3. 异步复位同步释放(Asynchronous Reset Synchronous Release)

这种复位方式在文献中还有一种称谓:Synchronized Asynchronous Reset,这种称谓应该在国外的技术人员中比较流行,与Altera的工程师交流过程中,他们一直使用Synchronized Asynchronous Reset这种称谓(当然也可能是个人的习惯)。

来看一个Synchronized Asynchronous Reset例子,Verilog代码如下:

module prac (
        clk,
        reset_n,
        dataa,
        datab,
        outa,
        outb
    );
    input        clk;
    input        reset_n;
    input        dataa;
    input        datab;
    output        outa;
    output        outb;
    reg            reg1;
    reg            reg2;
    reg            reg3;
    reg            reg4;
    assign    outa    = reg1;
    assign    outb    = reg2;
    assign    rst_n    = reg4;
    always @ (posedge clk or negedge reset_n)
    begin
        if (!reset_n)
            begin
                reg3    <= 1'b0;
                reg4    <= 1'b0;
            end
        else
            begin
                reg3    <= 1'b1;
                reg4    <= reg3;
            end
    end

    always @ (posedge clk or negedge rst_n)
    begin
        if (!rst_n)
            begin
                reg1    <= 1'b0;
                reg2    <= 1'b0;
            end
        else
            begin
                reg1    <= dataa;
                reg2    <= datab;
            end
    end
endmodule

综合后的RTL图表如下:

ScreenShot004

此文来源于《Implementation and Timing of Reset Circuits in Altera FPGAs》,例子程序可能代码与源代码略有出入,RTL图是用QuartusII 8.1综合的,与原文也有出入。

一、同步复位与异步复位特点:
  同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。
  异步复位是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。
   
二、异步复位和同步复位的优缺点:
  1、同步复位的优点大概有3条:
  a、有利于仿真器的仿真。
  b、可以使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高。
  c、因为他只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。
同步复位的缺点:
  a、复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑,诸如:组合逻辑路径延时,复位延时等因素。
  b、由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。
  2、异步复位的优点也有三条:
  a、大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源。
  b、设计相对简单。
  c、异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。
  异步复位的缺点:
  a、在复位信号释放(release)的时候容易出现问题。具体就是说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚稳态。
  b、复位信号容易受到毛刺的影响。
  所以,一般都推荐使用异步复位同步释放的方式,而且复位信号低电平有效。这样就可以两全其美了。

  推荐的复位电路设计方式是异步复位、同步释放。这种方式,可以有效地继承异步复位设计简单的优势,并克服异步复位的上述风险和缺陷。在FPGACPLD等可编程逻辑器件设计中,使用异步复位、同步释放可以节约器件资源,并获得稳定可靠的复位效果。

reg Rst_Reg_n;

reg Q;
    
    always @(posedge Clk)
        begin
            Rst_Reg_n <= Rst_n;  //将异步复位信号先用Clk同步一下
        end

    always @(posedge Clk or negedge Rst_Reg_n) //如果没有写"or negedge Rst_Reg_n",将变成同步复位
        begin
            if (~Rst_Reg_n)
                begin
                    Q <= 1'd0;
                end
            else
                begin
                    Q <= D;
                end
        end

  这里使用时钟将外部输入的异步复位信号寄存一个节拍后,再送到触发器异步复位端口的设计方法的另一个好处在于,做STA(静态时序分析)分析时,时序工具会自动检查同步后的异步复位信号和时钟的到达(Recovery)/撤销(Removal)时间关系,如果因布线造成的skew导致该到达/撤销时间不能满足,STA工具会上报该路径,帮助设计者进一步分析问题,如图所示:

 

 

 

 

 


点赞

发表评论 评论 (1 个评论)

回复 yyxl 2010-8-6 13:06
:time:

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 0

    粉丝
  • 0

    好友
  • 0

    获赞
  • 6

    评论
  • 1501

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-13 03:17 , Processed in 0.019781 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部