我正在尝试在一个时钟周期内执行某项操作。我的方法是:
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的这些值?或者也欢迎任何其他方法。
答案 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;
这也解释了为什么在模拟开始时每个过程至少要评估一次。