Sejarah Singkat FPGA VHDL

VHDL awalnya dikembangkan atas perintah dari AS Departemen Pertahanan dalam rangka untuk mendokumentasikan perilaku ASICS bahwa perusahaan pemasok yang termasuk dalam peralatan. That is to say, VHDL was developed as an alternative to huge, complex manuals which were subject to implementation-specific details. Artinya, VHDL dikembangkan sebagai alternatif untuk besar, manual kompleks yang dikenakan detail implementasi khusus.

Versi pertamanya adalah VHDL 87 yang kemudian diperbarui lagi dan disebut VHDL 93. VHDL merupakan bahasa pendeskripsian hardware pertama yang distandardisasi oleh Institute of Electrical and electronics Engeneers, melaui standard IEEE 1076. Kemudian sebuah standard tambahan, IEEE 1164 untuk mengenalkan nilai system logic. Manfaat utama dari VHDL ketika digunakan untuk mendesain sebuah sistem adalah kemampuannya untuk memodelkan sistem tersebut serta mensimulasikannya sebelum
synthesis tools mentranslasikannya ke hardware.

Struktur dasar dari kode VHDL ditunjukkan pada gambar di bawah ini berikut :

VHDL untuk FPGA Design (Xilinx) adalah 3 hari hands-on kelas, menyiapkan insinyur untuk kesiapan proyek praktis untuk desain Xilinx FPGA. Ini menyediakan pelatihan dasar dalam bahasa VHDL, coding untuk sintesis RTL, mengeksploitasi fitur arsitektur perangkat target, menulis bangku uji dan menggunakan alat VHDL dan aliran desain VHDL. Delegasi mengambil sebuah proyek infra-struktur yang fleksibel yang mencakup satu set script, contoh desain, modul dan file kendala untuk menggunakan, mengadaptasi dan memperpanjang pada proyek-proyek mereka sendiri.

Meskipun penekanannya adalah pada praktis VHDL-mengalir-keras untuk perangkat Xilinx FPGA, modul ini juga memberikan landasan terbaik untuk mempelajari fitur yang lebih canggih dan penerapan VHDL diperlukan oleh para desainer ASIC dan FPGA.
Karena Doulos adalah perusahaan independen, delegasi dapat menggunakan pilihan mereka alat-alat desain selama lokakarya; lengkap simulasi VHDL, sintesis dan alat programmable logic desain yang didukung. Workshop ini didasarkan sekitar latihan dengan hati-hati dirancang untuk memperkuat dan menantang luasnya belajar, dan terdiri dari sekitar 50% dari waktu kelas.

Gagasan untuk dapat mensimulasikan dokumentasi ini begitu jelas menarik bahwa simulator logika dikembangkan yang dapat membaca file VHDL. Langkah selanjutnya adalah pengembangan sintesis 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 diketik dan 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 array dari 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 standard 1076.2 added better handling of real and complex data types. 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 membahas lebih dari 90 masalah ditemukan selama masa uji coba untuk versi 3.0 dan ditingkatkan termasuk jenis generik. In 2008, Accellera released VHDL 4.0 to the IEEE for balloting for inclusion in IEEE 1076-2008. The VHDL standard IEEE 1076-2008 was approved by REVCOM in September 2008. Standar VHDL IEEE 1076-2008 telah disetujui oleh RevCom pada bulan September 2008.
Adapun sala satu contoh library pada pemrograman VHDL sebagai berikut :

OR gate:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
entity orgate is
port (A,B:in std_logic;
C:out std_logic);
end orgate;
architecture b of orgate is
begin
C<=A or B; end b;


Dan Salah satu contoh program vhdl dari sebuah D flip-flop edge triggered positif dengan asynchronous Reset adalah sebagai berikut:

Funcition: Jika reset = 1 maka Q = 0
Jika CLK = 1 maka A = D



library ieee;
use ieee.std_logic_1164.all;
entity DFF_RST is
port (CLK, RESET, D : in std_logic;
Q : out std_logic); end DFF_RST;
architecture BEHAV_DFF of DFF_RST is
begin
DFF_PROCESS: process (CLK, RESET)
begin
if (RESET = ‘1’) then
Q <= ‘0’;
elsif (CLK’event and CLK = ‘1’) then
Q <= D;
end if;
end process;
end BEHAV_DFF;


DESAIN

 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 disebut testbench.
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 menulis testbench untuk memverifikasi fungsi dari desain menggunakan file pada komputer host untuk menentukan rangsangan, untuk berinteraksi dengan pengguna, dan membandingkan hasilnya dengan yang diharapkan. However, most designers leave this job to the simulator. 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


 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 and gerbang dalam VHDL akan terlihat seperti ini:

- (Ini adalah komentar VHDL)
- Impor std_logic dari perpustakaan IEEE library IEEE; menggunakan IEEE semua.. std_logic_1164;
- Ini adalah entitas entitas ANDGATE adalah
port (
IN1: di std_logic;
IN2: di std_logic;
OUT1: std_logic keluar);
ANDGATE akhir;
arsitektur RTL dari ANDGATE adalah mulai
OUT1 <= IN1 dan 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 [ rujukan? ].

