6

std_logic列挙型の目的は何ですか?

'U': uninitialized. This signal hasn't been set yet.
'X': unknown. Impossible to determine this value/result.
'0': logic 0
'1': logic 1
'Z': High Impedance
'W': Weak signal, can't tell if it should be 0 or 1.
'L': Weak signal that should probably go to 0
'H': Weak signal that should probably go to 1
'-': Don't care. 
4

6 に答える 6

9
  • 「X」は通常、同じ信号を反対方向に駆動する2つのステートメント、つまり「0」と「1」によって発生します。
  • 「Z」は、トライステート出力/入力を構築するために使用されます
  • 「L」と「H」は、それぞれプルダウンまたはプルアップをモデル化するために使用されます
  • '-'は、ベクトル内の特定のビットを気にしない場合の比較で使用されます
于 2012-09-20T06:21:16.540 に答える
7

std_logic は基本的に単一のワイヤまたはビットです。論理演算子 (and、or、xor など) を使用できます。デザインをシミュレートするとき、私は「X」、「0」、または「1」しか見たことがないと思います。明らかに、「0」または「1」が必要です。「X」は、値が不明であることを示します (おそらく、何にも接続されていないか、信号にグリッチがある)。また、std_logic_vector は、1 ビット幅を超える必要がある信号に使用できます。これがあなたの質問に答えているかどうかはわかりません...

于 2012-09-20T01:46:23.283 に答える
5

このstd_logicタイプは、IEEE-1164 標準によって、単一のワイヤまたはビットを正確に表すものとして導入されました。VHDL 言語自体は、「実際の」ロジックを表すのに十分な堅牢性を持つシングル ビット型を提供していません。つまり、最新のプログラマブル ロジック デバイスでモデル化および合成可能なロジックのすべての可能な状態を表すことです。

std_logicVHDL の歴史の初期には、さまざまな開発者が、現実世界の信号を表現する必要性から、基本的に独自のバージョンの を作成していました。IEEE-1164 では、さまざまな開発者によってさまざまなアーキテクチャ用に記述されたコードの相互運用性を強化するために、この標準化されたロジック タイプが導入されました。

標準のウィキペディアの記事では、簡潔な説明が提供されています。

http://en.wikipedia.org/wiki/IEEE_1164

于 2012-09-20T08:57:20.903 に答える
3

既出の回答に加えて、STD_LOGICはいわゆる解決型、つまりシグナルに優先度があるということは特筆すべきだと思います。たとえば、1 と 0 は H または L よりも優先度が高いため、信号が L と 1 で同時に駆動された場合、1 は L よりも優先度が高いため、出力はハイ (ロジック 1) になります。

あなたが値をリストした順序がたまたま、あなたの質問では優先順位です.1つの注意点は、いくつかの値は同じ優先順位であるため、これらの信号の両方でそれらを駆動する場合、明確ではありません」勝者」なので、結果は階層の次の「不明な」状態 (「X」または「W」) になります。簡単な例では、信号が「H」と「L」で駆動された場合、結果は「 W'.

STD_LOGIC の解決テーブルは次のようになります。

--      ---------------------------------------------------------
--      |  U    X    0    1    Z    W    L    H    -        |   |  
--      ---------------------------------------------------------
        ( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- | U |
        ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ), -- | X |
        ( 'U', 'X', '0', 'X', '0', '0', '0', '0', 'X' ), -- | 0 |
        ( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ), -- | 1 |
        ( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- | Z |
        ( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W |
        ( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- | L |
        ( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- | H |
        ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' )  -- | - |  
于 2015-01-06T21:22:03.623 に答える
0

ザイリンクスのシミュレータ ISim でこの動作を確認しました。

  • 'U' - デフォルト値が明示的に設定されていないすべての信号のデフォルト状態です。すべてのシグナルにデフォルト値を設定することをお勧めします。
  • 'X' - 異なる値を持つ 2 つ以上のドライバーによって信号が駆動される場合に割り当てられます。
  • 「Z」 - 明示的に高い Z 状態です。これは、トライステートをサポートする要素を備えたハードウェアでのみ実現できることに注意してください。これらのリソースはファブリックではまれであるため、これを IO ピンにのみ使用することをお勧めします。
  • 「0」と「1」は通常の状態です。
  • 他の状態を見たことがなく、FPGA に適用されるとは思いません。

ISim で変数を調べることはできませんが、同じルールが適用されると思います。

于 2014-12-31T01:37:29.757 に答える