0

VHDL



> VHDL awalnya dikembangkan atas perintah dari AS Departemen Pertahanan dalam rangka untuk mendokumentasikan perilaku ASICS bahwa perusahaan pemasok yang termasuk dalam peralatan. Artinya, VHDL dikembangkan sebagai alternatif untuk besar, manual kompleks yang dikenakan detail implementasi khusus.
Gagasan untuk dapat mensimulasikan dokumentasi ini begitu jelas menarik bahwa simulator logika dikembangkan yang dapat membaca file VHDL. Langkah selanjutnya adalah pengembangansintesis logika alat yang membaca VHDL, dan output definisi pelaksanaan fisik sirkuit. alat sintesis modern dapat mengekstrak RAM , counter , dan blok aritmatika keluar dari kode, dan menerapkannya sesuai dengan apa yang user menentukan. Dengan demikian, kode VHDL yang sama dapat disintesis berbeda untuk daerah terendah, terendah daya konsumsi, clock speed tertinggi, atau persyaratan lainnya.
VHDL banyak meminjam dari bahasa pemrograman di kedua konsep (misalnya, notasi slice untuk bagian pengindeksan sebuah array dimensi satu) dan sintaks . VHDL memiliki konstruksi untuk menangani paralelisme yang melekat dalam desain perangkat keras, tetapi konstruksi (proses) berbeda dalam sintaks dari paralel dengan konstruksi di Ada (tugas). Seperti Ada, VHDL sangat diketikdan tidak sensitif huruf . Ada banyak fitur dari VHDL yang tidak ditemukan di Ada, seperti set diperpanjang operator Boolean termasuk nand dan juga, untuk secara langsung merupakan usaha yang umum di hardware. VHDL juga memungkinkan array untuk diindeks di kedua arah (menaik atau menurun) karena kedua konvensi digunakan dalam perangkat keras, sedangkan Ada (seperti kebanyakan bahasa pemrograman) menyediakan naik pengindeksan saja. Alasan kesamaan antara kedua bahasa adalah bahwa Departemen Pertahanan yang diperlukan sebanyak mungkin sintaks harus didasarkan pada Ada, untuk menghindari re-inventing konsep yang telah diuji secara menyeluruh dalam pengembangan Ada.
Versi awal VHDL, dirancang untuk IEEE standar 1076-1987 , termasuk berbagai jenis data, termasuk numerik ( integer dan real ), logis ( bit dan boolean ), karakter dan waktu , ditambah dengan arraydari disebut bit_vector bit dan karakter disebut string .
Suatu masalah tidak diselesaikan dengan edisi ini, bagaimanapun, adalah "multi-nilai logika", dimana drive's kekuatan sinyal (tidak kuat, lemah atau) dan nilai-nilai yang tidak diketahui juga dipertimbangkan. Ini diperlukan standar IEEE 1164 , yang mendefinisikan nilai logika jenis-9: std_ulogic skalar dan vektor std_ulogic_vector versinya.
Isu kedua IEEE 1076 , pada tahun 1993, membuat sintaks lebih konsisten, memungkinkan fleksibilitas yang lebih dalam penamaan, memperluas character tipe untuk memungkinkan ISO-8859-1 karakter yang dapat dicetak, menambahkan xnor operator, dll
Perubahan kecil dalam standar (2000 dan 2002) menambahkan gagasan jenis dilindungi (mirip dengan konsep kelas di C + +) dan dihapus beberapa pembatasan dari aturan pemetaan pelabuhan.
Selain standar IEEE 1164, standar beberapa anak diperkenalkan untuk memperluas fungsi bahasa. IEEE 1076,2 standar ditambahkan penanganan lebih baik dari tipe data yang nyata dan kompleks.IEEE 1076,3 standar diperkenalkan signed dan unsigned jenis untuk memfasilitasi operasi aritmatika pada vektor. IEEE 1076,1 standar (dikenal sebagai VHDL-AMS ) yang disediakan-sinyal rangkaian desain ekstensi dan campuran analog.
Beberapa standar lain mendukung penggunaan VHDL lebih luas, terutama VITAL (VHDL Inisiatif Menuju Perpustakaan ASIC) dan microwave ekstensi desain sirkuit.
Pada bulan Juni 2006, Komite Teknis VHDL Accellera (dilimpahkan oleh IEEE untuk bekerja pada update berikutnya standar) menyetujui disebut Draft 3.0 dari VHDL-2006. Tetap menjaga kompatibilitas penuh dengan versi yang lebih tua, ini standar yang diusulkan memberikan banyak ekstensi yang membuat tulisan dan mengelola kode VHDL lebih mudah. Perubahan utama meliputi penggabungan standar anak (1164, 1.076,2, 1.076,3) ke standar 1076 utama, satu set diperpanjang operator, sintaks yang lebih fleksibel 'kasus' dan 'menghasilkan' laporan, penggabungan VHPI (interface untuk C / C + + bahasa) dan subset dari PSL ( Properti Spesifikasi Bahasa ). Perubahan ini harus meningkatkan kualitas kode VHDL disintesis, membuat testbenches lebih fleksibel, dan memungkinkan penggunaan lebih luas deskripsi VHDL untuk sistem-tingkat.
Pada bulan Februari 2008, Accellera disetujui VHDL 4.0 juga informal dikenal sebagai VHDL 2008, yang ditujukan lebih dari 90 masalah ditemukan selama masa uji coba untuk versi 3.0 dan ditingkatkan termasuk jenis generik. Pada tahun 2008, Accellera dirilis VHDL 4.0 untuk IEEE untuk pemungutan suara atas penyertaan dalam IEEE 1076-2008. Standar VHDL IEEE 1076-2008 telah disetujui oleh RevCom pada bulan September 2008.

