ステート マシンを実装するプロセスがあります。サイクル (状態) の 1 つで 2 つの信号を計算する必要があります。そのうちの 1 つは直接計算され、もう 1 つはコンポーネント内で既に計算された信号を使用して行われる計算です。最初の計算の結果は、コンポーネントに送られる MUX に入れる必要があり、すべて同じサイクルで実行する必要があります (両方の操作を連続して実行するのに十分な長さです)。
私が試した方法は、変数を使用して最初の信号を計算し、その信号を使用して2番目の信号を計算することでしたが、同じサイクルでは発生しませんが、最初の信号への割り当てが発生するのは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
)
EDIT:置くの解決策があります
mult1_in1_sig <= dot_c_sig(63 downto 32) - dot_a_sig(63 downto 32) when cau_state = st_cycle_5
しかし、この場合、場所とルートは、その操作が既に行われたこと、および結果が利用可能であることを認識せず、既知の結果を使用する代わりに2回実行すると思います.