打印

复位问题

[复制链接]
1947|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
403464238|  楼主 | 2012-7-19 10:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
hawksabre| | 2012-8-8 18:59 | 只看该作者
FPGA复位的可靠性(同步复位和异步复位)

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

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


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

           always @ (posedge clk,negedge Rst_n)

           begin
           if (!Rst_n)
二、各自的优缺点:
    1、总的来说,同步复位的优点大概有3条:
    a、有利于仿真器的仿真。
    b、可以使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高。
    c、因为他只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。

     

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

   

    2、对于异步复位来说,他的优点也有三条,都是相对应的:

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

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

    b、复位信号容易受到毛刺的影响。

三、总结:

所以说,一般都推荐使用异步复位,同步释放的方式,而且复位信号低电平有效。这样就可以两全其美了。

使用特权

评论回复
板凳
hawksabre| | 2012-8-8 19:00 | 只看该作者
这是我从网上找的  不知道能不能帮上你

使用特权

评论回复
地板
Backkom80| | 2012-8-8 20:18 | 只看该作者
xilinx的FF是带有专门的同步复位端或异步复位端,所以不管是用异步复位或是同步复位,都不会像你所说的消耗逻辑资源,
altera的FF只带有异步复位端,没有同步复位端,这是工艺上的差别。所以altera的代码多为异步复位。
xilinx和altera两家表面上很多人说没有太大差别,其实差别不少,
如果你是逻辑设计人员,建意关注底层器件,这对你的代码风格,综合出的性能有好处。

使用特权

评论回复
5
GoldSunMonkey| | 2012-8-9 12:31 | 只看该作者
嘿嘿,谢谢大家回答

使用特权

评论回复
6
gygp| | 2012-8-13 19:16 | 只看该作者
FPGA中复位可以分为两种异步复位和同步复位。
1,关于异步复位
下面给出一段异步复位的代码:
always @ (posedge clk or negedge rst_n)
if(!rst_n) b<=0;
else b<=a;
这就是异步复位。
硬件图:

2,关于同步复位
下面给出一段同步复位的代码:
always @ (posedge clk )
if(!rst_n) b<=0;
else b<=a;
这就是同步复位。
3,两者的区别优缺点
FPGA的寄存器有支持异步复位的专用端口,因此采用异步复位不需要增加额外的硬件资源,但异步复位存在的亚稳态问题。而对于同步复位,这需要额外的硬件资源,同样同步复位也存在亚稳态问题,只不过因为额外硬件的加入降低了亚稳态出现的概率。
(但是我个人通过综合得到的RTL图是一样。。。不知道在哪里有错——可能是综合软件设置的问题)
4,异步复位同步释放
input clk ;
input rst_n;
output rst_n2;
reg  rst_n2,rst_n1;

always @ (posedge clk or negedge rst_n)
if(!rst_n)  rst_n1<=1'b0;
else  rst_n1<=1'b1;

always @ (posedge clk or negedge rst_n)
if(!rst_n)  rst_n2<=1'b0;
else  rst_n2<=rst_n1;

然后,rst_n2作为复位信号,这样就解决了亚稳态问题。

使用特权

评论回复
7
梅花望青竹| | 2012-8-14 19:50 | 只看该作者
fpga里的任何一个接口都可以实现的!

使用特权

评论回复
8
GoldSunMonkey| | 2012-8-14 21:21 | 只看该作者
:)都回答了。

使用特权

评论回复
9
51xlf| | 2012-8-18 12:40 | 只看该作者
楼上说很好呀

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

44

帖子

0

粉丝