Desain
VHDL biasanya digunakan untuk menulis model teks yang menggambarkan rangkaian logika. Seperti model diproses oleh program sintesis, hanya jika itu adalah bagian dari desain logika. Sebuah program simulasi digunakan untuk menguji desain logika dengan menggunakan model simulasi untuk mewakili sirkuit logika yang antarmuka ke desain. Koleksi model simulasi ini biasanya disebuttestbench.
VHDL memiliki input file dan kemampuan keluaran, dan dapat digunakan sebagai bahasa untuk keperluan umum untuk pemrosesan teks, tetapi file yang lebih sering digunakan oleh testbench simulasi untuk data stimulus atau verifikasi. Ada beberapa compiler VHDL yang membangun binari-binari executable. Dalam hal ini, ada kemungkinan untuk menggunakan VHDL untuk menulistestbench untuk memverifikasi fungsi dari desain menggunakan file pada komputer host untuk menentukan rangsangan, untuk berinteraksi dengan pengguna, dan membandingkan hasilnya dengan yang diharapkan. Namun, desainer yang paling meninggalkan pekerjaan ini ke simulator.
Hal ini relatif mudah bagi developer berpengalaman untuk menghasilkan kode yang mensimulasikan berhasil tetapi itu tidak dapat disintesis menjadi perangkat yang nyata, atau terlalu besar untuk praktis. Satu perangkap tertentu adalah produksi disengaja transparan kait daripada D-jenis flip-flop sebagai elemen penyimpanan.
VHDL bukan bahasa case sensitive. Satu dapat desain hardware di IDE VHDL (untuk implementasi FPGA seperti Xilinx ISE, Altera Quartus, Synopsys Synplify atau Mentor Graphics Designer HDL) untuk menghasilkan RTL skematik dari rangkaian yang diinginkan. Setelah itu, skema yang dihasilkan dapat diverifikasi menggunakan software simulasi yang menunjukkan bentuk gelombang input dan output dari sirkuit setelah menghasilkan testbench sesuai. Untuk menghasilkan testbench sesuai untuk sirkuit tertentu atau kode VHDL, masukan harus didefinisikan dengan benar. Misalnya, untuk input jam, proses loop atau pernyataan iterasi diperlukan.
Keuntungan utama dari VHDL bila digunakan untuk desain sistem adalah bahwa hal itu memungkinkan perilaku sistem perlu dijelaskan (model) dan diverifikasi (simulasi) sebelum alat sintesis menterjemahkan desain ke dalam perangkat keras yang nyata (gerbang dan kabel).
Manfaat lain adalah bahwa VHDL memungkinkan deskripsi sistem konkuren (banyak bagian, masing-masing dengan perilakunya sendiri-sub, bekerja bersama-sama pada waktu yang sama). VHDL adalah bahasa dataflow , tidak seperti bahasa komputasi prosedural seperti BASIC, C, dan kode assembly, yang semuanya berjalan secara berurutan, satu instruksi pada satu waktu.
Titik akhir adalah bahwa ketika model VHDL diterjemahkan ke dalam "gerbang dan kawat" yang dipetakan ke perangkat programmable logic seperti CPLD atau FPGA , maka itu adalah sebenarnya perangkat keras yang sedang diatur, daripada kode VHDL yang "dieksekusi "seolah-olah pada beberapa bentuk chip prosesor.


