计数器产生的门控时钟问题
时间:10-02
整理:3721RD
点击:
计数器产生的门控时钟问题
设计中需要由计数器产生一个时钟供后级电路使用,计数器将一个全局时钟rdy_60分频,当reg_zip=cnt时产生一个脉冲a,使用a做为时钟驱动后级!基本代码如下:
process(rdy_60,reg_zip)
begin
if(rdy_60'event and rdy_60='1')then
if(reg_zip=cnt)then
cnt<="0000000000000001";
a<='1';
else
cnt<=cnt+'1';
a<='0';
end if;
end if;
由于a为门控时钟,直接使用a驱动后级电路会给后级电路带了很多不稳定的因素,因此将a做为触发器的使能端,来产生一个由全局时钟rdy_60得到的稳定时钟b,增加的代码如下:
if(rdy_60'event and rdy_60='1')then
if(a='1')then
b<='1';
else
b<='0';
end if;
end if;
可能是我的第二个代码写法不对,b还是不稳定,求消除门控时钟的正解!
设计中需要由计数器产生一个时钟供后级电路使用,计数器将一个全局时钟rdy_60分频,当reg_zip=cnt时产生一个脉冲a,使用a做为时钟驱动后级!基本代码如下:
process(rdy_60,reg_zip)
begin
if(rdy_60'event and rdy_60='1')then
if(reg_zip=cnt)then
cnt<="0000000000000001";
a<='1';
else
cnt<=cnt+'1';
a<='0';
end if;
end if;
由于a为门控时钟,直接使用a驱动后级电路会给后级电路带了很多不稳定的因素,因此将a做为触发器的使能端,来产生一个由全局时钟rdy_60得到的稳定时钟b,增加的代码如下:
if(rdy_60'event and rdy_60='1')then
if(a='1')then
b<='1';
else
b<='0';
end if;
end if;
可能是我的第二个代码写法不对,b还是不稳定,求消除门控时钟的正解!
1.这里的不稳定是什么意思?
2.b和a完全一样,也是门控时钟。
3.如果是FPGA,后段电路还是以rdy_60作为时钟,a作为使能端来用:
if(rdy_60'event and rdy_60='1')then
if(a='1')then
........
end if;
end if;
如果是ASIC,把a的占空比调到接近50%,应该是没有问题的。
不稳定是什么意思?你的主频是多少,是不是时序的问题。
整不明白啥意思?不行就换个思路撒
LZ的意思应该是想问用分频后的a直接作为后面寄存器的时钟是不是不稳定,
其实用分频后的a作为时钟也是可以的,但此时你的设计中就出现了两个时钟域,在做后面的流程时相对一个时钟域就会复杂一些,但这种设计方法肯定是可以的。
其实可以换个思路,还是用同一个时钟,只不过把a当作使能信号,这样的方法是不是更好些,可以给后端的流程带来很多的方便。