View
284
Download
1
Category
Preview:
Citation preview
8/14/2019 VHDL-Ringkas
1/19
Ir. Djogi Lubis M.A.P FTIK-UHT
VHDL-Sederhana Referensi
I. PRIMARY DESIGN UNIT MODEL STRUCTURE
1. Struktur Model Unit Rancangan UtamaSetiap unit rancangan VHDL terdiri dari suatu deklarasi entity dan satu atau lebih
architectures. Setiap architecture mendifinisikan implementasi atau model yang
berbeda dari suatu unit rancangan yang diberikan. Difinisi entity menetapkan semua
masukan ke, dan keluaran dari modul, dan setiap generic parameter yang digunakan
oleh implementasi yang berbeda dari suatu modul.
2. Entity Declaration Format
entity name is port( port definition list );-- input/output signal ports generic( generic list); -- optional generic list endname;
Format deklarasi port:port_name: mode data_type;Mode dari suatu port menentukan arah dari sinyal-sinyal pada port tersebut,
menggunakan salah satu dari mode sbb; in, out, buffer, atau inout.
Mode dari port: in port
dapat dibaca tetapi tidak dapat diperbaharui (updated) dari dalam modul,membawa informasi kedalam modul. (suatu in porttidak dapat muncul pada
sebelah kiri dari suatusignal assignment)
out port
dapat diperbaharui tetapi tidak dapat dibaca dari dalam modul, membawa
informasi keluar modul. (suatu out porttidak dapat muncul disebelah kanandarisignal assignment)
buffer port
Membawa informasi keluar dari modul, dapat dibaca dan diperbaharui daridalam modul.
inout port
Saluran dua arah, dapat diperbaharui serta dibaca dari dalam modul, dan
memungkinkan penggunaan sumber multi update.
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
8/14/2019 VHDL-Ringkas
2/19
entity counter isport (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;
Generics memungkinkan informasi static dikomunikasikan ke suatu block di-
lingkungannya ke-semua architecture yang berada dalam satu unit desain. Dalam hal
ini termasuktiming information (setup, hold, delay times),part sizes, dan parameter-
parameter lainnya.
Contoh;
entity and_gate isport(a,b: in bit;
c: out bit);
generic (gate_delay: time := 5ns);end and_gate;
3. ArchitectureSuatu architecture mendifinisikan satu implementasi khusus pada suatu unit desain, ke-
beberapa bentuk abstraksi.
architecture arch_name of entity_name is... declarations ...
begin... concurrent statements ...
end
Declarations mencakup data types, signals, files, components, attributes,
subprogram, dan informasi lain yang digunakan untuk diskripsi implementasinya.
Concurrent statements menggambarkan suatu unit desain dengan satu atau lebih
bentuk abstraksi permodelan, termasukdataflow,structure, dan / atau behavior.
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.
II. VHDL PACKAGESPackage dalam VHDL berisi subprogram, difinisi konstanta, dan/ atau difinisi typeyang digunakan dan yang ada dalam satu atau lebih unit-unit desain. Tiap package
berisi suatu bagian deklarasi (declaration section), dan di dalam itu dideklarasikan
subprograms (exportable), constants, dan types yang tersedia, serta suatu package
body, dimana di-dalamnya didifinisikan implementasi subprogram, berikut dengan
constants dan types yang digunakan secara internal. Bagian dekalarasi akanmerepresentasikan suatu bagian dari package yang visible untukuserdaripackage
2
8/14/2019 VHDL-Ringkas
3/19
tersebut atau yang menggunakannya. Implementasi yang sesungguhnya dari
subroutines dalampackage umumnya tidak terlalu menarik bagi users darisubroutinetersebut.
Declaration and Libraries
1. Format deklarasi Package
package package_name is... exported constant declarations... exported type declarations... exported subprogram declarations
end package_name;
Contoh:
package ee530 isconstant maxint: integer := 16#ffff#;type arith_mode_type is (signed, unsigned);function minimum(constant a,b: in integer) returninteger;
end ee530;
2. Format body dari Package
package body package_name is... exported subprogram bodies... other internally-used declarations
end package_name;
Contoh:
package body ee530 isfunction minimum (constant a,b: integer) return integer is
variable c: integer; -- local variablebegin
if a < b thenc := a; -- a is minelse
c := b; -- b is minend if;return c; -- return min value
end;end ee530;
Package Visibility: Untuk membuat semua item dari package visible untuk suatuunit desain, selalu didahului dengan use statement pada suatu unit desain.
Contoh: use library_name.package_name.all
3
8/14/2019 VHDL-Ringkas
4/19
use statementdapat mendahului suatu deklarasi dari setiap entity atau architectureyang digunakan dalam package. Jika use statement mendahului deklarasi
entity, package menjadi visible juga untuk architecture yang bersangkutan.
User-Developed Packages Untukmeng-compile user-developed packages
yang ada dalam library kerja yang digunakan saat itu:
use package_name.all;
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.
Contoh: library lib_name; -- make library visible use lib_name.pkg_name.all; -- make package visible
VHDL Standard PackagesSTANDARD - basic type declarations (always visible by default)
TEXTIO - ASCII input/output data types and subprograms
Untuk membuat TEXTIO visible: use std.textio.all;
IEEE Standard 1164 Package
Package ini berada di dalam ieee library untuk mendukung multi-valued sinyal-
sinyal logika dengan type declaration dan functions. Untuk membuatnya visible:
library ieee; -- VHDL Library stmt useieee.std_logic_1164.all;
Special 12-valued data types/functions to interface with QuickSim II and schematicdiagrams.
library mgc_portable; -- Special Mentor Graphics Libraryuse mgc_portable.qsim_logic.all; -- Quicksim portable data types
VHDL IDENTIFIERS, NUMBERS, STRINGS, AND
EXPRESSIONS
Identifiers.Identifiers dalam VHDL harus dimulai dengan huruf, dan dapat berisi kombinasi dari
huruf, digits, dan underscores. Catatan, secara internal VHDL meng-konversi semua
karakter kebentuk huruf besar (Upper-Case)
Contoh:
4
8/14/2019 VHDL-Ringkas
5/19
Memory1, Adder_Module, Bus_16_Bit
Numeric Constants.Numericconstants dapat didifinisikan dan dapat digunakan untuk setiap base (default pada decimal). Angka dapat disertakan dengan underscores untuk memperjelaspembacaan.
Format:base#digits# -- base-nya harus bilangan decimal
Contoh16#9fba# (hexadecimal)2#1111_1101_1011# (binary)16#f.1f#E+2 (floating-point, exponent is decimal)
Bit String Literals
Bit vector constants dispesifikasikan sebagai literal strings.Contoh
x"ffe" (12-bit hexadecimal value)o"777" (9-bit octal value)b"1111_1101_1101" (12-bit binary value)
Arithmetic and Logical ExpressionsEkspresi dalam VHDL sama dengan kebanyakan bahasa tingkat-tinggi lainnya.
Elemen-elemen data harus dalam bentuktype, atausubtypes dari base type yang sama.
Operatornya antara lain sbb:
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
8/14/2019 VHDL-Ringkas
6/19
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)
IEEE Standard 1164 (package ieee.std_logic_1164.all) std_ulogic values: 'U','X','1','0','Z','W','H','L','-''U' = uninitialized, 'X' = unknown, 'W' = weak 'X', 'Z' = floating, 'H'/'L' = weak '1'/'0', '-' =don't care
std_logic resolved "std_ulogic" values
X01 subtype {'X','0','1'} of std_ulogic
X01Z subtype {'X','0','1','Z'} of std_ulogic
UX01 subtype {'U','X','0','1'} of std_ulogic
UX01Z subtype {'U','X','0','1','Z'} of std_ulogic
Predefined VHDL Aggregate Data Types bit_vector array (natural range ) of bit
string array (natural range ) of char
text file of "string"
IEEE Standard 1164 Aggregate Data Types(From package: ieee.std_logic_1164.all)
std_ulogic_vector array (natural range ) of std_ulogic
std_logic_vector array (natural range ) of std_logic
Contoh
signal dbus: bit_vector(15 downto 0);dbus (7 downto 4)
8/14/2019 VHDL-Ringkas
7/19
Example
type word isarray (0 to 15) of bit;
Unconstrained array: pemberian indeks dispesifikasikan ketika suatu sinyal
atau variable dari type dideklarasikan.Contoh
type memory is array (integer range ) of bit_vector(0 to 7);-- a type which is an arbitrary-sized array of 8-bit vectors
variable memory256: memory(0 to 255); -- a 256-byte memory arrayvariable stack: memory(15 downto 0); -- a 16-byte memory array
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
subtype byte_signed is integer range -128 to 127; subtype byte_unsigned is integer range 0 to 255;
Aliasesalias 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.
signal instruction: bit_vector(31 downto 0);alias opcode: bit_vector(6 downto 0) is instruction(31 downto 25);
...
opcode
8/14/2019 VHDL-Ringkas
8/19
VariablesVariabel 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 sekalisaat mengawali simulasi). Syntax dari deklarasinya sbb:
variable symbol: type [:= initial_value];
Contoh
processvariable count: integer := 0;variable rega: bit_vector(7 downto 0);
begin...count := 7; -- assign values to variablesrega := x"01";...
end;
SignalsSignal 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:
signal sig_name: data_type [:=initial_value];
Contoh
signal clock: bit;signal GND: bit := '0';signal databus: std_ulogic_vector(15 downto 0);signal addrbus: std_logic_vector(0 to 31);
setiap signal mempunyai satu atau lebih penggerak (drivers) yang menentukanperubahan 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 x10ns '0' Driver of20ns '1' signal x
Event ValuesTimes
8
8/14/2019 VHDL-Ringkas
9/19
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)
clock
8/14/2019 VHDL-Ringkas
10/19
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 STATEMENTSTerdiri dari statements:
1) Signal Assignment
2) Process Statement
3) Block Statement
4) Procedure Statement5) Component Instantiation
6) Concurrent Assertion
7) Generate Statement
Concurent statement sudah termasuk di dalam difinisi architecture dan di dalamblock statements, yang merepresentasikan concurrent behavior di dalam unit
rancangan yang dimodelkan. Statement ini dieksekusi secara asinkron, tanpa
suatu perintah yang terdifinisi, memodelkan behavior dari elemen perangkat
keras yang independent di dalam suatu system.
1). Concurrent Signal AssignmentMerupakan suatu signal assignment statement yang merepresentasikan suatu proses
yang menetapkan nilai untuk signals. Ada tiga format dasar sbb:
1. A
8/14/2019 VHDL-Ringkas
11/19
'1' after 1ns when En = '1' and X = '1' else'Z' after 1ns;
-- A is a 16-bit vectorA '0'); -- set all bits of A to '0'
Keyword others pada contoh terakhir menyatakan nilai A yang tidak dinyatakansecara eksplisit dalam daftar diatas diberi nilai 0
2). Process StatementSuatu proses sekuensial yang independent untuk menyatakan suatu behavior dari
beberapa bagian dari suatu rancangan. Body dari proses adalah suatu daftar dari
sequential statements.
Syntax:
label:process (sensitivity list)... local declarations ...
begin... sequential statements ...
end process label;
Contoh;DFF:process (clock)
begin if clock = '1' then
Q
8/14/2019 VHDL-Ringkas
12/19
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.
-- D Latch: Transfer D input to Q output when Enable =
'1'block (Enable = '1') begin
Q
8/14/2019 VHDL-Ringkas
13/19
end component;
Suatu configuration specification mengindentifikasikan spesifikasi dari
architecture yang digunakan oleh masing-masng instance dari komponen.
(dapat juga berbentuk multiple architecture untuk komponen yang ada).
Contoh.
for ALL: comp1 use entity work.comp1 (equations);for ADDER1: adder use entity work.adder (equations);for ADDER2: adder use entity work.adder (dataflow);
Dari ketiga contoh,prefix work, menunjukkan bahwa working library yang berjalanberisi 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 instanceADDER1 darikomponen adder, dan architecture dataflow digunakan untuk instanceADDER2 dari
komponen adder.
Component Instantiation: Setiap instance dari komponen-komponen yangdideklarasikan didaftar, diberi nama, dan signals actual dihubungkan keport tersebut sbb:
instance_name: component_name port map (port list);
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);
(Perintah signal tidak penting dalam format ini)
Contoh.architecture r1 of register is
component jkffport(J,K,CLK: in bit;
Q,QN: out bit);end component;for ALL: jkff use entity work.jkff (equations);-- Use architecture equations of entity jkff
for all instances
component dffport(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 instancesDFF1 and DFF2
13
8/14/2019 VHDL-Ringkas
14/19
beginJKFF1: 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.
6). Concurrent assertionSuatu concurrent assertion statement untuk mengecek kondisi (munculnya suatu event) danissues suatu report jika kondisinya not true. Ini dapat digunakan untuk mengecek timing
violations, illegal conditions, etc. Suatu pilihan severity level dapat dilaporkan untukmenunjukkan secara alamiah kondisi yang terdeteksi.
Syntax: assert (clear /= '1') or (preset /= '1') report "Both preset and clear are set!"
severity warning;
7). Generate statementGenerate statement adalah suatu iterasi atau elaborasi kondisional dari suatu diskripsi.
Ini memberikan suatu cara yang compact untuk merepresentasikan apa yang biasanya
menjadi suatu kelompok statements
Contoh.
Generate a 4-bit full adder from 1-bit full_adder stages:
add_label: -- Note that a label is required herefor i in 4 downto 1 generate
FA: full_adder port map(C(i-1), A(i), B(i), C(i), Sum(i));end generate;
The resulting code would look like:
FA4: full_adder port map(C(3), A(4), B(4), C(4), Sum(4));FA3: full_adder port map(C(2), A(3), B(3), C(3), Sum(3));FA2: full_adder port map(C(1), A(2), B(2), C(2), Sum(2));FA1: full_adder port map(C(0), A(1), B(1), C(1), Sum(1));
SEQUENTIAL STATEMENTSTerdiri 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
Sequential Statements digunakan untuk mendifinisikan algoritma dalam
mengekspresikan behavior dari design entity. Statement ini dimunculkan dalamprocess statement dan dalam subprograms (fungsi dan prosedur).
14
http://www.eng.auburn.edu/department/ee/mgc/vhdl.html#waithttp://www.eng.auburn.edu/department/ee/mgc/vhdl.html#seq_assignhttp://www.eng.auburn.edu/department/ee/mgc/vhdl.html#var_assignhttp://www.eng.auburn.edu/department/ee/mgc/vhdl.html#procedure_callhttp://www.eng.auburn.edu/department/ee/mgc/vhdl.html#conditionalhttp://www.eng.auburn.edu/department/ee/mgc/vhdl.html#loophttp://www.eng.auburn.edu/department/ee/mgc/vhdl.html#procedure_syntaxhttp://www.eng.auburn.edu/department/ee/mgc/vhdl.html#function_syntaxhttp://www.eng.auburn.edu/department/ee/mgc/vhdl.html#waithttp://www.eng.auburn.edu/department/ee/mgc/vhdl.html#seq_assignhttp://www.eng.auburn.edu/department/ee/mgc/vhdl.html#var_assignhttp://www.eng.auburn.edu/department/ee/mgc/vhdl.html#procedure_callhttp://www.eng.auburn.edu/department/ee/mgc/vhdl.html#conditionalhttp://www.eng.auburn.edu/department/ee/mgc/vhdl.html#loophttp://www.eng.auburn.edu/department/ee/mgc/vhdl.html#procedure_syntaxhttp://www.eng.auburn.edu/department/ee/mgc/vhdl.html#function_syntax8/14/2019 VHDL-Ringkas
15/19
1). Wait statementPenundaan eksekusi dari process/subprogram sampai ada perubahan singal, atau suatu
pendifinisiakn perioda waktu yang sudah dilalui. Kombinasi dapat saja dilakukan.
Syntax: wait [on signal_name {,signal_name}][until condition][for time expression]
Contoh ; eksekusi ditunda sampai satu atau dua kondisi benar (true), atau setelah 25
nS, yang mana yang duluan.
wait until clock = '1' or enable /='1' for 25ns;
2). Signal assignment statementAssign suatu bentuk gelombang ke salah satu signal driver (mengedit kejadian antrian)
Contoh: A sequence of statements
... when others=>sequence of statements end case;
NOTE: case choices can be expressions or ranges.
5). Loop statementsSequences of statements yang dapat di-ulang sampai beberapa kali dibawah control dari while atau for.
label: while condition loop
15
8/14/2019 VHDL-Ringkas
16/19
8/14/2019 VHDL-Ringkas
17/19
end;-- Convert bit_vector to unsigned (natural) valuefunction 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 loopif S(i) = '1' thenN := N + (2**i);
end if;end loop;return N;
end;
Function Calls:
signal databus: vector4(15 downto 0);signal internal: bit_vector (15 downto 0);variable x: integer;
....databus
8/14/2019 VHDL-Ringkas
18/19
Ex. a := x sll 2; -- "shift left logical" bit_vectorx by 2 bits
Relational operations: (=,/=,,= )Type conversion: to_bit (from integer) to_integer (from bit_vector)
OBJECT ATTRIBUTESobject 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 cycleS'TRANSACTION - bit value which toggles each time signal S changes
Contoh;
if (clock'STABLE(0ns)) then -- change in clock?... -- action if no clock edge
else... -- action on edge of clock
end if;if clock'EVENT and clock = '1' then
Q
8/14/2019 VHDL-Ringkas
19/19
Contoh;
for i in (data_bus'RANGE) loop...
for i in (d'LEFT(1) to d'RIGHT(1)) loop
...
Block Attributes (of a block B)B'BEHAVIOR- true jika di block B tidak ada komponen instantiations
B'STRUCTURE - true jika tidak ada signal assignment statements dalam
block B
THE TEXTIO PACKAGE -TEXTIO merupakan suatu package dari fungsi-fungsi VHDL yang membaca dan menulis text files.Untuk membuat package dikenali:
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
Reading Values From a File:
readline(F, L)---- untuk membaca satu line dari "text" file F to "line" L
read(L, VALUE, GOOD);
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.
Writing values to a file:writeline(F, L);
Menulis satu line "text" file F dari "line" L
write(L, VALUE, JUSTIFY, FIELD);menulis satu nilai ke "line" L dari variable VALUE
Data_type of VALUE dapat berupa bit, bit_vector, integer, real,
character, string, or time.
JUSTIFY adalah "left" or "right" untuk justify within the field
FIELD adalah desired field width dari written value
Recommended