Tugas Perancangan Sistem Elektronis Uas Kelompok 2
-
Upload
iwan-setiaji -
Category
Documents
-
view
50 -
download
0
Transcript of Tugas Perancangan Sistem Elektronis Uas Kelompok 2
UJIAN AKHIR SEMESTER GENAP 2012/ 2013
PERANCANGAN SISTEM ELEKTRONIS
(TAKE HOME EXAM KELOMPOK II)
Oleh :
IWAN SETIAJI (H1C009021)
MOHAMMAD ALI M. (H1C009056)
MUSLIM MUNAWAR (H1C010040)
KEMENTERIAN PENDIDIKAN DAN KEBUDAYAAN
UNIVERSITAS JENDERAL SOEDIRMAN
FAKULTAS SAINS DAN TEKNIK
JURUSAN TEKNIK
TEKNIK ELEKTRO
PURBALINGGA
2013
TUGAS BESAR PERANCANGAN SISTEM ELEKTRONIS
SIMULASI PERANCANGAN FILTER BUTERWORTH
MENGGUNAKAN MODELSIM
Oleh :
IWAN SETIAJI (H1C009021)
MOHAMMAD ALI M (H1C009056)
MUSLIM MUNAWAR (H1C010040)
KEMENTERIAN PENDIDIKAN DAN KEBUDAYAAN
UNIVERSITAS JENDERAL SOEDIRMAN
FAKULTAS SAINS DAN TEKNIK
JURUSAN TEKNIK
TEKNIK ELEKTRO
PURBALINGGA
2013
BAB I. PENDAHULUAN
1. LATAR BELAKANG
Perkembangan teknologi sangatlah pesat di dunia ini,apalagi yang
berhubungan dengan elektronis. Seperti misalnya perangkat digital,hampir
semua teknologi yang berhubungan dengan perangkat digital sangatlah
membutuhkan suatu filter (tapis) yang mampu untuk dapat digunakan
sebagai penyaring baik itu sinyal, gelombang, frekuensi dan lain-lain.
Penggunaan filter (tapis) ini bertujuan untuk menghilangkan noise
yang sering terjadi pada komunikasi digital. Ada berbagai macam bentuk
filter (tapis) yang mampu digunakan pada komunikasi digital. Dalam
kasus ini, penulis memilih menggunakan filter (tapis) butterworth (low
pass filter butterworth) dengan pertimbangan bahwa tapis ini mampu dan
sudah banyak yang menggunakannya.
Filter merupakan suatu sistem yang mempunyai fungsi transfer
tertentu untuk meloloskan sinyal masukan pada frekuensi - frekuensi
tertentu dan menyaring / memblokir / melemahkan sinyal masukan pada
frekuensi-frekuensi yang lain. Filter juga dapat diklasifikasikan ke dalam
dua jenis yaitu filter analog dan filter digital.
Penulis menggunakan filter butterwoth karena filter ini tergolong
ke dalam filter digital, yang mana filter digital ini mempunyai dua jenis
yaitu IIR (infinite inpulse response) dan FIR (finite inpulse response).
Sementara filter yang digunakan oleh penulis tergolong dalam IIR (infine
impulse response).
Alasan digunkannya filter digital (filter butterworth) oleh penulis
adalah filter digital lebih mudah diubah-ubah dan programmable,filter
digital lebih mudah didesain, tes, dan diimplementasikan pada computer,,
selain itu dalam praktiknya filter digital menggunakan DSP
(PLC/microcontroller/ DSP card) relatif lebih simple dan komplit. Berikut
ini adalah gambar diagram dari filter digital :
Rangkaian filter yang digunakan oleh penulis membutuhkan
beberapa komponen yaitu 8 komponen D flip-flop, 7 Multiplier, 6 Adder,
2 divider. Berikut adalah rancangan rangkaian yang dibuat oleh penulis :
2. RUMUSAN MASALAH
Dalam penulisan tugas besar ini kami hanya membatasi masalah
pada analisis simulasi rancangan filter butterworth menggunakan
modelsim.
3. TUJUAN
Tujuan dari penulisan tugas besar ini dengan judul Simulasi Rancangan
Filter Butterworth Menggunakan Modelsim adalah
a. Menganalisis tapis (filter) butterworth dengan menggunakan
Modelsim.
b. Menganalisis kesesuaian timing diagram yang ada pada tapis
butterworth.
c. Memenuhi tugas terstruktur mata kuliah Perancangan Sisitem
Elektronis.
BAB II. TINJAUAN PUSTAKA
Filter merupakan suatu sistem yang mempunyai fungsi transfer tertentu
untuk meloloskan sinyal masukan pada frekuensi - frekuensi tertentu dan
menyaring / memblokir / melemahkan sinyal masukan pada frekuensi-frekuensi
yang lain.
Filter diklasifikasikan menjadi Filter analog dan filter digital
o Filter analog : sinyal masukan berupa sinyal analog
(dapat berupa Filter pasif dan filter aktif)
• Filter pasif : filter yang hanya disusun komponen tahanan, induktor dan
kapasitor
• Filter aktif : filter yang disusun komponen op amp atau transistor ditambah
tahanan, induktor, dan kapasitor
o Filter digital : sinyal masukan berupa sinyal diskrit
FIR (Finite Impulse Response)
IIR (Infinite Impulse Response )
oFilter menurut frekuensi yang disaring:
• Filter low pass:
Filter yang tegangan keluarannya tetap sampai ke suatu frekuensi cut off
(fc) .Bersama naiknya frekuensi di atas fc, tegangan keluarannya
melemah/menghilang. Frekuensi cut off / frekuensi 3 dB / frekuensi 0,707 .
• Filter high pass
Filter yang memperlemah tegangan keluaran untuk frekuensi di bawah
nilai frekuensi cut off fc. Di atas fc besar tegangan keluaran tetap.
• Filter band pass
Filter yang hanya melewatkan sinyal keluaran yangberfrekuensi tertentu
(yang dititik beratkan di 1 nilai fc ) dan melemahkan tegangan sinyal keluaran
semua frekuensi selain frekuensi tertentu.
• Filter band elimination
Filter yang menyaring / melemahkan tegangan sinyalkeluaran yang
memiliki suatu nilai frekuensi tertentu dan meloloskan sinyal keluaran yang lain.
Filter digital memiliki banyak kelebihan dibandingkan dengan
pasangannya filter analog, baik dalam performa yang lebih tinggi dengan
transition zone yang lebih kecil, ketahanan, serta fleksibilitas dalam menentukan
range kerjanya (Smith, 1997: 327). Karena faktor-faktor ini, filter digital
merupakan elemen penting dalam bidang DSP (Digital Signal Processing).
Terdapat dua metoda untuk mendisain sebuah filter digital. Metoda
pertama dengan menggunakan proses konvolusi antara sinyal input dengan
impulse response dari filter yang dikehendaki, filter jenis ini disebut filter FIR
(Finite Impulse Response). Metoda kedua adalah dengan proses rekursif, yang
merupakan kelanjutan dari metoda konvolusi. Bila dalam proses konvolusi
perhitungan dilakukan dengan hanya menggunakan sampel input saja, maka
dalam proses rekursif perhitungan dilakukan dengan sampel input yang
dijumlahkan dengan sampel output sebelumnya. Hal ini membuat impulse
response filter menjadi sangat panjang mendekati titik tak berhingga (infinity),
oleh karena itu filter jenis ini disebut filter IIR (Infinite Impulse Response).
Filter IIR adalah salah satu tipe dari filter digital yang dipakai pada
aplikasi Digital Signal Processing (DSP). IIR kepanjangan dari Infinite Impulse
Response.Mengapa disebut response impulsnya tak terbatas (infinite)? Karena
adanyafeedback didalam filter, jika anda memasukkan sebuah impulse (yaitu
sebuah sinyal ′1′ diikuti dengan banyak sinyal ′0′), maka pada outputnya akan
terus menerus berosilasi karena adanya umpan balik, walaupun pada prakteknya
akan hilang pada suatu saat. Keuntungan filter IIR antara lain adalah
membutuhkan koefisien yang lebih sedikit untuk respon frekuensi yang curam
sehingga dapat mengurangi jumlah waktu komputasi.
Contoh blok IIR:
Bentuk respon impuls dari filter IIR dinyatakan
Fungsi alih dari filter IIR
Konfigurasi Butterworth adalah salah satu konfigurasi standar dari filter rekursif
baik dalam bentuk analog maupun digital. Konfigurasi ini menekankan pada aproksimasi
karakteristik lowpass dengan hasil respons yang mendekati titk nol dengan halus dan rata
(smooth and flat) (Soliman.Srinath, 1990: 436). Filter Butterworth didefinisikan melalui
persamaan magnitude function H(ω) sebagai berikut:
di mana N adalah nilai orde filter.
Jelas dari rumus di atas bahwa magnitude function Butterworth adalah fungsi
frekuensi () yang menurun secara monoton, dengan nilai maksimumnya dari unity
terjadi pada saat = 0. Untuk = 1, nilai magnitude adalah sama dengan 1/√ 2 untuk
semua nilai N. Dengan demikian, filter Butterworth dalam bentuk normal memiliki
frekuensi cutoff sebesar 3 dB. Gambar 1.menunjukkan plot dari karakteristik magnitude
dari filter ini sebagai fungsi frekuensi () untuk beberapa tingkatan orde. Nampak bahwa
semakin tinggi tingkatan orde, karakteristik filter Butterworth semakin mendekati filter
ideal.
Contoh desain filter lowpass dengan frekuensi cut off 5 kHz pada
fekuensi sampling
sebesar 16 kHz. (Menentukan koefisien a dan b) :
Diketahui frekuensi sampling filter = 16 kHz
Setengah dari frekuensi sampling filter = 8 kHz
Frekuensi cut off filter = 5 kHz
Nilai wn sebagai frekuensi cut off bernilai = (5 kHz / 8 kHz) = 0,625
Dirancang filter low pass IIR orde 2, orde 10, dan orde 15 sebagai
perbandingan
[a,b]=butter(orde,frekuensi_cut_off);
m-file
f=8;n1=2;n2=10;n3=15;wn=0.625;[a1,b1]=butter(n1,wn);[a2,b2]=butter(n2,wn);[a3,b3]=butter(n3,wn);[h1,w1]=freqz(a1,b1,1024);[h2,w2]=freqz(a2,b2,1024);[h3,w3]=freqz(a3,b3,1024);%plot((w*f)/pi,20*log(abs(h)));plot((w1*f)/pi,(abs(h1)),'k',(w2*f)/pi,(abs(h2)),'b',(w3*f)/pi,(abs(h3)),'k');grid on;
Dari Gambar di atas, semakin besar ordenya, maka filter
lowpass IIR semakincuram/mendekati ideal. Untuk mendapatkan
koefisien filter dengan metode butterworth. Pada Matlab
digunakan untuk mendesain filter IIR low pass menggunakan
metode butterworth orde N dengan frekuensi cut-off pada wn,
dan menghasilkan koefisien filter pada vector B (numerator) dan
vector A (denumerator) sebanyak N+1.
Nilai dari frekuensi cut off wn harus bernilai 0 < wn < 1,
dimana 1 menunjukkan setengah dari frekuensi sampling.
[a,b]=butter(orde,frekuensi_cutoff,’high’); untuk filter high pass
[a,b]=butter(orde,[frek_cutoff1 frek_cutoff2]); untuk filter band pass
[a,b]=butter(orde,[frek_cutoff1 frek_cutoff2],’stop’); untuk filter stop
pass
BAB III. PEMBAHASAN
Divider.vhdl
--Component Divider1000
================================
library IEEE; --inisialisasi library yang digunakan adalah library ieee
use IEEE.STD_LOGIC_1164.ALL;-- menggunakan semua isi dari library ieee std
logic 1164
use IEEE.STD_LOGIC_ARITH.ALL;-- menggunakan semua isi dari library ieee
std logic arithmatic
use IEEE.STD_LOGIC_UNSIGNED.ALL;-- menggunakan semua isi dari library
ieee std logic unsigned
entity divider1000 is--deklarasi entity dengan nama divider 1000
Port (--deklarasi dari port-port yang akan dipakai sebagai input output
ain : in STD_LOGIC_VECTOR (31 downto 0);--deklarasi port input dengan
nama ain bertipe std logic vector 32 bit
dvdout : out STD_LOGIC_VECTOR (31 downto 0));--deklarasi port output
dengan nama dvdout bertipe std logic vector 32 bit
end divider1000;--untuk mengakhiri entity divider1000
architecture Behavioral of divider1000 is--deklarasi architecture bernama
behavioral dari divider1000
signal a ,b : bit_vector (31 downto 0);--inisialisasi signal a,b dengan tipe bit vector
32bit
begin--function untuk memulai proses
a <= to_bitvector(ain);--output signal a adalah menuju bitvector
b <= a sra 10;--output signal b adalah signal a sra 10
dvdout<= to_stdlogicvector(to_bitvector(ain) sra 10);--output dvdout bertipe
stdlogicvector
end Behavioral;--untuk mengakhiri architecture behavioral
D FLIP FLOP 16bit
-- Delay 16 BIT Unit Use D FlipFlop(2)--DFF2
-------------------------------------
library ieee;--deklarasi library yang digunakan yaitu library ieee
use ieee.std_logic_1164.all;--menggunakan semua isi dari std logic 1164
ENTITY dff2 IS–deklarasi entity dff2
PORT( D : INSTD_LOGIC_VECTOR(15 downto 0);--deklarasi port input
dengan nama D bertipe std logic vector 16 bit
Clk, Res : IN STD_LOGIC;--deklarasi port input dengan nama clk,res bertipe std
logic
Q : OUTSTD_LOGIC_VECTOR(15 downto 0));--deklarasi port input dengan
nama Q bertipe std logic vector 16 bit
END dff2;-- akhir dari entity
ARCHITECTURE behavioral OF dff2 IS--deklarasi architecture bernama behavioral dari dff2
BEGIN– mulai arsitektur
PROCESS(Clk, Res) --We only care about Clk
BEGIN
IF Res = '1' THEn Q <= X"0000"; -- determine Q=0 Hexa
Else
IF (Clk'event) AND (Clk='1') THEN --Positive Edge
Q <= D;-- assignment Q dengan D
END IF;-- akhir fungsi if
END IF;-- akhir fungsi if
END PROCESS;--akhir proses
END behavioral;--akhir behavioral
D Flip-Flop 32bit
-- Delay 32 BIT Unit Use D FlipFlop--DFF21
-------------------------------------
library ieee;--deklarasi library yang digunakan yaitu library ieee
use ieee.std_logic_1164.all;--menggunakan semua isi dari std logic 1164
ENTITY dff21 IS–deklarasi entity dff21
PORT( pi : IN STD_LOGIC_VECTOR(31 downto 0);--deklarasi port input dengan nama pi
bertipe std logic vector 32 bit
Clk, Res : IN STD_LOGIC;--deklarasi port input dengan nama clk,res bertipe std logic
po : OUT STD_LOGIC_VECTOR(31 downto 0));--deklarasi port input dengan nama po
bertipe std logic vector 32 bit
END dff21;-- akhir entitas
ARCHITECTURE behavioral OF dff21 IS--deklarasi architecture bernama behavioral dari dff21
BEGIN
PROCESS(Clk, Res) --We only care about Clk
BEGIN
IF Res = '1' THEn po <= X"00000000"; -- determine Q=0 Hexa
Else
IF (Clk'event) AND (Clk='1') THEN --Positive Edge
po <= pi;-- assignment po dengan pi
END IF;-- akhir fungsi if
END IF;-- akhir fungsi if
END PROCESS;-- akhir proses
END behavioral;-- akhir arsitektur
ADDER32bit
-- Adder 32 bit
--------------------------------------------
LIBRARY IEEE;-- Library IEEE untuk tipe data dan operasinya
use IEEE.STD_LOGIC_1164.ALL;-- paket yang digunakan untuk tipe data dan
fungsi
entity add32i is--deklarasi entitas add32
port( a, b : inSTD_LOGIC_VECTOR(31 downto 0);-- inisialisasi input a dan b 32
bit std logic
sum : outSTD_LOGIC_VECTOR(31 downto 0));--inisialisasi output sum 32 bit
std logic
-- cout : outSTD_LOGIC );
end add32i;-- akhir dari entitas
architecture STRUCTURE of add32i is--deklarasi arsitektur dari entitas add32
component add16--deklarasi komponen add16
port( a, b : in STD_LOGIC_VECTOR(15 downto 0);--deklarasi port berisi input
cin dan output
sum,cout
cin : in STD_LOGIC;-- input cin berupa std logic
sum : out STD_LOGIC_VECTOR(15 downto 0);-- out sum std logic vector 16bit
cout : out STD_LOGIC );--out cout berupa std logic
end component;--akhir deklarasi komponen
signal cout1, cout2, scin : STD_LOGIC;--deklarasi signal cout1,cout2,scin berupa
std logic
begin-- mulai struktur
scin<= '0';-- inisialisasi awal scin 0
add16i1: add16 port map (a(15 downto 0), b(15
downto 0), scin, sum(15 downto 0), cout1);-- assignment add16i sebagai
penjumlahan 16 bit a,b,scin dan
cout1 sebagai keluaran
add16i2: add16 port map (a(31 downto 16), b(31
downto 16), cout1, sum(31 downto 16), cout2);-- assignment add16i sebagai
penjumlahan 32 bit a,b,cout1
dan cout2 sebagai keluaran
end structure;-- akhir struktur
MULTIPLIER 32 BIT
-- MULTIPLIER 32 BIT
--------------------------------
LIBRARY ieee;-- Library IEEE untuk tipe data dan operasinya
USE ieee.std_logic_1164.ALL;-- paket yang digunakan untuk tipe data dan fungsi
USE ieee.std_logic_arith.ALL;-- paket yang digunakan untuk tipe data dan fungsi
USE ieee.std_logic_signed.ALL;-- paket yang digunakan untuk tipe data dan
fungsi
USE ieee.std_logic_unsigned.ALL;-- paket yang digunakan untuk tipe data dan
fungsi
ENTITY signed_mult IS-- deklarasi enitas signed_mult
PORT (
a: IN
STD_LOGIC_VECTOR (15 DOWNTO 0);-- deklarasi a sebagai input port
berupa standard logic vector 16
bit
b: IN
STD_LOGIC_VECTOR (15 DOWNTO 0);-- deklarasi b sebagai input port
berupa standard logic vector 16
bit
result: OUT
STD_LOGIC_VECTOR (31 DOWNTO 0));-- deklarasi result sebagai out port
berupa standard logic vector 32
bit
END signed_mult;-- akhir entitas
ARCHITECTURE rtl OF signed_mult IS-- deklarasi arsitektur rtl dari entitas
SIGNAL a_int, b_int:
SIGNED (15 downto 0);-- deklarasi signal a_int,b_int berupa 16bit
SIGNAL pdt_int:
SIGNED (31 downto 0);-- deklarasi signal a_int,b_int berupa 16bit
BEGIN-- memulai struktur rtl
a_int <= SIGNED (a);-- asssigment a_int sebagai nilai signed a
b_int <= SIGNED (b);-- asssigment b_int sebagai nilai signed b
pdt_int <= a_int * b_int;-- assignment pdt_int sebagai hasil perkalian a_int * b_int
result<=
STD_LOGIC_VECTOR(pdt_int);-- assignment result sebagai standard logic
vector dari pdt_int
END rtl;-- akhir rtl
IIR
LIBRARY ieee;--inisialisai library yang digunakan adalah library ieee
USE ieee.std_logic_1164.ALL;--menggunakan semua isi dari std logic 1164
USE ieee.std_logic_arith.ALL;--menggunakan semua isi dari std logic arithmatika
USE ieee.std_logic_signed.ALL;--menggunakan semua isi dari std logic signed
USE ieee.std_logic_unsigned.ALL;--menggunakan semua isi dari std logic unsign
entity iir is--deklarasi entity bernama iir
port(--deklarasi port input output yang akan digunakan
D : IN STD_LOGIC_VECTOR(15 downto 0);--inisialisasi D sebagai input std logic vector 16bit
Clk, Res : IN STD_LOGIC;--inisialisasi Clk,Res sebagai input bertipe std logic
Q : OUT STD_LOGIC_VECTOR(15 downto 0);--inisilisasi Q sebagai output bertipe std logic vector 16bit
ain : in STD_LOGIC_VECTOR (31 downto 0);--inisialisasi ain sebagai input bertipe std logic vector 32bit
dvdout : out STD_LOGIC_VECTOR (31 downto 0);--inisialisasi dvdout sebagai output bertipe std logic vector 32bit
a: IN STD_LOGIC_VECTOR (15 DOWNTO 0);--inisialisasi a sebagai input bertipe std logic vector 16bit
b: IN STD_LOGIC_VECTOR (15 DOWNTO 0);--inisialisasi b sebagai input bertipe std logic vetor 16bit
result: OUT STD_LOGIC_VECTOR (31 DOWNTO 0);--inisialisasi result sebagai output bertipe std logic vector 32bit
sum : out STD_LOGIC_VECTOR(31 downto 0));--inisialisasi sum sebagai output bertipe std logic vector 32bit
end entity;--untuk mengakhiri entity
architecture g_iir of iir is–deklarasi architecture bernama g_iir dari iir
signal Din : STD_LOGIC_VECTOR(15 downto 0);
signal Do1,Do2,Do3,Do4 : STD_LOGIC_VECTOR(15 downto 0);
signal Do5,Do6,Do7,Do8 : STD_LOGIC_VECTOR (31 DOWNTO 0);
signal Mo1,Mo2,Mo3,Mo5,Mo6,Mo7,Mo8 : STD_LOGIC_VECTOR (31 DOWNTO 0);
signal Ai,Fo1 : STD_LOGIC_VECTOR(31 downto 0);
signal Ao5,Ao6,Ao7 :STD_LOGIC_VECTOR(31 downto 0);
signal Fo3,Fo2,sfout : STD_LOGIC_VECTOR (31 downto 0);
signal Fout : bit_vector (31 downto 0);
signal Bo,B2,B4,A1,A2,A3,A4 : STD_LOGIC_VECTOR (15 DOWNTO 0);
component signed_mult–deklarasi component signed_mult
port(--deklarasi port input output yang akan digunakan
a: IN STD_LOGIC_VECTOR (15 DOWNTO 0);--inisialisasi a sebagai input bertipe std logic vector 16bit
b: IN STD_LOGIC_VECTOR (15 DOWNTO 0);--inisialisasi b sebagai input bertipe std logic vector 16bit
result: OUT STD_LOGIC_VECTOR (31 DOWNTO 0));--inisialisasi result sebagai output bertipe std logic vector 32bit
end component;--untuk mengakhiri component
component dff2—deklarasi component dff2
port(--deklarasi port yang akan digunakan sebagai input output
D : IN STD_LOGIC_VECTOR(15 downto 0);--inisialisasi D sebagai input bertipe std logic vector 16bit
Clk, Res : IN STD_LOGIC;--inisialisasi clk,res sebagai input bertipe std logic
Q : OUT STD_LOGIC_VECTOR(15 downto 0));--inisialisasi Q sebagai output bertipe std logic vector 16bit
end component;--untuk mengakhiri component
component divider1000–deklarasi component divider1000
port(--deklarasi port yang akan digunakan sebagai input output
ain : in STD_LOGIC_VECTOR (31 downto 0);--inisialisasi ain sebagai input bertipe std logic vector 32bit
dvdout : out STD_LOGIC_VECTOR (31 downto 0));--inisialisasi dvdout sebagai output bertipe std logic vector 32bit
end component;--untuk mengakhiri component
component add32i–deklarasi component add32i
port(--deklarasi port yang akan digunakan sebagai input output
a, b : in STD_LOGIC_VECTOR(31 downto 0);--inisialisasi a,b sebagai input bertipe std logic vector 32bit
sum : out STD_LOGIC_VECTOR(31 downto 0));--inisialisasi sum sebagai output bertipe std logic vector 32bit
end component;--untuk mengakhiri component
component dff21–deklarasi component dff21
port(--deklarasi port yang akan digunakan sebagai input output
pi : in std_logic_vector(31 downto 0);--inisialisasi pi sebagai input bertipe std logic vector 32bit
Clk, Res : IN STD_LOGIC;--inisialisasi clk,res sebagai input bertipe std logic
po : OUT STD_LOGIC_VECTOR(31 downto 0));--inisialisasi po sebagai input bertipe std logic vector 32bit
end component;--untuk mengakhiri component
component mul64–deklarasi component mul64
port(--deklarasi port yang akan digunakan sebagai input output
a : in STD_LOGIC_VECTOR (15 DOWNTO 0);--inisialisasi a sebagai input bertipe std logic vector 16bit
b : in STD_LOGIC_VECTOR (31 DOWNTO 0);--inisialisasi b sebagai input bertipe std logic vector 32bit
kali : out STD_LOGIC_VECTOR (31 DOWNTO 0));--inisialisasi kali sebagai output bertipe std logic vector 32bit
end component;--untuk mengakhiri component
begin–untuk memulai proses
delay1 : dff2 port map(D => Din, --16 bit
Clk=> Clk,
Res=>Res,
Q => Do1);
mul1 : signed_mult port map( --mul1 butuh 16 bit
a => Din,
B => Bo,
result =>Mo1);
delay2 : dff2 port map( -- delay 16 bit
D => Do1,
Clk => Clk,
Res => Res,
Q => Do2);
delay3 : dff2 port map( --16 bit
D => Do2,
Clk => Clk,
Res => Res,
Q => Do3);
delay4 : dff2 port map( --16 bit
D => Do3,
Clk => Clk,
Res => Res,
Q => Do4);
mul2 : signed_mult port map( --32 bit
A => Do2,
B => B2,
result => Mo2);
mul3 : signed_mult port map( --32 bit
A => Do4,
B => B4,
result => Mo3);
add1 : add32i port map( -- 32bit
a=>Mo3,
b=>Mo2,
sum => Ai);
add2 : add32i port map( -- 32 bit
a => Ai,
b => Mo1,
sum => Fo1);
div1 : divider1000 port map( --32bit
ain => Fo1,
dvdout => Fo2);
delay5 : dff21 port map( --32 bit
pi => Sfout,
Clk => Clk,
Res => Res,
po => Do5);
mul4 : mul64 port map( -- 64 bit
a => A1, --32 bit
b => Do5, -- 32bit
kali => Mo5); --64 bit
delay6 : dff21 port map( --32 bit
pi => Do5,
Clk => Clk,
Res => Res,
po => Do6);
delay7 : dff21 port map( --32 bit
pi => Do6,
Clk => Clk,
Res => Res,
po => Do7);
delay8 : dff21 port map( --32 bit
pi => Do7,
Clk => Clk,
Res => Res,
po => Do8);
add6 : add32i port map(--32bit
A=>Fo3,
B=>Fo2,
SUM => Sfout);
mul5 : mul64 port map(--64bit
a=>A2,
b=>Do6,
kali =>Mo6);
mul6 : mul64 port map(--64bit
A => A3,
B => Do7,
kali => Mo7);
mul7 : mul64 port map(--64bit
A => A4,
B => Do8,
kali => Mo8);
add3 : add32i port map(--32bit
A=>Mo8,
B=>Mo7,
SUM => Ao7);
add4 : add32i PORT MAP(--32bit
A=> Ao7,
B=>Mo6,
SUM => Ao6);
add5 : add32i PORT MAP(--32bit
A=> Ao6,
B=>Mo5,
SUM=>Ao5);
div2 : divider1000 port map(--divider1000
ain => Ao5,
dvdout => Fo3);
end;--untuk mengakhiri proses
Testbench IIR
IIR Tesbench
LIBRARY ieee;--inisialisasi library yang digunakan yaitu library ieee
USE ieee.std_logic_1164.ALL;--menggunakan semua isi dari std logic 1164
USE ieee.std_logic_arith.ALL;--menggunakan semua isi std logic arith
USE ieee.std_logic_unsigned.ALL;--menggunkan semua isi std logic unsigned
entity iir_tb is --deklarasi enity iir_tb
end entity;--untuk mengakhiri entity
architecture bench of iir_tb is–deklarasi architecture bernama bench dari iir_tb
component signed_mult–deklarasi component signed_mult
port(--deklarasi port yang akan digunakan sebagai input output
a: IN STD_LOGIC_VECTOR (15 DOWNTO 0);--inisialisasi a sebagai input bertipe std logic vector 16bit
b: IN STD_LOGIC_VECTOR (15 DOWNTO 0);--inisialisasi b sebagai input bertipe std logic vector 16bit
result: OUT STD_LOGIC_VECTOR (31 DOWNTO 0));--inisialisasi result sebagai output bertipe std logic vecto 32bit
end component;--untuk mengakhiri component
component dff2–deklarasi component dff2
port(--deklarasi port yang akan digunakan sebagai input output
D : IN STD_LOGIC_VECTOR(15 downto 0);--inisialisasi D sebagai input bertipe std logic vector 16bit
Clk, Res : IN STD_LOGIC;--inisialisasi clk,res sebagai input bertipe std logic vector 16bit
Q : OUT STD_LOGIC_VECTOR(15 downto 0));--inisialisasi Q sebagai output bertipe std logic vector 16bit
end component;--untuk mengakhiri component
component divider1000–deklarasi component divider1000
port( --deklarasi port yang akan digunakan sebagai input output
ain : in STD_LOGIC_VECTOR (31 downto 0);--inisialisasi ain sebagai input bertipe std logic vector 32bit
dvdout : out STD_LOGIC_VECTOR (31 downto 0));--inisialisasi dvdout sebagai input bertipe std logic vector 32bit
end component;--untuk mengakhiri component
component add32i–deklarasi component add32i
port(--deklarasi port yang akan digunakan sebagai input output
a, b : in STD_LOGIC_VECTOR(31 downto 0);--inisialisasi a,b sebagai input bertipe std logic vector 32bit
sum : out STD_LOGIC_VECTOR(31 downto 0));--inisialisasi sum sebagai input bertipe std logic vector 32bit
end component;--untuk mengakhiri component
component dff21–deklarasi component dff21
port(--deklarasi port yang akan digunakan sebagai input output
pi : in std_logic_vector(31 downto 0);--inisialisasi pi sebagai input bertipe std logic vector 32bit
Clk, Res : IN STD_LOGIC;--inisialisasi clk,res sebagai input bertipe std logic
po : OUT STD_LOGIC_VECTOR(31 downto 0));--inisialisasi po sebagai input bertipe std logic vector 32bit
end component;--untuk mengakhiri component
signal D : STD_LOGIC_VECTOR(15 downto 0);
signal clk,res : std_logic;
signal bo,b2,b4 : STD_LOGIC_VECTOR(15 downto 0);
signal Din : STD_LOGIC_VECTOR(15 downto 0);
signal Do1,Do2,Do3,Do4 : STD_LOGIC_VECTOR(15 downto 0);
signal Mo1,Mo2,Mo3 : STD_LOGIC_VECTOR (31 DOWNTO 0);
signal Ai,Fo1,fo2 : STD_LOGIC_VECTOR(31 downto 0);
signal Do5,Do6,Do7,Do8,po : STD_LOGIC_VECTOR (31 DOWNTO 0);
signal Fo3,sfout : STD_LOGIC_VECTOR (31 downto 0);
signal Ao5,Ao6,Ao7 :STD_LOGIC_VECTOR(31 downto 0);
begin
delay1 : dff2 port map(D => Din, --16 bit
Clk=> Clk,
Res=>Res,
Q => Do1);
delay2 : dff2 port map( -- delay 16 bit
D => Do1,
Clk => Clk,
Res => Res,
Q => Do2);
mul1 : signed_mult port map( --mul1 butuh 16 bit
a => Din,
B => Bo,
result =>Mo1);
delay3 : dff2 port map( --16 bit
D => Do2,
Clk => Clk,
Res => Res,
Q => Do3);
delay4 : dff2 port map( --16 bit
D => Do3,
Clk => Clk,
Res => Res,
Q => Do4);
mul2 : signed_mult port map( --32 bit
A => Do2,
B => B2,
result => Mo2);
mul3 : signed_mult port map( --32 bit
A => Do4,
B => B4,
result => Mo3);
add1 : add32i port map( -- 32bit
a=>Mo3,
b=>Mo2,
sum => Ai);
add2 : add32i port map( -- 32 bit
a => Ai,
b => Mo1,
sum => Fo1);
div1 : divider1000 port map( --32bit
ain => Fo1,
dvdout => Fo2);
delay5 : dff21 port map( --32 bit
pi => Sfout,
Clk => Clk,
Res => Res,
po => Do5);
delay6 : dff21 port map( --32 bit
pi => Do5,
Clk => Clk,
Res => Res,
po => Do6);
delay7 : dff21 port map( --32 bit
pi => Do6,
Clk => Clk,
Res => Res,
po => Do7);
delay8 : dff21 port map( --32 bit
pi => Do7,
Clk => Clk,
Res => Res,
po => Do8);
add6 : add32i port map(
A=>Fo3,
B=>Fo2,
SUM => Sfout);
add3 : add32i port map(
A=>do8,
B=>Do7,
SUM => Ao7);
add4 : add32i PORT MAP(
A=> Ao7,
B=>do6,
SUM => Ao6);
add5 : add32i PORT MAP(
A=> Ao6,
B=>do5,
SUM=>Ao5);
div2 : divider1000 port map(
ain => Ao5,
dvdout => Fo3);
uut:entity work.iir
port map
(
Clk => Clk,
Res => Res,
D =>D,
bo => bo,
b2=>b2,
b4=>b4
);
mus : process is
begin–untuk memulai proses
Clk<='1',
'0' after 30ns,
'1' after 60ns,
'0' after 100ns,
'1' after 130ns,
'0' after 160ns,
'1' after 200ns,
'0' after 230ns,
'1' after 260ns,
'0' after 300ns,
'1' after 330ns,
'0' after 360ns,
'1' after 400ns;--dff
Res<='0',
'1' after 30ns,
'0' after 60ns,
'0' after 100ns,
'0' after 130ns,
'0' after 160ns,
'0' after 200ns,
'0' after 230ns,
'0' after 260ns,
'0' after 300ns,
'0' after 330ns,
'0' after 360ns,
'0' after 400ns;
--dff
bo<="1111110000001110",
"1111000010101010" after 30ns,
"0000001111100000" after 60 ns,
"1100110011001100"after 100ns,
"1111000010101010" after 130ns,
"1111111110000000" after 160ns,
"0000001111100000" after 200ns,
"1100110011001100" after 230ns,
"1111110000001110" after 260ns,
"1100110011001100" after 300ns,
"1111000010101010" after 330ns,
"0000001111100000" after 360ns,
"1100110011001100" after 400ns;
b2<="0001110001110001",
"1100110011001100" after 30ns,
"0011001100110011" after 60ns,
"1111000011100010" after 100ns,
"1111010100001000" after 130ns,
"1111000100010000" after 160ns;
b4<="1100101010101010",
"1100101101010101" after 30ns,
"1101010110101000" after 60ns,
"1010110001000111" after 100ns,
"1011110001000100" after 130ns,
"1111010101000010" after 160ns,
"1100110011001100" after 200ns,
"1101010110101000" after 230ns,
"1011110001000100" after 260ns,
"1100101101010101" after 300ns,
"1111100000010001" after 330ns,
"1110000000000000" after 360ns,
"1111010101011111" after 400ns;
Din<="1010001010100010",
"1100010001001010" after 30ns,
"1011010100010000" after 60ns,
"1100111100101010" after 100ns,
"1100111100101010" after 130ns,
"1111000000000000" after 160ns,
"1110000101010100" after 200ns,
"1110101011000000" after 230ns,
"1110010101010101" after 260ns,
"1110000101010100" after 300ns,
"1110000101010100" after 330ns,
"1100001010100000" after 360ns,
"1100000111000010" after 400ns;
wait;--mengakhiri pewaktuan
end process;--mengakhiri proses
end;--akhir dari testbench
Pembahasan jalanya program :
Pembahasan jalannya program :
Setelah dilakukan simulate dan klik run maka akan muncul screen shot maka akan menjadi :
Pada kondisi clock dan reset akan menjadi :
Clk<='1',
'0' after 30ns,
'1' after 60ns,
'0' after 100ns,
'1' after 130ns,
'0' after 160ns,
'1' after 200ns,
'0' after 230ns,
'1' after 260ns,
'0' after 300ns,
'1' after 330ns,
'0' after 360ns,
'1' after 400ns;--dff
Clock ini akan berjalan selama 400ns dan akan continus dari 0 ns hingga 400ns
Inisialisasi pertama yaitu pada clock berlogika 1 hingga 30 ns, dan setelah 30ns maka akan berlogika ‘0’, hingga 60ns, dan setelah 60ns akan berlogika ‘1’ hingga 100ns, dan setelah 100ns akan berlogika ‘0’ hingga 130ns, dan setelah time 130ns akan berlogika ‘1’ hingga time 160ns, dan setelah time 160ns maka akan berlogika ‘0’ dst hingga logika 1 pada time setelah 400ns.
Res<='0',
'1' after 30ns,
'0' after 60ns,
'0' after 100ns,
'0' after 130ns,
'0' after 160ns,
'0' after 200ns,
'0' after 230ns,
'0' after 260ns,
'0' after 300ns,
'0' after 330ns,
'0' after 360ns,
'0' after 400ns;
Lalu sama seperti clock pada reset juga akan hingga bernilai 400ns dan akan berulang setiap 30ns.
Lalu setelah itu akan memeriksa dan mengimplementasikan timing dari nilai Din sebagai masukan awalnya. Lalu setelah itu Din akan masuk ke delay1 dan akan menghasilkan output do1, do1 itu akan menjadi inputan ke delay 2 yang akan mempunyai output do2 yang nantinya akan menjadi inputan pada delay3 yang juga akan mempunyai output do3. Dan do3 akan menjadi inputan pada delay4 dan akan mempunyai output do4. Dan dari do4 akan
Dan dari do4 akan menjadi inputan multipier yang akan dikalikan nilainya dengan nilai B yang sesuai denan inisialisasi port pada B4, yang outputanya akan menjadiMo3 danDo2 sendiri akan menjadi inputan pada multipier dengan pengalinyaB2 dan akan mempunyai output Mo2. Yang Mo2 ini dan Mo3 akan menjadi inputan pada adder yang nantinya akan mempunyai ouput Ai. Lalu pada Din sendiri akan diinputkan ke multipier dan akan dikalikan mengalikan dengan Bo, dan akan menjadi inputan pada adder dengan inputan lain yang berasal dari Ain. Dan dari output ini akan mempunyai variable Fo1. Lalu do1 ini akan masuk menjadi sinyal inputan pada divider dan akan menjadi output fo2. Dan dari fo2 ini akan menjadi inputan pada adder dan inputan feedback pada fo3. Dan akan menjadi ouput sfout yang nantinya akan menjadi output pada port. Dan pada sfout ini akan menjadi inputan pada delay32 bit dan akan mempunyai output Do5, dan Do5 ini akan menjadi inputan pada delay selanjutnya Do6, dan Do6 ini akan menjadi inputan delay berikutnya dan akan mempunayi output do7 dan akan masuk ke delay berikutnya dan akan menjadi output do8. Dan dari do8 akan masuk menjadi inputan adder dengan do7 dan akan mempunyai outputan Ao7 dan dari Ao7 akan menjadi inputan pada adder dengan Do6 dan akan mempunyai outputan Ao6. Dan dari Ao6 akan menjadi inputan pada adder dengan inputan Mo5 dan akan mempunyai output Ao5 dan dari Ao5 ini akan menjadi inputan pada divider 1000 dan akan diadd kan dengan sinyal Fo2 yang nantinya akan menjadi sinyal output pada port.
BAB IV. KESIMPULAN
1. Output filter butterworth bergantung pengaruh pada inputan sebelumnya
dengan kondisi feedback pada delay.
2. Filter butterworth juga bergantung pada pembulatan pada komponen
divider nya.
3. Filter butterworth merupakan Teknik desain filter digital IIR didasarkan pada transformasi bilinear dari prototipe fungsi transfer analog.