VHDL'de BIT üzerinden STD_LOGIC ne zaman kullanılır?


10

Kullanma arasındaki fark nedir:

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

ve

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

BIT kullanımının STD_LOGIC üzerinden ve bunun tersi konusunda kısıtlamaları nelerdir? Tamamen değiş tokuş yapabilirler mi? STD_LOGIC tanımladıysam, dizideki öğelere erişmek için bir BIT_Vector ile kullanamayacağımı anlıyorum. Ama farkı göremiyorum.


Yanıtlar:


10

BitBir olan önceden tanımlanmış türü ve yalnızca değere sahip olabilir 0ya da 1. BitTipi idealize değerdir.

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

std_logicstd_logic_1164paketin bir parçasıdır ve dijital bir sistem içindeki sinyallerin daha gerçekçi modellenmesini sağlar. Dokuz farklı değere sahip olabilir. Tipik Kodunuzdaki sadece kullanacaktır 0, 1ve Z(Yüksek Z). Ancak U(Başlatılmamış) ve X(Bilinmeyen) de sistemi bir test tezgahında modellerken çok kullanışlıdır.

    -------------------------------------------------------------------    
    -- 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_1164Pakette ayrıca dönüştürmek için dönüştürme işlevleri sağlar std_logiciçin Bit.


6

Çoğu insan kullanır std_logic. Bu, bitin utanımlanmadığı (tanımsız), x(bilinmeyen) ve z(yüksek empedans) sağlar. Bir çipte asla tristasyon yapamayacağınız ve bu nedenle ihtiyacınız olmayacak olsa da z, ueksik sıfırlamaları bulmak için yararlıdır. xbirden çok sürücü bulmak için kullanışlıdır.


7
XBirden fazla sürücü bulmak için yararlı olduğunu belirtmeniz komik olduğunu düşünüyorum . std_logicaslında VHDL için endüstri standardı tip, ama aynı zamanda VHDL'nin en yanlış kullanım özelliğidir. std_logicçözümlenmiş bir sinyaldir, yani birden fazla sürücü olması durumunda sinyalin değerini çözmek için bir fonksiyon kullanılır. Ancak, vakaların büyük çoğunluğunda birden fazla sürücü bir hatadır. Bunun gibi çözülmemiş bir tür kullanıldığında std_ulogicderleyici tarafından hata olarak işaretlenir.
trondd

@trondd: İyi bir noktaya değindin std_ulogic. Ancak, birçok çekirdeğin de yazılacağını unutmayın, std_logicböylece muhtemelen bazılarını göreceksiniz.
Brian Carlton

1
std_logicaslında en yaygın türdür; Sadece kullanımının orijinal niyetine göre olmadığını savunuyorum: Çok durumlu sinyallerin modellenmesi. İç tasarımlar için genellikle sadece 1veya 0tek bir sürücü düşünürüz. Konu hakkında ayrıntılı bir tartışma için electronics.stackexchange.com/questions/17524/… adresine bakın .
trondd

5

std_logic çözünürlük fonksiyonu var

Sadece gelmez std_logicyanında daha yararlı durumlarına sahip 1ve 0aynı zamanda tanımlanmış bir çözünürlük işlevi vardır.

Çözünürlük işlevi bir VHDL dil konseptidir. Bir türle ilişkilendirilmiş bir işlevdir ve bu türün birden çok değeri tek bir sinyale uygulandığında ne olacağını belirler. Sözdizimi:

SUBTYPE std_logic IS resolved std_ulogic;

std_ulogicçözümlenmemiş (ve dolayısıyla çok daha az kullanışlı) sürümü nerede std_logic.

Özellikle, bu gibi güzel şeyleri ima eder 0ve aşağıdakilere 1yol açar 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;

XTek bir kabloya birden fazla uyumsuz değerin uygulandığı durum olduğumuzu anladığımız için bu sezgisel bir anlam ifade eder.

std_logic ayrıca LRM'de bulunan bir tabloya göre olası her bir giriş sinyali çiftinin nasıl çözüleceğini de bilir.

bit Öte yandan, bir çözünürlük fonksiyonuna sahip değildir ve yukarıdaki örnekte kullansaydık, GHDL 0.34'te bir simülasyon hatasına yol açacaktır.

Olası değerler std_logiciyi bir seçimdir çünkü IEEE 1164 ve birçok yaygın kullanım durumu ile ilgilidir.


0

std_logic biraz daha zengindir ve temelde çoğu zaman kullanılmalıdır.

Ayrıca bit gibi iki değeri olan boole türü de vardır. Sonuç karşılaştırmaları, bir IF [bool] veya WHEN [bool] sonrasında beklenen türdür. seçim sabitleri için sıklıkla kullanılan :constant ENABLE_DEBUG_INTERFACE : boolean := true;

Bir yerde biraz tercih edilebilir STD_LOGIC büyük diziler, anılar içindir. Simülatörleri optimize ederken, bit simülatörün belleğinde std_logic'ten daha az yer kaplar . Ve tasarımınızın bir GB RAM'i başlatması önemli olabilir.

Ayrıca çok büyük tasarımlar için daha hızlı olabilir, örneğin sentez sonrası kapı seviyesi netlistinden otomatik olarak üretilen bir şey.

Tabii ki, bu performans yönü dilin bir parçası değildir ve VHDL simülatörünün uygulanmasına bağlıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.