对两个关联信号进行复位时产生的问题
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同时产生?
不可能,除非用组合逻辑
谢谢你的回复!
关键是怎么用。
问题的症结在于不使用异步复位就不能让en和co_reg同时产生;而换成组合实现,则需要另外开辟一个进程,那么co_reg又无法在两个进程中被驱动。真是很有趣啊。
co-reg可以是计数器各位的组合逻辑。
谢谢你的回复。
关键是en既然对co_reg置位,也要对countx进行复位。如果单独用一个进程对countx计数,再在另一个进程中用组合逻辑去控制co_reg和countx,会造成countx的多驱动。
从你的代码来看,实际co_reg的值可以通过countx来控制的,根本不需要en来进行复位。所以只需要在另一个process中对co_reg进行控制即可。
不知道我的理解对不对。还有,最好能够说明一下外部的控制情况具体怎样,比如,en是周期出现还是偶尔出现,不然,可能你本身的出发点已经错了,那么别人回答问题也是南辕北撤
小编,首先你要清楚你的代码中co_reg是寄存器,肯定是要在延迟1拍输出的。如果你需要当前周期输出,那你需要使用组合逻辑输出。如果你不知道如何用组合逻辑输出,还请你好好看看书,这是最基础的设计知识,这些都不清楚,何来设计系统?
呵呵。谢谢alenww的教导。
谢谢hahalucky的回复。外界的en是周期(=32)出现的。系统上电后要求用第一次出现的en立即复位countx,并将co_reg置1。此后co_reg就可以在en与countx的联合控制下输出了。关键在于第一次en既要让countx复位,又要让co_reg同时置1,如果用组合进程,那么该组合进程中的countx和co_reg都要被驱动;而另外的那个计数并产生co_reg的进程中countx、co_reg还要被驱动,这造成错误。
首先,co_reg这个东东到底要用来干什么呢?看你的代码的思想,我觉得直接将co_reg = en 不就可以了?
我觉得你可能对到底要干什么还有些糊涂,en的周期刚好是countx自己计数的循环周期,就是说,en来一次,后面每32个周期来不来对countx来说已经无所谓了,因为countx到那个时候自己就清零了。
