Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> VHDL

Bagaimana Sinyal berbeda dari Variabel dalam VHDL

Pada tutorial sebelumnya kita telah belajar bagaimana mendeklarasikan sebuah variabel dalam sebuah proses. Variabel bagus untuk membuat algoritme dalam suatu proses, tetapi tidak dapat diakses oleh dunia luar. Jika ruang lingkup variabel hanya dalam satu proses, bagaimana ia dapat berinteraksi dengan logika lain? Solusi untuk ini adalah sinyal .

Sinyal dideklarasikan antara architecture <architecture_name> of <entity_name> is baris dan begin pernyataan dalam file VHDL. Ini disebut bagian deklaratif dari arsitektur.

Pos blog ini adalah bagian dari seri Tutorial VHDL Dasar.

Sintaks untuk mendeklarasikan sinyal adalah:
signal <name> : <type>;

Sinyal opsional dapat dideklarasikan dengan nilai awal:
signal <name> : <type> := <initial_value>;

Olahraga

Dalam video tutorial ini kita belajar cara mendeklarasikan sinyal. Kita juga akan mempelajari perbedaan utama antara variabel dan sinyal:

Kode terakhir yang kita buat dalam tutorial ini:

entity T06_SignalTb is
end entity;

architecture sim of T06_SignalTb is

    signal MySignal : integer := 0;

begin

    process is
        variable MyVariable : integer := 0;
    begin

        report "*** Process begin ***";

        MyVariable := MyVariable + 1;
        MySignal   <= MySignal + 1;

        report "MyVariable=" & integer'image(MyVariable) &
            ", MySignal=" & integer'image(MySignal);

        MyVariable := MyVariable + 1;
        MySignal   <= MySignal + 1;

        report "MyVariable=" & integer'image(MyVariable) &
            ", MySignal=" & integer'image(MySignal);

        wait for 10 ns;

        report "MyVariable=" & integer'image(MyVariable) &
            ", MySignal=" & integer'image(MySignal);

    end process;

end architecture;

Output ke konsol simulator saat kita menekan tombol run di ModelSim:

VSIM 2> run
# ** Note: *** Process begin ***
#    Time: 0 ns  Iteration: 0  Instance: /t06_signaltb
# ** Note: MyVariable=1, MySignal=0
#    Time: 0 ns  Iteration: 0  Instance: /t06_signaltb
# ** Note: MyVariable=2, MySignal=0
#    Time: 0 ns  Iteration: 0  Instance: /t06_signaltb
# ** Note: MyVariable=2, MySignal=1
#    Time: 10 ns  Iteration: 0  Instance: /t06_signaltb
# ** Note: *** Process begin ***
#    Time: 10 ns  Iteration: 0  Instance: /t06_signaltb
# ** Note: MyVariable=3, MySignal=1
#    Time: 10 ns  Iteration: 0  Instance: /t06_signaltb
# ** Note: MyVariable=4, MySignal=1
#    Time: 10 ns  Iteration: 0  Instance: /t06_signaltb
# ** Note: MyVariable=4, MySignal=2
#    Time: 20 ns  Iteration: 0  Instance: /t06_signaltb
...

Analisis

Kami membuat sinyal dan variabel dengan nilai awal yang sama yaitu 0. Dalam proses kami, kami memperlakukan mereka dengan cara yang sama persis, namun hasil cetakan menunjukkan bahwa mereka berperilaku berbeda. Pertama kita melihat bahwa penugasan ke variabel dan sinyal memiliki notasi yang berbeda dalam VHDL. Penugasan variabel menggunakan := operator sementara penugasan sinyal menggunakan <= operator.

MyVariable berperilaku seperti yang diharapkan variabel untuk berperilaku. Pada iterasi pertama dari loop itu bertambah menjadi 1, dan kemudian menjadi 2. Hasil cetak terakhir dari iterasi pertama menunjukkan bahwa nilainya masih 2, seperti yang kita harapkan.

MySignal berperilaku sedikit berbeda. Kenaikan +1 pertama tampaknya tidak berpengaruh. Hasil cetakan menunjukkan bahwa nilainya masih 0, nilai awal. Hal yang sama berlaku setelah kenaikan +1 kedua. Sekarang nilai MyVariable adalah 2, tetapi nilai MySignal masih 0. Setelah wait for 10 ns; hasil cetakan ketiga menunjukkan bahwa nilai MySignal sekarang 1. Cetakan berikutnya mengikuti pola ini juga.

Apa sihir ini? Saya akan memberi Anda petunjuk, wait for 10 ns; ada hubungannya dengan itu. Sinyal hanya diperbarui ketika suatu proses dijeda. Proses kami hanya menjeda satu tempat, di wait for 10 ns; . Oleh karena itu, nilai sinyal hanya berubah setiap kali garis ini dipukul. 10 nanodetik adalah nilai arbitrer, bisa apa saja, bahkan 0 nanodetik. Cobalah!

Pengamatan penting lainnya adalah bahwa peristiwa meskipun sinyal bertambah dua kali sebelum wait , nilainya hanya bertambah satu kali. Ini karena ketika menetapkan sinyal dalam suatu proses, tugas terakhir "menang". <= operator hanya menjadwalkan nilai baru ke sinyal, itu tidak berubah sampai wait . Oleh karena itu, pada kenaikan kedua MySignal , 1 ditambahkan ke lama its nilai. Ketika ditambahkan lagi, kenaikan pertama benar-benar hilang.

Bawa Pulang

Pergi ke tutorial berikutnya »


VHDL

  1. Ditandatangani vs. Tidak Ditandatangani di VHDL
  2. Variabel - Contoh VHDL
  3. Bagaimana komputasi awan berbeda dari komputasi tradisional?
  4. Cara membuat daftar string di VHDL
  5. Bagaimana menghentikan simulasi di testbench VHDL
  6. Cara membuat pengontrol PWM di VHDL
  7. Cara menghasilkan angka acak di VHDL
  8. Cara menggunakan Prosedur dalam Proses di VHDL
  9. Cara menggunakan Fungsi di VHDL
  10. Apa Itu Sistem Satelit Navigasi BeiDou? Apa Bedanya Dengan GPS?