ImageVerifierCode 换一换
格式:DOC , 页数:27 ,大小:1.03MB ,
资源ID:3721833      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-3721833.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数字电路设计中的时钟设计.doc)为本站会员(创****公)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

数字电路设计中的时钟设计.doc

1、FPGA/CPLD 数字电路设计经验 1FPGA/CPLD 数字电路设计经验分享摘要:在数字电路的设计中,时序设计是一个系统性能的主要标志,在高层次设计方法中,对时序控制的抽象度也相应提高,因此在设计中较难把握,但在理解 RTL 电路时序模型的基础上,采用合理的设计方法在设计复杂数字系统是行之有效的,通过许多设计实例证明采用这种方式可以使电路的后仿真通过率大大提高,并且系统的工作频率可以达到一个较高水平。关键词:FPGA 数字电路 时序 时延路径 建立时间 保持时间1 数字电路设计中的几个基本概念:1.1 建立时间和保持时间:建立时间(setup time)是指在触发器的时钟信号上升沿到来以前

2、,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间, 如果保持时间不够,数据同样不能被打入触发器。 如图 1 。 数据稳定传输必须满足建立和保持时间的要求,当然在一些情况下,建立时间和保持时间的值可以为零。 PLD/FPGA 开发软件可以自动计算两个相关输入的建立和保持时间(如图 2)图 1 建立时间和保持时间关系图注: 在考虑建立保持时间时,应该考虑时钟树向后偏斜的情况,在考虑建立时间时应该考虑时钟树向前偏斜的情况。在进行后仿真时,最大延迟用来检查建立时间,最小延时用来检查保持

3、时间。 建立时间的约束和时钟周期有关,当系统在高频时钟下无法工作时,降低时钟频率就可以使系统完成工作。保持时间是一个和时钟周期无关的参数,如果设计不合理,使得布局布线工具无法布出高质量的时钟树,那么无论如何调整时钟频率也无法达到要求,只有对所设计系统作较大改动才有可能正常工作,导致设计效率大大降低。因此合理的设计系统的时序是提高设计质量的关键。在可编程器件中,时钟树的偏斜几乎可以不考虑,因此保持时间通常都是满足的。1.2 FPGA 中的竞争和冒险现象信号在 FPGA 器件内部通过连线和逻辑单元时,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度

4、等条件的影响。信号的高低电平转换也需要一定的过渡时间。由于存在这两方面因素,多路信号的电平值FPGA/CPLD 数字电路设计经验 2发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号称为“毛刺“。如果一个组合逻辑电路中有“毛刺“出现,就说明该电路存在“冒险“。(与分立元件不同,由于 PLD 内部不存在寄生电容电感,这些毛刺将被完整的保留并向下一级传递,因此毛刺现象在 PLD、FPGA 设计中尤为突出)图 2 是一个逻辑冒险的例子,从图 3 的仿真波形可以看出,“A、B、C、D“四个输入信号经过布线延时以后,高低电平变换不是同时发

5、生的,这导致输出信号“OUT“出现了毛刺。(我们无法保证所有连线的长度一致,所以即使四个输入信号在输入端同时变化,但经过 PLD 内部的走线,到达或门的时间也是不一样的,毛刺必然产生)。可以概括的讲,只要输入信号同时变化,(经过内部走线)组合逻辑必将产生毛刺。 将它们的输出直接连接到时钟输入端、清零或置位端口的设计方法是错误的,这可能会导致严重的后果。 所以我们必须检查设计中所有时钟、清零和置位等对毛刺敏感的输入端口,确保输入不会含有任何毛刺图 2 存在逻辑冒险的电路示例图 3 图 2 所示电路的仿真波形冒险往往会影响到逻辑电路的稳定性。时钟端口、清零和置位端口对毛刺信号十分敏感,任何一点毛刺

6、都可能会使系统出错,因此判断逻辑电路中是否存在冒险以及如何避免冒险是设计人员必须要考虑的问题。如何处理毛刺我们可以通过改变设计,破坏毛刺产生的条件,来减少毛刺的发生。例如,在数字电路设计中,常常采用格雷码计数器取代普通的二进制计数器,这是因为格雷码计数器的输出每次只有一位跳变,消除了竞争冒险的发生条件,避免了毛刺的产生。毛刺并不是对所有的输入都有危害,例如 D 触发器的 D 输入端,只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害,我们可以说 D 触发FPGA/CPLD 数字电路设计经验 3器的 D 输入端对毛刺不敏感。 根据这个特性,我们应当在系统中尽可能采用同

7、步电路,这是因为同步电路信号的变化都发生在时钟沿,只要毛刺不出现在时钟的沿口并且不满足数据的建立和保持时间,就不会对系统造成危害。 (由于毛刺很短,多为几纳秒,基本上都不可能满足数据的建立和保持时间)去除毛刺的一种常见的方法是利用 D 触发器的 D 输入端对毛刺信号不敏感的特点,在输出信号的保持时间内,用触发器读取组合逻辑的输出信号,这种方法类似于将异步电路转化为同步电路。 图 4 给出了这种方法的示范电路,图 5 是仿真波形。图 4 消除毛刺信号方法之二图 5 图 4 所示电路的仿真波形如前所述,优秀的设计方案,如采用格雷码计数器,同步电路等,可以大大减少毛刺,但它并不能完全消除毛刺。 毛刺

