在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 16046|回复: 29

[活动] 如何选择复位方式

[复制链接]
发表于 2012-6-25 16:24:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
在一个FPGA项目设计之初,全局网络的建立至关重要,其中包括时钟网络和复位网络。而通常设计者对时钟网络的规划尤为小心,可却忽视了复位网络,这个复位跟时钟一样也是一个覆盖全局、高扇出的信号,如果处理不当也会导致意想不到的错误。很多人会问,到底复位信号选择同步还是异步、高电平还是低电平有效?对于这个问题,下文做了论述:
        异步or 同步?
以下是同步、异步复位的Verilog和VHDL代码:
// 同步复位(Verilog)



  1. always@(posedge clk)
  2.   if(rst) begin
  3.     a<=1’b0;
  4.   end
  5.   else begin
  6.     a<=b;
  7.   end


复制代码
--同步复位(VHDL)



  1. process(clk,rst)
  2. begin
  3.   if clk’event and clk=’1’ then
  4.     if rst=’1’ then
  5.       a<=’0’;
  6.     else
  7.       a<=b;
  8.     end if;
  9.   end if;
  10. end process;


复制代码
// 异步(Verilog)



  1. always@(posedge clk or posedge rst)
  2.   if(rst) begin
  3.     a<=1’b0;
  4.   end
  5.   else begin
  6.     a<=b;
  7.   end


复制代码
--异步复位(VHDL)



  1. process(clk,rst)
  2. begin
  3. if rst=’1’ then
  4.   a<=’0’;
  5. else
  6.     if clk’event and clk=’1’ then
  7.       a<=b;
  8.     end if;
  9. end if;
  10. end process;


复制代码
网上有很多关于在FPGA设计中使用异步还是同步复位的讨论,其中很多都推荐使用同步复位,但是使用同步复位也不是绝对有利的,同步和异步都有各自的优缺点:
同步复位        异步复位
综合出来的FF面积小,需要额外的组合逻辑        无需额外的组合逻辑
需要时钟触发,可以使电路100%的同步,可以消除毛刺的影响         无需时钟,但是会因毛刺发生错误复位,并且易出现亚稳态
脉冲宽度需要长于一个时钟周期        脉冲宽度无限制,快速复位
        基于同步和异步复位各自的优缺点,很多经典文献都推荐一种异步复位、同步释放电路,如图1所示,此电路既节省了同步所需的额外逻辑资源又消除了异步带来的毛刺和亚稳态的影响。其中FF的数量决定了复位脉冲的宽度,图中为4个,即复位脉冲宽度为4个时钟周期。
Snap1.jpg
图1
        高电平 or 低电平有效?
        在上文描述同步、异步复位的HDL代码中都为高电平有效复位,异步复位只要在判断条件中取个反即可。关于选择高电平有效还是选择低电平有效的复位,不像选择同步还是异步有那么些理论根据,因此有些设计者就根据个人代码编写的喜好来选择是高电平复位还是低电平复位。
        但是高、低电平复位总是有所区别的,复位的过程总是由信号电平的变化触发的,不管是同步还是异步总是有亚稳态的问题,因此如果电平转换地越快则亚稳态的几率就小一点,如下表为CMOS、TTL电平标准:
电平标准        低        高       
CMOS        0V ~ VDD/2        VDD/2 ~ VDD        VDD=供电电压
TTL        0V ~ 0.8V        2V ~ VCC        VCC=5V ±10%
        TTL电平低电平和高电平是对称的,端口经常外接上拉电阻,因此由高到低的转换会快一些;并且TTL端如果在悬空状态下默认是高电平的,因此如果选用低电平有效复位抗干扰能力比较好。
        反观FPGA的逻辑,最近在研究Xilinx 7系列FPGA的结构,其中复位可以通过两种方式实现:全局复位网络(GSR)和普通复位端,如图2所示为7系列FPGA中的Storage Element结构,它既可以配置成Flip-Flop也可以配置成Latch,由输入端D、输出端Q,三个控制信号时钟使能CE、时钟CK和置位/复位SR组成;内部还有INIT0、INIT1、SRLO和SRHI 四个选项,其中INIT0和INIT1配对,表示通过GSR全局复位,此复位网络是异步的,并且铺设在整个芯片区域,属于硬核,用户无法自定义修改;而SRLO和SRHI配对,表示高电平有效信号SR驱动的复位,此信号可以配置成异步或者同步,根据此特性,如果使用低电平有效的复位,实现时则需要在SR端额外加入一个非门,因此在7系列FPGA设计时推荐使用高电平有效的复位。
Snap2.jpg
图2
        选择高还是低,需要根据具体的电平标准、器件结构来选择,并不是一概而论低电平有效的好或者高电平有效的好。

注:另外在设计中复位信号有时可能出现一些问题。
1. 如果在一个设计的顶层定义了一个异步复位信号,而为了减小高扇出的影响,可以将这个复位信号分配到全局布线资源上。
但是有些情况下,使用全局复位信号可能导致recovery和removel时序问题。如图4所示使用级联复位结构,将异步复位信号同步释放,根据模块进行分区,在每个分区内再级联同步释放结构,这样可以降低复位信号的扇出,从根本性上解决了问题。
Snap4.jpg
图4
        2. 往往在一个大系统中有多个时钟,是否需要为每个时钟域分配一个复位?如果只有一个全局复位,当然在这种情况下肯定是异步复位,它与系统中所有时钟都没有关系,并且必须满足所有时钟域的时序要求,同时满足所有时钟域的recovery和removel时序在某些情况下就不是那么容易了,因此为每个时钟分配复位是有必要的,如图5所示,此结构使用了一个全局复位,在不同时钟域分别对其进行同步,这样满足所有时钟域的时序应该是轻松些了。
Snap5.jpg
图5

参考文献:
Clifford E. Cummings, Asynchronous & Synchronous Reset Design Techniques
Xilinx White Paper, WP272 Get Smart About Reset: Think Local, Not Global
Xilinx User Guide, 7 Series FPGAs Configurable Logic Block
发表于 2012-6-26 10:33:36 | 显示全部楼层
学习了。
发表于 2012-6-27 15:09:13 | 显示全部楼层
很好。。
发表于 2012-6-27 16:12:10 | 显示全部楼层
非常清晰和好的文档
发表于 2012-7-3 16:53:57 | 显示全部楼层
回复 1# huxiaokai2005


    现在就是想多多学习细节的地方。
发表于 2012-7-11 13:29:38 | 显示全部楼层
学习了!!!战斗力++
发表于 2012-7-11 15:58:42 | 显示全部楼层
真好挨
发表于 2012-8-4 14:21:55 | 显示全部楼层
分析的很深刻。
发表于 2012-8-8 16:29:41 | 显示全部楼层
现在就是想多多学习细节的地方。
发表于 2012-8-10 21:28:49 | 显示全部楼层
xie xie xie xie xie xie
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-23 08:59 , Processed in 0.033964 second(s), 12 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表