Professional Documents
Culture Documents
P FTIK-UHT
VHDL-Sederhana Referensi
I. PRIMARY DESIGN UNIT MODEL STRUCTURE
Catatan: buffer hanya sebagai suatu output port saja, hanya dapat digerakkan dari
dalam modul, sedang inout benar-benar dua arah dengan penggerak (driver) dari
dalam dan luar modul
Contoh
1
entity counter is
port (Incr, Load, Clock: in bit;
Carry: out bit;
Data_Out: buffer bit_vector(7 downto 0);
Data_In: in bit_vector(7 downto 0));
end counter;
entity and_gate is
port(a,b: in bit;
c: out bit);
generic (gate_delay: time := 5ns);
end and_gate;
3. Architecture
Suatu architecture mendifinisikan satu implementasi khusus pada suatu unit desain, ke-
beberapa bentuk abstraksi.
Behavioral Model: dalam bentuk ini tidak ada struktur atau teknologi yang
diimplementasikan. Biasanya dituliskan dalam bentuk sequential, atau
prosedural.
Dataflow Model: menggambarkan semua bentuk aliran data, berikut dengan semua
sinyal-sinyal pengontrolnya.
Structural Model: sesuai dengan interkoneksi dari komponen-komponen.
2
tersebut atau yang menggunakannya. Implementasi yang sesungguhnya dari
subroutines dalam package umumnya tidak terlalu menarik bagi users dari subroutine
tersebut.
Contoh:
package ee530 is
constant maxint: integer := 16#ffff#;
type arith_mode_type is (signed, unsigned);
function minimum(constant a,b: in integer) return
integer;
end ee530;
Contoh:
Package Visibility: Untuk membuat semua item dari package “visible” untuk suatu
unit desain, selalu didahului dengan “use” statement pada suatu unit desain.
3
“use” statement dapat mendahului suatu deklarasi dari setiap entity atau architecture
yang digunakan dalam package. Jika “use” statement mendahului deklarasi
entity, package menjadi visible juga untuk architecture yang bersangkutan.
Catatan: dalam library kerja yang digunakan saat itu adalah, ‘std’ dan ‘work’,
merupakan dua default libraries. The VHDL ‘library’ statement dibutuhkan
untuk membuat ‘ieee’ library dan / atau suatu libraries tambahan menjadi
visible.
Package ini berada di dalam ‘ieee’ library untuk mendukung multi-valued sinyal-
sinyal logika dengan type declaration dan functions. Untuk membuatnya visible:
Contoh:
4
Memory1, Adder_Module, Bus_16_Bit
Numeric Constants.
Numeric constants dapat didifinisikan dan dapat digunakan untuk setiap base (default
pada decimal). Angka dapat disertakan dengan underscores untuk memperjelas
pembacaan.
Format: base#digits# -- base-nya harus bilangan decimal
Contoh
16#9fba# (hexadecimal)
2#1111_1101_1011# (binary)
16#f.1f#E+2 (floating-point, exponent is decimal)
• Logical: and, or, nand, nor, xor, not (for boolean or bit ops)
• Relational: =, /=, <, <=, >, >=
• Arithmetic: +, -, *, /, mod, rem, **, abs
(a mod b takes sign of b, a rem b takes sign of a)
• Concatenate: & (jalinan)
(ex. a & b makes one array)
Contoh
a <= b nand c;
d := g1 * g2 / 3;
Bus_16 <= Bus1_8 & Bus2_8;
5
Predefined Scalar Data Types (single objects)
VHDL Standard:
• bit values: '0', '1'
• boolean values: TRUE, FALSE
• integer values: -(231) to +(231 - 1) {SUN Limit}
• natural values: 0 to integer'high (subtype of integer)
• positive values: 1 to integer'high (subtype of integer)
• character values: ASCII characters (eg. 'A')
• time values include units (eg. 10ns, 20us)
Contoh
6
Example
• Subtype: suatu subset di[pilih dari nilai-nilai type yang diberikan. Elemen-
elemen subtypes yang berbeda dan mempunyai base type yang sama dapat
dikombinasikan dalam berbagai ekspresi (elemen-elemen yang berbeda tidak
dapat dikombinasikan). Subtypes dapat digunakan untuk mendeteksi out-of-
range values pada saat simulasi.
Contoh
Aliases
“alias” digunakan untuk mendifinisikan suatu pergantian nama dari suatu signal atau
bagian dari signal. Aliases sering digunakan sebagai referensi dalam memilih
potongan-potongan suatu bit-vector.
Contoh.
Contoh
7
Variables
Variabel dideklarasikan di-dalam suatu blocks, process, procedure, atau function,
dan diperbaharui segera ketika assignment statement dieksekusi. Suatu variable dapat
berupa scalar atau aggregate data type, dan digunakan terutama dalam diskripsi
behavioral. Secara optional dapat di assign nilai-nilai awal (dilakukan hanya sekali
saat mengawali simulasi). Syntax dari deklarasinya sbb:
Contoh
process
variable count: integer := 0;
variable rega: bit_vector(7 downto 0);
begin
...
count := 7; -- assign values to variables
rega := x"01";
...
end;
Signals
Signal adalah suatu object dengan suatu histori dari nilai-nilai (terkait dengan waktu –
waktu ‘event”, atau waktu saat mana nilai sinyal berubah)
Signals dideklarasikan memalui signal declaration statement atau entity port
definitions, dan mungkin saja pada setiap data type. Syntax deklarasinya sbb:
Contoh
setiap signal mempunyai satu atau lebih “penggerak” (drivers) yang menentukan
perubahan nilai dan timing dari signal. Setiap penggerak merupakan urutan dari
beberapa kejadian (events) yang menunjukkan kapan dan berapa besar signal harus
berubah. Masing-masing signal assignment menghasilkan kejadian yang berkaitan
dengan urutan yang disesuaikan dengan schedule dari event yang baru.
signal line x
10ns '0' Driver of
20ns '1' signal x
Event Values
Times
8
Catatan: jika tidak ada delay yang dispesifikasikan, signal event saat itu di-schedule-
kan untuk ”delta” delay yang sangat kecil. Perubahan signal akan terjadi pada siklus
simulai berikutnya.
Contoh.
(Misalkan current time is T)
Model dari elemen delay dapat dispesifikasikan dengan “inertial” atau “transport”.
Inertial delay berarti sesuai default, dan dalam banyak hal sering digunakan.
• Inertial delay: Suatu urutan kejadian pada kejadian yang sudah ter-schedule
dengan waktu T secara otomatis meng-cancels setiap kejadian dalam jadwal
urutan untuk muncul lebih dahulu dari waktu T, misalnya setiap kejadian yang
lebih pendek dari waktu delay akan ditekan.
• Transport delay: event baru dengan mudah disisipkan dalam urutan event,
misalnya behavior sebagai suatu delay line. Keyword transport digunakan
untuk menunjukkan transport delay.
Contoh
Bila ada multi drivers untuk satu signal, suatu “resolution function” harus digunakan
untuk menentukan nilai yang akan di-assigned ke signal dari nilai-nilai yang diberi
oleh multi drivers. Hal ini memungkinkannya simulasi dari banyak buses dengan
multi sources/drivers.
Catatan: tipe-tipe std_logic dan std_logic_vector dari ieee library sudah mempunyai
pradifinisi resolution function.
Contoh:
9
hasilnya adalah ‘1’ karena ‘1’ menindas (overrides) nilai ‘Z’ yang mengambang
(floating). Untuk dua nilai ‘1’ dan ‘0’, hasilnya adalah ‘X’, yang menunjukkan hasil
yang tidak dikenal (unknown result).
CONCURRENT STATEMENTS
Terdiri dari statements:
1) Signal Assignment
2) Process Statement
3) Block Statement
4) Procedure Statement
5) Component Instantiation
6) Concurrent Assertion
7) Generate Statement
10
'1' after 1ns when En = '1' and X = '1' else
'Z' after 1ns;
-- A is a 16-bit vector
A <= (others => '0'); -- set all bits of A to '0'
Keyword “others” pada contoh terakhir menyatakan nilai A yang tidak dinyatakan
secara eksplisit dalam daftar diatas diberi nilai ‘0’
Syntax:
label: process (sensitivity list)
... local declarations ...
begin
... sequential statements ...
end process label;
Contoh;
DFF: process (clock)
begin
if clock = '1' then
Q <= D after 5ns;
QN <= not D after 5ns;
end if;
end process DFF;
Sequential statement dalam proses dieksekusi mengikuti perintah, dimulai pada awal
dari simulasi. Setelah statement terakhir dari suatu proses dieksekusi, proses diulangi
lagi dari statement awal, dan berulang sampai selesai. Jika diberi optional sensitivity,
seperti wait on …. statement yang disisipkan setelah sequential statement terakhir ,
akan menyebabkan proses berhenti pada titik tersebut sampai ada event pada satu dari
sinyal-sinyal yang ada dalam daftar, dimana time processing menyimpulkan
berdasarkan statement awal dalam proses.
Syntax:
Bila diberi suatu guard expression, “guarded” adalah suatu variable Boolean GUARD
secara otomatis terdifinisikan dan menetapkan nilai Boolean dari suatu ekspresi
11
guard. GUARD kemudian dapat di test dalam block, pelaksanan signal assignment
yang dipilih atau statement lain, hanya jika hasil evaluasi kondisi guard adalah TRUE.
Contoh.
Dalam contoh terakhir, B di-assign ke signal A hanya jika GUARD adalah TRUE,
dengan implikasi Enable = ‘1’
• Dalam bagian dekalarasi: daftar dari “component declaration” dan satu atau
lebih “configuration specification” .
12
end component;
Dari ketiga contoh, prefix work, menunjukkan bahwa working library yang berjalan
berisi model-model komponen yang ditunjuk. Pada contoh pertama, architecture
equations dari entity comp1 digunakan untuk semua instances dari comp1. Pada
contoh lainnya, architecture equations digunakan untuk instance ADDER1 dari
komponen adder, dan architecture dataflow digunakan untuk instance ADDER2 dari
komponen adder.
Port list dapat menggunakan salah satu dari dua format dibawah ini.
(1) "Positional association": signals dihububgkan ke port berdasarkan atas dasar
daftar perintah dalam deklarasi komponen.
Ex. A1: adder port map (v,w,x,y,z)
• v,w, and y must be bit_vectors, y and z bits
(2) "Named association": each signal-to-port connection is listed explicitly as
"signal=>port".
Contoh.
A1: adder port map(a=>v, b=>w, s=>y, cin->x, cout->z);
component dff
port(D,CLK: in bit;
Q,QN: out bit);
end component;
for DFF1: dff use entity work.dff (equations);
for DFF2: dff use entity work.dff (circuit);
--Use different architectures of dff for instances
DFF1 and DFF2
13
begin
JKFF1: jkff port map (j1,k1,clk,q1,qn1);
JKFF2: jkff port map (j2,k1,clk,q2,qn2);
DFF1: dff port map (d1,clk,q4,qn4);
DFF2: dff port map (d2,clk,q5,qn5);
end.
Contoh.
Generate a 4-bit full adder from 1-bit full_adder stages:
add_label: -- Note that a label is required here
for i in 4 downto 1 generate
FA: full_adder port map(C(i-1), A(i), B(i), C(i), Sum(i));
end generate;
SEQUENTIAL STATEMENTS
Terdiri dari statements:
1) Wait Statement
2) Signal Assignment Staetement
3) Variable Assignment Staetement
4) Procedure Call
5) Conditional Statements
6) Loop Statements
7) Procedure Statement
8) Function Statement
14
1). Wait statement
Penundaan eksekusi dari process/subprogram sampai ada perubahan singal, atau suatu
pendifinisiakn perioda waktu yang sudah dilalui. Kombinasi dapat saja dilakukan.
Contoh ; eksekusi ditunda sampai satu atau dua kondisi benar (true), atau setelah 25
nS, yang mana yang duluan.
Contoh:
A := B and C;
D := A; -- value of D is new A value
15
... sequence of statements ...
end loop label;
label: for loop_variable in range loop
... sequence of statements...
end loop label;
6). PROCEDURES
procedure adalah suatu subprogram yang melalukan parameter-parameter dan
menerima nilai-nilai melalui daftar dari parameter nya.
Example
7). FUNCTIONS
function adalah suatu subprogram yang melalukan parameter-parameter dan
mengembalikan suatu nilai tunggal. Tidak seperti halnya procedures, function
utamanya digunakan dalam ekspresi.
Contoh;
16
end;
-- Convert bit_vector to unsigned (natural) value
function b2n (B: bit_vector) return Natural is
variable S: bit_vector(B'Length - 1 downto 0) := B;
variable N: Natural := 0;
begin
for i in S'Right to S'Left loop
if S(i) = '1' then
N := N + (2**i);
end if;
end loop;
return N;
end;
Function Calls:
library mgc_portable;
use mgc_portable.qsim_logic.ALL;
17
Ex. a := x sll 2; -- "shift left logical" bit_vector
x by 2 bits
Relational operations: (=,/=,<,>,<=,>= )
Type conversion: to_bit (from integer) to_integer (from bit_vector)
OBJECT ATTRIBUTES
object attribute mengembalikan informasi tentang suatu signal atau data type
returns information about a signal or data type.
Signal Condition Attributes (for a signal S)
S'DELAYED(T) - value of S delayed by T time units
S'STABLE(T) - true if no event on S over last T time units
S'QUIET(T) - true if S quiet for T time units
S'LAST_VALUE - value of S prior to latest change
S'LAST_EVENT - time at which S last changed
S'LAST_ACTIVE - time at which S last active
S'EVENT - true if an event has occurred on S in current cycle
S'ACTIVE - true if signal S is active in the current cycle
S'TRANSACTION - bit value which toggles each time signal S changes
Contoh;
NOTE: Untuk array multi dimensi, indeks ke N harus ditandai dalam attribute yang
khusus. N dapat diabaikan untuk array satu dimensi.
18
Contoh;
use std.textio.all;
Data Types:
text – file dari suatu strings character
line - satu string dari text file
Example Declarations
file Prog: text is in "file_name"; --text file "file_name"
variable L: line; -- read lines from file to L
readline(F, L)---- untuk membaca satu line dari "text" file F to "line" L
membaca satu nilai dari line L ke dalam harga variable (variable VALUE)
• GOOD is TRUE if successful
• Data_type of VALUE can be bit, bit_vector, integer, real, character, string,
or time.
19