我有一个实现状态机的过程。在其中一个周期(状态)中,需要计算两个信号,其中一个是直接计算的,另一个是使用组件内已计算的信号进行的计算。第一次计算的结果需要放入一个指向组件的 MUX 中,并且所有这些都需要在同一个周期中完成(这足够长,足以让两个操作串行完成)。
我尝试的一种方法是使用变量来计算第一个信号,然后使用该信号来计算第二个信号,但它不会发生在同一个周期中,而是发生在 2 个周期中,因为对第一个信号的分配只发生在循环结束时,组件没有足够的时间来计算:
when st_cycle_5 =>
vec_var(31 downto 0) := dot_c_sig(31 downto 0) - dot_a_sig(31 downto 0);
vec_var(63 downto 32) := dot_c_sig(63 downto 32) - dot_a_sig(63 downto 32);
vec_var(95 downto 64) := dot_c_sig(95 downto 64) - dot_a_sig(95 downto 64);
c_minus_a_sig <= vec_var;
...
end process cau_proc;
mult1_in1_sig <= b_minus_a_sig(63 downto 32) when cau_state = st_cycle_5
如何计算信号b_minus_a_sig
并通过 MUX 分配它以在同一周期获得组件的结果?
(vec_var
是一个变量,所有其他信号都是std_logic_vector
)
编辑:有解决方案
mult1_in1_sig <= dot_c_sig(63 downto 32) - dot_a_sig(63 downto 32) when cau_state = st_cycle_5
但我认为在这种情况下,布局和布线将不知道该操作已经完成并且结果可用并且执行两次而不是使用已知结果。