8、并不是对所有输入都有危害,例如 D 触发器的 D 输入端,只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害。因此我们可以说 D 触发器的 D 输入端对毛刺不敏感。但对于 D 触发器的时钟端,置位端,清零端,则都是对毛刺敏感的输入端,任何一点毛刺就会使系统出错,但只要认真处理,我们可以把危害降到最低直至消除。下面我们就对几种具体的信号进行探讨。1.3 清除和置位信号在 FPGA 的设计中,全局的清零和置位信号必须经过全局的清零和置位管脚输入,因为他们也属于全局的资源,其扇出能力大,而且在 FPGA 内部是直接连接到所有的触发器FPGA/CPLD 数字电路设计经验 4

9、的置位和清零端的,这样的做法会使芯片的工作可靠、性能稳定,而使用普通的 IO 脚则不能保证该性能。在 FPGA 的设计中,除了从外部管脚引入的全局清除和置位信号外在 FPGA 内部逻辑的处理中也经常需要产生一些内部的清除或置位信号。清除和置位信号要求象对待时钟那样小心地考虑它们,因为这些信号对毛刺也是非常敏感的。在同步电路设计中,有时候可以用同步置位的办法来替代异步清 0。在用硬件描述语言的设计中可以用如下的方式来描述:异步清 0 的描述方法:process(rst,clk)beginif rst=1 thencount0);elsif clkevent and clk=1 thencount

10、0);elsecount0);elsecount=count+1;end if;end process;processbeginwait until count(2)event and count(2)=1 ;shift_reg=data;end process;FPGA/CPLD 数字电路设计经验 8在上述的第一个 process 电路描述中,首先计数器的输出结果(count(2))相对于全局时钟 clk 已经产生了一定的延时(延时的大小取决于计数器的位数和所选择使用的器件工艺);而在第二个 process 中使用计数器的 bit2 作为时钟,那么 shift_reg 相对于全局 clk 的

11、延时将变得不好控制。布局布线器最终给出的时间分析也是不可靠的。这样产生的结果波形仿真如下图所示:正确的做法可以将第二个 process 这样来写。processbeginwait until clkevent and clk=1 ;if count(2 downto 0)=”000” thenshift_reg=data;end if;end process;或者分成两步来写:process(count)beginif count(2 downto 0)=”000” thenen=1;elseen=0;end if;end process;processbeginwait until clke

12、vent and clk=1 ;if en=1 thenshift_reg=data;end if;end process;这样做是相当于产生了一个 8 分频的使能信号,在使能信号有效的时候将 data 数据采样到 shift_reg 寄存器中。但此种情形下 shift_reg 的延时是相对于全局时钟 clk 的。下面的图形更能看得清楚。FPGA/CPLD 数字电路设计经验 9图 上图中波形的局部放大2.2 FPGA 设计中的延时电路的产生:在日常的电路设计中,有时候我们需要对信号进行延时处理来适应对外接口的时序关系,最经常也是最典型的情况是做处理机的接口;因为与处理的接口时序关系是异步的,而

13、一个规范的 FPGA 设计应该是尽可能采用同步设计。那么遇到这种情况该如何处理呢?首先在 FPGA 中要产生延时,信号必须经过一定的物理资源。在硬件描述语言中有关键词 Wait for xx ns,需要说明的是该语法是仅仅用于仿真而不能用于综合的,可综合的延时方法有: 使信号经过逻辑门得到延时(如非门); 使用器件提供的延时单元(如 Altera 公司的 LCELL,Xilinx 公司的);注意:当使用多级非门的时候综合器往往会将其优化掉,因为综合器会认为一个信号非两次还是它自己。需要说明的是在 FPGA/CPLD 内部结构是一种标准的宏单元,下图是 Xilinx 公司的Spartans II

14、 系列器件的一个标准宏单元。虽然不同的厂家的芯片宏单元的结构不同,但概括而言都是由一些组合逻辑外加一或二个触发器而构成。在实际应用中,当一个模块内的组合逻辑被使用了那么与其对应的触发器也就不能用了;同样如果触发器单元被用了那么组合逻辑单元也就废了。这就是有时候(特别是使用 CPLD)虽然设计使用的资源并不多但布局布线器却报告资源不够使用的原因。FPGA/CPLD 数字电路设计经验 10现面的一个例子是前一段时间我在公司遇到的一个设计。设计使用 Altera 公司的 EPM7256型号的 CPLD。该设计实际使用的寄存器资源只有 109 个,占整个器件资源的 42%。可是该设计使用了如下图所示的延时方法来做处理器接口的时序:在该电路的设计中使用了大量的 LCELL 来产生 100 多纳秒的延时,这样做的后果是虽然整个电路的触发器资源只使用了 42%,可是用 MaxplusII 进行布局布线已经不能够通过了。而且我怀疑经过这么多逻辑的延时后所产生的信号还能保持原来的性能不。

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。