Contoh Desain
Dalam VHDL, desain terdiri minimal dari suatu entitas yang menggambarkan antarmuka dan arsitektur yang berisi implementasi aktual. Selain itu, desain paling impor modul perpustakaan. Beberapa desain juga mengandung beberapa arsitektur dan konfigurasi.
Sederhana DAN gerbang dalam VHDL akan terlihat seperti ini:
-- (this is a VHDL comment)

-- import std_logic from the IEEE library
library IEEE;
use IEEE.std_logic_1164.all;

-- this is the entity
entity ANDGATE is
port (
IN1 : in std_logic;
IN2 : in std_logic;
OUT1: out std_logic);
end ANDGATE;

architecture RTL of ANDGATE is
begin

OUT1 <= IN1 and IN2;

end RTL;
Sementara contoh di atas mungkin tampak sangat verbose untuk pemula HDL, banyak bagian baik opsional atau perlu ditulis hanya sekali. Umumnya fungsi sederhana seperti ini merupakan bagian dari modul perilaku yang lebih besar, daripada memiliki modul terpisah untuk sesuatu yang sangat sederhana. Selain itu, penggunaan unsur-unsur seperti jenis std_logic mungkin pada awalnya tampaknya menjadi sebuah berlebihan. Satu dapat dengan mudah menggunakan built-in tipe bit dan menghindari impor perpustakaan di awal. Namun, dengan menggunakan ini bernilai logika 9 ( U, X, 0, 1, Z, W, H, L, - ) bukan bit sederhana (0,1) menawarkan simulasi yang sangat kuat dan alat debugging ke desainer yang saat ini tidak tidak ada dalam HDL lain.
Dalam contoh berikut, Anda akan melihat bahwa kode VHDL dapat ditulis dalam bentuk yang sangat kompak. Namun, desainer yang berpengalaman biasanya menghindari bentuk-bentuk kompak dan menggunakan gaya yang lebih verbose coding untuk memudahkan pembacaan dan rawatan. Keuntungan lain dengan gaya pengkodean verbose adalah jumlah kecil sumber daya yang digunakan ketika pemrograman untuk Programmable Logic Device seperti CPLD.


Synthesizeable konstruksi dan VHDL template
VHDL sering digunakan untuk dua tujuan yang berbeda: simulasi desain elektronik dan sintesis dari desain tersebut. Sintesis adalah proses di mana sebuah VHDL disusun dan dipetakan ke dalam sebuah teknologi penerapan seperti FPGA atau ASIC. Banyak FPGA vendor telah gratis (atau murah) alat untuk mensintesis VHDL untuk digunakan dengan chip mereka, di mana alat ASIC seringkali sangat mahal.
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 perangkat keras yang umum untuk peralatan sintesis banyak. 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.
Beberapa contoh kode yang peta ke multiplexer hardware tool berikut:

MUX template
The multiplexer , atau 'MUX' seperti yang biasa disebut, adalah sederhana membangun sangat umum dalam desain hardware. Contoh di bawah menunjukkan dua sederhana untuk satu MUX, dengan masukan A dan B, selektor S dan output X:

