Gambar DFG:
Teknik menggambar DFG adalah setiap blok komputasi (dalam kasus ini adder & multiplier)
dijadikan suatu node yang diberikan informasi berapa lama waktu komputasinya di node
tersebut. Arah panah menandakan flow data dan jika diantara dua node terdapat sebuah elemen
delay, jumlah elemen delay tersebut dicantumkan informasinya pada arah panah yang
menghubungkan dua node tersebut. Di diagram DFG tidak ditunjukkan dimana node input &
node outputnya. Oleh karena itu, untuk DFG pada Direct Form I, delay pada bagian input yang
memberikan x(n-1), x(n-2), dan x(n-3) tidak tampak. Tapi, delay-delay tersebut baru bisa
tampak jika dilakukan teknik retiming (pergeseran elemen delay).
Gambar DG:
Dalam DG, semua node merepresentasikan suatu bagian komputasi. Dalam kasus ini,
diasumsikan bahwa sinyal input x(k) hanya terdefinisi untuk 𝑘 ≥ 0 dimana x(k)=0 untuk 𝑘 <
0. Tinjau kembali persamaan awal
𝑦(𝑘 ) = 𝑎𝑥 (𝑘 − 1) + 𝑏𝑥 (𝑘 − 2) + 𝑐𝑥(𝑘 − 3) + 𝑑𝑦(𝑘 − 2) + 𝑒𝑦(𝑘 − 3)
𝑦(0) = 𝑎𝑥(−1) + 𝑏𝑥(−2) + 𝑐𝑥(−3) + 𝑑𝑦(−2) + 𝑒𝑦(−3) = 0
𝑦(1) = 𝑎𝑥(0) + 𝑏𝑥(−1) + 𝑐𝑥(−2) + 𝑑𝑦(−1) + 𝑒𝑦(−2) = 𝑎𝑥(0)
𝑦(2) = 𝑎𝑥(1) + 𝑏𝑥(0) + 𝑐𝑥(−1) + 𝑑𝑦(0) + 𝑒𝑦(−1) = 𝑎𝑥(1) + 𝑏𝑥(0)
𝑦(3) = 𝑎𝑥(2) + 𝑏𝑥(1) + 𝑐𝑥(0) + 𝑑𝑦(1) + 𝑒𝑦(0)
𝑦(4) = 𝑎𝑥(3) + 𝑏𝑥(2) + 𝑐𝑥(1) + 𝑑𝑦(2) + 𝑒𝑦(1)
Setelah dijabarkan di atas, dapat dilihat bahwa saat k=0 nilai y(0) adalah nol. Data baru muncul
saat k=1 dimana y(1) = ax(0). Dari DG yang dibuat, ax(0) direpresentasikan oleh bulatan hijau
dengan garis orange dan langsung mengarah ke y1. Setelah itu, y2 diperoleh dengan
menjumlahkan ax(1) dengan bx(0), hal ini ditunjukkan oleh lingkaran hitam dengan garis biru
yang ditandai oleh lingkaran merah dan mengarah ke y 2. Sebenarnya y2 juga membutuhkan
dy(0) namun berhubung y(0) bernilai 0 tidak ditunjukkan pada kasus ini.
Untuk y(3) dan seterusnya, dibutuhkan 3 elemen dari x(k-j) dan dua elemen dari y(k-i). Misal,
pada y(3), dibutuhkan ax(2)+bx(1)+cx(0)+dy(1)+ey(0). Elemen dari x ditandai dengan buletan
hitam dengan outline merah dan elemen dari y ditandai dengan buletan hitam dengan outline
hijau. Ada garis putus-putus yang menandakan elemen tersebut seolah-olah di pindah sehingga
persis berada di garis x3y3 untuk dijumlahkan. Proses ini terus berlanjut namun tidak
digambarkan karena akan terlalu penuh gambarnya dan justru akan sulit melihatnya. Proses
menghitung y4 ditandai dengan pergeseran dari garis putus-putus berwarna hijau.
Gambar DG IIR Filter Lanjutan
Menghitung critical path, maksimum frequency, loop bound, iteration bound,
throughput
Berikut menghitung critical path? Critial path ditemukan dengan mengonsiderasi path dengan
waktu komputasi paling lama. Path dapat didefinisikan dengan jarak antara delay ke delay lain,
dari input ke elemen delay, atau dari elemen delay ke output. Dengan memanfaatkan DFG,
berikut adalah beberapa path yang ada di rangkaian tersebut:
- M1 → A2 membutuhkan 3ns
- M2 →A3 → A2 membutuhkan 4ns
- M3 →A4 → A1 membutuhkan 4ns
- M5 →A4 → A1 membutuhkan 4ns
1 1
Dari informasi di atas dapat disimpulkan bahwa T crit = 4ns sehingga fmax = = 4𝑛𝑠 =
𝑇𝑐𝑟𝑖𝑡
250𝑀𝐻𝑧. Bagaimana dengan throughput? Bila diasumsikan setiap data yang diproses
berukuran 1 byte, data masuk setiap satu clock cycle baru dan data output keluar setiap satu
clock juga (setelah ada latency sebanyak 3 clock) maka pada clock ke-4 setiap data baru yang
masuk akan memberikan satu data output yang baru juga. Oleh karena itu, throughputnya
adalah 250Mbyte/s.
Bagaimana dengan iteration bound? Dapat dicari menggunakan LPM (Longest Path Matrix)
atau dengan cara satu per satu dihitung. Untuk cara satu-per-satu, digunakan representasi
diagram blok sebagai berikut:
Loop didefinisikan sebagai suatu path yang mulai dan berakhir di node yang sama. Oleh karena
itu, di rangkaian di atas, terdapat empat buah loop
Menggunakan Longest Path Matrix. Mengonsiderasi blok diagram bentuk Direct Form II,
terdapat 3 buah elemen delay sehingga nilai 𝑑 = 3. Dibuat 3 matriks, 𝐿1 , 𝐿2 , 𝐿3 . Matriks L1
dibuat dengan mengisi elemennya dengan waktu komputasi yang dibutuhkan antara elemen
delay i ke elemen delay j yang melewati (m-1) delay. Untuk m=1 maka dibuat tanpa melewati
elemen delay terlebih dahulu. Matriks 𝐿(𝑚) untuk 𝑚 ≥ 2 dapat ditentukan menggunakan rumus
rekursif berikut:
( ) ( ) ( )
𝑙𝑖,𝑗𝑚+1 = max(−1, 𝑙𝑖,𝑘
1 𝑚
+ 𝑙𝑘,𝑗 ),𝑘 ∈ 𝐾
Berikut adalah hasilnya:
−1 0 −1
𝐿(1) = 4 −1 0
4 −1 −1
( )2 ( ) 2 ( )
2
𝑙1,1 =? 𝑙1,2 =? 𝑙1,3 =?
Dicari dari baris & kolom ke- ( 2 ) ( 1 ) ( 1 ) ( 2 ) ( 1 ) ( 1)
𝑙1,2 = 𝑙1,𝑘 + 𝑙𝑘,2 =? 𝑙1,3 = 𝑙1,𝑘 + 𝑙𝑘,3 =?
1 elemen yang tidak (-1). Hanya bisa untuk k=3 namun Tidak mungkin untuk k=1
Nilai k tidak bisa 3 karena l1,3 itu tetap (-1) sehingga dan k=3 sehingga k=2.
= -1. ( 2) (2 )
(2) ( 1) ( 1) 𝑙1,2 = −1 𝑙1,3 =0
𝑙1,1 = 𝑙1,2 + 𝑙2,1 = 4
( )
2 ( )
2 ( )
2
𝑙2,1 =? 𝑙2,2 =? 𝑙2,3 =?
( 2) ( 1) ( 1) ( 2) ( 1) ( 1) ( 2) ( 1) ( 1)
𝑙2,1 = 𝑙2,𝑘 + 𝑙𝑘,1 =? 𝑙2,2 = 𝑙2,𝑘 + 𝑙𝑘,2 =? 𝑙2,3 = 𝑙2,𝑘 + 𝑙𝑘,3 =?
Nilai k tidak mungkin k=1 Nilai k yang mungkin hanya Nilai k yang mungkin hanya
dan k=2 maka k=3. k=1 dan k=3. Untuk k=3 k=1 saja. Tapi bertemu (-1)
(2) ( 1) ( 1) ketemu (-1) sehingga k=1 (1)
𝑙2,1 = 𝑙2,3 + 𝑙3,1 = 4 untuk 𝑙1,3
(2 ) ( 1) ( 1)
𝑙2,2 = 𝑙2,1 + 𝑙1,2 = 4 (2)
𝑙2,3 = −1
( )
2 2 ( ) 2 ( )
𝑙3,1 =? 𝑙3,2 =? 𝑙3,3 =?
Nilai k yang mungkin hanya Nilai k yang mungkin hanya Nilai k yang mungkin adalah
k= 2 saja, tapi bertemu (-1) k=1 k=1,2. Dua pilihan k bertemu
sehingga ( 2 ) ( 1 ) ( 1 ) (-1) maka
𝑙3,2 = 𝑙3,1 + 𝑙1,2 = 4
( 2) ( 1) ( 1) ( 2) ( 1) ( 1)
𝑙3,1 = 𝑙3,𝑘 + 𝑙𝑘,1 = −1 𝑙3,3 = 𝑙3,𝑘 + 𝑙𝑘,3 = −1
(𝑚)
𝑙𝑖,𝑖
𝑇∞ = max { }
𝑚∈{1,2,..,𝑑} 𝑚
Arsitektur Pipelined
Menghitung critical path, maksimum frequency, loop bound, iteration bound,
throughput arsitektur pipeline.
Critical path pada arsitektur pipeline sekarang hanyalah satu proses perkalian yang memakan
waktu 2ns. Diperoleh 𝑇𝑐𝑟𝑖𝑡 = 2𝑛𝑠.
1 1
Frekuensi maksimum arsitektur pipelined sekarang adalah 𝑓𝑚𝑎𝑥 = 𝑇 = 2𝑛𝑠 = 500𝑀𝐻𝑧.
𝑐𝑟𝑖𝑡
Throughput rangkaian bisa dikatakan meningkat karena frekuensi clock maksimum meningkat
juga. Namun, tetap diasumsikan bahwa setelah data input sudah lengkap (setelah lewat masa
latency awal sebanyak 3-4 clock), rangkaian mampu mengeluarkan output baru setiap ada input
baru yang masuk. Oleh karena itu, throughput sekarang adalah 500Mbyte/sekon.
Apabila diasumsikan supply tegangan adalah 5V dan tegangan threshold adalah 0.5V. Berikut
adalah beberapa pertanyaan.
a. Berapa supply tegangan minimum agar struktur parallel dan pipeline dapat tetap bekerja?
Berlaku untuk setiap rangkaian, propagation delay 𝑇𝑝𝑑 yang berhubungan dengan charging dan
discharging capasitor di critical path dirumuskan sebagai berikut:
𝐶𝑐ℎ𝑎𝑟𝑔𝑒 𝑉0
𝑇𝑝𝑑 =
𝑘 (𝑉0 − 𝑉𝑡 )2
Untuk Pipeline:
𝑃𝑠𝑒𝑞 = 𝐶𝑡𝑜𝑡𝑎𝑙 𝑉02 𝑓1
Dimana f1 merupakan frekuensi maksimum saat belum diterapkan pipelining. Jumlah level
pipeline yang digunakan adalah M=2 karena critical path akhir setengah dari critical path awal.
𝐶𝑐ℎ𝑎𝑟𝑔𝑒
Alhasil, charging & discharging kapasitor menjadi dengan 𝐶𝑡𝑜𝑡𝑎𝑙 tetap sama.
2
Hal itu menunjukkan bahwa perbandingan antara konsumsi daya pada arsitektur pipelined
terhadap arsitektur awal sebesar 𝛽2 . Berhubung nilai 0 < 𝛽 < 1 haruslah 𝛽2 < 1 yang
mengimplikasikan 𝑃𝑝𝑖𝑝 < 𝑃𝑠𝑒𝑞 . Tapi, saya ingin menjawab persoalan ini dari dua sisi, yakni
sisi dimana frekuensi sistem dibuat tetap sama untuk yang pipelined & original dan sisi
dimana frekuensi pipeline dibuat lebih besar dibandingkan frekuensi sistem original.
Maka, penurunan konsumsi daya untuk arsitektur pipelined (frekuensi sistem tetap):
𝛽2 = 0.62 = 0.36
𝛽2 = 0.5882 = 0.345
Maka daya konsumsi arsitektur pipeline adalah 34.5% atau 36% (jika 𝛽 dibulatkan ke 0.6)
dari arsitektur original. Dapat disimpulkan bahwa besar penurunan konsumsi daya antara
arsitektur pipelined terhadap arsitektur awal adalah (100 − 34.5)% = 𝟔𝟓. 𝟓% atau (100 −
36)% = 𝟔𝟒%. Ini adalah jawaban untuk kasus dimana 𝒇𝒑𝒊𝒑 = 𝒇𝒔𝒆𝒒 .
end
Lakukan unfolding dengan factor J=6. Dengan perintah lanjutan sebagai berikut
a. Buat persamaan hasil unfolding
b. Buat blok diagram hasil unfolding
c. Hitung critical path system, loop bound, throughput dan frekuensi maksimum sebelum
dan sesudah unfolding
d. Buatlah Verilog code untuk persamaan awal dan unfolding. Tunjukan dari hasil
simulasi bahwa hasilnya adalah sama.
Jawab:
Membuat persamaan hasil unfolding dengan J=6.
Pertama-tama tinjau terlebih dahulu DFG dari sistem yang ingin di unfolding. Berikut gambar
untuk blok diagram dan DFG (yang sudah di mapping ke huruf kapital untuk setiap adder &
multiplier):
Dengan faktor J = 6, rule of thumb-nya adalah jumlah node pada DFG akhir adalah J kali node
DFG awal. Aturan dalam membuat Unfolding DFG adalah:
1. Untuk setiap node U di DFG original, gambarkan kembali sebanyak J kali node U0, U1,
…, UJ-1.
2. Untuk setiap edge dari 𝑈→𝑉 dengan sebuah delay sebanyak w di DFG original,
𝑖+𝑤
gambarkan sebanyak J edges dari 𝑈𝑖 → 𝑉(𝑖+𝑤)%𝐽 dengan jumlah delay sebanyak ⌊ ⌋
𝐽
untuk 𝑖 = 0,1, … , 𝐽 − 1
Berhubung terdapat 9 node di DFG original, DFG hasisl unfolding akan memiliki 9 × 6 = 54
node. Untuk menyamakan notasi, dilakukan mapping setiap adder & multiplier ke sebuah huruf
kapital sesuai tabel di bawah ini
Awal Hasil Mapping
M1 A
M2 B
M3 C
A1 D
A2 E
A3 F
A4 G
M4 H
M5 I
Bagian ABCDE tidak mengandung elemen delay sama sekali sehingga bentuk strukturnya
tetap sama seperti pada DFG original. Bagian FGHI memiliki beberapa elemen delay sehingga
harus mengimplementasikan algoitma tahap 2 (hanya untuk F → I dan F→ H saja).
Nilai i Node Awal → Akhir Algoritma Jumlah Delay
(𝑈𝑖 → 𝑉(𝑖+1)%6) 𝑖+1
⌊ ⌋
6
0 𝐹0 → 𝐻𝑥 𝐹0 → 𝐻1 0
1 𝐹1 → 𝐻𝑥 𝐹1 → 𝐻2 0
2 𝐹2 → 𝐻𝑥 𝐹2 → 𝐻3 0
3 𝐹3 → 𝐻𝑥 𝐹3 → 𝐻4 0
4 𝐹4 → 𝐻𝑥 𝐹4 → 𝐻5 0
5 𝐹5 → 𝐻𝑥 𝐹5 → 𝐻0 1
Persamaan awal:
𝒚(𝒏) = 𝒂 ∗ 𝒙(𝒏 − 𝟏) + 𝒃 ∗ 𝒙(𝒏 − 𝟐) + 𝒄 ∗ 𝒙(𝒏 − 𝟑) + 𝒅 ∗ 𝒚(𝒏 − 𝟐) + 𝒆 ∗ 𝒚(𝒏 − 𝟑)
maka setiap n diganti menjadi 6𝑘. Setelah itu, dibuat persamaan untuk y(6k), y(6k+1), y(6k+2),
…, y(6k+5). Berikut adalah setiap persamaan setelah diubah:
𝒚(𝟔𝒌) = 𝒂 ∗ 𝒙(𝟔𝒌 − 𝟏) + 𝒃 ∗ 𝒙(𝟔𝒌 − 𝟐) + 𝒄 ∗ 𝒙(𝟔𝒌 − 𝟑) + 𝒅 ∗ 𝒚(𝟔𝒌 − 𝟐) + 𝒆 ∗ 𝒚(𝟔𝒌 − 𝟑)
Lakukan proses unfolding dengan J=3 terlebih dahulu. Persamaan awal dengan N=11:
For k = 0 to N-1:
𝑦(𝑘 ) = 𝑎 ∗ 𝑦(𝑘 − 2) + 𝑏 ∗ 𝑥 (𝑘 − 1) + 𝑐 ∗ 𝑥 (𝑘 − 2)
Substitusi k = 3n karena faktor unfolding J=3 maka diperoleh:
For k = 0 to N/3-1:
𝑦(3𝑛) = 𝑎 ∗ 𝑦(3𝑛 − 2) + 𝑏 ∗ 𝑥(3𝑛 − 1) + 𝑐 ∗ 𝑥 (3𝑛 − 2)
𝑦(3𝑛 + 1) = 𝑎 ∗ 𝑦(3𝑛 − 1) + 𝑏 ∗ 𝑥 (3𝑛) + 𝑐 ∗ 𝑥 (3𝑛 − 1)
𝑦(3𝑛 + 2) = 𝑎 ∗ 𝑦(3𝑛) + 𝑏 ∗ 𝑥 (3𝑛 + 1) + 𝑐 ∗ 𝑥 (3𝑛)
Membuat DFG untuk arsitektur unfolding dengan langkah-langkah berikut:
1. Mencopy seluruh node yang ada di DFG original menjadi sebanyak J kali.
2. Menghubungkan setiap node dari U → J.
Dilakukan mapping dari Multiplier & Adder menjadi huruf untuk mempermudah. Berikut
adalah mapping yang dilakukan:
Melakukan proses retiming dengan cutset dan pipelining untuk menurunkan critical path dari
arsitektur unfolding. Pertama, dicari terlebih dahulu critical path awal untuk arsitektur
unfolding. Terdapat banyak critical path yang mengandung 1 multiplier dan 2 adder yang
ditandai dengan gambar berikut:
Membuktikan prosedur retiming sudah benar dengan melakukan simulasi Verilog. Asumsi
sinyal awal x(k) punya 10 elemen bernilai {1,2,3,4,5,6,7,8,9,10}. Berikut adalah base-code
yang mengimplementasikan arsitektur sistem awal sebelum Unfolding:
`timescale 1ns / 1ps
module Pre_Unfolding(
input clock,
input reset,
input [7:0]Signal_In,
output reg [7:0]Signal_Out,
output reg [7:0]Signal_Out1,
output reg [7:0]Signal_Out2
);
//Wires for computation
//x_n1 is x(n-1), x_n2 is x(n-2), y_n1 is y(n-1) and y_n2 is y(n-2)
reg [7:0] x_1, x_2, x_3, y_1,y_2,y_3;
wire [7:0]x_n,x_n1,x_n2,y_n,y_n1,y_n2;
wire [7:0] temp_sum_2;
//Combinational Part
//This was the whole issue all along. If this line is commented, the
output is null.
Simulasi sebelum Unfolding menggunakan kode Testbench yang dapat dilihat pada bagian
Lampiran (terdapat kode pendukung Element Delay juga). Berikut adalah hasil simulasinya
untuk arsitektur sebelum unfolding:
Berikut adalah code Verilog untuk arsitektur setelah dilakukan Unfolding J=3
`timescale 1ns / 1ps
module Unfolding(
input clock,
input reset,
//Deklarasi untuk x(3k), x(3k+1), dan x(3k+2)
input [7:0]Signal_In_1,
input [7:0]Signal_In_2,
input [7:0]Signal_In_3,
//Deklarasi untuk y(3k), y(3k+1), dan y(3k+2)
output reg [7:0]Signal_Out1,
output reg [7:0]Signal_Out2,
output reg [7:0]Signal_Out3
);
//Wires for computation
//x_3k itu x_3n, x_3k-1 itu x_n31, x_3k-2 itu x_n32
// y_3k itu y_3n y_3k-1 itu y_n31, y_3k-2 itu y_n32
wire [7:0]x_3n,x_n31,x_n32,y_3n,y_n31,y_n32;
//Khusus untuk sinyal x_3k+1, x_3k+2, y_3k+1 dan y_3k+2
wire [7:0]x_3n_plus_1, x_3n_plus_2, y_3n_plus_1,y_3n_plus_2;
//Combinational Part
Berikut adalah hasil simulasi untuk arsitektur Unfolding yang belum dilakukan retiming &
pipelining (menggunakan test vector sinyal x(k) yang sama) :
Berikut adalah code Verilog untuk arsitektur Unfolding yang sudah dilakukan retiming
Simulasi setelah Unfolding menggunakan kode Testbench yang sama dan berikut adalah hasil
simulasinya:
LAMPIRAN
Testbench Unfolding Nomor 3 (Pre-Unfolding)
`timescale 1ns / 1ps
module Testbench;
reg clock;
reg reset;
reg [7:0] Signal_In;
wire [7:0] Signal_Out,Signal_Out1,Signal_Out2;
// Clock generation
always begin
#5 clock = ~clock;
end
endmodule