Anda di halaman 1dari 13

VHDL : Struktur Dasar 2

11 Januari 2011 pada 4:29 pm (desain IC, elektro, vhdl) Tags: bahasa, belajar, desain ic, fpga, tutorial, vhdl

(lihat post VHDL sebelumnya) Bagian arsitektur di VHDL menentukan bagaimana rangkaian beroperasi dan bagaimana hal itu diterapkan. Entitas atau rangkaian digital dapat dimodelkan dalam berbagai cara: perilaku, struktural (interkoneksi komponen), atau kombinasinya. Deskripsi Struktural

Gambar 2: representasi Struktural dari rangkaian "bel".

Rangkaian gambar 2 juga dapat dijelaskan dengan menggunakan model struktural yang menentukan gerbang-gerbang apa yang digunakan dan bagaimana mereka saling berhubungan. Contoh berikut menggambarkan hal itu. architecture structural of BUZZER is Declarations component AND2 port (in1, in2: in std_logic; out1: out std_logic); end component; component OR2 port (in1, in2: in std_logic; out1: out std_logic); end component; component NOT1 port (in1: in std_logic; out1: out std_logic); end component;

declaration of signals used to interconnect gates signal DOOR_NOT, SBELT_NOT, B1, B2: std_logic; begin Component instantiations statements U0: NOT1 port map (DOOR, DOOR_NOT); U1: NOT1 port map (SBELT, SBELT_NOT); U2: AND2 port map (IGNITION, DOOR_NOT, B1); U3: AND2 port map (IGNITION, SBELT_NOT, B2); U4: OR2 port map (B1, B2, WARNING); end structural; Setelah header adalah bagian deklaratif yang memberikan komponen (gerbang logika) yang akan digunakan dalam deskripsi rangkaian. Dalam contoh ini, kami menggunakan gerbang DAN dua input, gerbang OR dua-input dan inverter. Gerbang/komponen ini harus didefinisikan terlebih dahulu, yaitu mereka akan memerlukan sebuah deklarasi entitas dan tubuh arsitektur (seperti yang ditunjukkan pada contoh sebelumnya). Ini dapat disimpan dalam salah satu paket yang di-acu pada header dari file (lihat Perpustakaan dan Paket di bawah). Deklarasi untuk komponen memberikan masukan (misalnya IN1, in2) dan output (misalnya OUT1). Selanjutnya, kita harus mendefinisikan jaring internal (nama sinyal). Dalam contoh kita sinyal-sinyal ini disebut DOOR_NOT, SBELT_NOT, B1, B2 (lihat Gambar 2). Perhatikan bahwa orang selalu memiliki untuk menyatakan jenis sinyal. Penugasan setelah kata kunci begin memberikan penurunan (instansiasi) komponen dan menjelaskan bagaimana mereka saling berhubungan. Sebuah pernyataan penurunan komponen menciptakan tingkat hirarki baru. Setiap baris dimulai dengan nama instance (U0 misalnya) diikuti oleh tanda titik dua dan nama komponen dan kata kunci port map. Kata kunci ini menentukan bagaimana menghubungkan komponen. Dalam contoh di atas, hal ini dilakukan melalui suatu asosiasi posisi: PINTU sesuai dengan input, IN1 gerbang NOT1 dan DOOR_NOT untuk output. Demikian pula, untuk gerbang AND2 mana dua sinyal pertama (PENGAPIAN dan DOOR_NOT) sesuai dengan input IN1 dan in2, dan sinyal B1 ke output OUT1. Cara alternatif adalah menggunakan hubungan eksplisit antar port, seperti yang ditunjukkan di bawah ini.

label: component-name port map (port1=>signal1, port2=> signal2, port3=>signaln);


U0: NOT1 port map (in1 => DOOR, out1 => DOOR_NOT); U1: NOT1 port map (in1 => SBELT, out1 => SBELT_NOT);

