BAB 4 PERANCANGAN ARSITEKTUR 2K FFT-IFFT CORE
Pada bab ini dibahas mengenai perancangan arsitektur 2k FFT-IFFT Core berdasarkan model Matlab yang telah dibuat sebelumnya. Terdapat dua pendekatan arsitektur yang umum digunakan yaitu arsitektur interatif dan arsitektur pipeline datapath. Arsitektur iteratif menggunakan satu core komputasi dan satu buah blok memori besar. Data diambil dari memori, masuk ke blok komputasi dan dituliskan kembali ke memori. Proses ini diulangi terus menerus dengan core yang sama hingga didapat FFT yang diinginkan. Di lain pihak arsitektur pipeline datapath menggunakan beberapa blok core komputasi dan memecah memori menjadi beberapa blok kecil. Masing masing tahap terdiri dari blok memori dan core komputasi. Pada perancangan 2k FFT-IFFT Core ini dipilih arsitektur pipeline datapath karena tipe arsitektur ini dapat menerima data secara terus menerus (kontinu) sehingga tidak memerlukan memori buffer tambahan diluar sistem. Sehingga throughput menjadi lebih tinggi. Perancangan arsitektur dilakukan bertahap. Tahap pertama adalah menentukan arsitektur dan mempartisi rancangan menjadi beberapa blok. Pada tahap berikutnya masing-masing blok dijabarkan mikro-arsitekturnya sehingga didapatkan blok datapath RTL yang lengkap. Tahap terakhir adalah membuat state-machine untuk sistem kontrol.
4.1 Arsitektur dan Partisi Rancangan Arsitektur yang dipilih untuk 2k FFT-IFFT Core yang dirancang adalah arsitektur pipeline FFT prosesor. Arsitektur pipeline memiliki berbagai variasi berdasarkan banyaknya jalur data dan metode mengurutkan datanya. Arsitektur tersebut diantaranya, 1. Multiple Path Delay Commutator. 2. Single Path Delay Commutator. 3. Single Path Delay Feedback.
34
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 35
Dari ketiga arsitektur tersebut, 2k FFT-IFFT Core dirancang menggunakan arsitektur bertipe Single Path Delay Feedback. Arsitektur ini dipilih karena memiliki efisiensi memori yang paling baik. Selain itu, sistem single path memiliki kebutuhan perangkat keras yang lebih sedikit daripada sistem multiple path. Namun dengan resiko, memiliki latency yang lebih panjang[13]. Arsitektur Single Path Delay Feedback menggunakan sejumlah FIFO buffer untuk menyimpan data sementara sebelum dapat dikomputasi oleh unit butterfly (Gambar 4-1). Pada Radix-4 diperlukan 4 buah FIFO buffer kompleks dengan panjang masingmasing
⁄4. Sedangkan pada Radix-8 diperlukan 8 buah FIFO buffer kompleks den-
gan panjang masing-masing
⁄8. Dengan demikian panjang FIFO buffer pada setiap
tahap akan semakin pendek.
Gambar 4-1 Blok arsitektur single datapath delay feedback
4.1.1
Tahap Input dan Tahap Output
Tahap input adalan proses untuk menentukan input data (Gambar 4-2). Apabila mode yang digunakan FFT maka input berlaku normal. Namun apabila mode IFFT, input real dan imajiner harus ditukar terlebih dahulu berdasarkan sinyal inverse. Selain itu terdapat register input untuk menjaga agar tidak ada delay dari luar sistem. Tahap output sedikit lebih rumit hal ini ditunjukkan pada Gambar 4-3. Selain harus menukar nilai real dan imajiner, tahap ouput juga bertanggung jawab untuk melakukan normalisasi data. Nilai normalisasi tergantung kepada sinyal gain yang dimasukkan. Pada FFT argumen gain akan membagi output sebesar 2
. Proses pembagian
dilakukan dengan melakukan shift data output ke kanan. Sedangkan pada IFFT argumen gain akan mengurangi faktor normalisasi dari 1⁄
menjadi 1⁄
2
.
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 36
Gambar 4-2 Tahap Input
Tabel 4-1 Tabel kebenaran tahap input
inverse 0
inpi_sync inpi
inpq_sync inpq
1
inpq
inpi
Tabel 4-2 tabel kebenaran tahap output
gain 0
inverse = 0 outi_sync outq_sync outi[DW-1:0] outq[DW-1:0]
inverse = 1 gain outi_sync outq_sync 0 outq[DW+10:11] outi[DW+10:11]
1
outi[DW:1]
outq[DW:1]
1
outq[DW+9:10]
outi[DW+9:10]
2
outi[DW+1:2]
outq[DW+1:2]
2
outq[DW+8:9]
outi[DW+8:9]
3
outi[DW+2:3]
outq[DW+2:3]
3
outq[DW+7:8]
outi[DW+7:8]
4
outi[DW+3:4]
outq[DW+3:4]
4
outq[DW+6:7]
outi[DW+6:7]
5
outi[DW+4:5]
outq[DW+4:5]
5
outq[DW+5:6]
outi[DW+5:6]
6
outi[DW+5:6]
outq[DW+5:6]
6
outq[DW+4:5]
outi[DW+4:5]
7
outi[DW+6:7]
outq[DW+6:7]
7
outq[DW+3:4]
outi[DW+3:4]
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 37
Gambar 4-3 Tahap Output
4.1.2
Tahap 1
Gambar 4-4 Diagram blok datapath untuk tahap 1
Tahap 1 adalah Radix-4. Oleh karena itu diperlukan sebuah Radix-4 butterfly, 6 blok FIFO untuk 3 blok data kompleks, complex multiplier, dan beberapa unit pendukung. Proses komputasi dibagai menjadi 4 fase tulis, dan 4 fase baca. Ketiga fase tulis pertama membaca data dan menyimpannya dalam FIFO buffer. fase tulis keempat dan tahap baca pertama berlangsung secara bersamaan. Data dibaca dari FIFO buffer, ma-
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 38
suk ke butterfly, dan hasilnya dituliskan kembali ke FIFO. Ketiga fase baca terakhir membaca data dari FIFO satu persatu. Tabel 4-3 Pembagian siklus clock pada tahap 1
siklus clock relatif
4.1.3
fase
0-511
tulis 0
baca X
512-1023
1
X
1024-1535
2
X
1536-2047
3
0
0-511 (+2048)
0
1
512-1023 (+2048)
1
2
1024-1535 (+2048)
2
3
1536-2047 (+2048)
3
0
Tahap 2 dan Tahap 3
Gambar 4-5 Diagram blok datapath untuk tahap 2 dan tahap 3
Tahap ke-2 dan ke-3 menggunakan mikro-arsitektur yang sama. Perbedaannya terletak pada lebar bit datapath. Pada tahap 2 lebar datapath adalah 2x19 bit, sedangkan pada tahap 3 memiliki datapath yang lebih lebar yaitu 2x22 bit. Perbedaan utama dengan Tahap 1 adalah butterfly yang digunakan dan jumlah FIFO buffer. Tahap ini memerlukan 14 FIFO buffer untuk menyimpan 3 blok data kompleks.
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 39
Tabel 4-4 Pembagian siklus clock pada tahap 2
siklus clock relatif
fase
0-63
tulis 0
baca X
64-127
1
X
128-191
2
X
192-255
3
X
256-319
4
X
320-383
5
X
384-447
6
X
448-511
7
0
0-63 (+512)
0
1
64-127 (+512)
1
2
128-191 (+512)
2
3
192-255 (+512)
3
4
256-319 (+512)
4
5
320-383 (+512)
5
6
384-447 (+512)
6
7
448-511 (+512)
7
0
Proses komputasi tahap 2 dan 3 dibagai menjadi 8 fase tulis, dan 8 fase baca. Ketujuh fase tulis pertama digunakan untuk menulis data input ke FIFO. Fase tulis terakhir dan fase baca pertama berlangsung bersamaan. Data dibaca dari FIFO buffer, masuk ke butterfly, dan hasilnya dituliskan kembali ke FIFO. Ketujuh tahap baca yang berikutnya membaca data dari FIFO satu persatu.
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 40
Tabel 4-5 Pembagian sikuls clock pada tahap 3
siklus clock relatif
4.1.4
fase
0-7
tulis 0
baca X
8-15
1
X
16-23
2
X
24-31
3
X
32-39
4
X
40-47
5
X
48-55
6
X
56-63
7
0
0-7 (+64)
0
1
8-15 (+64)
1
2
16-23 (+64)
2
3
24-31 (+64)
3
4
32-39 (+64)
4
5
40-47 (+64)
5
6
48-55 (+64)
6
7
56-63 (+64)
7
0
Tahap 4
Gambar 4-6 Diagram blok datapath untuk tahap 4
Tahap ke-4 merupakan reduksi dari tahap ke-3 atau tahap ke-2. Tahap ini menggunakan lebar 25 bit. Prosedur pembagian fase komputasi juga sama dengan tahap ke-2 atau 3. Karena tidak memerlukan perkalian twiddle factor maka mikro-arsitektur untuk perkalian twiddle factor tidak digunakan.
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 41
Tabel 4-6 Pembagian siklus clock pada tahap 4
siklus clock relatif
fase
0
tulis 0
baca X
1
1
X
2
2
X
3
3
X
4
4
X
5
5
X
6
6
X
7
7
0
0 (+8)
0
1
1 (+8)
1
2
2 (+8)
2
3
3 (+8)
3
4
4 (+8)
4
5
5 (+8)
5
6
6 (+8)
6
7
7 (+8)
7
0
4.2 Perancangan Mikro-arsitektur 2k FFT-IFFT Core Masing-masing tahap dibangun dari unit-unit kecil yang disebut dengan mikroarsitektur. Mikro-arsitektur adalah penjabaran detail mengenai fungsi tiap unit menggunakan elemen logika sederhana.
4.2.1
Sign Extend Unit
Sign extend unit berada pada awal setiap tahap. Berfungsi untuk menaikkan lebar bit untuk mengantisipasi operasi butterfly. Pada tahap 1 sign extend unit menambahkan 2 bit untuk nilai integer sedangkan pada tahap 2, 3, dan 4 bit yang ditambahkan 3 bit. Secara umum unit ini dapat digambarkan seperti pada Gambar 4-7.
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 42
Gambar 4-7 Blok sign extend unit dan detailnya
4.2.2
ROM Sinus dan Cosinus
Gambar 4-8 ROM nilai cosinus dan sinus
Kedua ROM ini menyimpan
⁄8
1 twiddle factor pertama. Twiddle factor real
didapat dari 1⁄8 nilai pertama siklus cosinus sedangkan twiddle factor imajiner didapat dari 1⁄8 nilai pertama siklus sinus ( sin
). Nilai sinus dan cosinus diberikan
kepada twiddle factor generator untuk mendapatkan nilai twiddle factor yang diinginkan. Unit arsitektur ditunjukkan pada Gambar 4-8.
4.2.3
Dekoder Tulis FIFO
Gambar 4-9 Dekoder untuk menentukan FIFO yang aktif untuk ditulis
Dekoder ini digunakan untuk menentukan FIFO yang aktif dan siap menerima data. Dekoder ini dikendalikan dengan sinyal phwr (Phase Write). Pada saat pengisian data ke FIFO (fase 0 sampai dengan 6) hanya satu FIFO yang aktif pada satu waktu. Pada saat komputasi butterfly dilakukan (fase 7) seluruh FIFO harus aktif untuk menampung data hasil komputasi. Unit arsitektur ditunjukkan pada Gambar 4-9.
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 43
4.2.4
Dekoder Baca FIFO
Gambar 4-10 Dekoder untuk menentukan FIFO yang aktif untuk dibaca
Dekoder ini digunakan untuk menentukan FIFO yang aktif dan siap mengeluarkan data. Dekoder ini dikendalikan dengan sinyal phrd (Phase Read) dari unit kontrol. Sama halnya dengan kondisi menulis, pada saat terjadi komputasi butterfly seluruh FIFO juga harus aktif untuk memberikan data ke butterfly core. Pada fase yang lain (fase 0 sampai dengan 6) data dibaca dari FIFO satu-per-satu. Unit arsitektur ditunjukkan pada Gambar 4-10.
4.2.5
Radix-4 Butterfly Core
Gambar 4-11 Radix-4 butterfly
Butterfly core Radix-4 didesain sebagai sirkuit kombinasional murni (Gambar 4-11). Seluruh proses harus diselesaikan pada satu siklus clock. Data input berasal dari FIFO buffer untuk x(1), x(2), dan x(3). Sedangkan x(0) diperoleh langsung dari input tahap tersebut yang telah melalui sign extend unit. Ouput X(1), X(2), dan X(3) akan masuk kembali ke FIFO, sedangkan X(0) langsung masuk ke tahap selanjutnya yaitu perkalian dengan konstanta twiddle factor. Radix-4 butterfly ini memerlukan 8 buah adder/subtractor dan satu buah non-trivial twiddle factor yaitu
. Perkalian bilangan kompleks dengan faktor tidak me-
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 44
merlukan unit multiplikasi. Hanya dengan membalik elemen riil dan elemen imajiner dan meng-invert elemen real yang baru. (4.1)
4.2.6
Radix-8 Butterfly Core
Gambar 4-12 Radix-8 butterfly
Sama halnya dengan Radix-4 butterfly, unit Radix-8 juga didesain sebagai sirkuit kombinasional murni (Gambar 4-12). Unit ini memiliki 8 input dan output, input x(0) langsung diperoleh dari sign extend unit, sedang input lainnya berasal dari FIFO buffer. Salah satu output akan langsung disalurkan ke tahap selanjutnya, sedangkan tujuh lainnya harus disimpan terlebih dahulu di FIFO buffer. Unit radix-8 lebih kompleks dibanding Radix-4. Unit ini memerlukan 24 adder/subtractor yang harus bekerja dalam waktu sama dan 12 trivial twiddle factor. Ke-12 twiddle factor itu terdiri dari 4 tipe yang ditunjukkan pada Tabel 4-7. Untuk twiddle factor 1, tidak ada operasi yang dilakukan, sedangkan twiddle factor – membalik elemen real dan elemen imajiner dan meng-invert elemen imajiner yang baru. Twiddle factor
dan
memerlukan sirkuit untuk scaling. Sir-
kuit ini dibuat dengan menggunakan shift-and-add. Perhatikan bahwa nilai 1⁄√2 dapat dinyatakan sebagai 2
2
2
2
2
2
. Sehingga suatu nilai
yang dikalikan dengan nilai konstan 1⁄√2, dapat dinyatakan sebagai jumlah dari
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 45
yang telah di-shift sebesar 1, 3, 4, 6, 8, dan 14 bit ke kanan dengan tingkat kepresisian 14 bit (perhatikan persamaan (4.2)). Gambar 4-13 adalah gambaran arsitektur untuk sistem tersebut.
√2
1
3
4
6
8
14
(4.2)
Tabel 4-7 Trivial twiddle factor pada Radix-8 butterfly
Twiddle
Nilai twiddle factor 1 1 √2 1 √2
Gambar 4-13 Sirkuit pembagian dengan 1.4142
4.2.7
FIFO Input Selector
FIFO input selector digunakan untuk memilih input ke masing-masing FIFO dan dikendalikan oleh sinyal kontrol phwr (Phase Write) yang ditunjukkan pada Gambar 4-14. Pada fase tulis ke-0 sampai dengan ke-7. FIFO input selector berfungsi untuk mendistribusikan data input ke FIFO buffer. Pada fase tulis terakhir, FIFO input selector harus memilih output butterfly agar dapat dituliskan ke FIFO buffer.
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 46
Gambar 4-14 FIFO input selector
4.2.8
FIFO Output Selector
FIFO output selector digunakan untuk memilih output dari masing-masing FIFO dan dikendalikan oleh sinyal kontrol phrd (Phase Read). Pada fase baca pertama, FIFO output selector harus mengalirkan data dari seluruh FIFO ke unit butterfly. Pada fase baca yang lain FIFO output selector membaca FIFO untuk disalurkan ke multiplier. Unit ini pada dasarnya adalah sebuah multiplekser 4 atau 8 input. Tabel 4-8 FIFO Ouput Selector untuk tahap 1
phrd 0
bfouti xo0i
bfoutq xo0q
keterangan output 0 butterfly
1
mem_ai
mem_aq
FIFO a
2
mem_bi
mem_bq
FIFO b
3
mem_ci
mem_cq
FIFO c
others
-
-
-
Tabel 4-9 FIFO Output Selector untuk tahap 2, 3, dan 4
phrd 0
bfouti xo0i
bfoutq xo0q
keterangan output 0 butterfly
1
mem_ai
mem_aq
FIFO a
2
mem_bi
mem_bq
FIFO b
3
mem_ci
mem_cq
FIFO c
4
mem_di
mem_dq
FIFO d
5
mem_ei
mem_eq
FIFO e
6
mem_fi
mem_fq
FIFO f
7
mem_gi
mem_gq
FIFO g
others
-
-
-
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 47
4.2.9
Blok FIFO
Blok FIFO untuk tahap 1 dan 2 dibuat dengan menggunakan perangkat lunak Coregen dari Xilinx. Blok ini dibentuk dari blok RAM dan beberapa buah pencacah yang berfungsi sebagai pembangkit nilai alamat RAM. Menggunakan RAM blok karena, FIFO yang panjang, apabila dibentuk dari register akan memakan area yang sangat besar. Panjang blok FIFO pada setiap tahap berbeda-beda. Untuk tahap 1 diperlukan 6 buah FIFO dengan panjang masing-masing 512 dan lebar 16 bit. Untuk tahap 2 diperlukan 14 buah FIFO dengan panjang masing-masing 64 dan lebar 19 bit. Tahap 3 dan tahap 4 menggunakan FIFO yang berbasis shift-register. Hal ini karena panjang FIFO yang pendek. Selain itu shift-register tidak memerlukan kontrol khusus untuk pengalamatan. Tahap 3 memerlukan 14 FIFO dengan panjang 8 dan lebar 22 bit. Untuk tahap 4 memerlukan 14 FIFO dengan panjang 1 dan lebar 25 bit.
4.2.10 Twiddle Factor Generator Twiddle factor generator bertanggung jawab untuk proses pembangkitan nilai twiddle factor berdasarkan nilai sinus dan cosinus dari ROM. Proses pembangkitan nilai twiddle factor ini didasarkan pada fakta bahwa seluruh nilai twiddle factor dapat diperoleh dari
⁄8
1 twiddle factor pertama[8]. Gambar 4-15 memperlihatkan tabel
dekoder. Angka-angka di samping tabel adalah indeks twiddle factor, sedangkan arah panah menunjukkan urutan decoding relatif terhadap indeks 256 twiddle factor pertama. Nilai yang disimpan adalah 256 nilai twiddle factor pertama yang diberi label . Nilai twiddle factor berikutnya akan tergantung pada dekoder ini. Misalnya untuk twiddle factor ke 257, maka akan berasal dari twiddle factor ke 255, yang telah di-invert dan ditukar posisi real dan imajinernya – lihat pada Tabel 4-10.
. Lebih jelasnya dapat di-
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 48
Gambar 4-15 Dekoder untuk twiddle factor generator
Tabel 4-10 Tabel dekoder twiddle factor generator
indeks twiddle factor 0-255
nilai twiddle (p+jq)
keterangan indeks positif
256-511
(-q-jp)
indeks negatif
512-767
(q-jp)
indeks positif
768-1023
(-p+jq)
indeks negatif
1024-1279
(-p-jq)
indeks posistif
1280-1535
(q+jp)
indeks negatif
1536-1791
(-q+jp)
indeks positif
1792-2047
(p-jq)
indeks negatif
4.2.11 Complex Multiplier Complex multiplier dibentuk dari 4 buah real multiplier dan 2 buah adder/subtractor. Digunakan untuk mengalikan output butterfly dengan konstanta twiddle factor. Pada akhir multiplikasi ditambahkan tiga buah register. Desain multiplier semacam ini oleh synthesis tool akan diubah menjadi complex pipeline multiplier dengan melakukan register balancing[14]. Yaitu proses mengeser pipeline register agar diperoleh pewaktuan yang lebih merata/seimbang.
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 49
Gambar 4-16 Complex pipeline multiplier empat tahap
4.2.12 Detektor Twiddle One Detektor twiddle one berfungsi untuk mendeteksi nilai twiddle factor. Jika twiddle factor real bernilai “011111111111” dan twiddle factor imajiner bernilai “000000000000” maka twiddle factor sebernarnya adalah 1
0 dan sinyal harus
di bypass.
4.2.13 Bypass Register Bypass register merupakan shift-register untuk mem-bypass multiplier (Gambar 4-17). Bypass ini diperlukan apabilai nilai twiddle factor yang harus dikalikan adalah 1
0 . Apabila dikalikan dengan nilai twiddle-nya, maka yang dikalikan adalah
nilai biner pendekatan untuk 1 atau “011111111111”. Dengan mem-bypass hasil multiplikasi, error karena nilai pendekatan ini dapat dihindari. Selain itu bypass register juga harus melewatkan sinyal kontrol detektor twiddle one untuk memilih output apakah dari sinyal bypass atau dari hasil multiplikasi. Panjang shift-register yang diperlukan adalah sepanjang delay pipeline multiplier.
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 50
Gambar 4-17 Shift-register untuk mem-bypass multiplier
4.2.14 Ouput Selector Ouput selector berfungsi untuk memilih output yang akan dikeluarkan. Apabila detektor twiddle one mendeteksi nilai twiddle factor adalah 1
0 , maka data yang
diambil adalah data dari bypass register, selain itu data berasal dari output multiplier. Dari Gambar 4-18 terlihat bahwa unit ini adalah sebuah multiplekser 2 input dengan register output. Register ini berfungsi untuk memisahkan delay antar tahap.
Gambar 4-18 Ouput selector
4.2.15 Unit Kontrol
Gambar 4-19 Satu unit kontrol
Tiap-tiap tahap FFT memiliki unit kontrol masing-masing. Unit kontrol tahap berikutnya dikendalikan dengan sinyal dari unit kontrol tahap sebelumnya. Unit kontrol mengeluarkan 4 sinyal kontrol yaitu : phwr (Phase Write), phrd (Phase Read), twpoint (Twiddle Point), dan headout (Gambar 4-19). Phase Write digunkan untuk mengontrol proses menulis ke FIFO. Phase Read digunakan untuk mengontrol proses membaca FIFO. Twiddle Point digunakan untuk menentukan nilai twiddle factor pada
Desain dan Implementasi 2k Pipeline FFT-IFFT Core untuk DVB-T | 51
saat itu, dan headout untuk memberi tahu tahap berikutnya bahwa data telah siap untuk masuk ke tahap tersebut. Seluruh unit kontrol hanya perlu mendapatkan sinyal headin sebagai tanda awal simbol masuk ke tahap tersebut.
Gambar 4-20 Tipikal FSM untuk unit kontrol
Gambar 4-20 adalah sebuah diagram FSM untuk tahap 1. Dari diagram tersebut, terlihat bahwa diperlukan beberapa buah counter dan akumulator untuk menghitung aliran data. Counter-counter tersebut adalah counter write, counter read, dan akumulator twiddle.