一般にnet
タイプ(複数のソースからwire
)をドライブした場合、同じ値で結果がドライブされます。値が異なる場合は、xとなります。 z
は特殊なケースで、最も弱い値で上書きされます。
wire bus;
assign bus = en1 ? val1 : `z;
assign bus = en2 ? val2 : `z;
両方の場合、en1, en2
がダウンしている、バスはz
の値を持つことになります。
en1
またはのいずれかがアップしていても、バスには対応する値(1または2)が割り当てられます。
両方の場合、en1
とen2
が高いval1 == val2
場合、その後、バスはそれ以外の場合はx
だろう、val1/val2
の値を取得します。
ここで、Verilogでは、合成できないが、特定の状況の動作モデリングやテストベンチに使用できる割り当て強度などを定義できます。これは、どの課題が競技会で勝つべきかをVerilogに伝えるでしょう。 Verilogにはいくつかのレベルの強さがあります。ドキュメントで見つけることができます。ここでは一例であり:EN1およびEN2の両方が高く、値が異なる場合は、上記の例で
wire bus;
assign (strong0, weak1) bus = en1 ? val1 : `z;
assign bus = en2 ? val2 : `z;
そのVAL1を提供するように、最初の割り当て 'は、強い「0」が、weaderを「1」になります0 'になり、assignment2は' 1 'を出力します。さまざまな強さの組み合わせを使用できます。ただし、強さが同じ場合は、最初の例のように動作します。
この場合、シンセサイザーで複数のソースエラーが発生すると思います。 –