1

vhdlの学習を始めたばかりです。ここでコードを検討してください: - http://esd.cs.ucr.edu/labs/tutorial/jkff.vhd

同時実行ステートメントとは何か、なぜここで必要なのか理解できませんか? 内部シグナル「状態」を使用せずにプロセス p で Q と Qbar を直接変更すると正しいでしょうか? また、J、K がスニペットのプロセス p の機密リストにないのはなぜですか?

4

2 に答える 2

2

ご存知かもしれませんが、純粋な機能上の意味 (つまり、ハードウェアの実装を考慮していない) では、同時実行ステートメントは遅延を引き起こしません。だからあなたが書くとき

Q <= state;

機能的には、遅れることなくQ 正確に従います。 state

プロセス内stateで直接割り当てるのではなく、中間シグナルが使用された理由は、プロセス内で出力の 1 つを直接割り当てると、出力を「読み取って」シグナルを導出できないためだと推測します。QQQbar

つまり、これを行うことはできませんでした:

Qbar <= not Q;

これは、VHDL で出力信号を読み取ることが厳密に許可されていないためです。Q「状態」を使用すると、 と の両方を導出できる内部信号が得られますQbar

これに代わる同等の実装は、両方の出力QQbarステート マシンの各ケースに割り当て、中間state信号を完全に排除することです。ただし、同等の機能のコード行数がほぼ 2 倍になるため、これは少し複雑に思えます。


p2 番目の質問に答えるには、プロセスが同期プロセスであるため、J、K は機密リストに含まれていません。あなたはメモリ要素(JK FlipFlop)を記述しています。これは、定義により、clockまたはreset変更されたときにのみ出力を更新します。入力信号は変化する可能性があり、プロセスはその出力を更新しませんJKクロック エッジがあるか、またはアサートされるたびresetに、プロセスが「ウェイクアップ」して入力を評価し、出力がどうあるべきかを決定します。J、K でさえ、出力が でのみ更新された場合、感度リストに含まれていましたがrising_edge(clock)、全体的な機能は同じになります (ただし、コードは混乱します)。

于 2013-09-13T16:42:43.773 に答える
0

Qプロセス内にandQbarの代入を持たない理由はありません。ただし、少し注意が必要です。

シグナルが割り当てられるたびに、シミュレーターが次の「デルタサイクル」に移行するまで、値は更新されません。これは、プロセス内でシグナルに割り当てると、実際にはスケジューリングと更新のみを行い、シグナルを読み取ると「古い」値を取得することを意味します。期待どおりの順次更新を行うには、変数を使用します。したがって、次のように JKFF をモデル化できます。

architecture behv of JK_FF is
begin
    p : process(clock, reset) is
    variable state : std_logic;
        variable input : std_logic_vector(1 downto 0);
    begin
        if (reset = '1') then
            state := '0';
        elsif (rising_edge(clock)) then
            input := J & K;
            case (input) is
                when "11" =>
                    state := not state;
                when "10" =>
                    state := '1';
                when "01" =>
                    state := '0';
                when others =>
                    null;
            end case;
        end if;
        Q  <= state;
        Qbar <= not state;
    end process;
end behv;

合成メモ: Q および Qbar への割り当ては の外部で発生するif rising_edge(clk)ため、同時実行ドライバーと同様に解釈されます。

于 2013-09-16T12:20:17.013 に答える