![]() |
VHDL sintesis template |
Tidak semua konstruksi dalam VHDL cocok untuk sintesis. Sebagai contoh, sebagian besar konstruksi yang menangani secara eksplisit dengan waktu seperti menunggu selama 10 ns, tidak disintesis meskipun berlaku untuk simulasi. Sementara alat sintesis yang berbeda memiliki kemampuan yang berbeda, ada subset disintesis umum VHDL yang mendefinisikan bahasa apa konstruksi dan idiom peta ke dalam perangkat keras umum bagi banyak alat sintesis. 1.076,6 IEEE mendefinisikan subset dari bahasa yang dianggap sebagai subset sintesis resmi. Hal ini umumnya dianggap sebagai "praktek terbaik" untuk menulis kode yang sangat idiomatic untuk sintesis sebagai hasil dapat benar atau suboptimal untuk non-standar konstruksi.
Template MUX
The multiplexer , atau 'MUX' seperti yang biasa disebut, adalah konstruksi sederhana yang sangat umum dalam desain hardware. Contoh di bawah ini menunjukkan sederhana dua banding satu MUX, dengan input A dan B, pemilih S dan output X. Perhatikan bahwa ada banyak cara lain untuk mengekspresikan MUX sama dalam VHDL.
X <= A bila S = '1' lain B;
Template latch
Sebuah latch transparan pada dasarnya adalah satu bit memori yang diperbarui bila memungkinkan sinyal yang dibangkitkan. Sekali lagi, ada banyak cara lain ini dapat dinyatakan dalam VHDL.
Latch Template 1:
Q <= D bila Enable = '1' lain Q;
Kait Template 2:
proses (D, Aktifkan)
mulai
jika Enable = '1' maka
Q <= D;
berakhir jika;
proses akhir;
D-type flip-flop
D-type flip-flop sampel sinyal masuk pada naik (atau turun) tepi jam. Contoh ini memiliki asynchronous, ulang aktif-tinggi, dan sampel di sisi kenaikan jam.
DFF: proses (RST, CLK)
mulai
jika RST = '1' maka
Q <= '0';
elsif rising_edge (CLK) kemudian
Q <= D;
berakhir jika;
proses akhir DFF;
Cara lain yang umum untuk menulis perilaku tepi-dipicu dalam VHDL adalah dengan 'acara' atribut sinyal. Sebuah tanda kutip tunggal harus ditulis antara nama sinyal dan nama atribut.
DFF: proses (RST, CLK)
mulai
jika RST = '1' maka
Q <= '0';
'acara dan CLK =' elsif CLK 1 'maka
Q <= D;
berakhir jika;
proses akhir DFF;
Contoh berikut adalah up-counter dengan reset asynchronous, beban paralel dan lebar dikonfigurasi. Ini menunjukkan penggunaan unsigned 'tipe, tipe konversi antara' unsigned 'dan' std_logic_vector 'dan generik VHDL. Para generik sangat dekat dengan argumen atau template dalam bahasa pemrograman tradisional lainnya seperti C + +.
library IEEE;
menggunakan IEEE std_logic_1164 semua..;
menggunakan IEEE numeric_std semua, -.. untuk tipe unsigned
COUNTER entitas
generik (
LEBAR: di alam: = 32);
port (
RST: di std_logic;
CLK: di std_logic;
LOAD: di std_logic;
DATA: di std_logic_vector (LEBAR - 1 downto 0);
Q: keluar std_logic_vector (LEBAR - 1 downto 0));
mengakhiri COUNTER entitas;
arsitektur RTL COUNTER adalah
sinyal CNT: unsigned (LEBAR - 1 downto 0);
mulai
proses (RST, CLK) adalah
mulai
jika RST = '1' maka
CNT <= (orang lain => '0');
elsif rising_edge (CLK) kemudian
jika LOAD = '1' maka
CNT <= unsigned (DATA); - jenis dikonversi menjadi unsigned
lain
CNT <= CNT + 1;
berakhir jika;
berakhir jika;
proses akhir;
Q <= std_logic_vector (CNT); - jenis diubah kembali ke std_logic_vector
akhir arsitektur RTL;
Counter lebih kompleks dapat menambahkan jika / kemudian / lain laporan dalam rising_edge (CLK) elsif untuk menambahkan fungsi-fungsi lain, seperti menghitung memungkinkan, berhenti atau berguling di beberapa nilai hitung, menghasilkan sinyal output seperti sinyal jumlah terminal, dll Perawatan harus diambil dengan pemesanan dan bersarang kontrol tersebut jika digunakan bersama-sama, untuk menghasilkan prioritas yang diinginkan dan meminimalkan jumlah tingkat logika diperlukan.
Kamu juga dapat melihat artikel terkait :
Konstruksi Dan VHDL Disintesis Template
4/
5
Oleh
Unknown