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.