微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 大唐电信FPGA/CPLD数字电路设计经验分享(1)

大唐电信FPGA/CPLD数字电路设计经验分享(1)

时间:02-11 来源:网络整理 点击:

号的保持时间内,用触发器读取组合逻辑的输出信号,这种方法类似于将异步电路转化为同步电路。 图4给出了这种方法的示范电路,图5是仿真波形。

图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;

图6 异步清0、置位逻辑图

图7 同步清0、置位关系图

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;

所存器

由上述对Latch的描述可见,其很容易于选择器的描述相混淆,用VHDL语言对选择器的描述方法如下:
process(en,a,b)
begin
if en=’1’ then
q<=a;
else
q<=b;
end if;
end process;
(未完待续)

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top