没有合适的资源?快使用搜索试试~ 我知道了~
FPGA/CPLD数字电路设计经验分享
需积分: 0 1 下载量 58 浏览量
2010-05-08
11:53:27
上传
评论
收藏 62KB DOC 举报
温馨提示
试读
14页
描述了FPGA/CPLD数字电路设计的基本知识
资源详情
资源评论
资源推荐
摘要:在数字电路的设计中,时序设计是个系统性能的主要标志,在高层次设计方法中,
对时序控制的抽象度也相应提高,因此在设计中较难把握,但在理解 RTL 电路时序模型的
基础上,采用合理的设计方法在设计复杂数字系统是行之有效的,通过许多设计实例证实
采用这种方式能使电路的后仿真通过率大大提高,并且系统的工作频率能达到一个较高水
平。
关键词:FPGA 数字电路 时序 时延路径 建立时间 保持时间
1 数字电路设计中的几个基本概念:
1.1 建立时间和保持时间:
建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,
如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold time)
是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间, 如果保持时间不够,数
据同样不能被打入触发器。 如图 1 。 数据稳定传输必须满足建立和保持时间的需求,当然
在一些情况下,建立时间和保持时间的值能为零。 PLD/FPGA 研发软件能自动计算两个相
关输入的建立和保持时间(如图 2)
图 1 建立时间和保持时间关系图
注:在考虑建立保持时间时,应该考虑时钟树向后偏斜的情况,在考虑建立时间时应该考
虑时钟树向前偏斜的情况。在进行后仿真时,最大延迟用来检查建立时间,最小延时用来
检查保持时间。
建立时间的约束和时钟周期有关,当系统在高频时钟下无法工作时,降低时钟频率就能使
系统完成工作。保持时间是个和时钟周期无关的参数,如果设计不合理,使得布局布线工
具无法布出高质量的时钟树,那么无论怎么调整时钟频率也无法达到需求,只有对所设计
系统作较大改动才有可能正常工作,导致设计效率大大降低。因此合理的设计系统的时序
是提高设计质量的关键。在可编程器件中,时钟树的偏斜几乎能不考虑,因此保持时间通
常都是满足的。
1.2 FPGA 中的竞争和冒险现象
信号在 FPGA 器件内部通过连线和逻辑单元时,都有一定的延时。延时的大小和连线的长
短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。信
号的高低电平转换也需要一定的过渡时间。由于存在这两方面因素,多路信号的电平值发
生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化 ,往往会出现
一些不正确的尖峰信号,这些尖峰信号称为"毛刺"。如果一个组合逻辑电路中有"毛刺"出
现,就说明该电路存在"冒险"。(和分立元件不同,由于 PLD 内部不存在寄生电容电感,
这些毛刺将被完整的保留并向下一级传递,因此毛刺现象在 PLD、FPGA 设计中尤为突
出)图 2 是个逻辑冒险的例子,从图 3 的仿真波形能看出,"A、B、C、D"四个输入信号经
过布线延时以后,高低电平变换不是同时发生的,这导致输出信号"OUT"出现了毛刺。
(我们无法确保所有连线的长度一致,所以即使四个输入信号在输入端同时变化,但经过
PLD 内部的走线,到达或门的时间也是不相同的,毛刺必然产生)。能概括的讲,只要输
入信号同时变化,(经过内部走线)组合逻辑必将产生毛刺。 将他们的输出直接连接到时
钟输入端、清零或置位端口的设计方法是错误的,这可能会导致严重的后果。 所以我们必
须检查设计中所有时钟、清零和置位等对毛刺敏感的输入端口,确保输入不会含有所有毛
刺
图 2 存在逻辑冒险的电路示例
图 3 图 2 所示电路的仿真波形
冒险往往会影响到逻辑电路的稳定性。时钟端口、清零和置位端口对毛刺信号十分敏感,
所有一点毛刺都可能会使系统出错,因此判断逻辑电路中是否存在冒险及怎么避免冒险是
设计人员必须要考虑的问题。
怎么处理毛刺
我们能通过改动设计,破坏毛刺产生的条件,来减少毛刺的发生。例如,在数字电路设计
中,常常采用格雷码计数器取代普通的二进制计数器,这是因为格雷码计数器的输出每次
只有一位跳变,消除了竞争冒险的发生条件,避免了毛刺的产生。
毛刺并不是对所有的输入都有危害,例如 D 触发器的 D 输入端,只要毛刺不出目前时钟的
上升沿并且满足数据的建立和保持时间,就不会对系统造成危害,我们能说 D 触发器的 D
输入端对毛刺不敏感。 根据这个特性,我们应当在系统中尽可能采用同步电路,这是因为
同步电路信号的变化都发生在时钟沿,只要毛刺不出目前时钟的沿口并且不满足数据的建
立和保持时间,就不会对系统造成危害。 (由于毛刺非常短,多为几纳秒,基本上都不可
能满足数据的建立和保持时间)
去除毛刺的一种常见的方法是利用 D 触发器的 D 输入端对毛刺信号不敏感的特点,在输出
信号的保持时间内,用触发器读取组合逻辑的输出信号,这种方法类似于将异步电路转化
为同步电路。 图 4 给出了这种方法的示范电路,图 5 是仿真波形。
如前所述,优秀的设计方案,如采用格雷码计数器,同步电路等,能大大减少毛刺,但他
并不能完全消除毛刺。 毛刺并不是对所有输入都有危害,例如 D 触发器的 D 输入端,只要
毛刺不出目前时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害。因
此我们能说 D 触发器的 D 输入端对毛刺不敏感。但对于 D 触发器的时钟端,置位端,清零
端,则都是对毛刺敏感的输入端,所有一点毛刺就会使系统出错,但只要认真处理,我们
能把危害降到最低直至消除。下面我们就对几种具体的信号进行探讨。
1.3 清除和置位信号在 FPGA 的设计中,全局的清零和置位信号必须经过全局的清零和置位
管脚输入,因为他们也属于全局的资源,其扇出能力大,而且在 FPGA 内部是直接连接到
所有的触发器的置位和清零端的,这样的做法会使芯片的工作可靠、性能稳定,而使用普
通的 IO 脚则不能确保该性能。
在 FPGA 的设计中,除了从外部管脚引入的全局清除和置位信号外在 FPGA 内部逻辑的处
理中也经常需要产生一些内部的清除或置位信号。清除和置位信号需求象对待时钟那样小
心地考虑他们,因为这些信号对毛刺也是非常敏感的。
在同步电路设计中,有时候能用同步置位的办法来替代异步清 0。在用硬件描述语言的设
计中能用如下的方式来描述:
异步清 0 的描述方法:
process(rst,clk)
begin
if rst=’1’ then
count<=(others=>’0’);
elsif clk’event and clk=’1’ then
count<=count 1;
end if;
end process;
同步清 0 的描述方法:
process
begin
wait until clk’event and clk=’1’;
if rst=’1’ then
count<=(others=>’0’);
else
count<=count 1;
end if;
end process;
1.4 触发器和所存器:
我们知道,触发器是在时钟的沿进行数据的锁存的,而所存器是用电平使能来锁存数据的
所以触发器的 Q 输出端在每一个时钟沿都会被更新,而所存器只能在使能电平有效器件才
会被更新。在 FPGA 设计中建议如果不是必须那么应该尽量使用触发器而不是所存器。
那么在使用硬件描述语言进行电路设计的时候怎么区分触发器和所存器的描述方法哪?其
实有不少人在使用的过程中可能并没有特意区分过,所以也忽略了二者在描述方法上的差
别。下面是用 VHDL 语言描述的触发器和所存器及综合器产生的电路逻辑图。
触发器的语言描述:
process
begin
wait until clk’event and clk=’1’;
q<=d;
end process;
所存器的语言描述:
process(en,d)
begin
if en=’1’ then
q<=d;
end if;
end process;
剩余13页未读,继续阅读
zj1988228
- 粉丝: 1
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0