私は通常、C#/Java プログラマーですが、ハードウェアの説明に完全に頭を悩ませています。
値をロードするレジスタがあります。その後、比較器がレジスタの出力を値「16」と比較します。値が以下の場合は State_0 に移動し、より大きい場合は State_3 に移動します。
'controlsignals' プロセスがステートテーブル プロセスと同時に実行されています。制御信号については、State_2 のときにレジスタのイネーブルを High に設定する必要があることがわかっているので、次のようにします。
controlsignals: PROCESS (Tstep_Q)
BEGIN
.... initialisation ...
CASE Tstep_Q IS
.... other states ....
WHEN T2 => --define signals in time step T2
enRegister = '1';
私の状態テーブルの場合:
statetable: PROCESS (Tstep_Q, regOutput)
BEGIN
CASE Tstep_Q IS
.... other states ....
WHEN T2 =>
IF ((regOutput - 16) > 0)
THEN Tstep_D <= T3;
ELSE Tstep_D <= T0;
END IF;
そして私のコードの終わり近くに私は持っています:
fsmflipflops: PROCESS (Clock)
BEGIN
IF Clock'EVENT AND Clock = '1' THEN
Tstep_Q <= Tstep_D;
END IF;
END PROCESS;
reg: regn PORT MAP (somevalue, enReg, Clock, regOutput);
私の状態テーブルと制御信号は並行ブロックであるため、私の混乱は...最初にレジスタを有効にしてからコンパレータを実行して、次の状態を決定するかどうかです。 )? それとも、コンパレーターがある T2 の後に新しい状態を作成する方が安全でしょうか? 前もって感謝します。