我的代码存在推断锁锁的问题。我知道锁锁通常是由于没有考虑到输出的所有情况而引起的,但在这种情况下,我还没有看到任何在线例子来说明这一点。我在process语句中有一个嵌套的if-else语句,如下所示。为了快速解释我正在做的事情,在重启启动后,reset_cnt将变得很高,并开始对sck进行24次循环的计数过程,并重复它自己,输出将增加。
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和output。我添加了一些代码行(旁边有注释的代码),并且能够删除reset_done和reset_cnt的闩锁。看起来我仍然得到一个推断锁存器,因为我在嵌套的If语句中使用它。我想:
output <= output;可能有用,但我想不行。有人知道如何修理这种闩锁吗?我要指出的是,我已经尝试将其分成两个过程语句,并将其制作成一个case语句,但这也不起作用。任何帮助或建议都是非常感谢的!
发布于 2019-02-21 23:53:55
这个代码是完全错误的。它很难修复,因为它合并了一个过程中的多个错误。
我将试着列举你的一些错误:
output和reset_done。output <= output + 1;,或者在仿真中创建一个无休止的循环。reset_done和reset_cnt是无用的,因为它们总是'1'reset_cnt是一个整数,不能用布尔表达式counter = 24作为ANDed。output <= output;我建议研究组合和顺序过程以及VHDL的编码模式。
https://stackoverflow.com/questions/54817633
复制相似问题