-- template 1:
X <= A when S = '1' else B;

-- template 2:
with S select
X <= A when '1',
B when others;

-- template 3:
process(A,B,S)
begin
case S is
when '1' => X <= A;
when others => X <= B;
end case;
end process;

-- template 4:
process(A,B,S)
begin
if S = '1' then
X <= A;
else
X <= B;
end if;
end process;

-- template 5 - 4:1 MUX, where S is a 2-bit std_logic_vector :
process(A,B,C,D,S)
begin
case S is
when "00" => X <= A;
when "01" => X <= B;
when "10" => X <= C;
when others => X <= D;
end case;
end process;
Tiga terakhir template menggunakan apa yang VHDL panggilan 'berurutan' kode. Bagian sekuensial selalu ditempatkan di dalam proses dan memiliki sintaks yang sedikit berbeda yang mungkin mirip dengan bahasa pemrograman yang lebih tradisional.

Latch template
Sebuah transparan latch pada dasarnya adalah satu bit memori yang diperbarui bila memungkinkan sinyal yang dibangkitkan:
-- latch template 1:
Q <= D when Enable = '1' else Q;

-- latch template 2:
process(D,Enable)
begin
if Enable = '1' then
Q <= D;
end if;
end process;
Sebuah SR-latch menggunakan satu set dan sinyal reset gantinya:
-- SR-latch template 1:
Q <= '1' when S = '1' else
'0' when R = '1' else Q;

-- SR-latch template 2:
process(S,R)
begin
if S = '1' then
Q <= '1';
elsif R = '1' then
Q <= '0';
end if;
end process;
2 template memiliki implisit "lain Q <= Q;" yang mungkin secara eksplisit ditambahkan jika diinginkan.
-- This one is a RS-latch (i.e. reset dominates)
process(S,R)
begin
if R = '1' then
Q <= '0';
elsif S = '1' then
Q <= '1';
end if;
end process;

D-type flip-flop
D-type flip-flop sampel sinyal masuk atau jatuh di tepi terbit jam. The DFF adalah dasar untuk semua logika sinkron.
-- simplest DFF template (not recommended)
Q <= D when rising_edge(CLK);

-- recommended DFF template:
process(CLK)
begin
-- use falling_edge(CLK) to sample at the falling edge instead
if rising_edge(CLK) then
Q <= D;
end if;
end process;

-- alternative DFF template:
process
begin
wait until CLK='1';
Q <= D;
end process;

-- alternative template expands the ''rising_edge'' function above:
process(CLK)
begin
if CLK = '1' and CLK'event then--use rising edge, use "if CLK = '0' and CLK'event" instead for falling edge
Q <= D;
end if;
end process;
Some flip-flops also have asynchronous or synchronous Set and Reset signals:
-- "Textbook" template for asynchronous reset.
-- This style is prone to error if some signals assigned under the rising_edge
-- condition are omitted (either intentionally or mistakenly) under the reset
-- condition. Such signals will synthesize as flip-flops having feedback MUXes
-- or clock enables (see below), which was probably not intended.
-- This is very similar to the 'transparent latch' mistake mentioned earlier.
process(CLK, RESET)
begin
if RESET = '1' then -- or '0' if RESET is active low...
Q <= '0';
elsif rising_edge(CLK) then
Q <= D;
end if;
end process;

-- A safer description of reset uses overwrite rather than
-- if-else semantics and avoids the gotcha described above:
process(CLK, RESET)
begin
if rising_edge(CLK) then
Q <= D;
end if;
if RESET = '1' then -- or '0' if RESET is active low...
Q <= '0';
end if;
end process;


