1

「ps2c」入出力信号 (VHDL) を持つ「HostToDevice」というエンティティがあるとします。このエンティティでは、他のエンティティに制御させたいので、この信号を「Z」(高インピーダンス) に設定するだけです。

動作を確認するためにテスト ベンチを作成したところ、(私にとって) 奇妙なことが起こりました。テストベンチには、次のコードがあります。

ps2ctemp_process :process
begin
    ps2ctemp <= '0';
    wait for ps2c_period/2;
    ps2ctemp <= '1';
    wait for ps2c_period/2;
end process;

以降:

stim_proc: process
begin
    ps2c <= ps2ctemp;

    wait;
end process;

シミュレーション (動作) を実行すると、「ps2c」inout 信号はちょうど低く、ps2ctemp 信号のように変化しません。

代わりに、別の信号を使用せずに ps2c 信号を手動で駆動すると、正常に動作します。このような:

ps2c <= '1';
wait for 10 ns;
ps2c <= '0';
wait for 10 ns;
ps2c <= '1';

4

1 に答える 1

1

あなたの「stim_proc」には感度リストがなく、イベントやタイムアウトのない「待機」が1つあるため、一度実行して永遠に待機することを意図しています。これはシムがやっていることのようです。

ps2ctempここで、実際には、変更のたびにウェイクアップして、新しい値を に渡したいと思いますps2c

これを行うには、次の 2 つの方法があります。

(1) 感度リスト付き

stim_proc: process(psc2temp)
begin
    ps2c <= ps2ctemp;

    --wait;
    -- no, we want the process to complete, so it can be woken up 
    -- and run from the start again
end process;

(2)特定のイベントを待つ...

stim_proc: process
begin
    ps2c <= ps2ctemp;

    wait until ps2ctemp'event;
    -- any activity at all on ps2ctemp should wake this process, 
    -- in case there is something it ought to be doing...
end process;

この単純なケースでは、これら 2 つの形式は本質的に同等です。したがって、より単純なもの(感度リスト)が優先されます...

于 2013-11-02T12:14:50.903 に答える