BAB 5 VERIFIKASI DAN SINTESIS INVERSE-CABAC
Setelah proses perancangan arsitektur Inverse-CABAC dan perancangan RTL dalam kode Verilog HDL selesai dilakukan, tahap berikutnya adalah memverifikasi dan sintesis rancangan. Proses verifikasi yang dijelaskan pada bagian ini adalah verifikasi fungsional rancangan RTL dan verifikasi netlist hasil proses sintesis. 5.1
Verifikasi Fungsional
Proses verifikasi fungsional dilakukan untuk memastikan bahwa desain telah bekerja sesuai dengan fungsi yang dispesifikasikan, dalam hal ini adalah test vector yang dihasilkan dari program acuan. Tujuan fungsional dari desain InverseCABAC adalah men-decode input bitstream sehingga menghasilkan kode-kode biner yang kemudian akan menjadi input inverse binerisasi. Verifikasi fungsional yang dilakukan terhadap desain Inverse-CABAC ini adalah dengan melakukan simulasi timing terhadap test vector yang berupa bitstream. Verifikasi fungsional dilakukan dengan mengunakan tool simulasi ModelSim SE 6.0 dari Mentor Graphic. 5.1.1
Metodologi Verifikasi
Untuk mendapatkan hasil verifikasi yang valid, maka diperlukan suatu metodologi verifikasi yang baik. Metode verifikasi rancangan Inverse-CABAC meliputi penentuan skema verifikasi, pembuatan test vector dari model referensi, serta perancangan testbench RTL. Skema verifikasi rancangan Inverse-CABAC ditunjukkan gambar 5.1.
57
RTL Testbench Stimulus Generator
DUT : Inverse CABAC
Input Vector
Output Vector
Compare
PASSED or FAILED
Gambar 5.1 Skema Verifikasi Inverse CABAC
Pada proses verifikasi, test vector yang digunakan adalah data bitstream sebagai data input dan data bit yang di-decode sebagai data output. Test vector ini dihasilkan dari model referensi, yaitu JM 11.0, yang merupakan model standard untuk sistem H.264. Untuk proses verifikasi desain RTL, maka diperlukan sebuah testbench RTL, yang berfungsi untuk menghasilkan sinyal stimulus. Testbench ini juga berfungsi untuk memberikan data input dan output berdasarkan timing yang telah ditentukan. Untuk validasi nilai output desain RTL dengan referensi output, pada perancangan ini, testbench dirancang memiliki fitur auto-compare. Berikut adalah potongan RTL testbench: /* -------------------------------------------- */ /*Input Pattern Generation */ /* -------------------------------------------- */ wire[9:0]input_count= CabacDec.buff_stream.buff_stream_ctrl.RAM_addr; reg
load_bitstream;
always @(posedge clock) if (start_dec) load_bitstream <= #1 1'b1; else if (CabacDec.buff_stream.buff_stream_ctrl.initstream_valid)
58
load_bitstream <= #1 1'b0; always @(input_count or load_bitstream) if (load_bitstream) bitstream_in = #1 bitstream_buff[input_count]; else bitstream_in = #1 1'bx; /* -----------------------------------------------*/ /* Reference Output Generation */ /* -----------------------------------------------*/ Wire dec_bitout_en = CabacDec.arcod.arcod_ctrl.mux_dataout_en | CabacDec.bypass.bypass_output_en; Wire [9:0] output_count = CabacDec.init_cntx.init_cntx_ctrl.ROM_idx_addr; reg ref_dec_bitout; always @ (posedge clock) if (dec_bitout_en) ref_dec_bitout <= #1 dec_bin_buff [output_count-1]; else ref_dec_bitout <= #1 ref_dec_bitout; /* -------------------------------------------------- */ /* Comparing Actual Output with Reference Output
*/
/* -------------------------------------------------- */ wire output_state_valid = CabacDec.arcod.arcod_ctrl.arcod_done | CabacDec.bypass.bypass_done; wire decout_bit = CabacDec.dec_bitout; always @ (posedge clock) if (output_state_valid) if (decout_bit != ref_dec_bitout) begin $display ("!!!ERROR at data [%3d] : Actual decout_bit = %1b, Expected decout_bit = %1b", output_count-1, decout_bit, ref_dec_bitout); error = error + 1; end else begin $display ("TEST PASSED : decout_bit [%3d] = %1b", output_count-1, decout_bit); error = error; end
59
5.1.2
Hasil Verifikasi
Sebelum dilakukan verifikasi desain yang terintegrasi, maka dilakukan verifikasi desain pada sub modul desain Inverse-CABAC terlebih dahulu. Verifikasi secara modular dilakukan untuk memastikan fungsionalitas modul-modul yang akan diintegrasikan. Verifikasi pada tingkat modul, dilakukan dengan menganalisis timing diagram setiap data dan sinyal-sinyal kontrol. Dengan dilakukan verifikasi secara modular terlebih dahulu, diharapkan tingkat kesulitan proses debugging pada top level dapat dikurangi. Hasil verifikasi dari setiap sub modul desain Inverse-CABAC adalah sebagai berikut. 5.1.2.1 Buffer Stream Gambar 5.2 menunjukkan bahwa state buffer stream akan berpindah dari state IDLE (pstate = 0) ke state WRITE_STREAM (pstate = 1), yaitu saat sinyal start_buff bernilai “1”. Dengan demikian proses pada modul buffer stream dapat mulai dilakukan, yaitu penulisan nilai bit stream ke RAM.
Gambar 5.2 Simulasi Transisi State IDLE ke State WRITE_STREAM
Proses penulisan bitstream dilakukan secara berurutan sebanyak 664 kali, sesuai dengan jumlah bitstream yang dibutuhkan pada perancangan Inverse-CABAC. Setelah nilai counter (count_664) mencapai nilai maksimum, yaitu 663, maka state buffer stream berpindah dari state WRITE_STREAM ke state
60
READ_INIT (pstate = 2). Nilai maksimum counter ditunjukkan dengan sinyal status end_count bernilai “1”. Proses pada state WRITE_STREAM ditunjukkan pada gambar 5.3.
Gambar 5.3 Simulasi Transisi State WRITE_STREAM ke State READ_INIT
Setelah penulisan bitstream dilakukan, proses berikutnya adalah pembentukan nilai awal offset, yang digunakan untuk proses binary decoding. Proses pembentukan nilai offset dilakukan dengan membaca 9 data pertama dari initRAM.
Gambar 5.4 Simulasi Transisi State READ_INIT ke State READ_STREAM
Data yang dibaca dari initRAM kemudian masuk ke rangkaian shift register. Proses shifting dilakukan selama sinyal shift_enable bernilai “1”, yaitu selama 9 clock cycle. Nilai offset yang terbentuk (initstream_out) valid ditunjukkan dengan sinyal init_streamready bernilai “1”. Dari gambar 5.5 terlihat nilai awal
61
offset yang dihasilkan adalah 0x1b0, sesuai dengan nilai awal offset dalam test vector.
Gambar 5.5 Hasil Simulasi Shift Register untuk Membentuk Nilai Offset Awal
Setelah pembentukan nilai awal offset, proses berikutnya pembacaan bitstream untuk proses binary decoding. Proses transisi dari state READ_INIT ke state READ_STREAM ini dapat dilihat ada gambar 5.4. Pembacaan bitstream dilakukan jika pada proses decoding diperlukan proses renormalisasi, atau proses decoding berlangsung pada mode bypass. Proses renormalisasi ditunjukkan dengan sinyal renorm bernilai “1”, sedangkan proses decoding pada mode normal ditunjukkan dengan sinyal bypass_enable bernilai “1”. Karena jumlah bitstream pada setiap proses decoding mode bypass hanya 1 bit, maka sinyal kontrol untuk pembacaan RAM, RAM_ce, hanya diambil dari 1 clock cycle pertama sinyal bypass_enable. Hasil simulasi pembacaan bitstream ini dapat dilihat pada gambar berikut:
Gambar 5.6 Hasil Simulasi Pembacaan Bitstream dari Init RAM
62
5.1.2.2 Init Context Gambar 5.7 menunjukkan bahwa proses pada Init Context dimulai setelah sinyal start_context aktif. Saat sinyal start_context bernilai “1”, state Init Context berpindah dari state IDLE (pstate = 0) ke state WRITE_INIT (pstate = 1). Pada state WRITE_INIT, dilakukan penulisan nilai context model (ste_mps) ke RAM context. Nilai RAM context merupakan hasil perhitungan block Init Context Core. Proses penghitungan setiap nilai context model dilakukan dalam 5 clock cycle, yaitu dari nilai initcntx_stepcount 0 sampai 4. Penulisan nilai context model dilakukan saat initcntxt_stepcount bernilai 4, yang ditunjukkan dengan sinyal kontrol RAM_we bernilai “1”.
Gambar 5.7 Hasil Simulasi Modul Init Context
5.1.2.3 Arcod Gambar 5.8 menunjukkan proses binary decoding pada mode normal. Proses decoding dilakukan saat sinyal arcod_enable bernilai “1”. Proses decoding diawali dengan proses update nilai offset dan range, yang dilakukan selama 4 clock cycle. Dari proses update ini didapatkan juga nilai status offs_high_valid. Pada clock kelima, yaitu saat state RANGE_CHECK, dilakukan proses pengecekan nilai range. Jika nilai range lebih kecil dari 0x100, maka status range_low_valid bernilai “1”. Dari nilai status offset dan range ini, maka dapat diputuskan apakah proses renormalisasi harus dilakukan atau tidak. Jika kedua
63
sinyal status, offs_high_valid dan range_low_valid bernilai “1” maka proses renormalisasi dilakukan. Proses renormalisasi dilakukan pada state RENORM (pstate = 6). Proses binary decoding dilakukan dalam 6 clock cycle, untuk proses tanpa renormalisasi, atau dalam (6 + 2n) clock cycle jika proses decoding membutuhkan renormalisasi. Setiap proses renormalisasi membutuhkan 2 buah clock cycle, yaitu masing-masing untuk proses penghitungan nilai renormalisasi offset dan range dan pengecekan kembali nilai range.
Binary Decoding State
Decoding tanpa renormalisasi
Decoding dengan renormalisasi
Gambar 5.8 Hasil Simulasi Modul Arcod
5.1.2.4 Bypass Gambar 5.9 menunjukkan proses binary decoding pada mode bypass. Setiap proses decoding pada mode bypass dilakukan dalam 2 clock cycle. Clock cycle pertama untuk proses update nilai range dan offset, sedangkan clock cycle kedua untuk validasi data. Dengan validasi ini, data dapat ditulis di register offset dan range.
64
Gambar 5.9 Hasil Simulasi Modul Bypass
5.1.2.5 Register Offset dan Range Tahap terakhir dari proses Inverse-CABAC adalah penulisan nilai akhir offset dan range yang dihasilkan dari setiap proses binary decoding. Proses penulisan dapat dilakukan saat sinyal kontrol offs_range_we bernilai “1”. Sinyal kontrol ini dihasilkan saat sinyal status arcod_done atau bypass_done bernilai “1”. Sinyal status ini juga digunakan sebagai sinyal kontrol untuk pemilihan data offset dan range yang harus ditulis ke register. Berikut adalah hasil simulasi pada modul register offset dan range.
Gambar 5.10 Hasil Simulasi Modul Register Offset dan Range
65
5.1.2.6 Top Level Inverse-CABAC Verifikasi rancangan Inverse-CABAC yang telah terintegrasi dilakukan dengan membandingkan test vector acuan dengan output Inverse-CABAC. Proses verifikasi pada top level dilakukan dengan berbasis auto-compare. Dengan menggunakan metode verifikasi ini tingkat kesulitan verifikasi dan waktu yang dibutuhkan untuk verifikasi dapat dikurangi. Hasil simulasi ditunjukkan pada gambar 5.11.
Gambar 5.11 Hasil Simulasi Rancangan Inverse-CABAC
Gambar 5.12 Hasil Simulasi Rancangan Inverse-CABAC (Lanjutan)
66
5.2
Implementasi
Setelah desain telah diverifikasi secara fungsional, tahap perancangan berikutnya adalah implementasi desain pada FPGA. Proses implementasi dilakukan dengan menggunakan EDA tools ISE Xilinx 9.1i pada target devais Virtex-4 XC4VSX3510F668. Tahap pertama proses implementasi adalah sintesis desain. Pada tahap sintesis, desain dalam bentuk kode HDL dipetakan menjadi interkoneksi gerbang logika (netlist) berdasarkan target devais yang telah ditentukan. Dari proses sintesis didapatkan performa rancangan berupa Device Utilization Summary dan Timing Summary. Report sintesis menunjukkan bahwa rancangan Inverse CABAC memerlukan 7% slice area FPGA dengan frekuensi kerja maksimum 118.68 MHz. Device utilization summary: --------------------------Selected Device : 4vsx35ff668-11 Number of Number of Number of Number of Number of Number of Number Number of Number of
Slices: Slice Flip Flops: 4 input LUTs: IOs: bonded IOBs: FIFO16/RAMB16s: used as RAMB16s: GCLKs: DSP48s:
1122 267 2141 29 29 4 4 1 1
out of out of out of
15360 30720 30720
7% 0% 6%
out of out of
448 192
6% 2%
out of out of
32 192
3% 0%
Timing Summary: --------------Speed Grade: -11 Minimum Minimum Maximum Maximum
period: 8.426ns (Maximum Frequency: 118.680MHz) input arrival time before clock: 3.815ns output required time after clock: 11.014ns combinational path delay: No path found
Tahap selanjutnya adalah proses Translate. Pada tahap ini, netlist hasil proses sintesis diidentifikasi dan diaplikasikan dalam top level rancangan. Dari proses Translate dihasilkan netlist dalam format NGD (Native Generic Design). Pada tahap ini seluruh constraint diaplikasikan pada netlist. Setlah itu dilakukan proses Map, yaitu proses optimasi gerbang logika dan jalur interkoneksi yang tidak
67
terpakai dan memetakan rancangan ke resource FPGA. Pada tahap Map, dilakukan juga pemeriksaan design-rule pada target devais serta memetakan elemen-elemen dasar menjadi Configurable Logic Block (CLB). Design Summary -------------Design Summary: Number of errors: 0 Number of warnings: 1 Logic Utilization: Number of Slice Flip Flops: 265 out of 30,720 1% Number of 4 input LUTs: 2,125 out of 30,720 6% Logic Distribution: Number of occupied Slices: 1,182 out of 15,360 7% Number of Slices containing only related logic: 1,182 out of 1,182 100% Number of Slices containing unrelated logic: 0 out of 1,182 0% *See NOTES below for an explanation of the effects of unrelated logic Total Number of 4 input LUTs: 2,138 out of 30,720 6% Number used as logic: 2,125 Number used as a route-thru: 13 Number of bonded IOBs: 29 out of 448 6% Number of BUFG/BUFGCTRLs: 1 out of 32 3% Number used as BUFGs: 1 Number used as BUFGCTRLs: 0 Number of FIFO16/RAMB16s: 4 out of 192 2% Number used as FIFO16s: 0 Number used as RAMB16s: 4 Number of DSP48s: 1 out of 192 1% Total equivalent gate count for design: 278,749 Additional JTAG gate count for IOBs: 1,392
Proses terakhir adalah PAR (Place and Route). Place merupakan proses peletakan blok logika termasuk struktur CLB dan IOB pada tempat tertentu pada arsitektur devais target. Routing adalah proses memberikan pin-pin pada blok-blok logika. 5.3
Verifikasi Netlist Hasil PAR
Untuk memastikan rancangan hasil proses PAR masih memiliki kesamaan fungsional dengan rancangan RTL sebelum sintesis, maka dilakukan simulasi ulang. Simulasi dilakukan pada netlist, yang dihasilkan dari tahap PAR. Dari tahap ini, juga dihasilkan file Standard Delay Format (SDF), yang berisi
68
parameter timing dari setiap logic block yang terpakai oleh desain Inverse CABAC. Selain netlist dan SDF files, untuk simulasi pada level gate dibutuhkan juga komponen SIMPRIMS library. Proses simulasi dilakukan dengan menggunakan RTL testbench yang juga digunakan pada simulasi RTL. Hasil simulasi netlist setelah PAR menunjukkan rancangan masih memiliki fungsional yang sama.
Gambar 5.13 Hasil Simulasi Netlist Inverse-CABAC
69
5.4
Analisis Kinerja Inverse-CABAC
Dari proses sintesis, diperoleh bahwa rancangan Inverse-CABAC
berhasil
diimplementasikan dengan total equivalent gate count 278749 gate, dengan frekuensi kerja maksimum sebesar 118 MHz. Untuk frekuensi kerja sistem sebesar 100 MHz, maka rancangan Inverse CABAC memiliki throughput sebesar 10,43 Mbps. Nilai throughput diperoleh dari perhitungan sebagai berikut :
Jumlah bit yang di-decode x frekuensi kerja Total clock cycle 791 x 100 M = 7580 = 10, 44 Mbps
Throughput =
70