| sonja 的个人资料๑۩۞۩๑ Sonja小屋 ๑۩۞۩๑照片日志列表 | 帮助 |
|
4月10日 毛刺FPGA(Field Programmable Gate Array)以其容量大、功能强以及可靠性高等特点,在现代数字通信系统中得到广泛的应用。采用FPGA设计数字电路已经成为数字电路系统领域的主要设计方式之一。在FPGA的设计中,毛刺现象是长期困扰电子设计工程师的设计问题之一,是影响工程师设计效率和数字系统设计有效性和可靠性的主要因素。由于信号在FPGA的内部走线和通过逻辑单元时造成的延迟,在多路信号变化的瞬间,组合逻辑的输出常常产生一些小的尖峰,即毛刺信号,这是由FPGA内部结构特性决定的。毛刺现象在FPGA的设计中是不可避免的,有时任何一点毛刺就可以导致系统出错,尤其是对尖峰脉冲或脉冲边沿敏感的电路更是如此。因此,克服和解决毛刺问题对现代数字系统设计尤为重要。本文从FPGA的原理结构的角度探讨了产生毛刺的原因及产生的条件,在此基础上,总结了多种不同的消除方法,在最后结合具体的应用对解决方案进行深入的分析。
如图1(c)所示,如果在不加任何的去除毛刺的措施的时候,我们可以看到结果c中含有大量的毛刺。产生的原因就是在时钟的上升沿,每个输入(a和b)的各个数据线上的数据都不可能保证同时到达,也就是说在时钟读取数据线上的数据的时候,有的数据线上读取的已经是新的数据,而有的数据线上读取的仍然是上一个数据,这样无疑会产生毛刺信号,而当数据完全稳定的时候,毛刺信号也就自然消失了。
这是一种比较传统的去除毛刺的方法。原理就是用一个D触发器去读带毛刺的信号,利用D触发器对输入信号的毛刺不敏感的特点,去除信号中的毛刺。这种方法在简单的逻辑电路中是常见的一种方法,尤其是对信号中发生在非时钟跳变沿的毛刺信号去除效果非常的明显。 但是对于大多数的时序电路来说,毛刺信号往往发生在时钟信号的跳变沿,这样D触发器的效果就没有那么明显了(见图2,加D触发器以后的输出q,仍含有毛刺)。另外,D触发器的使用还会给系统带来一定的延时,特别是在系统级数较多的情况下,延时也将变大,因此在使用D触发器去除毛刺的时候,一定要视情况而定,并不是所有的毛刺都可以用D触发器来消除。
信号同步法 在很多文章中都提到,设计数字电路的时候采用同步电路可以大大减少毛刺。另外,由于大多数毛刺都比较短(大概几个纳秒),只要毛刺不出现在时钟跳变沿,毛刺信号就不会对系统造成危害了。因此很多人认为,只要在整个系统中使用同一个时钟就可以达到系统同步的目标了。但是这里面有一个非常严重的问题,就是时钟信号和其他所有的信号一样,在FPGA器件中传递的时候是有延时的,这样根本就无法预知时钟跳变沿的精确位置。也就是说我们无法保证在某个时钟的跳变沿读取的数据是一个稳定的数据,尤其是在多级设计中,这个问题就更加突出了。因此,做到真正的"同步"就是去除毛刺信号的关键问题。我认为这里同步的关键就是保证在时钟的跳变沿读取的数据是稳定的数据而不是毛刺数据。以这个思想为出发点,提出了以下几种具体的信号同步方法。 信号延时同步法 首先,我们给出了一个两级乘法(c=a b;q=d c)的运算结果(如图3所示,这里不再给出运算电路)。可以看到,在没加任何处理过程的时候,两级结果c和q中都含有大量的毛刺信号。其中毛刺信号产生的原因就是在计算时钟跳变时刻,数据信号同时发生了跳变。另外,第一级信号c中含有大量的毛刺,在经过第二次乘法运算以后被明显放大了,从图3可以看出q中毛刺更加严重了。但在很多实际工作中,我们最关心的往往是最后的输出结果(q),只要中间信号的毛刺对后面的输出没有什么影响我们就不需要对它们作任何处理了。因此,这里所提出的信号同步的核心思想就是消除这些中间毛刺信号的影响。
信号延时法,它的原理就是在两级信号传递的过程中加一个延时环节,从而保证在下一个模块中读取到的数据是稳定后的数据,即不包含毛刺信号。这里所指的信号延时可以是数据信号的延时,也可以是时钟信号的延时。由于篇幅的关系,这里我们主要以对时钟信号的延时来说明信号延时法的原理。对上述计算过程加时钟信号延时的原理及结果如图4所示。
图4中的clkdelay就是时钟延时环节。在加这个环节以前的时钟信号是直接连到模块b上的,这样两个模块使用同一时钟,好像已经做到了同步,但是如图3所示,结果中含有大量的毛刺,其原因就是产生毛刺的根本原因--“竞争冒险"现象没有得到根本性的消除。加时钟延时环节的作用就是要从根本上消除“竞争冒险”,其过程是将控制模块b的时钟延时一段时间,使得模块b的控制时钟在上跳变化时数据c已经达到了稳定,即不含毛刺信号的数据,而这时数据d也已达到稳定,这样竞争冒险现象消除了,从而毛刺信号也得到了有效的抑制,如图4 (c) 所示。 与时钟延时法的原理相同,我们也可以在数据信号加延时环节来消除竞争冒险的现象,达到真正的同步。这里的延时环节可以使用Quartus Ⅱ提供的lcell实现,也可以使用D触发器和一个高频的计数脉冲灵活实现。另外我们也可以从综合结果(图4 (c)所示)看到,所加的延时环节占用的芯片资源是很少的,是一种简单有效而且节约资源的方法。 时钟信号的灵活使用 和上述方法的原理相似,灵活使用时钟信号的目的也是尽可能的消除竞争冒险。比如在时钟的第一个跳变沿触发模块a,下一个跳变沿控制触发模块b,这样时钟的交替控制也在一定程度上消除了竞争冒险,从而抑制了毛刺信号。还比如分别使用时钟的上升沿或者下降沿控制不同的模块。但是这些方法不适合使用在比较复杂的设计中,否则会使设计的条理非常的混乱,给以后的阅读修改带来很大的困难。因此,在选用这种方法的时候一定要慎重。 状态机控制 对于大型的数字电路设计,状态机是一种非常理想的选择,能使运行性能和硬件资源的占用达到最佳的优化,另外灵活的使用状态机也可以实现信号的同步和消除毛刺的目的。在数据传递比较复杂的多模块系统中,由状态机在特定的时刻分别发出控制特定模块的时钟信号或者模块使能信号,状态机的循环控制就可以使得整个系统协调运作,同时减少毛刺信号。那么只要我们在状态机的触发时间上加以处理,就可以避免竞争冒险,从而抑制毛刺的产生。原理如图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 PROM或FASTFLASH技术 ,无需外部存储器芯片 ,使用简单 ,保密性好。而基于 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日 周日 早上出去晒衣服的时候,看见院子里的几只野猫躺在草地上眯着眼睛慵懒的晒着太阳,突然有种非常羡慕的感觉,它们的生活是那么的简单,没有其他杂念只要填饱肚子就好,我也想变成一只小猫,不用去猜测别人的心思,不用怕前一刻还喝酒谈心的朋友后一刻就变成陌路人,永远就那么简简单单、快快乐乐的生活。呵呵,猫咪肯定是变不成了,只有努力学习怎样去做一个精明的人。 8月28日 减肥进行时 周六和一个朋友出去吃饭,朋友竟然说我瘦了,心里窃喜,回家赶紧磅了下称,果然不是敷衍我,这段时间竟然掉了7斤肉,这简直是近若干年来都不曾有过的事情。我这个人一向是宁可胖死也不能亏了嘴的人,而且最近真吃了不少好东西,想了半天也没想出来是怎么瘦下来的,不过瘦了总比胖了好,管他怎么瘦的,希望能够继续保持这个势头,呵呵。 8月23日 生病 好长时间都没上来了,想想都不知道最近做了些什么,反正日子就那么刷刷刷的过去了。最近可能厂里传播拉肚子和发烧病毒,周围的同事都相继中招,今天早上吃饭的时候我还向老妈炫耀我都么健壮,结果刚到办公室就开始频繁的往卫生间里跑。唉,看来这大话是不能随便说的啊。 7月26日 啤酒节7月17日 HUNGRY
今天下午一直在饥饿中度过!!中午爬了四层楼 到食 堂 就看到打饭窗口外站了一堆人拿着空饭盒在等 菜, 不过还好,最近几天厂里在举办卡拉OK大赛,比赛地点就是食堂,大家在等菜的时候还可以欣赏欣赏音乐。大约站了20分钟菜终于上来了,同事们一窝蜂似的涌向窗口,可怜等我挤进去的时候包子也 没了,排骨也没了,只剩下大头菜炒鸡蛋了,最可恨的是吃了才知道大头菜炒鸡蛋里面根本没放 盐,这已经是第三次在食堂吃到没放盐的菜了,我要严重抗议!!!
7月15日 o(‧'''‧)o 上个周末种了几棵辣椒种子,说明书说一周左右就能发芽了,可是到今天为止那几颗种子还一点动静都没有,估计这次是播种失败了。不知道是因为水浇多了?因为种的太深了?还是真被老爸说中了--我是上当受骗了。 |
|
|