U2: AND2 port map (in1 => IGNITION, in2 => DOOR_NOT, out1 => B1); U3: AND2 port map (in1 => IGNITION, in2 => SBELT_NOT, B2); U4: OR2 port map (in1 => B1, in2 => B2, out1 => WARNING); Perhatikan bahwa urutan penugasan ini ditulis tidak berkaitan dengan urutan pelaksanaan karena semua adalah laporan yang bersamaan dan karena itu dijalankan secara paralel. Memang, skema yang digambarkan oleh pernyataan di bawah ini independen terhadap urutan penugasan. Pemodelan struktural suatu desain cocok untuk desain hirarkis, di mana orang bisa mendefinisikan komponen unit yang digunakan berulang-ulang. Setelah komponen ini didefinisikan mereka dapat digunakan sebagai blok, sel-sel atau macro dalam suatu entitas tingkat yang lebih tinggi. Hal ini dapat secara signifikan mengurangi kompleksitas desain besar. Pendekatan desain hirarkis selalu lebih disukai daripada desain datar. Kami akan menggambarkan penggunaan pendekatan desain hirarki untuk penambah(adder) 4-bit, ditunjukkan dalam gambar 4 di bawah. Setiap adder penuh dapat digambarkan oleh ekspresi Boolean untuk jumlah dan melaksanakan sinyal, sum = (A xor B) xor C carry = A . B + C . (A xor B)

Gambar 4: Skema adder 4-bit yang terdiri dari beberapa modul full-adder.

Dalam file VHDL, pertama kami telah membuat sebuah komponen untuk full-adder. Kami menggunakan beberapa instansiasi full-adder untuk membangun struktur adder 4-bit. Kami telah menyertakan klausul library dan use, serta deklarasi entitas nya. Adder 4-bit - Ilustrasi VHDL model hirarki sebuah full-adder library ieee; use ieee.std_logic_1164.all;

entity FULLADDER is port (a, b, c: in std_logic; sum, carry: out std_logic); end FULLADDER; architecture fulladder_behav of FULLADDER is begin sum <= (a xor b) xor c ; carry <= (a and b) or (c and (a xor b)); end fulladder_behav; adder 4-bit library ieee; use ieee.std_logic_1164.all; entity FOURBITADD is port (a, b: in std_logic_vector(3 downto 0); Cin : in std_logic; sum: out std_logic_vector (3 downto 0); Cout, V: out std_logic); end FOURBITADD; architecture fouradder_structure of FOURBITADD is signal c: std_logic_vector (4 downto 0); component FULLADDER port(a, b, c: in std_logic; sum, carry: out std_logic); end component; begin FA0: FULLADDER port map (a(0), b(0), Cin, sum(0), c(1)); FA1: FULLADDER port map (a(1), b(1), C(1), sum(1), c(2)); FA2: FULLADDER port map (a(2), b(2), C(2), sum(2), c(3)); FA3: FULLADDER port map (a(3), b(3), C(3), sum(3), c(4)); V <= c(3) xor c(4); Cout <= c(4);

