BAB III Perancangan Modul Motion Compensator Bab ini akan membahas tentang perancangan Motion Compensator (MC). Perancangan modul ini dilakukan dalam level RTL. Pembahasan dilakukan dari top level untuk MC dan dilanjutkan dengan bagian-bagiannya.
III.1 Modul Motion Compensator MC terbagi atas dua bagian yaitu perancangan untuk komponen luminance (lampiran A1) dan perancangan untuk komponen chroma (lampiran A2). Perancangan MC pada kedua komponen memiliki 6 bagian penting (gambar 3.1). Bagian-bagian penting pada MC dan fungsinya adalah sebagai berikut: 1. MC Depan, modul dengan fungsi mengambil informasi penting yang digunakan untuk keperluan menjalankan Motion Compensator. Informasi tersebut antara lain nilai motion vector array sumbu x dan sumbu y, vector mode, pred dir dan direct pred. Informasi tersebut diolah dan dijadikan informasi baru untuk pemberian nama alamat dan penentuan hasil yang hendak dipakai. 2. Memory MC, modul berupa buffer dan memiliki fungsi menyimpan data sementara, yang mana data tersebut digunakan untuk proses MC. Memory ini diletakkan bersama memory utama di top level. 3. MC Belakang, modul yang bertugas melakukan half piksel dan quarter piksel untuk luminance dan hasil rata-rata dari keempat sudutnya untuk chroma. 4. Alamat MC, modul yang berfungsi menentukan alamat pada memory utama dan memory MC.
13
5. Control MC berfungsi mengatur jalannya proses MC. 6. Komponen pendukung memiliki fungsi untuk menyesuaikan aliran data.
III.2 MC Depan
Pada Bagian ini akan dijelaskan fungsi dan bagian-bagian dari modul MC Depan yang memiliki tugas mengambil dan mengolah informasi awal. Modul-modul MC Depan terdiri dari MC depan pada luminance (lampiran A3) dan chroma (lampiran A4) yang secara umum terbagi atas 3 bagian utama yaitu: •
Gabung depan 1 memiliki fungsi mengambil dan mengolah informasi awal menjadi suatu identitas.
•
Gabung depan 2 digunakan untuk memberikan informasi untuk pemberian nama alamat yang dituju untuk memory utama (tempat data hendak diambil) dan nama alamat memory MC (tempat data hendak disimpan).
• Gabung depan 3 berfungsi memberikan informasi untuk nama alamat memory MC yang hendak dituju untuk diambil datanya. Modul-modul lainnya yang terdapat dalam MC depan ini yaitu: •
plex_1 adalah modul yang digunakan untuk menentukan alir data dari memory utama masuk ke memory_mc pertama atau kedua.
•
deplex1 adalah modul yang digunakan untuk menentukan nilai macroblock mana yang akan digunakan untuk penentuan nama alamat memory utama.
•
deplex2 adalah modul yang digunakan untuk menentukan nilai block mana yang akan digunakan untuk penentuan nama alamat memory utama.
14
Gambar 3.1. Diagram block Motion Compensator
15
Gambar 3.2 Diagram block motion compensator bagian depan
•
register_6 digunakan untuk delay data 6 bit yang memuat data informasi sumbu x dan nilai sumbu y. Informasi tersebut digunakan untuk menentukan alamat memory_mc. Gabung
depan
1
yang
berisikan
dua
kategori
yaitu
gabung_depan_luminance1 (lampiran A5) dan gabung_depan_chroma1 (lampiran A6) terdiri dari modul:
16
•
MC_depan_1 (gambar 3.3). Modul yang digunakan untuk menentukan posisi quarter piksel dari informasi yang diperoleh yaitu nilai makroblock dan motion vector. Modul ini jalan ketika inisialisasi bernilai 1.
Gambar 3.3. diagram blok MC_depan_1
•
MC_depan_Info. Modul yang berupa register 8 bit dan digunakan untuk menyimpan nilai mv_mode, direct_dir, dan pred_dir. Modul ini akan berjalan ketika diberi nilai inisialisasi 2.
•
MC_luminance_depan 2 (gambar 3.4). Modul yang hasilnya berupa register, digunakan untuk menentukan posisi nilai block dari nilai pos quarter yang diketahui dan dipakai pada proses luminance.
Gambar 3.4. diagram blok mc_luminance_depan_2
•
Mc_Luminance_depan 3 (gambar 3.5).
Modul yang digunakan untuk
menentukan posisi alamat piksel dari suatu block luminance yaitu dengan mengambil nilai bit ke 3 dan ke 2 dari posisi quarter piksel.
Gambar 3.5. diagram blok mc_luminance_depan_3
•
Dxdy_lumi (gambar3.6). Modul yang memberikan informasi nilai dx dan dy pada proses MC luminance. Nilai dx dan dy adalah nilai pergeseran arah dari 17
suatu nilai (piksel) yang merupakan nilai bit ke 0 dan bit ke 1 dari posisi quarter piksel.
Gambar 3.6. diagram blok dxdy_lumi
•
Register_10. Modul yang digunakan untuk menyimpan nilai posisi quarter piksel.
•
Mc_chroma_depan_4 (gambar 3.7). Modul yang digunakan untuk menentukan nilai posisi block chroma yang data masukan berupa pos quarter piksel.
Gambar 3.7. diagram blok mc_chroma_depan_4
•
Mc_chroma_depan_5. Memiliki fungsi yang sama dengan register 10 yaitu modul yang digunakan untuk menyimpan nilai posisi quarter piksel dan bekerja pada saat proses chroma dijalankan. Gabung
depan
2
gabungan_depan_luminance2
yang
berisikan
(lampiran
A7)
dan
dua
kategori
yaitu
gabungan_depan_chroma2
(lampiran A7) terdiri dari modul: •
MC_luminance_depan_pos. Modul yang digunakan untuk memberikan informasi posisi dan nomor block pada sumbu x dan y pada luminance. Sumbu x terdiri dari 7 block, sumbu y dari 8 block dan tiap block terdiri dari 4 pos untuk piksel sumbu y. Diagram alir yang diletakan pada memory mc tampak pada gambar 3.8.
18
Gambar3.8. Alir data untuk luminance
•
MC_chroma_depan_pos.
Modul yang digunakan untuk memberikan
informasi posisi dan nomor block pada sumbu x dan sumbu y secara umum pada chroma. Sumbu x dan sumbu y masing-masing terdiri dari 3 block dan tiap block terdiri dari 4 pos untuk piksel sumbu y. Diagram alir yang diletakan pada memory MC tampak pada gambar 3.9.
1
2
3
4
5
6
7
8
9
Gambar3.9. Alir data untuk chroma
19
•
Adder_mc (gambar 3.10). Modul yang memberikan informasi tentang posisi block yang akan diambil dengan menjumlahkan nilai block awal dengan nilai block dari MC_luminance_depan_pos atau MC_chroma_depan_pos.
Gambar 3.10. diagram blok adder_mc
•
MC_luminance_depan_11 (gambar 3.11).
Modul yang memberikan
informasi tentang macroblock dan Blok luminance yang akan dituju pada memory utama. Informasi posisi block berasal dari modul adder_mc.
Gambar 3.11. diagram blok mc_luminance_depan_11
•
MC_chroma_depan_11 (gambar 3.12). Modul yang memberikan informasi tentang macroblock dan Blok chroma yang akan dituju pada memory utama. Informasi posisi block berasal dari modul adder_mc.
Gambar 3.12. diagram blok mc_chroma_depan_11
•
MC_depan_sumbu (gambar 3.13). Modul yang memberikan nilai sumbu x dan sumbu y. Nilai tersebut digunakan untuk alamat yang dituju pada
20
memory MC. Informasi diperoleh dari mc_chroma_depan_pos atau mc_luminance_depan_pos.
Gambar 3.13. diagram blok mc_depan_sumbu
Gabung depan 3 berisikan dua kategori yaitu gabungan_depan_luminance3 (lampiran A8) dan gabungan_depan_chroma3 (lampiran A8) yang terdiri dari: •
xy_lumi. Modul yang menentukan nilai posisi x dan posisi y pada buffer dan memiliki ukuran 4 * 9 * 8 bit.
•
lakukan_lumi. Modul yang memberikan informasi bagaimana membaca memory_mc, apakah secara horizontal atau secara vertical pada saat MC luminance dijalankan (gambar 3.14).
Gambar 3.14. diagram alir untuk menentukan proses pada lakukan_lumi
Membaca memory secara horizontal diberi nilai informasi 2, sedangkan vertical diberi nilai 3.
21
•
sumbu_x_lumi. Modul yang digunakan ketika hendak mengambil data dari memory mc untuk menentukan nilai x (referensi alamat pada memory_mc), dan digunakan pada komponen luminance dijalankan (gambar 3.15).
Gambar3.15. diagram alir sumbu_x_lumi
•
sumbu_y_lumi. Modul yang digunakan ketika hendak mengambil data dari memory mc untuk menentukan menentukan nilai y (referensi alamat pada memory_mc), dan digunakan untuk komponen luminance dijalankan (gambar 3.16).
Gambar3.16. diagram alir sumbu_y_lumi
22
•
timing_mc2.
Sebuah kontrol untuk menentukan data yang keluar dari
memory mc pertama menuju ke buffer atau keluar buffer menuju proses akhir dan memberikan informasi tentang posisi block x dan block y yang hendak digunakan sebagai referensi untuk menentukan nilai sumbu. •
timing_mc1.
Sebuah kontrol untuk menentukan data yang keluar dari
memory mc kedua menuju ke buffer atau keluar buffer menuju proses akhir dan memberikan informasi tentang posisi block x dan block y yang hendak digunakan sebagai referensi untuk menentukan nilai sumbu. •
sesuai_lumi. Modul yang memiliki fungsi menyesuaikan nilai pos x dan pos y yang akan disimpan sebagai posisi buffer agar beraturan.
•
mc_chroma_depan_counter. Berfungsi sebagai counter dan informasi untuk menentukan posisi piksel.
•
mc_chroma_depan_alamat (gambar 3.17). Modul yang menguraikan posisi sumbu x dan sumbu y dari posisi piksel yang didapat dari mc_chroma_depan _counter.
Gambar 3.17. diagram blok mc_chroma_depan_alamat
23
•
Data_aaa (gambar 3.18). Modul yang digunakan untuk mendapatkan nilai posisi piksel yang merupakan nilai data_a (nilai dx dan dy) untuk nilai adder dan adder1.
Gambar 3.18. diagram blok data_aaa
•
Adder. Modul yang digunakan untuk menentukan posisi awal.
•
Adder1. Modul yang digunakan untuk menentukan posisi sahabatnya.
III.3 Memory MC
Memory MC adalah modul yang memiliki fungsi sama dengan memory pada umumnya yaitu menulis dan membaca data. Perbedaan utama yaitu data yang dibaca dan ditulis tidak hanya 1 data saja melainkan bisa 4 atau 12 data secara bersamaan yang menyebabkan memory ini lebih menyerupai buffer. Tiga hal dalam membaca data yaitu membaca secara horizontal untuk luminance, membaca secara vertical untuk luminance dan membaca untuk chroma. Karena pembacaan alamat dapat dilakukan hingga 4 atau 12 alamat sekaligus maka diperlukan pengalamatan yang banyak. Pengalamatan ini disesuaikan dengan keperluan. Hub_alamat1 berfungsi untuk pemberian nama berdasarkan piksel. Hub_alamat2 berfungsi untuk alamat ketika membaca, apakah alamat dibaca secara horizontal atau vertical.
24
Program untuk hub_alamat1 assign alamat_1a= (lakukan==1)? alamat_1 :10'bx; assign alamat_1b= (lakukan==1)? alamat_1+1:10'bx; assign alamat_1c= (lakukan==1)? alamat_1+2:10'bx; assign alamat_1d= (lakukan==1)? alamat_1+3:10'bx;
program untuk hub_alamat2 assign alamat_a= (lakukan==2)?alamat-2:(lakukan==3)? alamat-64: 10'bx; assign alamat_b= (lakukan==2)?alamat-1:(lakukan==3)? alamat-32 : 10'bx; assign alamat_c= (lakukan==2)?alamat :(lakukan==3)? alamat : 10'bx; assign alamat_d= (lakukan==2)?alamat+1:(lakukan==3)? alamat+32 : 10'bx; assign alamat_e= (lakukan==2)?alamat+2:(lakukan==3)? alamat+64: 10'bx; assign alamat_f= (lakukan==2)?alamat+3:(lakukan==3)? alamat+96: 10'bx;
Memory ini diletakkan pada bagian top level atau sama pada peletakan memory utama. Hal ini dikarenakan memory MC ini cukup besar yaitu 28 x 32 x 8 bit dan memiliki 2 memory.
III.4 MC Belakang
MC belakang memiliku fungsi mengeksekusi informasi yang diperoleh dan hasilnya merupakan input yang akan digunakan untuk proses penjumlahan dengan inverse transform. MC belakang untuk chroma (gambar 3.19) dan luminance (gambar 3.20, lampiran A9) memiliki perbedaan. MC Belakang Luminace berupa half piksel dan quarter piksel, sedangkan pada chroma merupakan rata-rata perbandingan dengan piksel tetangganya. Modul-modul yang terdapat pada kedua kategori yaitu: •
timing_mc. Modul yang berfungsi sebagai control pada MC belakang. Modul ini bertugas untuk menentukan modul quarter piksel yang hendak dijalankan dan modul lainnya yang berada pada MC belakang.
•
buffer2. Modul yang berfungsi sebagai tempat penyimpanan sementara dari hasil half piksel dimana memiliki ukuran 4 x 9 x 8 bit.
25
•
mc_quarter. Modul yang berfungsi untuk melakukan proses interpolasi half piksel atau quarter piksel. Persamaan interpolasi adalah: hasil=((data1+data6)+(data2+data5)*(-5)+(data3+data4)*(20)+16)>>5;
•
mux2to1_8bit. Modul untuk memilih data yang akan dialirkan dari 2 buah data luminance yang masing-masing 8 bit.
•
mux4to1_8bit. Modul untuk memilih data luminance yang akan dialirkan dari 4 buah data yang masing-masing 8 bit.
•
adder_mc_1. Modul untuk mendapatkan nilai quarter piksel yaitu pada kondisi dx atau dy bernilai 1 atau 3
•
register_8. Modul sebagai delay dari hasil sementara mc luminance dan penyimpanan sementara untuk data 8 bit.
•
mc_chroma_belakang_1. Modul untuk menentukan jarak titik yang diambil, terhitung dari sumbu x dan sumbu y awal maupun tetangganya (sebelah kanan atau bawah), yang mana digunakan untuk perhitungan MC chroma. Nilai input berasal dari bit ke-2 hingga bit ke-0 dari nilai pos_quarter.
•
mc_chroma_belakang_2. Merupakan hasil perkalian dari nilai jarak-jarak yang diperoleh dan nilai piksel pada posisi awal atau sahabat yang akan digunakan untuk perhitungan MC chroma.
•
mc_chroma_belakang_3. Merupakan hasil rata-rata dan merupakan hasil dari MC chroma.
26
Gambar3.19 diagram blok mc chroma belakang
Gambar3.20 diagram blok mc belakang Luminance
27
III.5 Alamat MC
Untuk mengalirkan data dari memory dibutuhkan alamat. MC ini membutuhkan dua jenis alamat yaitu alamat untuk memory utama dan alamat untuk memory_mc itu sendiri. Masing-masing alamat memiliki programnya sendiri untuk luminance dan chroma yaitu: •
alamat_mc_lm berfungsi untuk menunjuk alamat memory utama yang digunakan untuk mengambil data sebagai masukan dalam proses luminance. Data yang diambil berupa informasi awal dan piksel-piksel. Nilai piksel dapat berupa nilai piksel gambar referensi atau nilai intra.
•
alamat_mc_ch berfungsi untuk menunjuk alamat memory utama yang digunakan untuk mengambil data sebagai masukan dalam proses chroma. Data yang diambil berupa informasi awal dan piksel-piksel. Nilai piksel dapat berupa nilai piksel gambar referensi atau nilai intra.
•
alamat_mc_kecil berfungsi untuk menunjuk alamat memory MC yang digunakan sebagai tempat untuk menyimpan atau mengambil data pada saat proses luminance dilakukan.
•
alamat_chroma_kecil. berfungsi untuk menunjuk alamat memory MC yang digunakan sebagai tempat untuk menyimpan atau mengambil data pada saat proses chroma dilakukan.
28
III.6 Kontrol MC.
Bagian terpenting dalam suatu program besar adalah controller. Kontrol
yang digunakan berdasarkan timebase. Program MC ini memiliki dua jenis RTL yaitu untuk luminance dan chroma maka dibutuhkan dua controller. Berikut adalah komponen yang terdapat pada bagian control MC: •
counter_mc1. Modul yang berfungsi sebagai counter.
•
ctrl_mc_lumi_depan.
Modul memiliki fungsi menentukan tindakan apa
yang diambil dalam proses MC Luminance. Umumnya control berfungsi untuk mengatur MC depan, memory MC, MC belakang dan informasi kapan proses membaca dan hasil tersebut disampaikan. •
ctrl_mc_chroma_depan. Modul memiliki fungsi menentukan tindakan apa yang diambil dalam proses MC Chroma. Umumnya control berfungsi untuk mengatur MC depan, memory MC, MC belakang dan informasi kapan proses membaca dan hasil tersebut disampaikan.
III.7 Komponen Pendukung
Berikut adalah modul-modul yang digunakan dalam pembentukan RTL MC yang belum disebutkan. Modul pendukung memiliki fungsi menyesuaikan alir data yang harus terjadi pada MC. Modul-modulnya antara lain: •
mux2to1. Modul untuk memilih data yang dialirkan dari 2 buah data 2 bit.
•
mux2to1a. Modul untuk memilih data yang dialirakan dari 2 buah data 24 bit.
•
mux2to1b. Modul untuk memilih data yang dialirakan dari 2 buah data 12 bit.
•
mux2to1c. Modul untuk memilih data yang dialirakan dari 2 buah data 3 bit.
•
mux2to1d. Modul untuk memilih data yang dialirakan dari 2 buah data 8 bit. 29
•
pencacah_mc. Modul yang mencacah I data dengan panjang 32 bit menjadi 4 data dengan panjang 8 bit.
•
mixed_mc. Modulu untuk memindahkan letak data bila diperlukan. Hal ini dikarenakan adanya data yang merupakan cermin data itu sendiri.
•
penggabung_mc. Modul yang menggabungkan 4 data8 bit menjadi 1 data 32 bit.
•
img_mpr. Modul untuk menentukan data yang diambil berdasarkan mv_mode yang dipakai. Data 1 adalah data frame 0 atau nilai intra perdiction dan data 2 adalah data frame prediksi atau data frame 1. if (mv_mode==11) img=data_1; else if (pred_dir==1) img=data_2; else if (pred_dir!=2)img=data_1; else if ((direct_pdir==0)&&(mv_mode==0)) img=data_1; else if ((direct_pdir==1)&&(mv_mode==0)) img=data_2; else img=(data_1+data_2+1)>>1;
•
register_2. Modul sebagai delay untuk nilai 2 bit.
30