我的代码推断出的闩锁有问题。我知道闩锁通常是由于没有考虑到输出的所有情况造成的,但是在这种情况下,我还没有看到任何在线案例可以解决这一问题。我在流程语句中有一个嵌套的if-else语句,如下所示。为了快速解释我在做什么,在启动复位后,reset_cnt将变高并启动一个计数过程,以进行最多24个周期的sck并重复其自身,并且输出将递增。
clock_counter: process(reset, sck, counter, output, reset_cnt, reset_done)
begin
if (reset = '1') then
counter <= 0;
output <= 1;
reset_cnt <= 1;
reset_done <= '1';
else
reset_done <= '1'; -- added to fix
reset_cnt <= 1; -- added to fix
output <= output; -- added to fix (didn't work)
if (reset_cnt AND counter = 24) then
counter <= 0;
output <= output + 1;
elsif (rising_edge(sck)) then
counter <= counter + 1;
end if;
end if;
end process;
最初,我遇到了3个闩锁的问题:reset_done,reset_cnt和输出。我添加了一些代码行(带有注释的代码行),并且能够删除reset_done和reset_cnt的闩锁。看起来我仍然可以得到推断出的闩锁,因为我在嵌套的If语句中使用了它。我以为:
output <= output;
可能会工作,但我想不会。有谁知道如何解决这种闩锁?我应该提到,我曾尝试将其拆分为2个流程语句,然后将其制作为case语句,但这也不起作用。任何帮助或建议,我们将不胜感激!
答案 0 :(得分:3)
此代码是完全错误的。很难修复,因为它在一个过程中合并了多个错误。
我将尝试列举您的一些错误:
output
和reset_done
。output <= output + 1;
无法合成,否则将在仿真中造成无限循环reset_done
和reset_cnt
是无用的,因为它们总是'1'
reset_cnt
是一个整数,不能与表达式counter = 24
的布尔值进行AND运算。output <= output;
我建议研究VHDL的组合和顺序过程以及编码模式。