end fouradder_structure; Perhatikan bahwa nama-nama input yang sama a dan b untuk port full-adder dan adder 4-bit yang digunakan. Ini tidak menimbulkan masalah dalam VHDL karena mereka mengacu pada tingkat yang berbeda. Namun, untuk dibaca, mungkin lebih mudah jika menggunakan nama yang berbeda. Kami perlu untuk mendefinisikan sinyal internal C (4:0) untuk mendefinisikan jalur yang menghubungkan carryout yang satu ke carry-input full-adder selanjutnya. Untuk input pertama kita menggunakan input sinyal Cin. Untuk yang terakhir membawa kita definisikan c (4) sebagai sinyal internal sejak membawa terakhir diperlukan sebagai masukan ke pintu gerbang xor. Kami tidak bisa menggunakan sinyal output Cout karena VHDL tidak mengijinkan penggunaan output sebagai sinyal internal! Untuk alasan ini kita harus mendefinisikan internal carry c (4) dan menetapkan c (4) untuk membawa sinyal output Cout. Mengenai Pustaka (library) & Paket (package) : Kata kunci library dan use Pustaka dapat dianggap sebagai tempat dimana compiler menyimpan informasi tentang sebuah proyek desain. Paket VHDL adalah file atau modul yang berisi deklarasi objek yang biasa digunakan, tipe data, deklarasi komponen, sinyal, prosedur dan fungsi yang dapat dibagi di antara model VHDL yang berbeda. Kami sebutkan sebelumnya bahwa std_logic didefinisikan dalam paket ieee.std_logic_1164 di pustaka IEEE. Untuk menggunakan std_logic pengguna harus menentukan pustaka dan paket nya. Hal ini dilakukan pada awal file VHDL dengan menggunakan kata kunci library dan use seperti contoh berikut: library ieee; use ieee.std_logic_1164.all; Ekstensi .all menunjukkan penggunaan semua paket ieee.std_logic_1164. Pustaka IEEE :

paket std_logic_1164 : mendefinisikan tipe data standar paket std_logic_arith: menyediakan fungsi aritmatika, konversi dan fungsi perbandingan untuk, ditandatangani unsigned, integer, std_logic std_ulogic, dan jenis std_logic_vector std_logic_unsigned paket std_logic_misc: mendefinisikan jenis tambahan, subtipe, konstanta dan fungsi untuk paket std_logic_1164

Untuk menggunakannya, kita harus memasukkan pustaka dan menulis baris: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; 1 Komentar

VHDL : Struktur Dasar 1


11 Januari 2011 pada 1:12 pm (desain IC, elektro, vhdl) Tags: bahasa, belajar, desain ic, fpga, tutorial, vhdl

Sebuah sistem digital di VHDL terdiri dari sebuah entitas desain yang dapat berisi banyak entitas lainnya yang kemudian dianggap sebagai komponen (gabungan) dari entitas tingkat atas (top-level). Setiap entitas dimodelkan oleh deklarasi entitas dan tubuh arsitektur. Anda dapat membayangkan bahwa deklarasi entitas sebagai antarmuka (interface) ke dunia luar yang mendefinisikan sinyal input dan output, sedangkan tubuh arsitektur berisi deskripsi entitas dan terdiri dari : entitas yang saling berhubungan, proses dan komponen, semua operasi yang bersamaan (concurrent), seperti skematis yang ditunjukkan pada Gambar 3 di bawah. Dalam desain yang umum, akan ada banyak entitas semacam itu dihubungkan bersama untuk melakukan fungsi yang diinginkan.

Gambar 3: Sebuah entitas VHDL terdiri dari interface (entitas deklarasi) dan tubuh (deskripsi arsitektur)

VHDL menggunakan kata kunci tertentu (reserved keywords) yang tidak boleh/dapat digunakan sebagai nama sinyal atau pengidentifikasi (identifier). Kata kunci dan pengidentifikasi yang didefenisikan pengguna/programmerTIDAK case sensitive (huruf-besar atau huruf-kecil diperlakukan sama). Baris komentar dimulai dengan dua tanda hubung berdekatan (-) dan akan diabaikan oleh compiler. VHDL juga mengabaikan jeda baris dan ruang ekstra (spasi, tab). VHDL adalah bahasa yang sangat menekankan jenis (type) data (strongly typed), yang menyiratkan bahwa seseorang harus selalu menyatakan jenis (type) setiap objek yang dapat memiliki nilai, seperti sinyal, konstanta dan variabel.

