-1

VHDL の if 条件は、MUX を使用して実装できます。しかし、クロックの立ち上がりエッジがあるときに MUX の出力を変化させたいと考えています。MUX の選択ラインとして clock と clk'event を提供したかったのです。

signal a:std_logic;
process(clk)
a <= clk and clk'event;
o <= (a and s1) or ((not a) and s2);
end process;

しかし、clk'event が原因でエラーが発生します。clk'stable で試してみました。しかし、clk'stable はブール信号であるため、エラーが発生します。これにも型変換はありません。行動的な実装ではなく、PURE STRUCTURAL 実装の代替手段はありますか?

4

1 に答える 1

0

おそらくclkstd_logic タイプの信号です。

実際のエラー メッセージが表示されない場合、問題の行は次のとおりです。

a <= clk and clk'event;

この'event属性は BOOLEAN 型を返します。 BOOLEAN 型も返す clk暗黙の条件演算子 ( )、IEEE Std 1076-2008) に適しているように見えます。??

残念ながら、への割り当てaは、std_logic の基本型 (std_ulogic) に対して暗黙的に宣言されたシグナル割り当てで行われ、基本的な操作であり、入力型がターゲット型と一致する必要があります。

VHDL は厳密に型指定されており、型変換なしで BOOLEAN を std_logic に割り当てることはできません。

また、 への割り当てaは 1 デルタ サイクルの長さになり、実質的にはグリッチまたはパルスになります。

合成に有用な意味があるかどうかは明らかではありません。

それ以外の場合は、機密リストが含まれていないことを除いて、出力oは実行s1中になります。a = '1's2a

条件信号割り当てなどの別の割り当てタイプを使用して、シミュレーションで単一のデルタ サイクル長パルスを実証できます。

a <= '1' when clk = '1' and clk'event else
     '0';

同時条件代入の場合、条件は BOOLEAN になり、ターゲットは、条件が TRUE の場合は std_logic と互換性のある '1' 列挙リテラルであり、FALSE の場合は '0' 列挙リテラルです。

aは、プロセスのセンシティビティ リストに含まれていないため、順次条件信号の割り当てoは常に になりますs2

また、古い標準に準拠した VHDL ツールを使用している場合、条件付き信号の割り当てステートメントは処理中に機能しません。

両方の割り当てステートメントを同時シグナル割り当てにすることができます。この場合、それらは、適切な機密リストの同等物 (それぞれの最後のステートメントとしての待機ステートメント) を持つ別個の同等のプロセスになります。

于 2014-10-30T10:51:25.597 に答える