不需要的异步重置

Unwanted Asynchronous Reset

我编写了以下 VHDL 代码,假设它将生成一个同步复位的计数器!但是,当我查看 Vivado 2020.2 中的详细设计时,计数器具有异步重置!如果没有看到时钟的 rising/falling 边沿,则不应评估该过程!该工具是如何推断出异步重置的?!

PS。计数被定义为无符号信号(不是 std_logic_vector)

非常感谢任何解释!

process(clk)
    begin
        if rst='1' then
            count <= (others => '0');
        elsif rising_edge(clk) then
            count <= count + 1;
        end if;
end process;

综合工具通常忽略敏感列表,并从代码中的设计模式创建逻辑。在您的代码中, rst 分支覆盖了时钟分支,因此它创建了一个异步重置。此外,重置不依赖于 clk.

要创建同步复位,rst 分支应该在时钟分支内,因为复位应该只发生在时钟边沿。

process(clk)
begin
  if rising_edge(clk) then
    count <= count + 1;

    if rst = '1' then 
      count <= (others => '0');
    end if;
  end if;
end process;