A. Deklarasi Entitas Deklarasi entitas mendefinisikan NAMA entitas dan daftar port input dan output. Bentuk umumnya adalah sebagai berikut: entity NAME_OF_ENTITY is [ generic generic_declarations);] port (signal_names: mode type;

signal_names: mode type;


:

signal_names: mode type


); end [NAME_OF_ENTITY] ; Entitas selalu dimulai dengan kata kunci entity, diikuti oleh namanya dan kata kunci is. Berikutnya adalah deklarasi port menggunakan kata kunci port. Deklarasi entitas selalu berakhir dengan kata kunci end, tanda [] (opsional), dan diikuti dengan nama entitas. 1. NAME_OF_ENTITY adalah pengidentifikasi pilihan programmer 2. signal_names : terdiri dari daftar dipisahkan koma dari satu atau lebih pengidentifikasi pilihan programmer, yang menentukan sinyal antarmuka eksternal 3. Mode : adalah salah satu dari kata-kata reserved untuk menunjukkan arah sinyal

in menunjukkan bahwa bersifat sinyal input out menunjukkan bahwa bersifat sinyal output dari entitas ini, yang nilainya hanya dapat dibaca oleh entitas luar lain yang menggunakannya. buffer menunjukkan bahwa sinyal output dari entitas ini, yang nilainya dapat dibaca dalam arsitektur entitas inout sinyal dapat menjadi masukan atau output.

4. Jenis (type): jenis sinyal standar atau yang didefinisikan programmer. Contohnya bit, bit_vector, Boolean, character, std_logic, dan std_ulogic.

