sonja 的个人资料๑۩۞۩๑ Sonja小屋 ๑۩۞۩๑照片日志列表 工具 帮助
Welcom

sonja

职业
地点
没什么好说的

๑۩۞۩๑ Sonja小屋 ๑۩۞۩๑

:)  
第 1 张,共 6 张
4月10日

毛刺

FPGA(Field Programmable Gate Array)以其容量大、功能强以及可靠性高等特点,在现代数字通信系统中得到广泛的应用。采用FPGA设计数字电路已经成为数字电路系统领域的主要设计方式之一。在FPGA的设计中,毛刺现象是长期困扰电子设计工程师的设计问题之一,是影响工程师设计效率和数字系统设计有效性和可靠性的主要因素。由于信号在FPGA的内部走线和通过逻辑单元时造成的延迟,在多路信号变化的瞬间,组合逻辑的输出常常产生一些小的尖峰,即毛刺信号,这是由FPGA内部结构特性决定的。毛刺现象在FPGA的设计中是不可避免的,有时任何一点毛刺就可以导致系统出错,尤其是对尖峰脉冲或脉冲边沿敏感的电路更是如此。因此,克服和解决毛刺问题对现代数字系统设计尤为重要。本文从FPGA的原理结构的角度探讨了产生毛刺的原因及产生的条件,在此基础上,总结了多种不同的消除方法,在最后结合具体的应用对解决方案进行深入的分析。

1 毛刺产生的原因
 
以图1的例子分析毛刺产生的起因:1是一个3位同步加法计数器,当使能端为高电平时,在每个时钟上升沿时刻QAQBQC000逐步变到111,进入到全1状态后,进位输出端输出半个时钟脉冲宽度的高电平,但从图2仿真结果中可以看到在011变化到100时刻ROC出现了尖脉冲,即毛刺。

1 3位计数器

2 仿真结果

XilinxFPGA为例分析其内部结构,如图3所示。

3 FPGA的内部结构

FPGA芯片是由可构造的输入输出块(Input/OutputBlock,IOB)、可构造逻辑块(Cinfigurable Logic Block,CLB)和可编程连线资源(Programmable Interconnect Array,PIA)3种可构造单元构成的。IOB位于芯片内部四周,在内部逻辑阵列与外部芯片封装引脚之间提供一个可编程接口,他主要由逻辑门、触发器和控制元组成。CLB组成了FPGA的核心阵列,能完成用户指定的逻辑功能;每个CLB主要有一个组合逻辑、几个触发器、若干个多选一电路和控制单元组成;PIA位于芯片内部的逻辑块之间,经编程后形成连线网络,用于芯片内部逻辑间的相互连接,并在他们之间传递信息。从图3中可以看出,对于不同的输入12,到逻辑块(M)的走线可能是不同的,这就造成了输入信号的延迟,假设12同时变化,由于延迟的存在,到达M时就有先有后(这种现象称为竞争),在逻辑输出端就可能会有险象(也称冒险),即产生了毛刺。在上述例子中的011状态,假设QAQB同时从1变化到0,QC提前了2ns0变到1,产生一个2ns的高电平,这就是毛刺。也就是说,FPGA设计中,毛刺产生的根本原因是信号在芯片内部走线时产生的延迟。

2 毛刺产生的条件
 
借助同样的例子来分析毛刺产生的条件。QA,QB,QC在每一个时钟上升沿同时发生翻转,但实际中由于延迟的存在,并不能保证QA,QB,QCD触发器的布线长短一致。如果QCQA,QB提前了2ns,这就形成了2ns的全1状态,称为“假象全1,进而导致进位输出产生一个尖脉冲。值得注意的是,3变到4011100,3位中有2位同时发生翻转,即在同一时刻有大于一个的信号发生改变。由于延迟的作用,多个信号到达终点的时间有先有后,形成了竞争,由竞争产生的错误输出就是毛刺。所以,毛刺发生的条件就是在同一时刻有多个信号输入发生改变。

3 消除毛刺的方法

