Process内的执行顺序,如果没有的话:VHDL

时间:2018-10-17 14:47:09

标签: vhdl

我正在尝试在一个时钟周期内执行某项操作。我的方法是:

process begin
if rising_edge(clk) then

if (condition) then 
values of variables a and b are generated;
end if;

Here I want to use these freshly generated values of a and b.

end if;
end process;

问题是:我可以这样做,还是在过程结束时更新a和b的这些值?或者也欢迎任何其他方法。

2 个答案:

答案 0 :(得分:2)

如果要使用a和b的立即数,则a和b必须是变量。 如果a和b是信号,则它们成为流水线中的寄存器,并且将在下一个时钟周期可用。

答案 1 :(得分:1)

在猜测要实现的目标时,需要变量。

变量将在变量分配中立即更新,而按顺序分配信号,直到到达下一个wait语句为止。

请注意,进程的敏感度列表是在wait on <sensitivity list>;之前插入的end process语句的语法糖。因此,如果使用流程敏感度列表而不是等待语句,则信号将在流程结束时更新。

process(<sensitivity list>)
  variable a : std_logic_vector(7 downto 0);
begin
  a := foo;
  if (a = x"55") then
    result <= a;
  else
    result <= not a;
  end if;
end process;

wait on等效的过程:

process
  variable a : std_logic_vector(7 downto 0);
begin
  a := foo;
  if (a = x"55") then
    result <= a;
  else
    result <= not a;
  end if;

  wait on <sensitivity list>;
end process;

这也解释了为什么在模拟开始时每个过程至少要评估一次。