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

Memanfaatkan Rekaman VHDL untuk Antarmuka FIFO Bersih dan Reusable

Dalam VHDL, rekaman menawarkan cara yang kuat untuk menyederhanakan desain Anda, mirip dengan struct dalam C. Dengan mengelompokkan sinyal terkait ke dalam satu tipe, Anda dapat secara dramatis mengurangi duplikasi kode, meningkatkan keterbacaan, dan menyederhanakan pemetaan port di berbagai entitas.

Rekaman berkahsa saat Anda bekerja dengan antarmuka besar yang berulang—seperti yang terhubung ke memori luar-chip atau FIFO—di mana sekumpulan kontrol dan sinyal data muncul berulang kali. Mendefinisikan rekaman sekali dalam sebuah paket dan menggunakannya di mana-mana menjaga antarmuka entitas Anda tetap rapi dan memudahkan modifikasi di masa depan.

Contoh berikut menunjukkan cara membuat dua tipe rekaman dalam sebuah paket khusus (example_record_pkg.vhd) dan menggunakannya untuk memodelkan sinyal input dan output FIFO. Satu sinyal rekaman mewakili semua input dari FIFO, dan yang lain mewakili semua output ke FIFO.

Poin Utama:

  1. Rekaman menyederhanakan deklarasi entitas dan pemetaan port dalam VHDL.
  2. Mereka dapat menampung elemen dengan tipe yang bervariasi—std_logic, integer, std_logic_vector, dll.
  3. Rekaman mirip dengan struct dalam C, menyediakan paradigma yang familiar bagi banyak insinyur.
  4. Tipe rekaman yang dibagikan harus berada dalam satu paket untuk konsistensi.
  5. Sinyal rekaman dapat diinisialisasi dengan konstanta untuk nilai awal yang dapat diprediksi.
  6. Array rekaman memungkinkan penanganan data terstruktur, seperti tabel konfigurasi FIFO.

Di bawah ini adalah definisi paket, diikuti oleh contoh entitas yang menggunakan tipe rekaman untuk mengelola logika baca/tulis FIFO. Kode ini sepenuhnya mematuhi standar IEEE 1076-2008.

 library ieee; use ieee.std_logic_1164.all; package example_record_pkg is -- Output dari FIFO. type t_FROM_FIFO is record wr_full : std_logic; -- Flag Penuh FIFO rd_empty : std_logic; -- Flag Kosong FIFO rd_dv : std_logic; rd_data : std_logic_vector(7 downto 0); end record t_FROM_FIFO; -- Input ke FIFO. type t_TO_FIFO is record wr_en : std_logic; wr_data : std_logic_vector(7 downto 0); rd_en : std_logic; end record t_TO_FIFO; constant c_FROM_FIFO_INIT : t_FROM_FIFO := (wr_full => '0', rd_empty => '1', rd_dv => '0', rd_data => (others => '0')); constant c_TO_FIFO_INIT : t_TO_FIFO := (wr_en => '0', wr_data => (others => '0'), rd_en => '0'); end package example_record_pkg; 
 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use work.example_record_pkg.all; -- MENGGUNAKAN PAKET DI SINI! entity example_record is port ( i_clk : in std_logic; i_fifo : in t_FROM_FIFO; o_fifo : out t_TO_FIFO := c_TO_FIFO_INIT -- inisialisasi output record ); end example_record; architecture behave of example_record is signal r_WR_DATA : unsigned(7 downto 0) := (others => '0'); begin -- Menangani tulis ke FIFO p_FIFO_WR : process (i_clk) is begin if rising_edge(i_clk) then if i_fifo.wr_full = '0' then o_fifo.wr_en <= '1'; o_fifo.wr_data <= std_logic_vector(r_WR_DATA + 1); end if; end if; end process p_FIFO_WR; -- Menangani baca dari FIFO p_FIFO_RD : process (i_clk) is begin if rising_edge(i_clk) then if i_fifo.rd_empty = '0' then o_fifo.rd_en <= '1'; end if; end if; end process p_FIFO_RD; end behave; 

VHDL

  1. Pengantar VHDL: Membuat AND Gate Pertama Anda
  2. Panduan Lengkap Konversi Tipe VHDL dengan Numeric_Std dan Std_Logic_Arith
  3. Contoh Prosedur VHDL: Meningkatkan Vektor Logika Standar
  4. Menguasai Tipe Signed vs. Unsigned dalam VHDL: Wawasan Praktis
  5. Variabel VHDL Dijelaskan: Contoh Praktis & Aturan untuk Desain Terpercaya
  6. Konfigurasi Analisis AC: Kurva, Titik, dan Pengaturan Sweep Frekuensi
  7. Seni dan Proses Produksi Rekaman LP
  8. Menguasai Verifikasi Formal Modul VHDL dengan PSL
  9. Membuat Daftar String dalam VHDL: Praktik Terbaik & Contoh
  10. Penguasaan Pernyataan Generate VHDL: Bangun Debouncer Reusable dengan Mudah