原创 【博客大赛】【原创】如何选择复位方式?

2012-8-22 09:25 2888 10 14 分类: FPGA/CPLD 文集: xilinx FPGA

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

         异步or 同步

         以下是同步、异步复位的Verilog和VHDL代码:

// 同步复位Verilog

always@(posedge clk)

  if(rst)

  begin

a<=1’b0;

  end

  else

  begin

a<=b;

  end

--同步复位VHDL

process(clk,rst)

begin

  if clk’event and clk=’1’ then

if rst=’1’ then

  a<=’0’;

else

  a<=b;

end if;

  end if;

end process;

 

// 异步Verilog

always@(posedge clk or posedge rst)

  if(rst)

  begin

a<=1’b0;

  end

  else

  begin

a<=b;

  end

--异步复位VHDL

process(clk,rst)

begin

if rst=’1’ then

a<=’0’;

else

    if clk’event and clk=’1’ then

  a<=b;

end if;

  end if;

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

PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

用户377235 2013-8-6 23:59

同异步讲的不够好,没有提出解决办法!还是不够深入啊!

用户377235 2012-3-8 23:35

博主总结得不错,复位在很多设计中确实容易出问题!

Hoki 2012-3-7 11:08

EDN的活动促进了我学习的动力,哈哈!

用户403664 2012-3-7 11:05

博主好高产!
相关推荐阅读
Hoki 2017-01-11 17:35
LX9开发板呼吸灯实现
对LX9开发板硬件评测后,从这一节开始真正进入FPGA开发的世界。很多开发板的例程中必有跑马灯实验,老跑马也没意思,咱来把新潮的,整一个呼吸灯。 呼吸灯最初是出现在apple公司的笔记本产品中,当合上...
Hoki 2017-01-11 16:47
LX9的microblaze配置
虽然XC6SLX9芯片资源比较少,但是嵌一个microblaze还是搓搓有余的,这一节就来评测一下在XC6SLX9上microblaze的配置。 有两种方法配置microblaze,一是在ISE软件中...
Hoki 2017-01-11 16:32
zynq评测
Zynq芯片是业界第一款在FPGA中集成ARM核的芯片,由FPGA的发明者xilinx公司推出的。Zynq严格来说不能以FPGA来定义它,因为其是以处理器为中心的平台,能够在单芯片上提供软、硬件和 I...
Hoki 2017-01-11 16:19
u-boot
Zyny芯片启动加载分为3步: 1. 芯片上电启动,首先读取BootROM中的程序,初始化一些必要的外设,然后根据专用引脚电平判断该从何处启动first stage Bootloader(FSBL),...
Hoki 2017-01-11 16:09
基于zynq的交叉编译平台
Zynq芯片的最大特点是其集成了双ARM Cortex-A9处理器,因此zynq的应用基本是以这个ARM核为核心,再配合FPGA逻辑作为协处理器,几乎能实现所有较复杂的应用。并且在ARM上可以跑操作系...
Hoki 2017-01-11 15:54
u-boot image生成
这节介绍一下如何生成u-boot image文件,在SDK软件中点击Xilinx Tools→Create Boot Image工具即可生成,但是生成image文件需要首先集齐3个文件:u-boot....
EE直播间
更多
我要评论
4
10
关闭 站长推荐上一条 /3 下一条