2016-10-23 5 views
2

私は通常C#/ Javaプログラマであり、ハードウェア記述の周りに頭を抱えています。VHDL:時間ステップ/状態と並行性を理解するのに役立つ

私は値をロードするレジスタを持っています。その後、コンパレータはレジスタの出力を値 '16'と比較します。値がそれ以下であればState_0に行き、それより大きければState_3に行きます。

私は、私のstatetableプロセスと同時に実行する 'controlsignals'プロセスを持っています。私の制御信号の場合、私はそう、私はState_2にいるとき、高へのレジスタを有効に設定する必要があることを知っている:

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); 
私の状態テーブル以来

と私の制御信号が同時ブロックであり、私の混乱がある...私が最初のように、私の次の状態を決定するためにレジスタを有効にして、コンパレータを実行します私は私が欲しい実行する回路(regatautputに敏感なので)?それとも、コンパレータを持っているT2の後に新しい状態を作る方が安全でしょうか?前もって感謝します。コンパレータの

+2

宣言や指定されたクロックレート、またはあなたのコードの対象となる対象を表示していません。これらはすべて、クロックの立ち上がりエッジからTstep_Qまでのどれくらいのサイクルで、Regoutputの遅延が16を引いて結果の符号をテストし、Tstep_Dの設定値をTstep_Dセットアップに選択するかに左右されます。クロックレート、ターゲット実装プラットフォーム、幅を知らなければ、ターゲットプラットフォームに対する試作合成で意見を得ることができます。遅延パスのどの部分がクロック期間全体を別の状態にしていますか? – user1155120

答えて

1

同時実行

は、右のクロックエッジの後、状態信号が更新されていることを想像してみてください。比較を行い次の状態を設定するには1クロックの時間が必要です。

あなたの 'statetable'は常に評価されています。あなたが有効に設定されているとあなたは同じクロックサイクルでレジスタの出力を読み取ることができる場合はT2で比較を行うenRegister

タイミングのみ意味があります。これは問題の可能性がありますが、あなたの質問にはそれを確認するための情報が含まれていません。 statetable

感度リストには、あなたはとてもすべてその入力感度リストに移動する必要があり、このプロセスが並行して実行します。

まともなリファレンスから作業していて、コードをうまく構築しているようです。私は感度リストが本当にあなたが持っている問題だと思っています - シミュレーションで奇妙な動作を引き起こすので、私はこの答えを短く保ち、それを修正しようとしましょう。

関連する問題