知道了毛刺产生的条件,就可以通过改变设计,破坏其条件来减少毛刺的发生。例如,利用格雷码计数器每次输出只有一位跳变的特性,代替普通的二进制计数器,避免了毛刺的产生。还可以对电路进行改进,以消除毛刺对系统的影响。下面对各种方法做分别介绍:

3.1 利用冗余项法
利用冗余项消除毛刺有2种方法:代数法和卡诺图法,两者都是通过增加冗余项来消除险象,只是前者针对于函数表达式而后者针对于真值表。以卡诺图为例,若两个卡诺圆相切,其对应的电路就可能产生险象。因此,修改卡诺图,在卡诺图的两圆相切处增加一个圆,以增加多余项来消除逻辑冒险。但该法对于计数器型产生的毛刺是无法消除的。

3.2 采样法
由于冒险多出现在信号发生电平跳变的时刻,即在输出信号的建立时间内会产生毛刺,而在保持时间内不会出现,因此,在输出信号的保持时间内对其进行采样,就可以消除毛刺信号的影响,常用的采样方法有2:一种使用一定宽度的高电平脉冲与输出相与,从而避开了毛刺信号,取得输出信号的电平值。这种方法必须保证采样信号在合适的时间产生,并且只适用于对输出信号时序和脉冲宽度要求不严的情况。另一种更常见的方法叫锁存法,是利用D触发器的输入端D对毛刺信号不敏感的特点,在输出信号的保持时间内,用触发器读取组合逻辑的输出信号。由于在时钟的上升沿时刻,输出端Q=D,当输入的信号有毛刺时,只要不发生在时钟的上升沿时刻,输出就不会有毛刺。这种方法类似于将异步电路转化为同步电路,实现简单,但同样会涉及到时序问题。

3.3 吸收法
由于产生的毛刺实际上是高频窄脉冲,故增加输出滤波,在输出端接上小电容C就可以滤除毛刺。但输出波形的前后沿将变坏,在对波形要求较严格时,应再加整形电路,该方法不宜在中间级使用。

3.4 延迟法
因为毛刺最终是由于延迟造成的,所以可以找出产生延迟的支路。对于相对延迟小的支路,加上毛刺宽度的延迟可以消除毛刺。但有时随着负载增加,毛刺会继续出现,而且,当温度变化,所加的电压变化或要增加逻辑门时,所加的延迟是不同的,必须重新设计延迟线,因而这种方法也是有局限性的。而且采用延迟线的方法产生延迟会由于环境温度的变化而使系统可靠性变差。

3.5 硬件描述语言法
这种方法是从硬件描述语言入手,找出毛刺产生的根本原因,改变语言设计,产生满足要求的功能模块,来代替原来的逻辑功能块。在图1电路中,一个3位计数器可能会在011100101110发生跳变时产生毛刺,究其原因是因为一次有2位发生跳变,可以采用VHDL语言对计数器编写如下,产生的计数模块代替原来普通的计数器。
subdesignmodcount
 (clk,reset:input;q[2110]:output;)
variable
counter3
:MACHINEOFBITS(r[2110])
 WITHSTATES(r0=B"101",
r1=B"100",
r2=B"000",
r3=B"001",
r4=B"011",
r5=B"010",
r6=B"110",
r7=B"111");
 begin
  q[ ]=rr[ ];
counter31reset=reset;
counter31clk=clk;
CASEcounter3IS
  whenr0=>counter3=r1;
  whenr1=>counter3=r2;
  whenr2=>counter3=r3;
  whenr3=>counter3=r4;
  whenr4=>counter3=r5;
  whenr5=>counter3=r6;
   whenr6=>counter3=r7;
  whenr7=>counter3=r0;
ENDCASE;
end;

注意在新的计数器中,每次状态发生改变时

如图1(c)所示,如果在不加任何的去除毛刺的措施的时候,我们可以看到结果c中含有大量的毛刺。产生的原因就是在时钟的上升沿,每个输入(a和b)的各个数据线上的数据都不可能保证同时到达,也就是说在时钟读取数据线上的数据的时候,有的数据线上读取的已经是新的数据,而有的数据线上读取的仍然是上一个数据,这样无疑会产生毛刺信号,而当数据完全稳定的时候,毛刺信号也就自然消失了。


