2

私は通常、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 の後に新しい状態を作成する方が安全でしょうか? 前もって感謝します。

4

1 に答える 1

1

コンパレーターの並行性

クロック エッジの直後に状態信号が更新されたとします。比較を行い、次の状態を設定するための 1 クロック周期があります。

あなたの「ステートテーブル」は常に評価されています。

enRegisterのタイミング

T2 で比較を行うことは、イネーブルを設定しているのと同じクロック サイクルでレジスタの出力を読み取ることができる場合にのみ意味があります。これは問題かもしれませんが、あなたの質問にはそれを確認するための情報が含まれていません。

ステートテーブルの機密リスト

このプロセスを同時に実行する必要があるため、すべての入力を機密リストに入れる必要があります。

まともな参照から作業し、コードをうまく構成しているようです。感度リストが実際にあなたが抱えている問題であると思われます-シミュレーションで奇妙な動作を引き起こしているので、この回答を短くして修正を試みさせてください。

于 2016-10-24T10:58:59.350 に答える