Dokumen tersebut membahas tentang arsitektur dalam bahasa pemodelan perangkat keras VHDL, yang mencakup implementasi entitas berupa deskripsi perilaku atau netlist struktural, serta penggunaan komponen dan konfigurasi untuk membangun rancangan keseluruhan."
2. 9.7 Arsitektur
Arsitektur berisi implementasi intitas dapat berupa deskripsi
prilaku (pada level prilaku atau, jika dapat disintesis, pada level
RTL) atau netlist struktural.
Suatu arsitektur hanya terhubung dengan sutu entitas tertentu.
Sebaliknya entitas akan sangat baik jika memiliki beberapa
arsitetur, misal implementasi algoritma yang sama atau level
abstraksi yang berbeda. Beberapa arsitektur yang berada pada
entitas yang sama harus diberi nama yang berbeda untuk
membedakan pengaksesannya.
3. Nama arsitektur ditempatkam setelah kata kunci ‘architecture’
yang dimulai dengan statemen architecture. pada contoh
dibawah digunakan nama ARS. kemudian diikuti oleh kata
kunci ‘of’ dan nama entitas yang digunakan sebagai
antarmuka, di sini ‘HALF_ADDER’. Bagian pembuka arsitektur
diakhiri dengan kata kunci ‘is’ seperti dalam statemen entitas.
Kata kunci ‘end’ , diikuti oleh nama arsitektur. Pada saat kode
VHDL disentesis, ARS dipilih sebagai nama arsitektur. Pada
kasus fungsi yang sederhana ini, tidak terdapat perbedaan
pada deskripsi perilaku.
4. entity HALF_ADDER is
port(
A, B: in bit;
SUM, CARRY: out bit);
end HALF_ADDER;
architecture ARS of HALF_ADDER is
begin
SUM <= A xor B;
CARRY <= A and B;
end ARS;
--VHDL’93: end architecture ARS;
+
SUM
CARRY
A
B
5. Struktur Arsitektur
Setiap arsitektur terdiri dri dua bagian deklarasi dan definisi
bagian deklarasi terletak antara kata kuci ‘is’ dan ‘begin’. Pada
bagian ini didefinisikan konstanta, tipe data dan sinyal sub
program.
Bagian definisi diawali dengan kata kunci ‘begin’ di dalamnya
berisi statemen-statemen yang dikerjakan secara serempak
(concurrent). Karena dikerjakan secara serempak maka urutan
statemen dalam kode VHDL tidak penting. Misalnya sinyal SUM
selalu menghasilkan (6+8), terbabas dari lokasi dua assignment
sinyal DIGIT_X dan DIGIT_Y.
6. architecture CONTOH of STRUKTUR is
subtype BILANGAN is integer range 0 to 7;
constant BASE: integer : = 10 ;
signal BIL_X, BIL_Y: BILANGAN;
signal CARRY : BILANGAN
begin
BIL_X <= 6;
SUM <= BIL_X + BIL_Y;
BIL_y <= 8;
CARRY <= 0 when SUM < BASE else 1;
end CONTOH;
7. 9.8 Mode port pada Entitas
Mode port entitas berfungsi menandakan arah aliran data. Mode port ‘in’
digunakn untuk mengklasifikasikan hanya sinyal sinyal yang dibaca
pada arsitektur tersebut. Yidak mungkin untuk mengubah nilanya. Begitu
juga, mode port ‘out’ menandakan sinyal yang nilainya dihasailkan oleh
arsitektur. Nilainya tidak dapat digunakan untuk mempengaruhi perilaku
dalam berbagai bentuk. Jika nilai output sekarang harus digunakan
sebagai masukan pada nilai sinyal berikutnya, misal dalam modul
pencacah, maka kita harus mendeklarasikan sinyal antara. Sinyal antara
ini adlah sinyal internal tidak memiliki arah aliran data.
8. Sebagai alternatif kita bisa menggunakan mode port ‘bufer’. Ini berguna
untuk menghilangkan kebutuhan deklarasi sinyal tambahan. Hanya ada
satu sumber sinyal yang diperbolehkan untuk sinyal-sinyal tersebut.
Pada pemodelan bus, terdapat banyak bagian komponen yang
mengakses satu jalur yang sama, kita bisa membuat mode port yang
sesuai kebutuhan baik mode port ‘out’ yang harus digunakan, jika setiap
unit hanya menulis pada bus data ini, atau mode port ‘inout’ yang
bertujuan membuat aliran data dua arah.
9. Mode port harus sesuai, jika port output submodel terhubung langsung
dengan port output entitas pada level hirarki yang lebih tinggi. Kalau
tidak sama maka kita harus mendefinisikan sinyal antara yang
memetakan.
Mode port dalam VHDL:
In: sinyal masuk hanya bisa dibaca
Out: Sinyal keluar, hanya bisa ditulisi
Buffer: Sinyal dapat dibaca dan hanya memiliki 1 driver
Inout: Sinyal dua arah dapat ditulis maupun dibaca
10. 9.9 Deklarasi Komponen
Pada bagian ini akan dibahas fungsi komponen dalam arsitektur, pada
contoh berikut entitas Full_adder dapat diturunkan langsung dari
diagram blok. Diperlukan input A dan B, seperti halnya masukan
CARRY_IN, bersama dengan sinyal SUM dan CARRY yang berperan
sebagai keluaran.
Full_adder ini terdiri dari beberapa submodul yang harus didefinisikan
terlebih dahulu. dalam deklarasi komponen semua tipe modul yang akan
digunakan harus dideklarasikan. deklasi ini harus dilakukan sebelum kata
kunci ‘begin’
11. Deklarasi komponen dapat dibandingkan dengan definisi soket, yang
dapat digunakan sekali atau beberapa kali dan disispkan kemudian pada
entitas yang sesuai
Dalam contoh dibawah ini, hanya dua soket yang berbeda, dengan nama
soket HALF_ADDER dan OR_GATE. Nama lain dapat digunakan , tetapi
lebih baik menggunakan nama entitas yang akan digunakan kemudian,
untuk memudahkan membaca.
12. Berikut ini Contoh penerapan komponen arsitektur:
entity FULL_ADDER is
port (A, B, : in bit;
SUM, CARRY: out bit);
end FULL_ADDER
architecture STRUCT of FULL_ADDER is
singal W_SUM, W_CARRY1, W_CARRY2 : bit;
component HALF_ADDER
port (A, B, : in bit;
SUM, CARRY: out bit);
end component;
component OR_GATE
port (A, B, : in bit;
RES : out bit;
end component;
begin
---
13. Perwujudan komponen (Instantiasi)
Komponen yang telah dideklarasikan dapat digunakan sesuai dengan
keperluan. Cara untuk menggunakan adalah dalam bentuk instantiasi
komponen, di mana soket aslinya dibuat. Hal ini, dapat dibandingkan
dengan penempatan soket dalam PCB (printed circuit board). Pasangan
entitas/arsitektur yang menyediakan fungsionalitas komponen disisipkan
kemudian ke dalam soket pada saat konfigurasi rancangan VHDL dibuat.
Instantiasi komponen diberi nama yang unik bersama dengan nama
komponennya. Instantiasi komponen dilakukan pada bagian definisi
arsitektur (setelah kata kunsi ‘begin’). Pilihan komponen terbatas pada
nama yang telah dideklarasikan, baik pada bagian deklerasi arsitektur
atau dalam paket.
14. Pada saat port komponen atau jalur soket dihubungkan dengan bagian
rangkaian yang lain, maka diperlukan statemen pemetaan port (port
map). Dalam pemetaan port ditulis nama-nama sinyal arsitektur yang
digunakan. Aturan dasarnya berlaku asosisasi posisi, yaitu posisi
menentukan urutan pemetaan. Misal sinyal pertama pada pemetaan port
terhubung dengan port pertama pada deklarasi komponen, dan
seterusnya.
15. carchitecture STRUCTUR of FULL_ADDER is
component HALF_ADDER
porrt (A, B : in bit);
end component ;
component OR_GATE
port ( A, B : in bit;
RES : out bit );
end component;
signal W_SUM, W_CARRY1, W_CARRY2: bit;
begin
MODULE1: HALF_ADDER
port map (A, B, W_SUM, W_CARRY1);
MODULE2: HALF_ADDER
port map (W_SUM, CARRY_IN,
SUM, W_CARRY2);
end STRUCT;
Berikut contoh perwujudan komponen.
16. Perwujudan Komponen: Asosiasi Penamaan Sinyal
Selain menggunakan asosiasi posisi seperti yang telah dijelaskan
sebelumnya kita mungkin juga memetakan port berdasar asosiasi nama.
Pada asosiasi penamaan urutan sinyal tidak kaku, tidak harus tetap.
Nama port dari deklarasi komponen atau disebut ‘formal’, diasosiasikan
dengan menggunakan tanda ‘=>’ dengan sinyal entiras (‘actual’).
Dalam contoh berikut , port keluaran SUM dideklarasikan pada urutan
ketiga dalam deklarasi komponen. Dalam statemen port map, port ini
dihubungkan dengan sinyal W_SUM pada tempat kedua.
17. Berikut ini contoh pemetaan port berdasarkan penamaan.
architentity FULL_ADDER is
port (A, B, CARRY_IN: in bit;
SUM, CARRY: out bit);
end FULL_ADDERecture STRUCT of FULL_ADDER is
component HALF_ADDER
port (A, B: in bit;
SUM, CARRY: out bit);
end component;
…
signal W_SUM, W_CARRY1, W_CARRY2: bit;
begin
MODULE1: HALF_ADDER
port map (A => A,
SUM => W_SUM,
B => B,
CARRY => W_CARRY1);
…
end STRUCT;
18. 9.10 Konfigurasi
Konfigurasi VHDL bertugas untuk menghubungkan komponen dengan
pasangan entitas/arsitektur untuk membangun rancangan keseluruhan.
Gambaran singkatnya: deklarasi komponen menyediakan jenis soket
tertentu yang dapat ditempatkan dalam rangkaian sesuai keperluan
dengan instantiasi komponen. Penyisipan perangkat nyata ke dalam
instantiasi soket dilakukan oleh konfigurasi.
Dalam VHDL’93 dimungkinkan untuk mengabaikan deklarasi komponen
dan langsung instantiasi entitas. berikut contoh deklarasi komponen.
entity HAFL_ADDER is
port (A, B, : in bit;
SUM, CARRY: out bit);
end HALF_ADDER;
…
component HALF_ADDER
port (A, B, : in bit;
SUM, CARRY: out bit);
end HALF_ADDER;
singal W_SUM, W_CARRY1, W_CARRY2 : bit;
…
MODULE1 : HALF_ADDER
port map (A, B, W_SUM, W_CARRY1);
19. Konfigurasi: Tugas dan Aplikasi
Keterhubungan antara entitas dan arsitektur yang digunakan pada
simulasi, pada awalnya dibangun dalam konfigurasi. Konfigurasi
adalah object VHDL yang disimulasikan atau disintesis.
Nama komponen harus sesuai dengan nama entitasnya. Nama
port, mode dan tipe data harus serupa-urutan port dalam deklarasi
komponen dibaikan.
Contoh berikut menunjukkan konfigurasi dasar untuk arsitektur
struktural. Terdapat simulator yang mengharuskan adanya
definisi konfigurasi yang eksplisit untuk jenis entitas level-atas
ini. Konfigurasi mengacu pada entitas tertentu, pada contoh ini
FULL_ADDER. Arsitektur STRUCT dipilih dengan statemen ‘for’
yang pertama. Ketika tidak ada perintah konfigurasi tambahan
diberikan digunakan aturan asal untuk semua komponen.
20. entity FULL_ADDER is
…
end FULL_ADDER;
architecture STRUCT of FULL_ADDER is
…
end STRUCT;
configuration CFG_FULL_ADDER of FULL_ADDER is
for STRUCT -- select architecture STRUCT
-- use default configuration rules
end for;
end configuration CFG_FULL_ADDER;
21. Konfigurasi: Contoh
Berikut ini contoh rinci kode VHDL untuk memahami konfigurasi
yang lebih rinci:
Pada bagian akhir, Full_adder akan disimulasikan lagi. Struktur
Full_adder ini sama dengan contoh sebelumnya, yaitu
menggunakan dua buah half-adder. Setiap half _adder yang
dideklarasi kan memiliki dua sinyal tipe data ‘bit’ sebagai input
dan output, berturut-turut. Port komponen dihuubungkan dengan
sinyal arsitektur berdasarkan asosiasi posisi, yaitu sinyal pertama
dihubungkan dengan port pertama.
Di sini digunakan dua entitas A dan B yang juga memiliki nama
arsitektur yang berbeda RTL dan GATE. Kedua entitas tersebut
sesuai dengan port pada deklarasi komponen.
22. entity A is
port (A, B : in bit;
SUM, CARRY: out bit);
end A;
architecture RTL of A is
…
entity B is
port (U, V : in bit;
X, Y : out bit;
…
entity FULL_ADDER is
port (A, B, CARRY_IN: in bit;
SUM, CARRY : out bit);
end FULL_ADDER;
architecture STRUCT of FULL_ADDER is
component HALF_ADDER
port (A, B: in bit;
SUM, CARRY: out bit);
…
signal W_SUM, W_CARRY1, W_CARRY2: bit;
begin
MODULE1: HALF_ADDER
port map (A, B, W_SUM, W_CARRY1);
MODULE2: HALF_ADDER
port map (W_SUM, CARRY_IN, SUM, W_CARRY2);
…
end STRUCT;
23. Konfigurasi: Contoh 2
Entitas dan arsitekture untuk komponen yang ada di bawahnya
diplih dalam liupan ‘for’ pada statemen for Nama pertama setelah
kata kunci ‘for’ adalah nama instantiasi komponen, diikuti oleh ’:’
(titik dua) dan nama komponennya. Kata kunci ‘all’ dapat
digunakan juga jika semua instantiasi komponen akan disebutkan.
Dalam liupan ‘for’, statement yang digunakan memilih entitas
dengan menentukan jalur absolut ke objek. Tanpa perubahan
eksplisit, semua objek VHDL dikompilasi ke dalam librari kerja.
Arsitekture untuk entitas yang dipilih ditutup dengan sepasang
‘(‘dan’)’.
Ketika nama port entitas B tidak sama dengan nama port dari
deklarasi komponen, maka diperlukan statemen port map.
Dimungkinkan juga untuk memetakan nama dangan asosiasi
posisi maupun asosiasi nama. Asosiasi nama lebih disarankan
untuk memudahkan pembacaan. Dalam kasus ini, parameter
formal adalah nama port entitas, sementara nama port komponen
digunakan sebagai parameter aktual.
24. Memungkinkan juga menyebutkan semua komponen yang belum
dikonfigurasikan dengan kata konci ‘others’. Klausa port map
tidak diperlukan sebagai nama port entitas yang sama dengan
nama komponen. Semua komponen lain yang mungkin ada
diperlukan mengacu pada aturan konfigurasi dasar.
Untuk menyederhanakan definisi hirarki dari rancangan yang luas
biasanya konfigurasi didefinisikan untuk submodul dan mengacu
konfigurasi dari level atas. Berikut contoh konfigurasi:
configuration CFG_FULL_ADDER of FULL_ADDER is
for STRUCT
for MODULE2: HALF_ADDER
use entity work. B (GATE);
port map (U => A,
V => B,
X => SUM,
Y => CARRY);
end for;
for others : HALF_ADDER
use entity work.A(RTL);
end for;
end for;
end CFG_FULL_ADDER;
25. Proses
Ide dasar proses adalah berawal dari perilaku sistem dalam VHDL
yang mengeksekusi seluruh statemen secara serempak
(concurrent). Pada tahap ini diperlukan suatu cara untuk
mengeksekusi instruksi secara berurutan, sekuensial.
Proses adalah satu statemen untuk mendefinisikan instruksi-
instruksi yang dikerjakan secara berurutan. Prosesnya sendiri
dikerjakan serempak dengan yang lain. Eksekusi proses dipicu
oleh kejadian tertentu.
Statemen proses mulai dengan label nama proses (boleh ada atau
tidak) dan simbul ‘:’, diikuti oleh kata kunci ‘process’. Daftar
parameter ditulis di antara sepasang kurung antara ‘(‘dan’)’. Mirip
dengan statemen arsitektur , bagian deklarasi berada antara
kode pembuka dan kata kunci ‘begin’. Statemen sekuensial
berada antara ‘begin’ dan ‘end process’. Kata kunci ‘process’
harus diikutkan. Jika label dipilih untuk proses, maka harus
diikutkan pada akhir statemen.
26. entity AND_OR_XOR is
port (A, B : in bit;
Z_OR, Z_AND, Z_XOR: out bit);
end AND_OR_XOR;
architecture ARS of AND _OR_XOR is
begin
A_O_X: process (A, B)
begin
Z_OR <= A or B;
Z_AND <= A and B;
Z_XOR <= A xor B;
end process A_O_X;
end ARS;
Statemen proses adalah statemen yang dikerjakan serempak
dengan statemen lain, sementara instruksi berada dalam setiap
proses dieksekusi secara sekuensial, yaitu satu per satu. Semua
proses dalam rancangan VHDL berjalan secara paralel, tidak
masalah di mana entitas atau level hirarki berada. Satu sama lain
berkomunikasi melalui sinyal. Sinyal tersebut perlu di-port-kan ke
entitas jika proses dari arsitektur lain tergatung dari yang lainnya.
27. 9. 11 Paket (Package)
Paket adalah kumpulan definisi tipe data, subprogram, konstanta
dan lain-lain. paket berguna khususnya dalam situasi kerja tim
dimana setiap orang harus bekerja dengan tipe data yang sama,