Kapan menggunakan STD_LOGIC melalui BIT dalam VHDL


9

Apa perbedaan antara menggunakan:

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

dan

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

Apa batasan menggunakan BIT di atas STD_LOGIC dan sebaliknya? Apakah mereka sepenuhnya dapat dipertukarkan? Saya mengerti bahwa jika saya mendefinisikan STD_LOGIC, saya tidak dapat menggunakannya dengan BIT_Vector untuk mengakses elemen dalam array. Tapi sepertinya saya tidak bisa melihat perbedaannya.


Jawaban:


9

Bitadalah tipe yang telah ditentukan dan hanya dapat memiliki nilai 0atau 1. The Bitjenis adalah nilai ideal.

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

std_logicadalah bagian dari std_logic_1164paket dan memberikan pemodelan sinyal yang lebih realistis dalam sistem digital. Ia mampu memiliki sembilan nilai berbeda. Biasanya dalam kode Anda, Anda hanya akan menggunakan 0, 1dan Z(High-Z). Tetapi U(Uninitialized) dan X(Unknown) juga sangat berguna ketika memodelkan sistem dalam testbench.

    -------------------------------------------------------------------    
    -- 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;

The std_logic_1164paket juga menyediakan fungsi konversi untuk mengkonversi std_logicke Bit.


5

Kebanyakan orang menggunakannya std_logic. Itu memungkinkan u(undefined), x(tidak diketahui) dan z(impedansi tinggi), yang tidak. Meskipun Anda mungkin tidak pernah menggunakan chip dan karena itu tidak perlu z, uberguna untuk menemukan pengaturan ulang yang hilang. xberguna untuk menemukan beberapa driver.


7
Saya pikir itu lucu bahwa Anda menyebutkan kegunaan Xuntuk menemukan beberapa driver. std_logicmemang tipe standar industri untuk VHDL, tetapi juga merupakan salah satu fitur VHDL yang paling disalahgunakan. std_logicadalah sinyal yang diselesaikan, yang berarti bahwa suatu fungsi digunakan untuk menyelesaikan nilai sinyal dalam kasus beberapa driver. Tetapi dalam sebagian besar kasus, beberapa driver merupakan kesalahan. Dengan menggunakan tipe yang tidak terselesaikan seperti std_ulogicini akan ditandai oleh kompiler sebagai kesalahan.
trondd

@trondd: Poin bagus tentang std_ulogic. Namun perlu diingat banyak core akan ditulis std_logicsehingga Anda mungkin akan melihatnya.
Brian Carlton

1
std_logicmemang tipe yang paling umum di sekitar; Saya hanya berpendapat bahwa penggunaannya tidak sesuai dengan niat asli: Pemodelan sinyal multi-state. Untuk desain internal kami biasanya hanya mempertimbangkan 1atau 0dan satu driver. Lihat electronics.stackexchange.com/questions/17524/… untuk diskusi menyeluruh tentang topik tersebut.
trondd

5

std_logic memiliki fungsi resolusi

Tidak hanya std_logicmemiliki negara yang lebih berguna selain 1dan 0, ia juga memiliki fungsi resolusi yang ditentukan.

Fungsi resolusi adalah konsep bahasa VHDL. Ini adalah fungsi yang dikaitkan dengan suatu jenis, dan itu menentukan apa yang terjadi ketika beberapa nilai dari jenis itu diterapkan pada satu sinyal. Sintaksnya adalah:

SUBTYPE std_logic IS resolved std_ulogic;

di mana std_ulogicversi yang belum terselesaikan (dan karenanya jauh kurang berguna) dari std_logic.

Secara khusus, ini menyiratkan hal-hal baik seperti 0dan 1mengarah ke 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;

Ini masuk akal secara intuitif, seperti yang kita pahami Xsebagai keadaan di mana banyak nilai yang tidak kompatibel diterapkan ke satu kabel.

std_logic juga tahu bagaimana menyelesaikan setiap pasangan sinyal input yang mungkin menurut tabel yang ada pada LRM.

bit di sisi lain, tidak memiliki fungsi resolusi, dan jika kita menggunakannya pada contoh di atas, itu akan menyebabkan kesalahan simulasi pada GHDL 0,34.

Nilai yang mungkin dari std_logicadalah pilihan yang baik karena mereka distandarisasi oleh IEEE 1164 dan menangani banyak kasus penggunaan umum.


0

std_logic lebih kaya daripada bit , dan pada dasarnya harus digunakan sebagian besar waktu.

Ada juga tipe boolean , yang, seperti bit , memiliki dua nilai. Ini adalah tipe hasil perbandingan, tipe yang diharapkan setelah IF [bool] atau WHEN [bool] , sering digunakan untuk konstanta seleksi:constant ENABLE_DEBUG_INTERFACE : boolean := true;

Satu tempat bit dapat dipilih untuk std_logic adalah untuk array besar, memori. Pada pengoptimalan simulator, bit menempati lebih sedikit area dalam memori simulator daripada std_logic . Dan mungkin masalah jika desain Anda instantiates satu GB RAM.

Ini juga bisa lebih cepat untuk desain yang sangat besar, misalnya sesuatu yang secara otomatis dihasilkan dari netlist gerbang-tingkat pasca-sintesis.

Tentu saja, aspek kinerja ini bukan bagian dari bahasa, dan tergantung pada implementasi simulator VHDL.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.