1

ステート マシンを実装するプロセスがあります。サイクル (状態) の 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回実行すると思います.

4

1 に答える 1

1

適切な変数または変数のスライスを使用して、プロセスmult1_in1_sig で割り当てる必要があるだけかもしれません。

つまり、計算とマルチプレクサを 1 つのプロセスにまとめることができます。

その際、ラッチを記述しないように注意してください。つまり、ターゲット シグナルには、 だけでなく、プロセス内のすべての可能な実行パスの値を割り当てる必要があります。すべての信号について同じことが言えます。mult1_in1_sig when st_cycle_5c_minus_a_sig

于 2012-08-01T09:47:46.727 に答える