1

VHDL を使用していますが、宿題を始める前に実行する必要がある次のサンプル コードの影響を受けていない波形がシミュレータでサポートされていません。私はオンラインで同じ波形 Z を渡すことができますが、影響を受けていないキーワードと同じ結果が得られるようにする方法がわかりません...どうすれば同じ結果が得られるように書き換えることができますか?

PS: 宿題の次の部分で、if-then-else ステートメントを使用して書き直す必要があります。その場合、次のキーワードを使用できることがわかっています。これは、宿題の前に実行する必要がある教科書のコードです。

ご協力いただきありがとうございます。

library IEEE;
use IEEE.std_logic_1164.all;

entity pr_encoder is
port (  S0, S1,S2,S3: in std_logic;
            Z : out std_logic_vector (1 downto 0));
end entity pr_encoder;

architecture behavioral of pr_encoder is
begin
    Z <= "00" after 5 ns when S0 = '1' else
    "01" after 5 ns when S1 = '1' else
    unaffected when S2 = '1' else
    "11" after 5 ns when S3 = '1' else
    "00" after 5 ns;
end architecture behavioral;

編集:行をコメントアウトすると、目的の結果が得られますか?

4

1 に答える 1

2

いいえ、単純に行をコメントするとunaffected、動作が変更されます。

あなたはラッチについて説明しているようです。(これは同期設計では推奨されません)。IndeedZの場合は更新され、そうS2 /= '1'でない場合は更新されS2 = '1'ます。

確かに、プロセスと if-else 構造で割り当てをラップできますが、nextステートメントは必須ではありません。

process (S0, S1, S2, S3) is
begin
    if S0 = '1' then
        Z <= "00" after 5 ns;
    elsif S1 = '1' then
        Z <= "01" after 5 ns;
    elsif S2 = '1' then
        null;                 -- do nothing
    elsif S3 = '1' then
        Z <= "11" after 5 ns;
    else
        Z <= "00" after 5 ns;
    end if;
end process;

または、現在のように選択した代入ステートメントを保持し、条件を変更しunaffectedてデフォルト (else) ケースにすることもできます。

Z <= "00" after 5 ns when S0 = '1' else
     "01" after 5 ns when S1 = '1' else
     "11" after 5 ns when S2 /= '1' and S3 = '1' else
     "00" after 5 ns when S2 /= '1';
     -- else unaffected is implicit

補足:

このキーワードについては聞いたことがありませんでしたが、unaffected使用方法が非常に限られているため、すべてのツールでサポートされているとは限りません。

あなたのシミュレーターは何ですか?

于 2012-08-02T07:01:44.063 に答える