Vhdl 如何将变量的值分配给进程外部的mux?

Vhdl 如何将变量的值分配给进程外部的mux?,vhdl,Vhdl,我有一个实现状态机的进程。在其中一个循环(状态)中,需要计算两个信号,其中一个是直接计算的信号,另一个是使用组件内已计算的信号进行的计算。第一次计算的结果需要放入一个MUX,该MUX指向组件,并且所有计算都需要在同一个周期内完成(这足够长,两个操作都可以串行完成) 我尝试的一种方法是使用一个变量来计算第一个信号,然后使用该信号来计算第二个信号,但它不会在同一个周期内发生,而是在两个周期内发生,因为对第一个信号的赋值仅在周期结束时发生,并且组件没有足够的时间来计算: when st_cycle_5

我有一个实现状态机的进程。在其中一个循环(状态)中,需要计算两个信号,其中一个是直接计算的信号,另一个是使用组件内已计算的信号进行的计算。第一次计算的结果需要放入一个MUX,该MUX指向组件,并且所有计算都需要在同一个周期内完成(这足够长,两个操作都可以串行完成)

我尝试的一种方法是使用一个变量来计算第一个信号,然后使用该信号来计算第二个信号,但它不会在同一个周期内发生,而是在两个周期内发生,因为对第一个信号的赋值仅在周期结束时发生,并且组件没有足够的时间来计算:

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

但我认为,在这种情况下,place&route将不知道该操作已经完成,并且结果可用,并重复两次,而不是使用已知的结果

也许您只需要在流程内部使用适当的变量或变量的切片来分配
mult1\u in1\u sig

换句话说,您可以在单个进程中打包计算和mux


这样做时,请注意不要描述锁存器,即必须为进程中的每个可能执行路径为目标信号
mult1\u in1\u sig
分配一个值,而不仅仅是在st\u cycle\u 5时。同样的注释适用于
c_-a_sig
和每个信号。

也许您只需要在流程内部使用适当的变量或变量的切片来分配
mult1_in1_sig

换句话说,您可以在单个进程中打包计算和mux


这样做时,请注意不要描述锁存器,即必须为进程中的每个可能执行路径为目标信号
mult1\u in1\u sig
分配一个值,而不仅仅是在st\u cycle\u 5时。同样的注释适用于
c_-a_-sig
和每个信号。

请尝试制作一个完全有效但简单的代码片段。让名字尽可能简单,把所有与你的问题无关的都省略掉。请尝试制作一个完全有效但简单的代码片段。让名字尽可能简单,把所有与你的问题无关的都省略掉。
mult1_in1_sig <= dot_c_sig(63 downto 32) - dot_a_sig(63 downto 32) when cau_state = st_cycle_5