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

Menguasai std_logic_vector: Membuat Sinyal Vektor dalam VHDL

Tipe std_logic_vector adalah standar VHDL untuk mendefinisikan bus sinyal. Sementara std_logic memodelkan keadaan satu kawat, std_logic_vector memperluasnya menjadi serangkaian kawat, memungkinkan representasi bus multi-bit.

Tidak seperti std_logic tunggal, std_logic_vector adalah tipe komposit—koleksi terindeks dari elemen std_logic. Ini dapat menahan sejumlah bit yang sama sekali, membuatnya ideal untuk menghubungkan komponen yang bertukar data multi-bit.

Postingan blog ini adalah bagian dari seri Tutorial VHDL Dasar.

Deklarasikan sinyal std_logic_vector dengan sintaks berikut:
signal <name> : std_logic_vector(<lsb> to <msb>) := <initial_value>;
atau
signal <name> : std_logic_vector(<msb> downto <lsb>) := <initial_value>;
di mana <name> adalah pengenal yang dipilih pengguna dan <initial_value> opsional. <lsb> dan <msb> menunjukkan indeks bit paling tidak signifikan dan paling signifikan, masing-masing.

Kata kunci to atau downto menentukan arah rentang (yaitu, endianness). Keduanya bekerja, tetapi sebagian besar desainer memilih downto untuk kejelasan. Saya merekomendasikan penggunaan downto secara konsisten saat mendeklarasikan vektor bit untuk menghindari kebingungan.

Kode VHDL untuk vektor ukuran byte adalah:

signal MySlv : std_logic_vector(7 downto 0);

Kode VHDL untuk vektor satu bit adalah:

signal MySlv : std_logic_vector(0 downto 0);

Kode VHDL untuk rentang kosong (nol bit) adalah:

signal MySlv : std_logic_vector(-1 downto 0);

Latihan

Dalam tutorial video ini kita akan mempelajari cara mendeklarasikan sinyal std_logic_vector dan memberikan nilai awal kepada mereka. Kita juga mempelajari cara mengulangi bit dalam vektor menggunakan For-Loop untuk membuat shift register:

Kode akhir yang kita buat dalam tutorial ini:

 library ieee; use ieee.std_logic_1164.all; entity T11_StdLogicVectorTb is end entity; architecture sim of T11_StdLogicVectorTb is signal Slv1 : std_logic_vector(7 downto 0); signal Slv2 : std_logic_vector(7 downto 0) := (others => '0'); signal Slv3 : std_logic_vector(7 downto 0) := (others => '1'); signal Slv4 : std_logic_vector(7 downto 0) := x"AA"; signal Slv5 : std_logic_vector(0 to 7) := "10101010"; signal Slv6 : std_logic_vector(7 downto 0) := "00000001"; begin -- Shift register process is begin wait for 10 ns; for i in Slv6'left downto Slv6'right + 1 loop Slv6(i) <= Slv6(i-1); end loop; Slv6(Slv6'right) <= Slv6(Slv6'left); end process; end architecture; 

Jendela gelombang di ModelSim setelah menekan run, dan memperbesar timeline:Menguasai std_logic_vector: Membuat Sinyal Vektor dalam VHDL

Analisis

Dalam latihan ini kita mendeklarasikan enam bus std_logic_vector, masing-masing delapan bit panjang (satu byte).

Sinyal Slv1 dideklarasikan tanpa nilai awal. Bus muncul sebagai XX dalam tangkapan layar gelombang karena tampilan heksadesimal tidak dapat mewakili nilai yang tidak diketahui. Penelitian yang lebih dekat menunjukkan bahwa bit individual sebenarnya adalah U.

Sinyal Slv2 menggunakan penugasan agregat (others => '0') untuk mengatur semua bit ke nol. Sintaks ringkas ini memastikan setiap elemen menerima nilai yang ditentukan terlepas dari lebar vektor.

Sinyal Slv3 menggunakan teknik agregat yang sama untuk menginisialisasi setiap bit ke satu, yang ditampilkan sebagai FF (heksadesimal untuk delapan 1).

Sinyal Slv4 menunjukkan inisialisasi heksadesimal: AA. Karena setiap digit heksadesimal memetakan ke empat bit, dua digit mencakup vektor 8-bit.

Sinyal Slv5 berisi nilai yang sama, tetapi diekspresikan dalam biner (10101010). Keduanya Slv4 dan Slv5 dirender sebagai AA dalam gelombang.

Sinyal Slv6 dimulai dengan semua nol kecuali bit paling tidak signifikan diatur ke 1. Sebuah proses mengimplementasikan register geser kiri yang mencycarkan 1 melalui vektor setiap 10 ns.

Proses memanfaatkan atribut left dan right untuk menjaga kode tetap generik; mengubah ukuran vektor tidak memerlukan perubahan kode.

Ada atribut tambahan, tetapi mereka di luar cakupan tutorial pengantar ini.

Menguasai std_logic_vector: Membuat Sinyal Vektor dalam VHDL

Kesimpulan

Ikuti Kuis VHDL Dasar – bagian 2 »
atau
Lanjutkan ke tutorial berikutnya »

VHDL

  1. Panduan Lengkap Konversi Tipe VHDL dengan Numeric_Std dan Std_Logic_Arith
  2. Menguasai Tipe Signed vs. Unsigned dalam VHDL: Wawasan Praktis
  3. Membuat Daftar String dalam VHDL: Praktik Terbaik & Contoh
  4. Membuat Testbench yang Diakibatkan Tcl untuk Modul Kode-Kunci VHDL
  5. Mengakhiri Simulasi Testbench VHDL dengan Elegan
  6. Implementasi Pengontrol PWM dalam VHDL: Desain, Simulasi, dan Demo FPGA
  7. Menghasilkan Angka Acak dalam VHDL: Dari Uniform hingga OSVVM
  8. Merancang Ring Buffer FIFO VHDL yang Kuat di Block RAM
  9. Cara Membuat Testbench Self-Checking di VHDL – Panduan Praktis
  10. Implementasi Linked List Dinamis di VHDL dengan Tipe Terlindung dan Pointer Akses