Synthesizeable konstruksi dan VHDL template

 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

 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 ketika S = '1 'B lain;
- Template 2: dengan S pilih X <= A ketika '1 ',
B ketika orang lain;
- Template 3: proses (A, B, S)
mulai kasus S
ketika '= '1> X <= A;
ketika orang lain => X <= B;
kasus akhir; proses akhir;
- Template 4: proses (A, B, S)
mulai jika S = '1 'kemudian
X <= A;
lain
X <= B;
berakhir jika;
proses akhir;
- Template 5 - MUX 4:1, di mana S adalah bit std_logic_vector 2:
proses (A, B, C, D, S) mulai
kasus S
ketika "00" => x <= A;
ketika "01" => X <= B;
ketika "10" => x <= C;
ketika orang lain => X <= D;
kasus akhir; proses akhir;

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

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

-- latch template 2: - Latch template 2:
process ( D,Enable ) proses (D, Aktifkan)
begin mulai
if Enable = '1' then jika Enable = '1 'kemudian
Q <= D ; Q <= D;
end if ; berakhir jika;
end process ; proses akhir;

D-type flip-flop

 D-type flip-flop D-type flip-flop sampel sinyal masuk atau jatuh di tepi terbit jam. The DFF is the basis for all synchronous logic. The DFF adalah dasar untuk semua logika sinkron.
-- simplest DFF template (not recommended) - Sederhana DFF template (tidak disarankan)
Q <= D when rising_edge ( CLK ) ;
Q <= D saat rising_edge (CLK);

-- recommended DFF template: - Disarankan DFF template: process
( CLK ) proses (CLK) begin mulai
-- use falling_edge(CLK) to sample at the falling edge instead - Gunakan falling_edge (CLK) untuk sampel di pinggir jatuh bukan
if rising_edge ( CLK ) then jika rising_edge (CLK) kemudian
Q <= D ; Q <= D;
end if ; berakhir jika;
end process ; proses akhir;

-- alternative DFF template: - Template DFF alternatif:
process proses
begin mulai
wait until CLK = '1' ; menunggu sampai CLK = '1 ';
Q <= D ; Q <= D;
end process ; proses akhir;

-- alternative template expands the ''rising_edge'' function above: - Template alternatif memperluas rising_edge''''fungsi di atas: process
( CLK ) proses (CLK) begin mulai
if CLK = '1' and CLK 'event then
--use rising edge, use "if CLK = '0' and CLK'event"
instead for falling edge jika CLK = '1 'dan CLK' acara lalu - naik tepi digunakan, menggunakan "jika = CLK '0 'dan CLK'event"
bukan untuk jatuh tepi Q <= D ; Q <= D;
end if ; berakhir jika;
end process ; proses akhir;
a Enable = '1 'maka - atau '0' jika Aktifkan aktif rendah ...
Q <= D ; Q <= D;
end if ; berakhir jika;
end if ; berakhir jika;
if RESET = '1' then -- or '0'
if RESET is active low... jika RESET = '1 'maka - atau '0' jika RESET aktif rendah ...
Q <= '0' ; Q <= '0 ';
end if ; berakhir jika;
end process ; proses akhir;

Counter

 Counter Contoh berikut adalah up-counter dengan reset asynchronous, beban paralel dan lebar dikonfigurasi. It demonstrates the use of the 'unsigned' type and VHDL generics . 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 + +. 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.

library IEEE; menggunakan IEEE semua.. std_logic_1164; IEEE.
Menggunakan numeric_std -. Semua, untuk jenis unsigned


counter_example entitas
generik (WIDTH: integer: = 32);
port (
CLK, RESET, LOAD: di std_logic;
DATA: di unsigned (WIDTH-1 downto 0);
Q: out unsigned (WIDTH-1 downto 0));
akhir counter_example entitas;
arsitektur counter_example_a dari counter_example adalah sinyal cnt:
unsigned (WIDTH-1 downto 0);
mulai
proses (RESET, CLK) adalah
mulai
jika RESET = '1 'kemudian
cnt <= (orang lain => '0 ');
rising_edge elsif (CLK) kemudian
jika LOAD = '1 'kemudian
cnt <= DATA;
lain
cnt <= cnt + 1;
berakhir jika;
berakhir jika;
proses akhir;
Q <= cnt; a
rsitektur akhir counter_example_a;

Simulasi hanya konstruksi

 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. 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.

proses
mulai
menunggu sampai MULAI = '1 '; - menunggu sampai START tinggi
for i in 1 sampai 10 loop - kemudian menunggu untuk periode beberapa jam ... tunggu sampai rising_edge (CLK);
loop end;
for i in 1 sampai 10 loop - menulis angka 1 sampai 10 untuk DATA, 1 setiap siklus DATA <= to_unsigned (i, 8);
tunggu sampai rising_edge (CLK);
loop end;

- Tunggu sampai perubahan output menunggu HASIL;

- Sekarang meningkatkan ACK untuk periode jam ACK <= '1 ';
tunggu sampai rising_edge (CLK);
ACK <= '0 ';

- Dan seterusnya ... proses akhir;

Sumber : http://www.doulos.com/content/training/vhdl_fpga_xilinx_training.php
http://en.wikipedia.org/wiki/VHDL