输出加D触发器

这是一种比较传统的去除毛刺的方法。原理就是用一个D触发器去读带毛刺的信号,利用D触发器对输入信号的毛刺不敏感的特点,去除信号中的毛刺。这种方法在简单的逻辑电路中是常见的一种方法,尤其是对信号中发生在非时钟跳变沿的毛刺信号去除效果非常的明显。

但是对于大多数的时序电路来说,毛刺信号往往发生在时钟信号的跳变沿,这样D触发器的效果就没有那么明显了(见图2,加D触发器以后的输出q,仍含有毛刺)。另外,D触发器的使用还会给系统带来一定的延时,特别是在系统级数较多的情况下,延时也将变大,因此在使用D触发器去除毛刺的时候,一定要视情况而定,并不是所有的毛刺都可以用D触发器来消除。

点击看大图
图2 加D触发器后的运算电路及结果

信号同步法

在很多文章中都提到,设计数字电路的时候采用同步电路可以大大减少毛刺。另外,由于大多数毛刺都比较短(大概几个纳秒),只要毛刺不出现在时钟跳变沿,毛刺信号就不会对系统造成危害了。因此很多人认为,只要在整个系统中使用同一个时钟就可以达到系统同步的目标了。但是这里面有一个非常严重的问题,就是时钟信号和其他所有的信号一样,在FPGA器件中传递的时候是有延时的,这样根本就无法预知时钟跳变沿的精确位置。也就是说我们无法保证在某个时钟的跳变沿读取的数据是一个稳定的数据,尤其是在多级设计中,这个问题就更加突出了。因此,做到真正的"同步"就是去除毛刺信号的关键问题。我认为这里同步的关键就是保证在时钟的跳变沿读取的数据是稳定的数据而不是毛刺数据。以这个思想为出发点,提出了以下几种具体的信号同步方法。

信号延时同步法

首先,我们给出了一个两级乘法(c=a b;q=d c)的运算结果(如图3所示,这里不再给出运算电路)。可以看到,在没加任何处理过程的时候,两级结果c和q中都含有大量的毛刺信号。其中毛刺信号产生的原因就是在计算时钟跳变时刻,数据信号同时发生了跳变。另外,第一级信号c中含有大量的毛刺,在经过第二次乘法运算以后被明显放大了,从图3可以看出q中毛刺更加严重了。但在很多实际工作中,我们最关心的往往是最后的输出结果(q),只要中间信号的毛刺对后面的输出没有什么影响我们就不需要对它们作任何处理了。因此,这里所提出的信号同步的核心思想就是消除这些中间毛刺信号的影响。

点击看大图
图 3 两级乘法运算的结果仿真

信号延时法,它的原理就是在两级信号传递的过程中加一个延时环节,从而保证在下一个模块中读取到的数据是稳定后的数据,即不包含毛刺信号。这里所指的信号延时可以是数据信号的延时,也可以是时钟信号的延时。由于篇幅的关系,这里我们主要以对时钟信号的延时来说明信号延时法的原理。对上述计算过程加时钟信号延时的原理及结果如图4所示。

点击看大图
图4 加了时钟延时的两级乘法运算及结果

图4中的clkdelay就是时钟延时环节。在加这个环节以前的时钟信号是直接连到模块b上的,这样两个模块使用同一时钟,好像已经做到了同步,但是如图3所示,结果中含有大量的毛刺,其原因就是产生毛刺的根本原因--“竞争冒险"现象没有得到根本性的消除。加时钟延时环节的作用就是要从根本上消除“竞争冒险”,其过程是将控制模块b的时钟延时一段时间,使得模块b的控制时钟在上跳变化时数据c已经达到了稳定,即不含毛刺信号的数据,而这时数据d也已达到稳定,这样竞争冒险现象消除了,从而毛刺信号也得到了有效的抑制,如图4 (c) 所示。

