3

これは、私が自分の頭脳を包み込もうとしている単なる実験です。

したがって、2 つのレジスタ r1 r2 と 2 つのワイヤ w1 w2 があります。私が望むのは、両方の r が 1 の場合、両方の w が 1 である必要があることです。一方の r が 1 の場合、対応する w は 1 であり、もう一方は 0 である必要があります。両方の r が 0 の場合、w1 は 1 で、w2 は0.

11=>11

10=>10

01=>01

00=>10

注意点は、w1 の割り当てに r2 を直接含めないようにしたいということです。だから、私は持っています(たとえばVerilogでは、VHDLの答えでもまったく問題ありません)

assign w1 = r1 | !w2;
assign w2 = r2 | !w1;

これは必要ですが、十分ではありません。上記のすべてのケースが当てはまりますが、00=>01 も当てはまります。実際、r1=r2=0 の場合、ドライバーなしでワイヤのサイクルを作成するだけなので、結果は非決定論的だと思います。

w1の割り当てにr2を含めずに、探している結果を取得する方法はありますか、またはその逆ですか? (そして、新しい変数を導入することなく)。基本的に、ワイヤサイクルでw1が高くなり、w2が低くなるようにするためですか?

4

2 に答える 2

7

いいえ、余分なワイヤ/信号や相互依存関係なしにこれを行うクリーンな方法はないと思います。

ところで、「循環ワイヤ」は一般に組み合わせループと呼ばれ、これらを避けることをお勧めします。

  1. 組み合わせループを使用した VHDL モデルのシミュレーションに関しては、シミュレーターが安定点に収束する場合、つまり信号値の変化がない場合、結果は確定的です。信号値が継続的に変化する場合、シミュレーターの反復制限に達する可能性があります。Verilog についてはわかりませんが、決定論的でもあると思います。
  2. 合成に関しては、ツールはこの構文を拒否してエラーを発生させるか、これを処理しようとしますが、タイミングに非常に悪い影響を与える可能性があります。

繰り返しになりますが、シミュレーションに問題がなく、合成ツールでこれが可能な場合でも、組み合わせループは避ける必要があります。

于 2012-07-04T16:15:39.060 に答える
1

現在持っているものは SR ラッチに非常に似ており、メタステーブル状態 (競合状態とも呼ばれます) があります。

ただし、上記の真理値表から、w2 は r2 にのみ設定する必要があるようです。 assign w2 = r2;

その変更により、競合状態が修正されるはずです。上で述べたように、組み合わせロジックによって作成される大きな制限に注意してください。

于 2012-07-05T22:48:22.713 に答える