VHDL CLK = '1' 与上升沿(CLK)[重复]

问题描述 投票:0回答:1

我一直在思考 CLK = '1' 和上升沿(CLK) 之间有什么区别。

进程的特点是,当信号改变时,进程就会被执行。所以从 0 -> 1 的变化发生了一次,所以它应该只触发一次进程。它将检查 if 语句,如下所示:

process (clk)
begin
    if rising_edge(clk) then
        sCounter <= sCounter \+ 1;
    end if;
end process;
process (clk)
begin
    if clk = '1' then
        sCounter <= sCouner \+ 1;
    end if;
end process;

因此,如果信号不为 1 或上升,则应该在两个 if 语句上执行一次,然后输出与锁存器中的输出保持相同。在模拟中显示相同。

所以我不明白为什么在综合中它会将这个 CLK = '1' 更改为锁存器,如果 CLK = 1 那么而不是触发该过程一次位触发多次,从而使计数器增加超过一次...

编辑:

也许标题是相同的,问题听起来很相似,但我在其中一个链接中看到的答案没有回答我的问题,或者让我更加困惑。

模拟显示它对于 CLK = '1' 和上升沿(CLK)都正确工作,所以这让我思考为什么会这样以及为什么合成它会导致它工作不正确。因此,这个过程的工作原理是不同的,很难说为什么它会这样工作。

vhdl
1个回答
-1
投票

当您不检查进程中的上升或下降时钟沿时,综合必须在没有任何触发器的情况下实现该进程。因此,当您通过“CLK=1”进行检查时,但 CLK 等于 0,则在模拟中计数器将保持其值。综合想要创建相同的存储行为,因此它必须使用一个锁存器,该锁存器在 CLK=1 时透明,并在 CLK=0 时存储。综合还会向您发出警告,该计数器在该过程中被读取,但不属于敏感度列表的一部分。然后综合会将计数器添加到敏感度列表中。如果您随后还将计数器添加到进程的敏感度列表中,您将看到您已经描述了锁存器。

© www.soinside.com 2019 - 2024. All rights reserved.