与时钟延时法的原理相同,我们也可以在数据信号加延时环节来消除竞争冒险的现象,达到真正的同步。这里的延时环节可以使用Quartus Ⅱ提供的lcell实现,也可以使用D触发器和一个高频的计数脉冲灵活实现。另外我们也可以从综合结果(图4 (c)所示)看到,所加的延时环节占用的芯片资源是很少的,是一种简单有效而且节约资源的方法。

时钟信号的灵活使用

和上述方法的原理相似,灵活使用时钟信号的目的也是尽可能的消除竞争冒险。比如在时钟的第一个跳变沿触发模块a,下一个跳变沿控制触发模块b,这样时钟的交替控制也在一定程度上消除了竞争冒险,从而抑制了毛刺信号。还比如分别使用时钟的上升沿或者下降沿控制不同的模块。但是这些方法不适合使用在比较复杂的设计中,否则会使设计的条理非常的混乱,给以后的阅读修改带来很大的困难。因此,在选用这种方法的时候一定要慎重。

状态机控制

对于大型的数字电路设计,状态机是一种非常理想的选择,能使运行性能和硬件资源的占用达到最佳的优化,另外灵活的使用状态机也可以实现信号的同步和消除毛刺的目的。在数据传递比较复杂的多模块系统中,由状态机在特定的时刻分别发出控制特定模块的时钟信号或者模块使能信号,状态机的循环控制就可以使得整个系统协调运作,同时减少毛刺信号。那么只要我们在状态机的触发时间上加以处理,就可以避免竞争冒险,从而抑制毛刺的产生。原理如图5所示。


图 5 状态机控制原理

限于篇幅的原因,这里我们只讲述状态机控制的原理,提出一种新的思路。


总结

由于毛刺信号对FPGA器件的运行有很大的影响,如何有效抑制毛刺信号就成了一个非常突出的问题。但是必须强调的一点就是,我们首先必须对程序设计本身进行优化和改进,使毛刺信号的产生降低到最小,比如将一些信号用变量代替来减小延时等。另外,在实际应用中如何选用适合的方法也非常的重要,一定要慎重考虑。比如延时环节的加入会使整个系统的延时增大,加入太多时就会影响系统的运行

http://www.elecn.net/electronic/76/electrical202060214691_1.html

FPGA&CPLD

在别人的blog上看到,觉得挺好,转来学习一下:

FPGA是一种高密度的可编程逻辑器件,自从Xilinx公司1985年推出第一片FPGA以来,FPGA的集成密度和性能提高很快,其集成密度最高达500万门/片以上,系统性能可达200MHz。由于FPGA器件集成度高,方便易用,开发和上市周期短,在数字设计和电子生产中得到迅速普及和应用,并一度在高密度的可编程逻辑器件领域中独占鳌头。 

CPLD是由 GAL发展起来的 ,其主体结构仍是与或阵列 ,自从 90年代初 Lattice公司高性能的具有在系统可编程 ISP(In System Programmable)功能的 CPLD以来 ,CPLD发展迅速。具有 ISP功能的 CPLD器件由于具有同 FPGA器件相似的集成度和易用性 ,在速度上还有一定的优势 ,使其在可编程逻辑器件技术的竞争中与 FPGA并驾齐驱 ,成为两支领导可编程器件技术发展的力量之一. 

结构

FPGA器件在结构上 ,由逻辑功能块排列为阵列 ,并由可编程的内部连线连接这些功能块来

实现一定的逻辑功能

CPLD是将多个可编程阵列逻辑 (PAL)器件集成到一个芯片 ,具有类似 PAL的结构。一般情况下CPLD器件中至少包含三种结构 :可编程逻辑功能块 (FB);可编程 I/ O单元 ;可编程内部连线

 

集成度

FPGA可以达到比 CPLD更高的集成度 ,同时也具有更复杂的布线结构和逻辑实现

适合结构

FPGA更适合于触发器丰富的结构 , CPLD更适合于触发器有限而积项丰富的结构

编程

CPLD通过修改具有固定内连电路的逻辑功能来编程 ,FPGA主要通过改变内部连线的布线来编程 ;FPGA可在逻辑门下编程 , CPLD是在逻辑块下编程 ,在编程上 FPGA CPLD具有更大的灵活性

