假设en是已经同步好且宽度为一个时钟(clk)的信号,现要用它对计数值cnt和分频信号co_reg进行复位。如果用同步复位,则代码通常如下:
process(clk,en)
begin
if (clk'event and clk='1') then
if (en='1') then
countx<="00000";
co_reg<='1';
elsif countx="11111" then
countx<="00000";
co_reg<='1';
else
countx<=countx+'1';
co_reg<='0';
end if;
end if;
end process;
但这会使co_reg比en晚一拍,在我的系统里面不允许这一点。如果换成异步复位倒是可以让en和co_reg同时产生,但又会带来不稳定因素。想请教各位前辈能否不用异步复位来做到en和co_reg同时产生?
首先,co_reg这个东东到底要用来干什么呢?看你的代码的思想,我觉得直接将co_reg = en 不就可以了?
我觉得你可能对到底要干什么还有些糊涂,en的周期刚好是countx自己计数的循环周期,就是说,en来一次,后面每32个周期来不来对countx来说已经无所谓了,因为countx到那个时候自己就清零了。