VHDL
Konstruksi Record dalam VHDL dapat digunakan untuk menyederhanakan kode Anda. Catatan mirip dengan struktur di C . Rekaman paling sering digunakan untuk mendefinisikan tipe VHDL baru. Tipe baru ini berisi kelompok sinyal apa pun yang diinginkan pengguna. Paling sering ini digunakan untuk menyederhanakan antarmuka. Ini sangat berguna dengan antarmuka yang memiliki daftar besar sinyal yang selalu sama. Misalnya antarmuka ke memori off-chip mungkin besar dan memiliki sinyal yang sama berulang-ulang di seluruh desain Anda. Rekaman dapat digunakan untuk mengecilkan ukuran kode dan memiliki lebih sedikit sinyal di entitas Anda untuk dipelihara. Perancang hanya perlu mendefinisikan tipe record dalam satu file paket, kemudian menggunakan file paket untuk entitas apa pun yang menggunakan tipe record tersebut.
Contoh di bawah ini membuat dua jenis record dalam file paket (example_record_pkg.vhd). Jenis ini digunakan dalam example_record.vhd untuk menyederhanakan antarmuka FIFO. Satu sinyal tipe t_FROM_FIFO dibuat untuk semua input dari FIFO dan sinyal terpisah dari tipe t_TO_FIFO dibuat untuk semua keluaran ke FIFO .
Ringkasan:
library ieee; use ieee.std_logic_1164.all; package example_record_pkg is -- Outputs from the FIFO. type t_FROM_FIFO is record wr_full : std_logic; -- FIFO Full Flag rd_empty : std_logic; -- FIFO Empty Flag rd_dv : std_logic; rd_data : std_logic_vector(7 downto 0); end record t_FROM_FIFO; -- Inputs to the 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; -- USING PACKAGE HERE! 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 -- intialize output record ); end example_record; architecture behave of example_record is signal r_WR_DATA : unsigned(7 downto 0) := (others => '0'); begin -- Handles writes to the 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; -- Handles reads from the 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
Sebagian besar desain VHDL menggunakan logika clock , juga dikenal sebagai logika sinkron atau logika sekuensial . Proses clock hanya dipicu oleh sinyal master clock, bukan saat sinyal input lainnya berubah. Blok bangunan dasar logika clock adalah komponen yang disebut flip-flop . Ada varian yang b
Dalam tutorial sebelumnya, kita belajar bagaimana menggunakan For-Loop untuk melakukan iterasi pada rentang integer. Tetapi bagaimana jika kita menginginkan kontrol loop yang lebih rinci daripada sekadar rentang bilangan bulat tetap? Kita bisa menggunakan While-Loop untuk ini. While-Loop akan terus
Pada tutorial sebelumnya kita belajar membuat infinite loop dengan menggunakan loop penyataan. Kami juga mempelajari cara keluar dari loop dengan menggunakan exit penyataan. Tetapi bagaimana jika kita ingin loop berulang beberapa kali? For-Loop adalah cara termudah untuk melakukannya. For-Loop memu
Singkatnya, VHDL adalah bahasa komputer yang digunakan untuk merancang sirkuit digital. Saya menggunakan istilah bahasa komputer untuk membedakan VHDL dari bahasa pemrograman lain yang lebih umum seperti Java atau C++. Tetapi apakah VHDL adalah bahasa pemrograman? Ya itu. Ini adalah bahasa pemro