功率消耗

CPLD的缺点比较突出。一般情况下 ,CPLD功耗要比 FPGA ,且集成度越高越明显

 

速度

CPLD优于 FPGA。由于 FPGA是门级编程 , CLB之间是采用分布式互连 ; CPLD是逻辑块级编程 ,且其逻辑块互连是集总式的。因此 ,CPLD FPGA有较高的速度和较大的时间可预测性 ,产品可以给出引腿到引腿的最大延迟时间

 

编程方式

目前的 CPLD主要是基于E2 PROM FLASH存储器编程 ,编程次数达 1万次。其优点是在系统断电后 ,编程信息不丢失。CPLD又可分为在编程器上编程和在系统编程 (ISP) CPLD两种。 ISP器件的优点是不需要编程器 ,可先将器件装焊于印制板 ,再经过编程电缆进行编程,编程、调试和维护都很方便

FPGA大部分是基于 SRAM编程 ,其缺点是编程数据信息在系统断电时丢失 ,每次上电时 ,需从器件的外部存储器或计算机中将编程数据写入 SRAM中。其优点是可进行任意次数的编程,并可在工作中快速编程 ,实现板级和系统级的动态配置 ,因此可称为在线重配置 (ICR:

In CircuitReconfigurable) PLD或可重配置硬件(RHP:Reconfigurable Hardware Product)

 

使用方便性        

CPLD FPGA要好。 CPLD的编程工艺采用 E2 CPLD的编程工艺采用 E2 CPLD的编程工艺采用 E2 PROMFASTFLASH技术 ,无需外部存储器芯片 ,使用简单 ,保密性好。而基于 SRAM编程的FPGA,其编程信息需存放在外部存储器上 ,需外部存储器芯片 ,且使用方法复杂 ,保密性差

3月27日

Precharge

由于SDRAM的寻址具体独占性,所以在进行完读写操作后,如果要对同一L-Bank的另一行进行寻址,就要将原来有效(工作)的行关闭,重新发送行/列地址。L-Bank关闭现有工作行,准备打开新行的操作就是预充电(Precharge)。预充电可以通过命令控制,也可以通过辅助设定让芯片在每次读写操作之后自动进行预充电。实际上,预充电是一种对工作行中所有存储体进行数据重写,并对行地址进行复位,同时释放S-AMP(重新加入比较电压,一般是电容电压的1/2,以帮助判断读取数据的逻辑电平,因为S-AMP是通过一个参考电压与存储体位线电压的比较来判断逻辑值的),以准备新行的工作。具体而言,就是将S-AMP中的数据回写,即使是没有工作过的存储体也会因行选通而使存储电容受到干扰,所以也需要S-AMP进行读后重写。此时,电容的电量(或者说其产生的电压)将是判断逻辑状态的依据(读取时也需要),为此要设定一个临界值,一般为电容电量的1/2,超过它的为逻辑1,进行重写,否则为逻辑0,不进行重写(等于放电)。为此,现在基本都将电容的另一端接入一个指定的电压(即1/2电容电压),而不是接地,以帮助重写时的比较与判断。
11月5日

臭美

       今天突然心血来潮和朋友跑到胜利地下花10元钱扎了对耳眼,完成了我多年的心愿,现在回到家里还有点疼的感觉,老天保佑千万不要发炎化脓,不过怎么样都得忍了,谁让咱喜欢臭美呢,吼吼,这几天就跑去商店买副漂亮耳丁!!
9月10日

周日

       早上出去晒衣服的时候,看见院子里的几只野猫躺在草地上眯着眼睛慵懒的晒着太阳,突然有种非常羡慕的感觉,它们的生活是那么的简单,没有其他杂念只要填饱肚子就好,我也想变成一只小猫,不用去猜测别人的心思,不用怕前一刻还喝酒谈心的朋友后一刻就变成陌路人,永远就那么简简单单、快快乐乐的生活。呵呵,猫咪肯定是变不成了,只有努力学习怎样去做一个精明的人。
 
没有可用类别。