EDN首页   博客首页 用户登陆  |  注册

日志档案

发表于 2007/6/18 10:11:37

4

标签: reset  asic  fpga  synthesis  

异步复位还是同步复位?

    对于这个问题,网上有很多讨论。在这里总结一下,提醒自己。

异步复位:

always @(posedge clk or posedge reset)
begin
    if(reset)
       // reset逻辑
    else
       // 同步逻辑
end

 

同步复位:

always @(posedge clk)
begin
    if(reset)
        // reset逻辑
    else
        // 同步逻辑
end

    ASIC设计中,同步复位要比异步复位多耗资源,但是在FPGA中两者差不多,因为FPGA中的寄存器同步复位和异步复位都提供资源。异步复位会对复位信号上的毛刺产生错误复位。

    在ASIC设计中,通常的做法是使用异步复位,在异步复位信号的根部进行总体同步。

    2007年十月份,由于工作安排参加了IBM的芯片后端process的培训,了解了IBM关于后端process的流程、阶段定义和tool chain。当问到IBM的工程师关于异步复位还是同步复位的问题时,他们的回答是都可以,对于IBM的technology来说两者都没有问题,不需要设计者特别考虑。真是高人呀!看来二者的争论是没有多大必要的了。一般的foundry厂商对两者都有很好的支持。

2009年3月20号更新
    又有新发现。IBM的标准单元中没有同步复位的DFF,使用同步复位综合成如下结果:
                 
所以使用同步reset会增加逻辑(上图中的“与门”)。

    如果使用异步复位,综合结果如下:
                   
此时,使用异步复位会得到更好的时序。

所以,之前是被IBM工程师忽悠了。

一般性原则:如果确定了综合的foundry厂的库,先要研究库中DFF的情况。然后决定reset设计。
           如果没有库或还不确定制程,比如要写IP,那就用同步reset。

系统分类: CPLD/FPGA   |   用户分类: ASIC DESIGN   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

该用户于2009/3/27 17:44:29编辑过该文章

阅读(2647)  |  评论(2)  |  收藏(0)  |  举报  

投一票您将和博主都有获奖机会!

最新评论

  • 马奔利

    2007/10/22 11:13:42

    如何在异步复位信号的根部进行总体同步?

  • liuzilin1121

    2007/7/9 17:50:30

    Hi ,我一直在看你的Blog,很不错,篇篇都是精华。

    我是想问下,你有兴趣在一个新起的,专业的FPGA社区担任版主吗?

    当然,如果你有兴趣的话。这个论坛是受到FPGA大厂和相关的开发工具供应商的大力支持,所以,相信你会受益匪浅。

    如果有兴趣的话,请与我联系,liuzilin1121@hotmail.com