おそらくclk
std_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'
s2
a
条件信号割り当てなどの別の割り当てタイプを使用して、シミュレーションで単一のデルタ サイクル長パルスを実証できます。
a <= '1' when clk = '1' and clk'event else
'0';
同時条件代入の場合、条件は BOOLEAN になり、ターゲットは、条件が TRUE の場合は std_logic と互換性のある '1' 列挙リテラルであり、FALSE の場合は '0' 列挙リテラルです。
a
は、プロセスのセンシティビティ リストに含まれていないため、順次条件信号の割り当てo
は常に になりますs2
。
また、古い標準に準拠した VHDL ツールを使用している場合、条件付き信号の割り当てステートメントは処理中に機能しません。
両方の割り当てステートメントを同時シグナル割り当てにすることができます。この場合、それらは、適切な機密リストの同等物 (それぞれの最後のステートメントとしての待機ステートメント) を持つ別個の同等のプロセスになります。