-- template for synchronous reset:
process(CLK)
begin
if rising_edge(CLK) then
Q <= D;
if RESET = '1' then -- or '0' if RESET is active low...
Q <= '0';
end if;
end if;
end process;
Another common feature for flip-flops is an Enable signal:
-- template for flip-flop with clock enable:
process(CLK)
begin
if rising_edge(CLK) then
if Enable = '1' then -- or '0' if Enable is active low...
Q <= D;
end if;
end if;
end process;
Flip-flops can also be described with a combination of features:
-- template with clock enable and asynchronous reset combined:
process(CLK, RESET)
begin
if rising_edge(CLK) then
if Enable = '1' then -- or '0' if Enable is active low...
Q <= D;
end if;
end if;
if RESET = '1' then -- or '0' if RESET is active low...
Q <= '0';
end if;
end process;


Contoh: counter
Contoh berikut adalah up-counter dengan reset asynchronous, beban paralel dan lebar dikonfigurasi. Ini menunjukkan penggunaan unsigned 'tipe' dan generik VHDL. Para generik sangat dekat dengan argumen atau template dalam bahasa pemrograman tradisional lainnya seperti C atau C + +.
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all; -- for the unsigned type

entity counter_example is
generic ( WIDTH : integer := 32);
port (
CLK, RESET, LOAD : in std_logic;
DATA : in unsigned(WIDTH-1 downto 0);
Q : out unsigned(WIDTH-1 downto 0));
end entity counter_example;

architecture counter_example_a of counter_example is
signal cnt : unsigned(WIDTH-1 downto 0);
begin
process(RESET, CLK) is
begin
if RESET = '1' then
cnt <= (others => '0');
elsif rising_edge(CLK) then
if LOAD = '1' then
cnt <= DATA;
else
cnt <= cnt + 1;
end if;
end if;
end process;

Q <= cnt;

end architecture counter_example_a;
Lebih counter kompleks dapat menambahkan jika / kemudian / lain laporan dalam elsif (CLK) rising_edge 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.

Simulasi hanya konstruksi
Sebuah subset besar VHDL tidak dapat diterjemahkan ke dalam perangkat keras. subset ini dikenal sebagai non-disintesis atau subset-satunya simulasi VHDL dan hanya dapat digunakan untuk prototipe, simulasi dan debugging. Sebagai contoh, kode berikut akan menghasilkan sebuah jam dengan frekuensi 50 MHz. Hal ini dapat, misalnya, akan digunakan untuk menggerakkan input jam dalam desain selama simulasi. Hal ini, bagaimanapun, simulasi hanya membangun dan tidak dapat diimplementasikan dalam perangkat keras. Dalam hardware sebenarnya, jam dihasilkan secara eksternal, bisa dikecilkan internal oleh logika pengguna atau perangkat keras khusus.
process
begin
CLK <= '1'; wait for 10 ns;
CLK <= '0'; wait for 10 ns;
end process;
Simulasi hanya konstruksi dapat digunakan untuk membangun bentuk gelombang kompleks dalam waktu yang sangat singkat. gelombang tersebut dapat digunakan, misalnya, sebagai vektor uji untuk desain yang kompleks atau sebagai prototipe dari beberapa logika disintesis yang akan diimplementasikan di masa depan.
process
begin
wait until START = '1'; -- wait until START is high

for i in 1 to 10 loop -- then wait for a few clock periods...
wait until rising_edge(CLK);
end loop;

for i in 1 to 10 loop -- write numbers 1 to 10 to DATA, 1 every cycle
DATA <= to_unsigned(i, 8);
wait until rising_edge(CLK);
end loop;

-- wait until the output changes
wait on RESULT;

-- now raise ACK for clock period
ACK <= '1';
wait until rising_edge(CLK);
ACK <= '0';


-- and so on...
end process;

Masa Depan
VHDL-200X sedang dikembangkan sebagai iterasi berikutnya untuk VHDL. Hal ini akan memungkinkan VHDL pengembang untuk menulis dikombinasikan Hardware Description Language danHardware Bahasa Verifikasi kode. VHDL-200X adalah alternatif VHDL untuk SystemVerilog .

Sumber : http://en.wikipedia.org/wiki/VHDL
Free Template Blogger collection template Hot Deals SEO

0 komentar:

Posting Komentar

Pages

Sample Widget

Cari Blog Ini

Back to Top