《FPGA设计中的基本问题.pptx》由会员分享,可在线阅读,更多相关《FPGA设计中的基本问题.pptx(125页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、6.7 信号的延时 6.8 器件结构与实际系统的匹配 6.9 电路结构与器件速度和成本之间的关系 6.10 器件加密 6.11 设计文档 第1页/共125页6.1 数的表示方法 在数字系统中,各种数据要转换为二进制代码才能进行处理,而人们习惯于使用十进制数,所以在数字系统的输入输出中仍采用十进制数,这样就需要用二进制数来表示十进制数。用二进制数表示十进制数的方式有很多种,表6.1汇总了几种二进制计数方式,并指出了其优缺点。第2页/共125页表6.1二进制计数方式第3页/共125页记数方式数值范围优点缺点浮点数_具有很大的动态范围执行算术运算时需要大量的硬件资源块浮点数_具有很大的动态范围,所需
2、的硬件资源最少在给定时间内所有数都具有相同的指数第4页/共125页表6.23位二进制数与其对应的十进制数值二进制数无符号整数二进制补码格雷码带符号整数偏移二进制补码二进制反码00000004000l1111310102232220ll33231310044700310l5361l2110624221111715330第5页/共125页在使用FPGA器件执行数值运算的电路设计中,以及在FPGA与外围电路(如A/D、D/A器件)接口中,经常用到不同的计数方式,特别是二进制计数方式与十进制计数方式之间的转换。为了让大家能够对二进制计数方式有一个清晰的认识,下面分别对几种常用的计数方法进行简单介绍。第
3、6页/共125页表6.3无符号整数的权值第7页/共125页6.1.1无符号整数无符号整数的计数方法是我们经常用到的,它将一个整数用一个二进制代码序列表示,每个二进制代码的权值是2P,P为该代码在序列中的序号,如表6.3所示。表6.4给出了几个无符号整数与十进制数的转换实例。无符号整数非常适于执行算术运算,图6.1是一个加法运算的例子。这种计数方法的缺点就是只能表示02N-1(N为二进制序列的长度)范围内的整数,而无法表示负数,这就在很大程度上限制了这种计数方法的使用范围。第8页/共125页表6.4无符号整数与十进制数的转换实例第9页/共125页图6.1无符号整数的加法第10页/共125页表6.
4、5二进制补码的权值第11页/共125页6.1.2二进制补码二进制补码也是常用的计数方法,它既可以表示正数,也可以表示负数。与无符号整数的记数方式类似,二进制补码也是用一个二进制代码序列表示一个整数,唯一不同之处在于最高有效位的权值是-2N-1。每一位二进制代码对应的权值已在表6.5中给出。表6.6给出了二进制补码与十进制数的转换实例。用二进制补码计数方法,将一个整数进行正负值变换是很简单的,只需将原数中“1”和“0”反相,然后再加上“1”即可,如表6.6中“29”的二进制补码的表示。第12页/共125页表6.6二进制补码与十进制数的转换实例(N8)第13页/共125页二进制补码的最大优点就是可
5、以像无符号整数那样方便地进行加减运算。需要注意的是,最高有效位的进位必须舍去。图6.2给出了三个加减运算的例子。第14页/共125页图6.2二进制补码的加减运算第15页/共125页6.1.3无符号小数无符号小数是无符号整数的扩展,它将一个数分为整数部分和小数部分,通常用“N.M”表示一个无符号小数的格式,其含义是整数部分用N位二进制代码表示,小数部分用M位二进制代码表示。小数点左侧第一位二进制代码是整数部分的最低有效位,右侧第一位二进制代码是分数部分的最高有效位。权值是不同的,表6.7给出了不同位置上的二进制代码所对应的权值的大小。第16页/共125页表6.7无符号小数的权值第17页/共125
6、页表6.8给出了几个无符号小数与十进制数的转换实例。两个无符号小数进行加减运算时,首先把小数点位置对齐,然后再进行相加或相减。如果两个无符号小数的格式不相同,即N与M值不相等,则可用补零的方法取齐。图6.3是一个加法运算的实例,标有下划线的“0”为添加的辅助位。第18页/共125页表6.8无符号小数与十进制数的转换实例(N.M4.3)第19页/共125页图6.3无符号小数的加法第20页/共125页6.1.4带符号小数的二进制补码带符号小数的二进制补码可以表示正的或负的小数,它的格式通常用“N.M”表示。带符号小数的二进制补码与无符号小数的记数方法十分相似,唯一不同之处是整数部分最高有效位对应的
7、权值是-2N-1。表6.9给出了不同位置上的二进制代码所对应的权值。第21页/共125页表6.9带符号小数二进制补码的权值第22页/共125页表6.10是几个带符号小数二进制补码与十进制数的转换实例。用这种计数方法,将一个数进行正负值变换是很简单的,只需将原数中的“1”和“0”反相,然后再在最后一位(即小数部分的最低有效位)加“1”即可,如表6.10中的“3.625”。在进行加减运算时,首先把小数点位置对齐,然后再进行相加或相减。如果两个数的格式不相同,即N与M值不相等,则可用补零的方法取齐。图6.4是一个加法运算的实例,标有下划线的“0”为添加的辅助位。第23页/共125页表6.10带符号小
8、数二进制补码与十进制数的转换实例(N.M4.3)第24页/共125页图6.4带符号小数二进制补码的加法第25页/共125页与二进制补码类似,在执行算术运算时,如果整数部分的最高有效位出现进位,则必须将该进位舍去。第26页/共125页6.1.5格雷码格雷码的特点是任意两个相邻的码之间只有一个数不同。另外,由于最大数与最小数之间也仅有一位不同,故通常又叫格雷反射码或循环码。表6.11给出了格雷码与二、十进制数的关系。由于编码方式的特殊性,格雷码具有很强的抗干扰能力。但是格雷码不便于直接执行算术运算,需要转换为无符号整数或二进制补码,再进行运算。第27页/共125页表6.11格雷码与二、十进制数的关
9、系十进制数二进制数格雷码000000000l000100012001000113001100104010001105010101116011001017Olll0100810001100第28页/共125页910011101101010111111101111101211001010131101101114111010011511111000第29页/共125页6.1.6带符号整数带符号整数由“符号位”和“数值位”两部分组成。最高有效位是符号位,表示数值的正负,类似于十进制数中的“”号,一般用“0”表示正数,“1”表示负数。除去最高有效位以外的部分是数值位,它实际上是一个无符号整数,表示数值的
10、大小。这种计数方法与十进制整数的表示方法很相似。表6.12给出了3位带符号整数与十进制整数之间的对应关系。第30页/共125页6.1.7偏移二进制补码偏移二进制补码常用于A/D和D/A变换器上,它将采样点的取值范围从小到大顺序编码。表6.13是3位偏移二进制补码与十进制数和二进制补码之间的对应关系。从表中可看出,虽然偏移二进制补码是顺序编码的,但它对应的十进制数值不连续。将最高有效位反相,可以实现偏移二进制补码和二进制补码之间的转换。第31页/共125页表6.12带符号整数与十进制数的转换带符号整数十进制数0000001l010201131000101111021113第32页/共125页表6
11、.13偏移二进制补码与十进制数偏移二进制补码二进制补码十进制数00010040011013010110201111111000000101001111001021110113第33页/共125页6.1.8浮点数和块浮点数浮点数具有很大的动态范围,可以非常精确地表示一个数值。由于在执行算术运算时需要大量的硬件资源,所以浮点数计数方法的使用成本很高。块浮点数计数方法广泛用于信号处理领域,如执行FFT变换,它消耗的硬件资源要比浮点数少得多。块浮点数可以跟踪数值动态范围的变化,例如做256点FFT变换,数据宽度为16位,动态范围是-3276832767,经过FFT的第一级运算后,取值范围是-65536
12、65535。第34页/共125页为了保持数据宽度不变,可以将所有256个点的数值均除以2,然后在寄存器中置入一个“1”,这样通过增加一位寄存器,达到了既增加了数据的动态范围,又未增加数据宽度的目的。这种计数方法就是块浮点数。需要提醒大家的是,不要将浮点数和块浮点数相混淆,二者之间是有较大区别的,它们的动态范围不同,执行算术运算所需的硬件资源也不相同。第35页/共125页 6.2 有限字长的影响在6.1节我们给大家讲述了数的二进制表示方法,任何一个数值都是用有限字长的二进制数表示的,也就是说数值的表示精度和动态范围不会是无限大,所以在FPGA设计时必须考虑有限字长的影响。有限字长的影响主要带来三
13、方面的误差:输入量化误差、系数量化误差和运算量化误差。第36页/共125页模拟量值在进入FPGA器件之前,需要A/D变换,A/D采样时所得到的数值只能以有限字长的二进制代码表示,与真实值之间存在偏差,这就是输入量化误差。提高A/D器件的采样精度可以减小输入量化误差。在用FPGA器件设计数字滤波器时,数字滤波器系数必须用二进制代码表示,并按规定位数进行量化。由于量化处理引起量化误差,滤波器实际系数偏离理论计算值,从而使滤波性能变差,其原因就是系数量化误差的影响。第37页/共125页在数据处理电路中经常需要进行算术运算,例如将两个N位字长的二进制数做乘法运算,乘法器的结果输出一般用2N位字长表示,
14、这就需要舍位处理,然后再进行下一步运算,否则最终结果的数据宽度是难以想象的。但是舍位就引入了误差,这种误差属于运算量化误差,也称为运算噪声。第38页/共125页为了得到精确结果,一方面可以选用合适的运算结构,尽量减少有限字长效应,另一方面可以采用合适的字长以降低运算噪声。FPGA器件的字长可以根据需要任意指定,字长越大,量化误差就越小,但与此同时电路占用的片内资源就越多,编译、仿真时间和系统成本也会因之而上升。图6.5给出了利用FLEX10K器件实现44、88、1212和1616位乘法器所分别占用的LE和EAB的数目,由图可见,字长的增加会导致片内资源占用率呈几何级数增大。第39页/共125页
15、图6.5乘法器所占用的资源第40页/共125页6.3 时钟问题 无论是用离散逻辑、可编程逻辑,还是用全定制器件实现任何数字电路,设计不良的时钟在极限温度、电压或制造工艺存在偏差的情况下将导致系统错误的行为,所以可靠的时钟设计是非常关键的。在FPGA设计时通常采用以下四种时钟:全局时钟、门控时钟、多级逻辑时钟和波动式时钟,多时钟系统是这四种时钟类型的任意组合。第41页/共125页6.3.1全局时钟对于一个设计项目来说,全局时钟(或同步时钟)是最简单和最可预测的时钟。在FPGA设计中最好的时钟方案是:由专用的全局时钟输入引脚驱动单个主时钟去控制设计项目中的每一个触发器。FPGA一般都具有专门的全局
16、时钟引脚,在设计项目时应尽量采用全局时钟,它能够提供器件中最短的时钟到输出的延时。第42页/共125页图6.6给出全局时钟的一个实例,定时波形显示出触发器的输入数据D3.1应遵守建立时间tsu和保持时间th的约束条件。如果在应用中不能满足建立和保持时间的要求,则必须用时钟同步输入信号。有关建立和保持时间的介绍请参见6.4节内容,其具体数值可在FPGA器件的数据手册中找到,当然也可用开发软件的定时分析器计算出来。第43页/共125页图6.6全局时钟第44页/共125页6.3.2门控时钟在许多应用中,整个设计项目都采用外部的全局时钟是不可能或不实际的,所以通常用阵列时钟构成门控时钟。门控时钟常常同
17、微处理器接口有关,例如用地址线去控制写脉冲。每当用组合逻辑来控制触发器时,通常都存在着门控时钟。在使用门控时钟时,应仔细分析时钟函数,以避免毛刺的影响。如果设计满足下述两个条件,则可以保证时钟信号不出现危险的毛刺,门控时钟就可以像全局时钟一样可靠工作:第45页/共125页驱动时钟的逻辑必须只包含一个“与门”或一个“或门”,如果采用任何附加逻辑,就会在某些工作状态下出现由于逻辑竞争而产生的毛刺。逻辑门的一个输入作为实际的时钟,而该逻辑门的所有其它输入必须当成地址或控制线,它们遵守相对于时钟的建立和保持时间的约束。第46页/共125页图6.7和图6.8是可靠门控时钟的实例。在图6.7中,用一个“与
18、门”产生门控时钟,在图6.8中,用一个“或门”产生门控时钟。在这两个实例中,将引脚nWR和nWE作为时钟引脚,引脚ADD3.0是地址引脚,两个触发器的数据是信号Dn.1经组合逻辑产生的。第47页/共125页图6.7“与门”门控时钟第48页/共125页图6.8“或门”门控时钟第49页/共125页图6.7和图6.8的波形图显示出有关的建立时间和保持时间的要求,这两个设计项目的地址线必须在时钟保持有效的整个期间内保持稳定(nWR和nWE是低电平有效)。如果地址线在规定的时间内未保持稳定,则在时钟上会出现毛刺,造成触发器发生错误的状态变化。另一方面,数据引脚Dn.1只要求在nWR和nWE的有效边沿处满
19、足标准的建立和保持时间的规定。第50页/共125页设计人员往往可以将门控时钟转换成全局时钟以改善设计项目的可靠性。图6.9给出如何用全局时钟重新设计图6.7所示的电路,即让地址线去控制D触发器的输入使能。许多FPGA设计软件,如MAX+PLUS软件都提供这种带使能端的D触发器。当ENA为高电平时,D输入端的状态被时钟激励到触发器中,当ENA为低电平时,则维持现有状态。第51页/共125页图6.9将“与门”门控时钟转化成全局时钟第52页/共125页图6.9将“与门”门控时钟转化成全局时钟第53页/共125页图6.9中重新设计的电路的定时波形表明地址线不需要在nWR有效的整个期间内保持稳定,而只要
20、求它们和数据引脚一样符合同样的建立和保持时间,这样对地址线的要求就少很多。图6.10给出了一个不可靠的门控时钟的例子。3位同步加法计数器的RCO输出用来作为触发器的时钟端,由于计数器的多个输出都起到了时钟的作用,这就违反了可靠门控时钟所需的条件之一。第54页/共125页在产生RCO信号的触发器中,没有一个能考虑为实际的时钟,这是因为所有触发器几乎在相同的时刻都发生翻转,但是我们并不能保证在FPGA器件内部QA、QB、QC到D触发器的布线长短一致。因此,正如图6.10的时间波形所示,在计数器从3计到4时,RCO线上会出现毛刺(假设QC到D触发器的路径较短,即QC的输出先翻转)。第55页/共125
21、页图6.10不可靠的门控时钟第56页/共125页图6.11给出一种可靠的全局时钟控制电路,它是图6.10的改进,即用RCO来控制D触发器的使能输入。这个改进并不需要增加PLD的逻辑单元,而且图6.11电路等效于图6.10电路,但却可靠得多。第57页/共125页图6.11不可靠的门控时钟转换为全局时钟第58页/共125页6.3.3多级逻辑时钟当产生门控时钟的组合逻辑超过一级,即超过单个的“与门”或“或门”时,该设计项目的可靠性将变得很差。在这种情况下,即使样机或仿真结果没有显示出静态险象,但实际上仍然可能存在危险,所以我们不应该用多级组合逻辑去作为触发器的时钟端。第59页/共125页图6.12有
22、静态险象的多级时钟第60页/共125页图6.12给出了一个含有险象的多级时钟的例子。时钟由SEL引脚控制的多路选择器输出端提供多路选择器的输入是时钟(CLK)和该时钟的2分频(DIV2)。由图6.12的定时波形图可以看出,在两个时钟均为“1”的情况下,当SEL的状态改变时,存在静态险象。多级逻辑的险象是可以去除的,例如可以插入“冗余逻辑”到设计项目中,但是FPGA编译器在逻辑综合时会去掉这些冗余逻辑,这就使得验证险象是否真正被去除变得十分困难。为此,设计人员应必须寻求其它方法来实现电路的功能。第61页/共125页图6.13给出了图6.12电路的一种单级时钟的替代方案。图中SEL引脚和DIV2信
23、号用作D触发器的使能输入端,而不是用于该触发器的时钟引脚。采用这个电路并不需要附加逻辑单元,工作却可靠得多了。不同的系统需要采用不同的方法消除多级时钟,并没有一个固定的模式。第62页/共125页图6.13无静态险象的单级时钟第63页/共125页6.3.4行波时钟所谓行波时钟是指一个触发器的输出用作另一个触发器的时钟输入。如果仔细设计,行波时钟可以像全局时钟一样可靠工作,但是行波时钟使得与电路有关的定时计算变得很复杂。行波时钟在行波链上各触发器时钟之间产生较大的时间偏移,并且会超出最坏情况下的建立时间、保持时间和电路中时钟到输出的延时,使系统的实际速度下降。第64页/共125页用计数翻转型触发器
24、构成异步计数器时,常采用行波时钟,一个触发器的输出作为时钟控制下一个触发器的输入,参见图6.14。同步计数器通常是代替异步计数器的更好方案,这是因为两者需要同样多的宏单元而同步计数器有较短的时钟到输出的延时。图6.15所示为具有全局时钟的同步计数器,这个3位计数器是图6.14异步计数器的替代电路,它用了同样的3个宏单元,却有较高的工作速度。现在几乎所有FPGA开发软件都提供各种各样的同步计数器,设计人员可以直接调用,不需要自己从底层开始设计。第65页/共125页图6.14行波时钟第66页/共125页图6.15行波时钟转换成全局时钟第67页/共125页6.3.5多时钟系统许多系统要求在同一设计内
25、采用多时钟,最常见的例子是两个异步微处理器之间的接口,或微处理器和异步通信通道的接口。由于两个时钟信号之间要求一定的建立和保持时间,所以上述应用引进了附加的定时约束条件,它们会要求将某些异步信号同步化。图6.16给出了一个多时钟系统的实例。CLK_A用于控制REG_A,CLK_B用于控制REG_B。由于REG_A驱动着进入REG_B的组合逻辑,由定时波形显示出CLK_A的上升沿相对于CLK_B的上升沿有建立时间和保持时间的要求。第68页/共125页由于REG_B不驱动REG_A的逻辑,CLK_B的上升沿相对于CLK_A没有建立时间的要求。此外,由于时钟的下降沿不影响触发器的状态,所以CLK_A
26、和CLK_B的下降沿之间没有时间上的要求。在图6.16 中,如果CLK_A和CLK_B是相互独立的,那么它们之间的建立时间和保持时间的要求是不能保证的,所以在REG_A的输出馈送到REG_B之前,必须将电路同步化。第69页/共125页图6.17显示了REG_A的输出如何与CLK_B的同步化。该电路在图6.16的基础上增加了一个新的触发器REG-C,它由CLK_B控制,从而保证了REG-C的输出符合REG_B的建立时间。第70页/共125页图6.16多时钟系统第71页/共125页图6.17具有同步寄存器输出的多时钟系统第72页/共125页图6.18不同源时钟第73页/共125页在许多应用中只将异
27、步信号同步化还是不够的,当系统中有两个或两个以上非同源时钟的时候,数据的建立和保持时间很难得到保证,设计人员将面临复杂的时间分析问题。最好的方法是将所有非同源时钟同步化。使用FPGA内部的锁相环(PLL)是一个效果很好的方法,但并不是所有FPGA都带有PLL,而且带有PLL功能的芯片大多价格昂贵,所以除非有特殊要求,一般场合不建议使用带PLL的PLD。这时就需要使用带使能端的D触发器,并引入一个高频时钟来实现信号的同步化。第74页/共125页如图6.18所示,系统有两个不同源时钟,一个为3MHz,一个为5MHz,不同的触发器使用不同的时钟。为了保证系统能够稳定工作,现引入一个20MHz时钟,将
28、3MHz和5MHz时钟同步化,如图6.19所示。该图中的D触发器及紧随其后的非门和与门构成了时钟上升沿检测电路,检测电路的输出分别被命名为3M-EN和5M-EN。第75页/共125页把20MHz的高频时钟作为系统时钟,输入到所有触发器的时钟端,同时让3M-EN和5M-EN控制所有触发器的使能端。也就是说,在图6.18中接3MHz时钟的触发器,接20MHz时钟,同时用3M-EN控制该触发器的使能端,在图6.18中接5MHz时钟的触发器,也接20MHz时钟,同时用5M-EN控制该触发器的使能端,这样我们就实现了任何非同源时钟同步化。第76页/共125页图6.19同步化任意非同源时钟第77页/共12
29、5页稳定可靠的时钟是保证系统可靠工作的重要条件,设计中不能够将任何可能含有毛刺的输出作为时钟信号,并且尽可能只使用一个全局时钟,对多时钟系统要特别注意异步信号和非同源时钟的同步问题。第78页/共125页6.4 建立和保持时间“建立时间”定义为在时钟跳变前数据必须保持稳定(无跳变)的时间。“保持时间”定义为在时钟跳变后数据必须保持稳定的时间,如图6.20所示。每一种具有时钟和数据输入的同步数字电路都会在技术指标表中规定这两种时间。第79页/共125页图6.20建立时间和保持时间第80页/共125页数据稳定传输必须满足建立和保持时间的要求,否则输出数据就可能有错误,或变得不稳定。在FPGA设计中,
30、应对信号的建立和保持时间做充分考虑,尽量避免在数据建立时间内或其附近读取数据。对于级联的功能模块或者数字逻辑器件,后一模块或器件的工作时钟一般取前一模块或器件工作时钟的反相信号,这样就可以保证时钟的边沿位于数据的保持时间内。第81页/共125页6.5 冒险现象信号在FPGA器件内部通过连线和逻辑单元时,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。信号的高低电平转换也需要一定的过渡时间。由于存在这两方面因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出状态不确定,往往会出现一些不正确的尖峰信号,这些尖峰信号称为“
31、毛刺”。第82页/共125页如果一个组合逻辑电路中有“毛刺”出现,就说明该电路存在“冒险”。图6.21给出了一个逻辑冒险的例子,从图6.22的仿真波形可以看出,“A、B、C、D”四个输入信号的高低电平变换不是同时发生的,导致输出信号“OUT”出现了毛刺。由于信号路径长度的不同,译码器、数值比较器以及状态计数器等器件本身容易出现冒险现象,将这类器件直接连接到时钟输入端、清零或置位端口的设计方法是错误的,它可能会导致严重的后果。第83页/共125页图6.21存在逻辑冒险的电路示例第84页/共125页图6.22图6.21所示电路的仿真波形第85页/共125页冒险往往会影响到逻辑电路的稳定性,时钟端口
32、、清零和置位端口对毛刺信号十分敏感,任何一点毛刺都可能会使系统出错,因此判断逻辑电路中是否存在冒险以及如何避免冒险是设计人员必须要考虑的问题。第86页/共125页判断一个逻辑电路在某些输入信号发生变化时是否会产生冒险,可以从逻辑函数的卡诺图或逻辑函数表达式来进行判断。对此问题感兴趣的读者可以参考有关脉冲与数字电路方面的书籍和文章。在数字电路设计中,采用格雷码计数器、同步电路等,可以大大减少毛刺,但它并不能完全消除毛刺。毛刺并不是对所有的输入都有危害,例如D触发器的D输入端,只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害,因此我们可以说D触发器的D输入端对毛刺不敏
33、感。第87页/共125页消除毛刺信号的方法有很多,通常使用“采样”的方法。一般说来,冒险出现在信号发生电平转换的时刻,也就是说在输出信号的建立时间内会发生冒险,而在输出信号的保持时间内是不会有毛刺信号出现的。如果在输出信号的保持时间内对其进行“采样”,就可以消除毛刺信号的影响。第88页/共125页有两种基本的采样方法:一种方法是在输出信号的保持时间内,用一定宽度的高电平脉冲与输出信号做逻辑“与”运算,由此获取输出信号的电平值。图6.23说明了这种方法,采样脉冲信号从输入引脚“SAMPLE”引入。从图6.24的仿真波形上可以看出,毛刺信号出现在“TEST”引脚上,而“OUT”引脚上的毛刺已被消除
34、了;另一种方法是利用D触发器的D输入端对毛刺信号不敏感的特点,在输出信号的保持时间内,用触发器读取组合逻辑的输出信号。图6.25给出了这种方法的示范电路,图6.26是仿真波形。第89页/共125页图6.23消除毛刺信号的方法之一第90页/共125页图6.24图6.23所示电路的仿真波形第91页/共125页去除FPGA器件输出引脚上的毛刺,还可以采用低通滤波的方法。由于毛刺信号的持续时间很短,从频谱上分析,毛刺信号相对于有用信号来讲,它的能量分布在一个很宽的频带上。所以在对输出波形的边沿要求不高的情况下,在FPGA的输出引脚上串接一个RC电路,构成一个低通滤波器,能够滤除毛刺信号的大部分能量,如
35、图6.27所示。图中给出滤波前后“A”点和“A”点处的波形,毛刺信号经过RC低通滤波器后,残余信号很小,不会对后续电路带来危害。为了避免使正常信号的波形畸变过于严重,应仔细选择电阻和电容的参数。第92页/共125页图6.25消除毛刺信号方法之二第93页/共125页图6.26图6.25所示电路的仿真波形第94页/共125页图6.27利用RC滤波器滤除毛刺第95页/共125页6.6 清零和置位信号 清零和置位信号对毛刺也是非常敏感的,最好的清零和置位信号是从器件的输入引脚直接引入。给数字逻辑电路设置一个主复位“CLRN”引脚是常用的好方法,该方法是通过主复位引脚给电路中每个功能单元馈送清零或置位信
36、号。与全局时钟引脚类似,几乎所有FPGA器件都有专门的全局清零引脚和全局置位引脚。如果必须从器件内产生清零或置位信号,则要按照“门控时钟”的设计原则去建立这些信号,确保输入信号中不会出现毛刺信号。第96页/共125页若采用门控清零或者门控置位,则单个引脚或者触发器作为清零或置位的源,而将其它信号作为地址或控制线。在清零或置位的有效期间,地址或控制线必须保持稳定,决不能用多级逻辑或包含竞争状态的单级逻辑产生清零或置位信号。第97页/共125页6.7 信 号 的 延 时 对FPGA来说,由于路径必须通过电晶体开关,因此连线延时一直是路径延时的主要部分。信号每通过一个逻辑单元,就会产生一定的延时。延
37、时的大小除了受路径长短的影响外,还受器件内部结构特点、制造工艺、工作温度、工作电压等条件的影响。现有的FPGA设计软件都可以对内部延时进行比较准确的预测。器件内部延时越大,器件的工作速度也就越低,所以降低信号传输延时是提高处理速度的关键。第98页/共125页而在某些情况下,需要对信号进行一定的延时处理,以完成特定的功能。利用D触发器可以在时钟的控制下对信号进行延时,这种方法的最小延时时间可以是时钟周期的一半。图6.28所示电路可以将输入信号“DATAIN”分别延时0.5和1.5个时钟周期,“DATAOUT1”是将“DATAIN”延时0.5个时钟周期后的输出信号,“DATAOUT2”是将“DAT
38、AIN”延时1.5个时钟周期后的输出信号。图6.29给出了仿真波形。第99页/共125页图6.28利用D触发器进行信号延时第100页/共125页图6.29信号延时的波形仿真第101页/共125页如果需要比较精确的延时,则必须引入高速时钟信号,利用D触发器、移位寄存器或计数器来实现。延时时间的长短可通过设置D触发器或移位寄存器的级数以及计数器的计数周期来调整,而延时的时间分辨率则由高速时钟的周期来决定,高速时钟频率越高,时间分辨率也越高。数据信号经过延时后,可以用数据时钟重新读取数据,以消除延时引入的相差。第102页/共125页利用D触发器和移位寄存器作为延时器件,不能实现较长时间的延时,这是因
39、为使用过多的D触发器和移位寄存器会严重消耗FPGA器件的资源,降低其它单元的性能,所以长时间的延时单元可以通过计数器来实现。无论是用D触发器、移位寄存器还是用计数器,所构成的延时单元都能够可靠工作,其延时时间受外界因素影响很小。第103页/共125页在使用分立的数字逻辑器件时,为了将某一信号延时一段时间,有些设计人员往往在此信号后串接一些非门或其它门电路,通过增加冗余电路来获取延时。在使用FPGA器件时,这种方法是不可靠的。许多FPGA设计软件,例如MAX+PLUS,都具有逻辑优化的功能,可以去除设计中的逻辑冗余。图6.30是该软件进行逻辑优化的一个示例,输入信号“DATAIN1”被分成两路,
40、一路信号经过3个级联的“非门”后从“DATAOUT3”端口输出,另一路信号经过1个“非门”后从“DATAOUT4”端口输出。第104页/共125页从逻辑功能上看,“DATAOUT3”输出信号只不过是“DATAIN1”的反相信号,在编译时,MAX+PLUS软件实际上是删除了其中2个不必要的“非门”。从图6.31的仿真波形上可以看出,“DATAOUT3”和“DATAOUT4”输出信号的延时基本上是一样的,也就是说在FPGA芯片内部,两路信号经过了相同数目的逻辑门。第105页/共125页图6.30MAX+PLUS软件的逻辑优化示例第106页/共125页图6.31图6.30所示电路的仿真波形第107页
41、/共125页如果不希望MAX+PLUS软件删除冗余的“非门”,或者说希望得到这2个冗余的“非门”所引入的延时,可以采取以下办法:(1)选中这三个“非门”;(2)打开“Assign”菜单,选中“LogicOptions.”选项;(3)在“style”选项中选择“WYSIWYG”,“WYSIWYG”的含义就是“所见即所得(WhatYouSeeIsWhatYouGet.)”;第108页/共125页(4)选中“IndividualOptions.”按钮;(5)选择“ImplementasOutputofLogicCell”和“InsertAdditionalLogicCell”;(6)确认以上操作。这
42、时,刚才选中的三个“非门”下出现了几行注释,如图6.32所示。将修改后的电路再次进行编译和仿真,可以得到图6.33所示的波形仿真结果。第109页/共125页图6.32修改后的电路第110页/共125页从图6.33的仿真波形可以看出,“DATAOUT5”端口输出信号的延时要大于“DATAOUT6”端口输出信号的延时。用户可以采用相同的办法,通过增加“非门”的数目来增加输出信号的延时。此外,还可以通过插入一些LCELL原语来产生一定的延时。需要指出的是,采用插入冗余电路的方法得到的延时都不会是固定值,它受到诸如器件结构、工作温度等因素的影响,属于不可靠延时。如果将这种延时应用到逻辑控制电路中,有可
43、能会给电路带来许多不稳定的情况,因此并不鼓励大家使用这种方法。第111页/共125页图6.33图6.32所示电路的仿真波形第112页/共125页本节所给示例的仿真波形均是基于EPF10K10LC84-4器件得到的,如利用其它器件进行仿真,延时时间的长短可能会略有不同。第113页/共125页6.8 器件结构与实际系统的匹配电路设计方案对硬件的需求应该与所选用的FPGA器件的内部结构特点相匹配,使系统性能达到最佳。以数字信号处理(DSP)为例来说明这一点。DSP需要存储单元完成各种特殊功能,下面就从片内存储器的角度分析FPGA内部结构对DSP设计的影响。Xilinx4000系列采用分布式RAM结构
44、,FPGA的每个查找表可构成161的RAM/ROM。第114页/共125页Altera的FLEX10K和APEX20K系列采用嵌入式阵列块EAB结构,每个EAB块可设置成20481、10242、5124、2568的RAM,可以实现复杂的逻辑功能(如乘法器),还可以实现同步或异步的RAM、ROM、FIFO、双端口RAM等功能。第115页/共125页Altera的FPGA器件提供的RAM比Xilinx基于查找表的RAM容量大,而且还可以将若干EAB块组合在一起构成容量更大的存储单元,所以DSP设计方案中如果需要大容量的存储单元,使用Altera的FPGA器件可以达到更高的效率。但几个独立的存储单元
45、不能共用一个EAB块,当存储单元数目较多且每个存储单元的容量都不大时,EAB资源的利用率就很低了。使用Xilinx的FPGA器件的DSP方案往往采用分布运算的办法,刚好与片内分布式RAM结构相匹配。第116页/共125页在多权值的自适应滤波器中,将分布式RAM设置成权值的查找表,输入样点数据作为查找表的地址信号,每个查找表分别负责一个权值的计算和实时更新,这样就使大规模高性能的自适应滤波器在片内实现成为可能。采用分布式RAM结构同样能以较高的性能实现串行分布运算FIR滤波器。第117页/共125页6.9 电路结构与器件速度和成本之间的关系不同的应用领域,对器件的速度和成本的要求也不相同,FPG
46、A器件能够以最宽的动态范围满足各种需求。一般而言,可以采用两种设计思路:一种思路是将设计重点放在处理速度上,旨在达到较高的MSPS值,满足高速应用;另一种思路是将设计重点定位于FPGA芯片的资源利用率上,以较低的成本满足对低速处理的要求。第118页/共125页实现这两种设计思想的途径是分别采用并行处理和串行处理结构。例如,利用Altera的FPGA实现数据字宽度为8位的864抽头FIR滤波器,采用并行结构,处理速度可超过100MSPS,而串行结构要比并行结构节省约50的芯片资源。MAX+PLUS设计软件可以自动把一个大的设计分别放在若干个小容量的FPGA芯片中,所以在很多情况下用几个小容量的F
47、PGA芯片来代替一片大容量的芯片,往往可以降低器件成本,减轻电路板设计与制作的复杂度。第119页/共125页6.10 器件加密器件加密是为了保护设计者的劳动,防止他人恶意窃取设计数据。FPGA器件是基于SRAM结构的,掉电时无法保存数据,所以它的内部数据写在EPROM中,加电时数据自动下载到FPGA器件。由于EPROM无法加密,其内部数据容易被读取。第120页/共125页以采用FPGA器件与CPLD器件结合使用的方法。CPLD器件基于E2PROM结构,具有加密功能,例如Altera公司MAX7000系列器件等,若想从中获得设计信息是非常困难的。设计人员可以把一个电路分成两部分,其关键部分放入C
48、PLD器件中,并设置加密位,其余部分仍旧用FPGA器件完成。从实现功能上讲,这两部分电路缺一不可,即使从EPROM中获得FPGA的设计数据,由于得不到CPLD中的设计数据,也难以复制该电路。第121页/共125页目前,一些新推出的FPGA器件也具有了加密功能,例如Xilinx公司的Virtex-系列器件通过三次数据加密标准(DES)算法对位流进行加密,密钥通过存放在芯片上的IEEE1149.1界面提供,经过加密的位流是经用户指定的密钥装到FPGA中,需要密钥才能解密,从而保障了设计的安全。当然,使用者还是应该充分尊重设计人员的辛勤劳动和知识产权。第122页/共125页6.11 设计文档一个完整
49、的软件是由程序、数据和文档三部分组成的。在FPGA电路设计中,撰写完善的设计文档是非常重要的。对于一个比较复杂的设计来说,各个子单元的功能各不相同,实现的方法也不一样,各子单元之间信号时序和逻辑关系也是纷繁复杂的。因此,在设计文档中对整个设计进行详细的描述,可以保证使用者能够在较短时间内理解和掌握整个设计方案,同时设计人员在对设计进行维护和升级时,完善的设计文档也是非常有用的。第123页/共125页一个比较完善的设计文档应包括:(1)设计所要实现的功能;(2)设计所采用的基本思想;(3)整个设计的组织结构;(4)各个子单元的设计思路;(5)各个子单元之间的接口关系;(6)关键节点的位置、作用及其测试波形的描述;(7)I/O引脚的名称、作用及其测试波形的描述;(8)采用的PLD器件的型号;(9)片内各种资源的使用情况;(10)该设计与其它设计的接口方式等。第124页/共125页感谢您的观看!第125页/共125页