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/programmer TIDAK 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.