VHDLでBITを介してSTD_LOGICを使用する場合


9

使用の違いは何ですか:

ENTITY MyDemo is 
    PORT(X: IN STD_LOGIC; F: OUT STD_LOGIC );
END MyDemo; 

そして

ENTITY MyDemo is 
    PORT(X: IN BIT; F: OUT BIT );
END MyDemo; 

STD_LOGICを介してBITを使用する場合の制限は何ですか?それらは完全に交換可能ですか?STD_LOGICを定義した場合、それをBIT_Vectorで使用して配列の要素にアクセスすることはできないことを理解しています。しかし、私は違いを見ることができないようです。


回答:


9

Bit事前定義されたタイプであり、値0またはのみを持つことができます1Bitタイプは、理想的な値です。

type Bit is ('0', '1');

std_logicstd_logic_1164パッケージの一部であり、デジタルシステム内の信号のより現実的なモデリングを提供します。9つの異なる値を持つことができます。一般的に、あなたのコード内であなただけ使用されます01Z(ハイZ)。ただしUX(未初期化)および(不明)は、テストベンチでシステムをモデリングするときにも非常に役立ちます。

    -------------------------------------------------------------------    
    -- logic state system  (unresolved)
    -------------------------------------------------------------------    
    TYPE std_ulogic IS ( 'U',  -- Uninitialized
                         'X',  -- Forcing  Unknown
                         '0',  -- Forcing  0
                         '1',  -- Forcing  1
                         'Z',  -- High Impedance   
                         'W',  -- Weak     Unknown
                         'L',  -- Weak     0       
                         'H',  -- Weak     1       
                         '-'   -- Don't care
                       );

--    attribute ENUM_ENCODING of std_ulogic : type is "U D 0 1 Z D 0 1 D";

    -------------------------------------------------------------------    
    -- *** industry standard logic type ***
    -------------------------------------------------------------------    
    SUBTYPE std_logic IS resolved std_ulogic;

std_logic_1164パッケージには、変換するための変換機能を提供std_logicしますBit


5

ほとんどの人が使用しますstd_logic。これにより、u(未定義)、x(不明)、およびz(高インピーダンス)が可能になりますが、ビットにはありません。チップでトライステートにすることは決してないためzuは必要ありませんが、欠落しているリセットを見つけるのに役立ちます。x複数のドライバを見つけるのに役立ちます。


7
X複数のドライバーを見つけることの有用性について言及しているのはおかしいと思います。std_logic確かにVHDLの業界標準タイプですが、VHDLの最も誤用されている機能の1つでもあります。std_logic複数のドライバーがある場合、信号の値を解決するために関数が使用されることを意味します。しかし、ほとんどの場合、複数のドライバーがエラーになります。std_ulogicこのような未解決のタイプを使用すると、コンパイラによってエラーとしてマークされます。
trondd 2012

@trondd:についての良い点std_ulogic。ただし、多くのコアが書き込まれるstd_logicため、その一部が表示される可能性があることに注意してください。
ブライアンカールトン

1
std_logic実際、最も一般的なタイプです。私は、その使用が元の意図に従っていないことを主張しています:マルチステート信号のモデリング。内部設計では、通常、1または0単一のドライバーのみを考慮します。このトピックの詳細については、electronics.stackexchange.com / questions / 17524 /…を参照してください。
trondd 2012

5

std_logic 解決機能があります

するだけでなく、std_logicほかにもっと便利な状態を持っている1し、0それはまた、解像度機能が定義されています、。

解決機能はVHDL言語の概念です。これはタイプに関連付けられている関数であり、そのタイプの複数の値が単一の信号に適用されたときに何が起こるかを決定します。構文は次のとおりです。

SUBTYPE std_logic IS resolved std_ulogic;

ここでstd_ulogicの未解決(及び従ってはるかに少ない有用)バージョンですstd_logic

特に、これは素敵なようなものを意味0し、1リードにはX

library ieee;
use ieee.std_logic_1164.all;

entity std_logic_tb is
end std_logic_tb;

architecture behav of std_logic_tb is
    signal s0 : std_logic;
begin
    s0 <= '0';
    s0 <= '1';
    process
    begin
        wait for 1 ns;
        assert s0 = 'X';
        wait;
    end process;
end behav;

これは、X互換性のない複数の値が1つのワイヤに適用されている状態であると理解しているため、直感的に理解できます。

std_logic LRMにある表に従って、入力信号の可能な他のすべてのペアを解決する方法も知っています。

bit 一方、には解決機能がなく、上記の例で使用した場合、GHDL 0.34でシミュレーションエラーが発生します。

可能な値std_logicは、IEEE 1164によって標準化されており、多くの一般的な使用例に対応しているため、適切な値です。


0

std_logicbitよりも豊富で、基本的にほとんどの場合に使用する必要があります。

boolean型もあり、bitと同様に2つの値があります。これは比較の結果のタイプであり、IF [bool]またはWHEN [bool]の後に予期されるタイプであり、選択定数によく使用されます。constant ENABLE_DEBUG_INTERFACE : boolean := true;

std_logicよりもbitを優先できる場所の1つは、大規模な配列、メモリです。シミュレータの最適化では、ビットは、std_logicよりもシミュレータのメモリ内で占有する領域が少なくなります。また、デザインが1 GBのRAMをインスタンス化するかどうかが問題になる場合があります。

また、合成後のゲートレベルのネットリストから自動的に生成されるものなど、非常に大規模なデザインの場合も高速になります。

もちろん、このパフォーマンスの側面は言語の一部ではなく、VHDLシミュレーターの実装に依存します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.