BAB IV Perancangan Decoder H.264
Pada bab ini akan dibahas perancangan modul-modul H.264 berbasis modul yang telah dirancang sebelumnya yaitu Inverse Transform [3], dan Deblocking Filter [2]. Rancangan sistem yang dapat dilihat pada gambar 4.1 terdiri dari memory utama, control macroblock, Deblocking Filter, Motion Compensator (MC), Memory MC, Inverse Transform dan MC_Inv. MC_Inv adalah modul yang menjembatani antara modul MC dan modul Inverse Transform. Hasil MC_Inv merupakan input untuk Deblocking filter. Integrasi modul-modul untuk menjadi Decoder H.264 dibutuhkan pengaturan alamat, control sistem, dan perancangan interface antar modul yang akan dijelaskan pada bab ini.
Gambar 4.1 Sistem Decoder H.264 (Top Level).
31
IV.1 Pengalamatan Tujuan sistem pengalamatan adalah mempermudah penempatan data dan pengindentifikasi
tentang
isi
yang
terkandung
dalam
alamat
tersebut.
Pengindentifikasi alamat dilakukan dengan dua cara yaitu berdasarkan letak dalam frame dan fungsi dalam modul tersebut. Pengidentifikasian berdasarkan letak terbagi atas frame, macroblock, block, dan posisi piksel. Satu frame terdiri dari 11 macroblock pada sumbu x dan 9 macroblock pada sumbu y (pada gambar 4.2). Satu macroblock terdiri dari 4 block sumbu x, 4 block sumbu y dan tiap block terdiri dari 4 piksel sumbu x dan 4 piksel sumbu y (pada gambar 4.3). Pengidentifikasian berdasarkan fungsi terbagi atas 2 yaitu data yang merupakan input dari modul tertentu (Inverse Transform, MC, Deblcoking Filter ) dan data yang merupakan dasar dari nilai warna yang digunakan yaitu luminance dan chroma.
Gambar 4.2 Jumlah macroblok pada sebuah frame
32
Gambar 4.3. perbandingan antara macroblock, block dan piksel
Gambar4.4. Indentifikasi dari sebuah alamat
Identifikasi sebuah alamat tampak pada gambar 4.4. Bit ke 23 hingga ke 20 adalah identifikasi untuk fungsi sebuah modul yang terdiri dari banks dan pil. Bit ke 19 hingga ke 0 adalah letak piksel yang terdiri dari frame, Mb_y, Mb_x, Block y, block_x, pixel y, dan pixel x. Banks yang berada pada bit ke 23 dan 22 pada gambar 4.4 menunjukan fungsi dari sebuah modul yaitu 00 untuk modul Inverse Transform, 01 untuk modul Deblcoking Filter dan 10 untuk modul MC. Untuk 11 digunakan sebagai nilai informasi yang digunakan untuk MC. Pil yang berada pada bit 21 dan 20 pada gambar 4.4 menunjukan warna yang digunakan yaitu 00 untuk nilai luminance, 01 untuk nilai chroma 1, 10 untuk nilai 33
chroma 2. Untuk 11 tidak digunakan untuk nilai warna, tetapi nilai strength pada Deblcoking filter (kondisi banks 01). Frame yang berada pada posisi 19 sampai 16 pada gambar 4.4 digunakan untuk menunjukan posisi frame yang sedang dijalankan. Penggunaan 4 bit untuk mengantisipasi bila frame yang digunakan sangat banyak (kondisi yang digunakan untuk RTL ini hanya 3 frame). Modul ini tidak memiliki modul Intra Prediction sehingga untuk nilai intra prediction digunakanlah frame 1101 hingga 1111. Macroblock yang berada pada posisi 15 sampai 8 pada gambar 4.4 terdiri dari Macroblock y dan Macroblock x. Tujuan pengalamatan posisi ini untuk memberikan informasi tentang macroblock yang sedang dituju. Masing-masing macroblock terdiri dari 4 bit, dimana pada Macroblock y digunakan bit dari 0000-1000 (9 macroblock) dan pada macroblock x digunakan bit dari 0000-1010 (11 macroblock). Block yang berada pada posisi 7 sampai 4 pada gambar 4.4 terdiri dari Block y dan Block x. Tujuan pengalamatan posisi ini untuk memberikan informasi tentang Block yang sedang dituju. Masing-masing Block terdiri dari 2 bit (4 block kearah sumbu x dan sumbu y pada sebuah macroblcok). Piksel yang berada pada posisi 3 sampai 0 pada gambar 4.4 terdiri dari Piksel y dan Piksel x. Tujuan pengalamatan posisi ini untuk memberikan informasi tentang Piksel yang sedang dituju. Masing-masing Block terdiri dari 2 bit dimana untuk menunjukan untuk baris dan kolom yang diambil. Untuk Piksel x memiliki sedikit perbedaan. Nilai yang digunakan hanya 2 bit yaitu 11 dan 01. Dua bit tersebut hanya digunakan pada saat Inverse Transform.
IV.2 Inverse Transform Rancangan Inverse Transform tampak pada gambar 4.5, terdiri dari pencacah_inv, transpose_inv, inv_block_transform, transpose_inv_1, counter_inv, ctrl_inv, alamat_inv, alamat_inv_u. 34
Gambar4.5 diagram blok besar inverse transform
Informasi untuk menjalankan Inverse Transform ini berasal dari control utama dengan mengirimkan sinyal lakukan_i pada counter inverse. Counter inverse ini akan memberikan informasi kepada control inverse. Control Inverse akan memberikan informasi untuk modul mana yang hendak dijalankan. Pada awalnya control akan mengaktifkan modul alamat inverse (dengan input la_alamat). Kemudian dilanjutkan dengan modul alamat inverse dengan memberikan informasi tentang alamat dari memory utama yang datanya akan digunakan. Data 35
tersebut akan masuk ke dalam modul pencacah inverse. Modul pencacah ini akan mencacah input 32 bit dara data utama menjadi 2 piksel yang masing-masing 16 bit. Hal ini dikarenakan data masukan yang berupa 32bit merupakan nilai 2 piksel yang masing-masing 16 bit. Nilai sebuah piksel adalah 16 bit dikarenakan memiliki nilai negative dan bernilai ribuan. Oleh sebab itu untuk menjalankan sebuah block yang terdiri dari 16 piksel dibutuhkan 8 clock agar data yang diperlukan lengkap dan ditunjukan pada gambar 4.6. 1
2
3
4
5
6
7
8
Gambar4.6. Alir data inverse dalam 1 block
Data dari pencacah akan dimasukan ke modul Transpose Inverse. Modul ini akan mentranspose data masukan dan hasilnya merupakan input inverse bock transform, dan akan dikeluarkan 4 piksel setiap clocknya. Inverse Block Trasform adalah modul inti pada inverse transform yang mana mengacu pada bagian II.2. Program yang digunakan pada modul ini merupakan program referensi [3]. Hasil dari modul pada gambar 4.7 akan dimasukan ke Transpose Inverse 1. Modul Transpose Inverse 1 berfungsi mengembalikan nilai ke bentuk awal yaitu data 16 bit sebelum ditranspose pada Transpose Inverse dan menjadi input untuk modul MC_inv.
Gambar4.7. Kiri hasil inverse transform referensi, kanan hasil inferse transform dari modul inverse_block_transform[3]
36
Modul Alamat Inverse dengan input lu_alamat digunakan sebagai informasi alamat untuk meletakan data yang merupakan hasil dari MC_inv. Hal ini disebabkan Control Inverse merupakan control yang menentukan kapan data dari MC_Inv akan diletakan ke memory utama.
IV.3 Deblocking Filter Rancangan Deblocking Filter yang tampak pada gambar 4.8 terdiri atas mux_db_32, pencacah, transpose, penggabung, control transpose, strength, strength_conv, cacah_strenght_conv, ctrl_dbfilter, info_dbfilter, address_dbfilter, db_filter, counter_dbfilter, change. Informasi untuk menjalankan Deblocking filter ini berasal dari control utama dengan mengirimkan sinyal lakukan_db pada counter dbfilter. Counter dbfilter ini akan memberikan informasi kepada control dbfilter, control transpose, dan strength. Control dbfilter memiliki fungsi memberikan informasi tentang modul yang hendak dijalankan. Control transpose memiliki fungsi memberikan informasi tentang tindakan yang akan dilakukan oleh transpose_db apakah menerima data atau mengeluarkan data. Strength berfungsi menentukan nilai strength yang hendak dipakai pada modul dbfilter. Pada awalnya control akan mengaktifkan modul address_dbfilter. Dilanjutkan dengan memberikan informasi tentang alamat dari memory utama yang datanya akan digunakan oleh modul address_dbfilter. Data tersebut akan masuk ke dalam modul strength atau mux. Data yang masuk ke strength adalah informasi awal yang berisikan nilai strength. Data yang menuju mux adalah informasi tentang data input yang berupa nilai piksel yang akan diolah.
37
Gambar4.8 Diagram block besar deblocking filter
38
Data input yang masuk ke mux_db_32 adalah data yang berupa input untuk deblocking filter yang berasal dari memory utama dan data yang berupa output dari deblocking filter yang datanya akan dikirim ke memory utama. Data yang berupa input dari memory atau hasil dari deblocking akan dicacah, ditraspose dan digabung agar data yang keluar sesuai dengan aturan yang berlaku baik pengaturan data pada memory utama maupun pengaturan data pada modul dbfilter. Oleh sebab itu, pada mux_db_32 ini dibutuhkan informasi yang berasal dari control dbfilter untuk menentukan data mana yang harus diteruskan. Pencacah, Transpose dan penggabung merupakan satu kesatuan yang bertujuan agar data yang dikeluarkan sesuai dengan aturan yang berlaku. Pencacah adalah data yang berfungsi untuk mencacah data 32 bit menjadi 4 data yang masingmasing 8 bit. Transpose adalah modul yang berfungsi agar input yang diperoleh akan dikeluarkan secara utuh, atau ditranspose atau ditukar tempatnya dimana digunakan untuk menyesuaikan data masukan pada aturan pada modul dbfilter atau memory utama. Penggabung adalah modul berfungsi menggabungkan 4 piksel dengan panjang data 8 bit menjadi 32 bit. Data perlu dicacah, dikarenakan data yang perlu ditranspose adalah data perpiksel. Data masukan adalah 32 bit yang mana terdiri dari 4 piksel yang masingmasing terdiri dari 8 bit yang ditunjukan pada gambar 4.9. Kemudian data yang dialirkan ditunjukan pada gambar 4.10, dimana pada gambar ini akan ditunjukan bagian data mana yang harus ditranspose. 1 2 3 4
Gambar4.9. Alir data secara umum dalam 1 block
39
Gambar4.10. Alir data yang akan dimasukan ke dalam modul dbfilter
Dbfilter adalah modul inti pada Deblocking filter yang mengacu pada bagian II.3. Program yang digunakan pada modul ini merupakan program referensi [2]. Untuk modul ini selain data piksel dibutuhkan juga data berupa nilai-nilai strength dan nilai QP, offset A dan offset B. Hasil dari dbfilter ini akan dijadikan sebagai input untuk mux_32_db yang pada akhirnya disimpan sebagai input untuk Motion compensator. Nilai-nilai strength berasal dari modul strength yang mana oleh strength_conv data tersebut diubah ke dalam 5 bit yang memiliki nilai intra_reg, MBbound, CoefCod, Refpic, MVBlockDiff. Hasil strength_conv ini akan dicacah pada cacah_strenght_conv. Nilai-nilai QP, offset A dan offset B pada modul Deblocking Filter ini dijadikan nilai yang tetap dan diletakan pada modul Info dbfilter. Nilai QP adalah 28 dan nilai offset A dan offset B adalah 0. Untuk hasil yang dikeluarkan tentu diperlukan pengalamatan sekali lagi sehingga address db_filter diaktifkan kembali. Untuk membedakan antara alamat yang digunakan untuk memanggil dan meletakan data maka digunakan change, sehingga dibutuhkan informasi ke luar dari modul ini untuk menentukan kapan alamat untuk memanggil atau meletakan data diaktifkan. Informasi ke luar ini diperoleh dari control dbfilter. Informasi ini memiliki fungsi lain yaitu menunjukan data yang mengalir adalah data output atau bukan.
40
IV.4 Interface MC_Inverse Pada bagian ini akan dibahas bagaimana hasil dari Motion Compensator dan Inverse Transform dijumlahkan untuk mendapatkan nilai yang berfungsi sebagai input dari Deblocking filter. Rancangan MC_Inv ini ditunjukan pada gambar 4.11 atau lebih detilnya pada lampiran A10 memiliki komponen buffer_hasil_mc, lak_buf_1,
buffer_hasil_inv,
plux_mc_inv_1,
reg_mc_inv,
mux_mc_inv_1,
mux_mc_inv_2, mc_inverse, mc_inverse2. Data_output_mc
Data_output_inv
Lakukan1a
Lakukan 1b
Buffer hasil mc
Mux mc inv1
Mc inverse
Buffer hasil mc
Mux mc inv2
Mc inverse 2
Lakukan 2
Lak buff 1 Penggabung mc inv
Buff hasil inv
Buff hasil inv
Reg mc inv
Lak buff 1
Plux mc inv 1
Gambar 4.11 interface mc inverse
Pada gambar rangkaian diatas memiliki banyak buffer yaitu 2 untuk buffer hasil_MC dan 2 buffer hasil_inverse. Hal ini dikarenakan, output dari MC luminance mengeluarkan 2 block secara bersamaan sehingga untuk menampung hasil tersebut dibutuhkan 2 buffer. Sedangkan untuk 2 buffer hasil_inverse berfungsi menampung
41
hasil inverse, menyesuaikan aliran dengan buffer hasil_mc dan mempercepat proses untuk luminance. Adanya 2 nilai yang berbeda maka dibutuhkan nilai mux untuk meneruskan data, apakah berasal dari buffer yang pertama atau kedua. Hasil dari kedua mux ini merupakan data MC dan data inverse transform yang akan dikalkulasi pada MC_inverse dengan perhitungan sebagai berikut: data_out= (data_inv+dq_round+(data_mc<
>dq_bits Hasil dari MC_inverse akan dilanjutkan ke MC_inverse2 yang mana berfungsi menyesuaikan hasil dari mc_inverse ketika data yang diperoleh lebih besar dari 255. Hasil dari MC_inverse2 ini berupa 4 data yang masing-masing 8 bit sehingga dibutuhkan penggabung untuk menjadikan 4 data tersebut menjadi 1 data 32 bit. Modul-modul pendukung yaitu reg_mc_inv memiliki fungsi sebagai delay dari register 2 bit, lak_buff1 untuk menentukan buffer_hasil_inv mana yang sedang dijalankan, dan plux_mc_inv1 yang digunakan untuk menunggu informasi yang kemudian dilanjutkan sebagai penunjuk kapan proses pengabungan dijalankan.
IV.6 Kontrol Utama Modul control utama pada gambar 4.12 digunakan untuk menentukan modul dan posisi macroblock yang hendak dijalankan atau diproses. Pada awalnya kontrol pada kondisi idle diaktifkan dengan start sehingga modul MC Luminance akan aktif. Pada saat MC luminance mendapatkan informasi untuk melanjutkan, kontrol akan mengaktifkan modul Inverse transform yang mana setiap perpindahannya dibutuhkan delay 1 clk yang mana dilakukan oleh modul transfer. Bila modul Inverse Transform telah selesai maka akan dilanjutkan ke modul MC Chroma atau deblocking filter tergantung permintaan dari modul Inverse Transform. Modul MC chroma, sama halnya pada modul MC luminance, ketika modul ini mendapatkan informasi untuk melanjutkan maka kontrol akan mengaktifkan modul Inverse transform. Saat modul 42
deblocking filter mendapatkan informasi untuk melanjutkan, kontrol maka akan kembali ke MC luminance. Semua modul akan kembali ke idle bila ada informasi reset.
Gambar 4.12 diagram alir untuk control_utama
Gambar 4.13 adalah gambar modul control_tindakan yang memiliki input yaitu clk, rst, start dan lanjut. Start akan terus aktif selama proses decoder ini berlansung. Nilai lanjut adalah informasi yang diperoleh dari masing-masing modul. Pada decoder ini memiliki 4 modul utama sehingga memiliki 4 nilai lanjut oleh sebab itu dipergunakan multiplexter untuk menentukan lanjut yang dijalankan. Modul MC untuk komponen luminance dan chroma dijadikan satu, maka nilai lanjut yang digunakan hanyalah 3. Output dari control_tindakan ini adalah la_db, la_inverse, la_luma, la_chroma, pil, banks, frame, mb_x, mb_y. La_db untuk mengaktifkan Deblocking filter, la_inverse mengaktifkan modul Inverse Trasform, la_luma mengaktifkan Motion Compensator bagian luminance, dan la_chroma mengaktifkan Motion Compensator bagian chroma. Pil, Banks, frame, mb_x, mb_y adalah informasi untuk menunjukan fungsi dan letak posisi yang sedang dijalankan. 43
clk
La_db
rst
La_inverse
start
La_luma La_chroma frame
Lanjut_db
lanjut
Control tindakan
Lanjut_inverse
Mb_x Mb_y
mux Lanjut_mc
Block_x Block_y banks pil
Gambar4.13. Modul Control_tindakan
44