bit dapat memiliki nilai 0 dan 1 bit_vector adalah vektor nilai bit (misalnya bit_vector (0 sampai 7) std_logic , std_ulogic, std_logic_vector, std_ulogic_vector: dapat memiliki 9 nilai untuk menunjukkan nilai dan kekuatan sinyal. Std_ulogic dan std_logic lebih disukai daripada jenis bit atau bit_vector.

boolean dapat memiliki nilai TRUE dan FALSE integer dapat memiliki rentang nilai integer real dapat memiliki rentang nilai yang nyata karakter karakter apapun cetak waktu untuk menunjukkan waktu

5. Generik (generic): deklarasi generik adalah opsional dan mendefinisikan konstanta lokal yang digunakan untuk pewaktuan dan ukuran (misalnya lebar bus) entitas. Sebuah generik dapat memiliki nilai default. Sintaks untuk umum berikut, generic ( nama_konstanta: type [:= nilai]; nama_konstanta: type [:= nilai]; nama_konstanta: type [:= nilai] ); Sebagai contoh untuk Gambar 2 sebelumnya (di halaman VHDL Level Abstraksi), deklarasi entitas-nya tampak sebagai berikut. comments: contoh rangkaian buzzer di gbr. 2 entity BUZZER is port ( DOOR, IGNITION, SBELT: in std_logic; WARNING: out std_logic); end BUZZER; Entitas disebut BUZZER dan memiliki tiga port input , DOOR, IGNITION dan SBELT. Dan satu port output, WARNING. Perhatikan penggunaan dan penempatan titik koma!. BUZZER adalah nama pengidentifikasi. Masukan dinotasikan dengan kata kunci in, dan output dengan kata kunci OUT. Karena VHDL adalah bahasa menekankan jenis(type), tiap port memiliki jenis tertentu. Dalam hal ini, kita ditentukan jenisnya std_logic. Ini adalah jenis yang biasa digunakan sinyal digital. Berbeda dengan jenis bit yang hanya dapat memiliki nilai-nilai 1 dan 0, jenis std_logic dan std_ulogic dapat memiliki sembilan nilai. Hal ini penting untuk menggambarkan sistem digital yang akurat karena mencakup nilai-nilai biner 0 dan 1, nilai tidak diketahui X, nilai tak ter-inisialisasi U,- untuk tidak peduli, Z untuk impedansi tinggi, dan beberapa simbol untuk menunjukkan kekuatan sinyal (misalnya L untuk 0 lemah, H untuk 1 lemah, W untuk lemah tak terdefinisi - lihat di bagian Enumerated Type).

Jenis std_logic didefinisikan dalam paket std_logic_1164 perpustakaan IEEE. Tipe mendefinisikan set nilai yang dapat dimiliki suatu objek. Ini memiliki keuntungan membantu dengan penciptaan model dan membantu mengurangi kesalahan. Sebagai contoh, jika seseorang mencoba untuk menetapkan nilai ilegal suatu objek, compiler akan menandai kesalahannya. Beberapa contoh lain deklarasi entitas : Multiplexer empat-ke-satu yang setiap masukan adalah kata 8-bit entity mux4_to_1 is port (I0,I1,I2,I3: in std_logic_vector(7 downto 0); SEL: in std_logic_vector (1 downto 0); OUT1: out std_logic _vector(7 downto 0) ); end mux4_to_1; Contoh deklarasi entitas dari flip-flop D dengan masukan set dan reset entity dff_sr is port (D,CLK,S,R: in std_logic; Q,Qnot: out std_logic ); end dff_sr; B. Bagian Arsitektur Tubuh arsitektur menentukan bagaimana rangkaian beroperasi dan bagaimana hal itu diterapkan. Seperti telah dibahas sebelumnya, entitas atau rangkaian dapat dispesifikasikan/dimodelkan dalam berbagai cara, seperti perilaku, struktural (interkoneksi komponen), atau kombinasinya. Tubuh arsitektur terlihat sebagai berikut, architecture architecture_name of NAME_OF_ENTITY is Declarations components declarations signal declarations constant declarations function declarations

procedure declarations type declarations : begin Statements : end architecture_name; Model Perilaku Badan arsitektur untuk contoh pada Gambar 2 (di post sebelumnya), yang pada gambaran level perilaku, diberikan di bawah ini, architecture behavioral of BUZZER is begin WARNING <= ((not DOOR) and IGNITION) or ((not SBELT) and IGNITION); end behavioral; Baris header tubuh arsitektur mendefinisikan nama arsitektur, misalnya perilaku, dan rekan dengan entitas, BUZZER. Nama arsitektur dapat tindakan hukum identifier. Bagian utama arsitektur dimulai dengan kata kunci begin dan memberikan persamaan boolean dari fungsi. Kita akan lihat nanti bahwa model perilaku dapat dijelaskan dalam beberapa cara lain. Simbol <= merupakan operator penugasan dan memberikan nilai persamaan di sebelah kanannya untuk dimasukkan ke sinyal di sebelah kirinya. Tubuh arsitektur diakhiri dengan keyword end diikuti dengan nama arsitektur. Sebuah contoh beberapa lainnya menyusul. Deskripsi perilaku dari input dua-DAN gerbang ditampilkan di bawah. entity AND2 is port (in1, in2: in std_logic; out1: out std_logic); end AND2; architecture behavioral_2 of AND2 is begin out1 <= in1 and in2; end behavioral_2;

Contoh dari gerbang XNOR dua input ditunjukkan di bawah ini. entity XNOR2 is port (A, B: in std_logic; Z: out std_logic); end XNOR2; architecture behavioral_xnor of XNOR2 is signal declaration (of internal signals X, Y) signal X, Y: std_logic; begin X <= A and B; Y <= (not A) and (not B); Z <= X or Y; End behavioral_xnor; Persamaan dalam tubuh arsitektur menggunakan operator logika. Operator Logika yang diijinkan adalah: and, or, nand, nor, xor, xnor dan not. Selain operator itu, jenis lain termasuk operator relasional, shift, aritmatika diperbolehkan juga (lihat bagian pada Operator). Untuk informasi lebih lanjut tentang pemodelan perilaku lihat bagian Pemodelan Perilaku . Ke-bersamaan-an (Concurrency) Perlu menunjukkan bahwa penugasan-penugasan (assignments) sinyal pada contoh (XNOR2) di atas adalah pernyataan yang bersamaan. Ini menyiratkan bahwa penugasan tersebut dijalankan ketika satu atau lebih sinyal di sisi kanan mengubah nilainya (misalnya ada peristiwa pada salah satu sinyal). Sebagai contoh, bila input A berubah, sinyal internal X dan Y berubah nilainya, yang pada gilirannya menyebabkan pernyataan/persamaan (dibaris) terakhir untuk memperbarui output Z. Mungkin ada propagasi penundaan terkait dengan perubahan ini. Sistem digital pada dasarnya terkendali-data sehingga suatu peristiwa yang terjadi pada satu sinyal akan mengarah ke aktivitas pada sinyal lain, dan seterusnya. Pelaksanaan penugasan ditentukan oleh aliran nilai sinyal. Akibatnya, urutan penugasan yang diberikan tidak menjadi masalah (merubah baris pernyataan untuk keluaran Z menjadi sebelum pernyataan untuk X dan Y tidak mengubah hasilnya). Hal ini berbeda dengan program konvensional, program perangkat lunak yang menjalankan laporan secara berurutan atau prosedural. Tinggalkan sebuah Komentar

VHDL : Level Abstraksi


8 Januari 2011 pada 7:12 pm (desain IC, elektro, vhdl) Tags: belajar, desain ic, fpga, vhdl

Sebuah sistem digital dapat dijelaskan pada tingkat abstraksi yang berbeda [1]. Hal ini membuat deskripsi dan rancangan sistem yang kompleks mudah diatur. Gambar 1 menunjukkan berbagai tingkat abstraksi.

Gambar 1: Level abstraksi: Behavioral, Structural and Physical

Tingkat tertinggi adalah tingkat abstraksi perilaku yang menggambarkan sebuah sistem dalam hal apa yang dilakukannya (atau bagaimana berperilaku) dan bukan dalam hal komponen dan interkoneksi antara mereka. Penjelasan perilaku menentukan hubungan antara input dan sinyal output. Ini bisa menjadi ekspresi Boolean atau deskripsi yang lebih abstrak seperti tingkat Transfer Register atau Algoritma. Sebagai contoh, mari kita perhatikan sebuah rangkaian sederhana yang memperingatkan penumpang mobil kalau pintu terbuka atau sabuk pengaman tidak digunakan setiap kali kunci mobil dimasukkan/dinyalakan ke dalam kunci pengapian. Pada tingkat perilaku, kasus ini bisa dinyatakan sebagai: Peringatan = kunci_nyala DAN (pintu_terbuka ATAU seatbelt_terlepas) atau Warning = Ignition_on AND ( Door_open OR Seatbelt_off) Tingkat struktural, di sisi lain, membahas sebuah sistem sebagai kumpulan gerbang dan komponen yang saling berhubungan untuk melakukan fungsi yang diinginkan. Gambaran struktural dapat dibandingkan dengan skematik dari gerbang logika yang saling berhubungan. Ini adalah representasi yang biasanya dekat dengan realisasi fisik sistem. Untuk contoh di atas, representasi struktural ditunjukkan pada Gambar 2 di bawah ini.

Gambar 2: representasi Struktural dari rangkaian "bel".

VHDL memungkinkan seseorang untuk menggambarkan sistem digital di tingkat struktural atau perilaku. Tingkat perilaku dapat dibagi lagi menjadi dua jenis gaya: aliran data ( dataflow) dan algoritmik. Representasi aliran data menjelaskan bagaimana data bergerak melalui sistem. Hal ini biasanya dilakukan dalam hal aliran data antara register (Register transfer level). Model aliran data memanfaatkan laporan secara bersamaan yang dijalankan secara paralel segera setelah tiba di data input. Di sisi lain, pernyataan sekuensial dijalankan sesuai urutan yang ditetapkan. VHDL memungkinkan kedua jenis penugasan sinyal baik yang secara bersamaan (concurrent) ataupun berurutan (sequential) yang akan menentukan cara masing-masing dieksekusi dalam satu waktu. Contoh kedua representasi akan diberikan nanti.

Anda mungkin juga menyukai