OpenCores
URL https://opencores.org/ocsvn/bluespec-h264/bluespec-h264/trunk

Subversion Repositories bluespec-h264

[/] [bluespec-h264/] [trunk/] [src/] [mkEntropyDec.bsv] - Diff between revs 27 and 62

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 27 Rev 62
Line 183... Line 183...
            begin
            begin
               infifo.deq();
               infifo.deq();
               nalrefidc <= rdata[6:5];
               nalrefidc <= rdata[6:5];
               nalunittype <= rdata[4:0];
               nalunittype <= rdata[4:0];
               case (rdata[4:0])
               case (rdata[4:0])
                  1 : state <= CodedSlice 0;
                  1 : state <= tagged CodedSlice 0;
                  5 : state <= CodedSlice 0;
                  5 : state <= tagged CodedSlice 0;
                  6 : state <= SEI;
                  6 : state <= tagged SEI;
                  7 : state <= SPS 0;
                  7 : state <= tagged SPS 0;
                  8 : state <= PPS 0;
                  8 : state <= tagged PPS 0;
                  9 : state <= AUD;
                  9 : state <= tagged AUD;
                  10: state <= EndSequence;
                  10: state <= tagged EndSequence;
                  11: state <= EndStream;
                  11: state <= tagged EndStream;
                  12: state <= Filler;
                  12: state <= tagged Filler;
                  default:
                  default:
                  begin
                  begin
                     $display( "ERROR EntropyDec: NAL Unit Type = %d", rdata[4:0] );
                     $display( "ERROR EntropyDec: NAL Unit Type = %d", rdata[4:0] );
                     state <= Start;
                     state <= Start;
                  end
                  end
               endcase
               endcase
               $display("ccl2newunit");
               $display("ccl2newunit");
               $display("ccl2rbspbyte %h", rdata);
               $display("ccl2rbspbyte %h", rdata);
               outfifo.enq(NewUnit rdata);
               outfifo.enq(tagged NewUnit rdata);
               outfifo_ITB.enq(NewUnit rdata);
               outfifo_ITB.enq(tagged NewUnit rdata);
            end
            end
         tagged EndOfFile : state <= Start;
         tagged EndOfFile : state <= Start;
      endcase
      endcase
   endrule
   endrule
 
 
Line 274... Line 274...
            begin
            begin
               case ( step )
               case ( step )
                  0:
                  0:
                  begin
                  begin
                     $display( "ccl2SHfirst_mb_in_slice %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SHfirst_mb_in_slice %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SHfirst_mb_in_slice truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq(tagged SHfirst_mb_in_slice truncate(expgolomb_unsigned(buffer)));
                     currMbAddr <= truncate(expgolomb_unsigned(buffer));
                     currMbAddr <= truncate(expgolomb_unsigned(buffer));
                     calcnc.initialize(truncate(expgolomb_unsigned(buffer)));
                     calcnc.initialize(truncate(expgolomb_unsigned(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = CodedSlice 1;
                     nextstate = tagged CodedSlice 1;
                  end
                  end
                  1:
                  1:
                  begin
                  begin
                     $display( "ccl2SHslice_type %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SHslice_type %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SHslice_type truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq(tagged SHslice_type truncate(expgolomb_unsigned(buffer)));
                     shslice_type <= truncate(expgolomb_unsigned(buffer));
                     shslice_type <= truncate(expgolomb_unsigned(buffer));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = CodedSlice 2;
                     nextstate = tagged CodedSlice 2;
                  end
                  end
                  2:
                  2:
                  begin
                  begin
                     $display( "ccl2SHpic_parameter_set_id %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SHpic_parameter_set_id %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SHpic_parameter_set_id truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq(tagged SHpic_parameter_set_id truncate(expgolomb_unsigned(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = CodedSlice 3;
                     nextstate = tagged CodedSlice 3;
                     if(ppspic_parameter_set_id != truncate(expgolomb_unsigned(buffer))) $display( "ERROR EntropyDec: pic_parameter_set_id don't match" );
                     if(ppspic_parameter_set_id != truncate(expgolomb_unsigned(buffer))) $display( "ERROR EntropyDec: pic_parameter_set_id don't match" );
                  end
                  end
                  3:
                  3:
                  begin
                  begin
                     Bit#(16) tttt = buffer[buffersize-1:buffersize-16];
                     Bit#(16) tttt = buffer[buffersize-1:buffersize-16];
                     tttt = tttt >> 16 - zeroExtend(spslog2_max_frame_num);
                     tttt = tttt >> 16 - zeroExtend(spslog2_max_frame_num);
                     $display( "ccl2SHframe_num %0d", tttt );
                     $display( "ccl2SHframe_num %0d", tttt );
                     outfifo.enq(SHframe_num tttt);
                     outfifo.enq(tagged SHframe_num tttt);
                     numbitsused = zeroExtend(spslog2_max_frame_num);
                     numbitsused = zeroExtend(spslog2_max_frame_num);
                     nextstate = CodedSlice 4;
                     nextstate = tagged CodedSlice 4;
                  end
                  end
                  4:
                  4:
                  begin
                  begin
                     if(nalunittype == 5)
                     if(nalunittype == 5)
                        begin
                        begin
                           $display( "ccl2SHidr_pic_id %0d", expgolomb_unsigned(buffer) );
                           $display( "ccl2SHidr_pic_id %0d", expgolomb_unsigned(buffer) );
                           outfifo.enq(SHidr_pic_id truncate(expgolomb_unsigned(buffer)));
                           outfifo.enq(tagged SHidr_pic_id truncate(expgolomb_unsigned(buffer)));
                           numbitsused = expgolomb_numbits(buffer);
                           numbitsused = expgolomb_numbits(buffer);
                        end
                        end
                     nextstate = CodedSlice 5;
                     nextstate = tagged CodedSlice 5;
                  end
                  end
                  5:
                  5:
                  begin
                  begin
                     if(spspic_order_cnt_type == 0)
                     if(spspic_order_cnt_type == 0)
                        begin
                        begin
                           Bit#(16) tttt = buffer[buffersize-1:buffersize-16];
                           Bit#(16) tttt = buffer[buffersize-1:buffersize-16];
                           tttt = tttt >> 16 - zeroExtend(spslog2_max_pic_order_cnt_lsb);
                           tttt = tttt >> 16 - zeroExtend(spslog2_max_pic_order_cnt_lsb);
                           $display( "ccl2SHpic_order_cnt_lsb %0d", tttt );
                           $display( "ccl2SHpic_order_cnt_lsb %0d", tttt );
                           outfifo.enq(SHpic_order_cnt_lsb tttt);
                           outfifo.enq(tagged SHpic_order_cnt_lsb tttt);
                           numbitsused = zeroExtend(spslog2_max_pic_order_cnt_lsb);
                           numbitsused = zeroExtend(spslog2_max_pic_order_cnt_lsb);
                           nextstate = CodedSlice 6;
                           nextstate = tagged CodedSlice 6;
                        end
                        end
                     else
                     else
                        nextstate = CodedSlice 7;
                        nextstate = tagged CodedSlice 7;
                  end
                  end
                  6:
                  6:
                  begin
                  begin
                     if(ppspic_order_present_flag == 1)
                     if(ppspic_order_present_flag == 1)
                        begin
                        begin
                           if(egnumbits == 0)
                           if(egnumbits == 0)
                              begin
                              begin
                                 Bufcount tempbufcount = expgolomb_numbits32(buffer);
                                 Bufcount tempbufcount = expgolomb_numbits32(buffer);
                                 egnumbits <= tempbufcount;
                                 egnumbits <= tempbufcount;
                                 numbitsused = tempbufcount-1;
                                 numbitsused = tempbufcount-1;
                                 nextstate = CodedSlice 6;
                                 nextstate = tagged CodedSlice 6;
                              end
                              end
                           else
                           else
                              begin
                              begin
                                 tempint32 = unpack(expgolomb_signed32(buffer,egnumbits));
                                 tempint32 = unpack(expgolomb_signed32(buffer,egnumbits));
                                 $display( "ccl2SHdelta_pic_order_cnt_bottom %0d", tempint32 );
                                 $display( "ccl2SHdelta_pic_order_cnt_bottom %0d", tempint32 );
                                 outfifo.enq(SHdelta_pic_order_cnt_bottom truncate(expgolomb_signed32(buffer,egnumbits)));
                                 outfifo.enq(tagged SHdelta_pic_order_cnt_bottom truncate(expgolomb_signed32(buffer,egnumbits)));
                                 egnumbits <= 0;
                                 egnumbits <= 0;
                                 numbitsused = egnumbits;
                                 numbitsused = egnumbits;
                                 nextstate = CodedSlice 7;
                                 nextstate = tagged CodedSlice 7;
                              end
                              end
                        end
                        end
                     else
                     else
                        nextstate = CodedSlice 7;
                        nextstate = tagged CodedSlice 7;
                  end
                  end
                  7:
                  7:
                  begin
                  begin
                     if(spspic_order_cnt_type == 1 && spsdelta_pic_order_always_zero_flag == 0)
                     if(spspic_order_cnt_type == 1 && spsdelta_pic_order_always_zero_flag == 0)
                        begin
                        begin
                           if(egnumbits == 0)
                           if(egnumbits == 0)
                              begin
                              begin
                                 Bufcount tempbufcount = expgolomb_numbits32(buffer);
                                 Bufcount tempbufcount = expgolomb_numbits32(buffer);
                                 egnumbits <= tempbufcount;
                                 egnumbits <= tempbufcount;
                                 numbitsused = tempbufcount-1;
                                 numbitsused = tempbufcount-1;
                                 nextstate = CodedSlice 7;
                                 nextstate = tagged CodedSlice 7;
                              end
                              end
                           else
                           else
                              begin
                              begin
                                 tempint32 = unpack(expgolomb_signed32(buffer,egnumbits));
                                 tempint32 = unpack(expgolomb_signed32(buffer,egnumbits));
                                 $display( "ccl2SHdelta_pic_order_cnt0 %0d", tempint32 );
                                 $display( "ccl2SHdelta_pic_order_cnt0 %0d", tempint32 );
                                 outfifo.enq(SHdelta_pic_order_cnt0 truncate(expgolomb_signed32(buffer,egnumbits)));
                                 outfifo.enq(tagged SHdelta_pic_order_cnt0 truncate(expgolomb_signed32(buffer,egnumbits)));
                                 egnumbits <= 0;
                                 egnumbits <= 0;
                                 numbitsused = egnumbits;
                                 numbitsused = egnumbits;
                                 nextstate = CodedSlice 8;
                                 nextstate = tagged CodedSlice 8;
                              end
                              end
                        end
                        end
                     else
                     else
                        nextstate = CodedSlice 9;
                        nextstate = tagged CodedSlice 9;
                  end
                  end
                  8:
                  8:
                  begin
                  begin
                     if(ppspic_order_present_flag == 1)
                     if(ppspic_order_present_flag == 1)
                        begin
                        begin
                           if(egnumbits == 0)
                           if(egnumbits == 0)
                              begin
                              begin
                                 Bufcount tempbufcount = expgolomb_numbits32(buffer);
                                 Bufcount tempbufcount = expgolomb_numbits32(buffer);
                                 egnumbits <= tempbufcount;
                                 egnumbits <= tempbufcount;
                                 numbitsused = tempbufcount-1;
                                 numbitsused = tempbufcount-1;
                                 nextstate = CodedSlice 8;
                                 nextstate = tagged CodedSlice 8;
                              end
                              end
                           else
                           else
                              begin
                              begin
                                 tempint32 = unpack(expgolomb_signed32(buffer,egnumbits));
                                 tempint32 = unpack(expgolomb_signed32(buffer,egnumbits));
                                 $display( "ccl2SHdelta_pic_order_cnt1 %0d", tempint32 );
                                 $display( "ccl2SHdelta_pic_order_cnt1 %0d", tempint32 );
                                 outfifo.enq(SHdelta_pic_order_cnt1 truncate(expgolomb_signed32(buffer,egnumbits)));
                                 outfifo.enq(tagged SHdelta_pic_order_cnt1 truncate(expgolomb_signed32(buffer,egnumbits)));
                                 egnumbits <= 0;
                                 egnumbits <= 0;
                                 numbitsused = egnumbits;
                                 numbitsused = egnumbits;
                                 nextstate = CodedSlice 9;
                                 nextstate = tagged CodedSlice 9;
                              end
                              end
                        end
                        end
                     else
                     else
                        nextstate = CodedSlice 9;
                        nextstate = tagged CodedSlice 9;
                  end
                  end
                  9:
                  9:
                  begin
                  begin
                     if(shslice_type == 0 || shslice_type == 5)
                     if(shslice_type == 0 || shslice_type == 5)
                        begin
                        begin
                           $display( "ccl2SHnum_ref_idx_active_override_flag %0d", buffer[buffersize-1] );
                           $display( "ccl2SHnum_ref_idx_active_override_flag %0d", buffer[buffersize-1] );
                           outfifo.enq(SHnum_ref_idx_active_override_flag buffer[buffersize-1]);
                           outfifo.enq(tagged SHnum_ref_idx_active_override_flag buffer[buffersize-1]);
                           numbitsused = 1;
                           numbitsused = 1;
                           if(buffer[buffersize-1] == 1)
                           if(buffer[buffersize-1] == 1)
                              nextstate = CodedSlice 10;
                              nextstate = tagged CodedSlice 10;
                           else
                           else
                              nextstate = CodedSlice 11;
                              nextstate = tagged CodedSlice 11;
                        end
                        end
                     else
                     else
                        nextstate = CodedSlice 11;
                        nextstate = tagged CodedSlice 11;
                  end
                  end
                  10:
                  10:
                  begin
                  begin
                     $display( "ccl2SHnum_ref_idx_l0_active %0d", expgolomb_unsigned(buffer)+1 );
                     $display( "ccl2SHnum_ref_idx_l0_active %0d", expgolomb_unsigned(buffer)+1 );
                     outfifo.enq(SHnum_ref_idx_l0_active truncate(expgolomb_unsigned(buffer)+1));
                     outfifo.enq(tagged SHnum_ref_idx_l0_active truncate(expgolomb_unsigned(buffer)+1));
                     num_ref_idx_l0_active_minus1 <= truncate(expgolomb_unsigned(buffer));
                     num_ref_idx_l0_active_minus1 <= truncate(expgolomb_unsigned(buffer));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = CodedSlice 11;
                     nextstate = tagged CodedSlice 11;
                  end
                  end
                  11:
                  11:
                  begin
                  begin
                     if(shslice_type != 2 && shslice_type != 7)
                     if(shslice_type != 2 && shslice_type != 7)
                        begin
                        begin
                           $display( "ccl2SHRref_pic_list_reordering_flag_l0 %0d", buffer[buffersize-1] );
                           $display( "ccl2SHRref_pic_list_reordering_flag_l0 %0d", buffer[buffersize-1] );
                           outfifo.enq(SHRref_pic_list_reordering_flag_l0 buffer[buffersize-1]);
                           outfifo.enq(tagged SHRref_pic_list_reordering_flag_l0 buffer[buffersize-1]);
                           numbitsused = 1;
                           numbitsused = 1;
                           if(buffer[buffersize-1] == 1)
                           if(buffer[buffersize-1] == 1)
                              nextstate = CodedSlice 12;
                              nextstate = tagged CodedSlice 12;
                           else
                           else
                              nextstate = CodedSlice 15;
                              nextstate = tagged CodedSlice 15;
                        end
                        end
                     else
                     else
                        nextstate = CodedSlice 15;
                        nextstate = tagged CodedSlice 15;
                  end
                  end
                  12:
                  12:
                  begin
                  begin
                     $display( "ccl2SHRreordering_of_pic_nums_idc %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SHRreordering_of_pic_nums_idc %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SHRreordering_of_pic_nums_idc truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq(tagged SHRreordering_of_pic_nums_idc truncate(expgolomb_unsigned(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     if(expgolomb_unsigned(buffer)==0 || expgolomb_unsigned(buffer)==1)
                     if(expgolomb_unsigned(buffer)==0 || expgolomb_unsigned(buffer)==1)
                        nextstate = CodedSlice 13;
                        nextstate = tagged CodedSlice 13;
                     else if(expgolomb_unsigned(buffer)==2)
                     else if(expgolomb_unsigned(buffer)==2)
                        nextstate = CodedSlice 14;
                        nextstate = tagged CodedSlice 14;
                     else
                     else
                        nextstate = CodedSlice 15;
                        nextstate = tagged CodedSlice 15;
                  end
                  end
                  13:
                  13:
                  begin
                  begin
                     Bit#(17) temp17 = zeroExtend(expgolomb_unsigned(buffer)) + 1;
                     Bit#(17) temp17 = zeroExtend(expgolomb_unsigned(buffer)) + 1;
                     $display( "ccl2SHRabs_diff_pic_num %0d", temp17 );
                     $display( "ccl2SHRabs_diff_pic_num %0d", temp17 );
                     outfifo.enq(SHRabs_diff_pic_num temp17);
                     outfifo.enq(tagged SHRabs_diff_pic_num temp17);
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = CodedSlice 12;
                     nextstate = tagged CodedSlice 12;
                  end
                  end
                  14:
                  14:
                  begin
                  begin
                     $display( "ccl2SHRlong_term_pic_num %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SHRlong_term_pic_num %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SHRlong_term_pic_num truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq(tagged SHRlong_term_pic_num truncate(expgolomb_unsigned(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = CodedSlice 12;
                     nextstate = tagged CodedSlice 12;
                  end
                  end
                  15:
                  15:
                  begin
                  begin
                     if(nalrefidc == 0)
                     if(nalrefidc == 0)
                        nextstate = CodedSlice 23;
                        nextstate = tagged CodedSlice 23;
                     else
                     else
                        begin
                        begin
                           if(nalunittype == 5)
                           if(nalunittype == 5)
                              begin
                              begin
                                 $display( "ccl2SHDno_output_of_prior_pics_flag %0d", buffer[buffersize-1] );
                                 $display( "ccl2SHDno_output_of_prior_pics_flag %0d", buffer[buffersize-1] );
                                 outfifo.enq(SHDno_output_of_prior_pics_flag buffer[buffersize-1]);
                                 outfifo.enq(tagged SHDno_output_of_prior_pics_flag buffer[buffersize-1]);
                                 numbitsused = 1;
                                 numbitsused = 1;
                                 nextstate = CodedSlice 16;
                                 nextstate = tagged CodedSlice 16;
                              end
                              end
                           else
                           else
                              nextstate = CodedSlice 17;
                              nextstate = tagged CodedSlice 17;
                        end
                        end
                  end
                  end
                  16:
                  16:
                  begin
                  begin
                     $display( "ccl2SHDlong_term_reference_flag %0d", buffer[buffersize-1] );
                     $display( "ccl2SHDlong_term_reference_flag %0d", buffer[buffersize-1] );
                     outfifo.enq(SHDlong_term_reference_flag buffer[buffersize-1]);
                     outfifo.enq(tagged SHDlong_term_reference_flag buffer[buffersize-1]);
                     numbitsused = 1;
                     numbitsused = 1;
                     nextstate = CodedSlice 23;
                     nextstate = tagged CodedSlice 23;
                  end
                  end
                  17:
                  17:
                  begin
                  begin
                     $display( "ccl2SHDadaptive_ref_pic_marking_mode_flag %0d", buffer[buffersize-1] );
                     $display( "ccl2SHDadaptive_ref_pic_marking_mode_flag %0d", buffer[buffersize-1] );
                     outfifo.enq(SHDadaptive_ref_pic_marking_mode_flag buffer[buffersize-1]);
                     outfifo.enq(tagged SHDadaptive_ref_pic_marking_mode_flag buffer[buffersize-1]);
                     numbitsused = 1;
                     numbitsused = 1;
                     if(buffer[buffersize-1] == 1)
                     if(buffer[buffersize-1] == 1)
                        nextstate = CodedSlice 18;
                        nextstate = tagged CodedSlice 18;
                     else
                     else
                        nextstate = CodedSlice 23;
                        nextstate = tagged CodedSlice 23;
                  end
                  end
                  18:
                  18:
                  begin
                  begin
                     $display( "ccl2SHDmemory_management_control_operation %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SHDmemory_management_control_operation %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SHDmemory_management_control_operation truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq(tagged SHDmemory_management_control_operation truncate(expgolomb_unsigned(buffer)));
                     shdmemory_management_control_operation <= truncate(expgolomb_unsigned(buffer));
                     shdmemory_management_control_operation <= truncate(expgolomb_unsigned(buffer));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     if(expgolomb_unsigned(buffer)!=0)
                     if(expgolomb_unsigned(buffer)!=0)
                        nextstate = CodedSlice 19;
                        nextstate = tagged CodedSlice 19;
                     else
                     else
                        nextstate = CodedSlice 23;
                        nextstate = tagged CodedSlice 23;
                  end
                  end
                  19:
                  19:
                  begin
                  begin
                     if(shdmemory_management_control_operation==1 || shdmemory_management_control_operation==3)
                     if(shdmemory_management_control_operation==1 || shdmemory_management_control_operation==3)
                        begin
                        begin
                           Bit#(17) temp17 = zeroExtend(expgolomb_unsigned(buffer)) + 1;
                           Bit#(17) temp17 = zeroExtend(expgolomb_unsigned(buffer)) + 1;
                           $display( "ccl2SHDdifference_of_pic_nums %0d", temp17 );
                           $display( "ccl2SHDdifference_of_pic_nums %0d", temp17 );
                           outfifo.enq(SHDdifference_of_pic_nums temp17);
                           outfifo.enq(tagged SHDdifference_of_pic_nums temp17);
                           numbitsused = expgolomb_numbits(buffer);
                           numbitsused = expgolomb_numbits(buffer);
                           nextstate = CodedSlice 20;
                           nextstate = tagged CodedSlice 20;
                        end
                        end
                     else
                     else
                        nextstate = CodedSlice 20;
                        nextstate = tagged CodedSlice 20;
                  end
                  end
                  20:
                  20:
                  begin
                  begin
                     if(shdmemory_management_control_operation==2)
                     if(shdmemory_management_control_operation==2)
                        begin
                        begin
                           $display( "ccl2SHDlong_term_pic_num %0d", expgolomb_unsigned(buffer) );
                           $display( "ccl2SHDlong_term_pic_num %0d", expgolomb_unsigned(buffer) );
                           outfifo.enq(SHDlong_term_pic_num truncate(expgolomb_unsigned(buffer)));
                           outfifo.enq(tagged SHDlong_term_pic_num truncate(expgolomb_unsigned(buffer)));
                           numbitsused = expgolomb_numbits(buffer);
                           numbitsused = expgolomb_numbits(buffer);
                           nextstate = CodedSlice 21;
                           nextstate = tagged CodedSlice 21;
                        end
                        end
                     else
                     else
                        nextstate = CodedSlice 21;
                        nextstate = tagged CodedSlice 21;
                  end
                  end
                  21:
                  21:
                  begin
                  begin
                     if(shdmemory_management_control_operation==3 || shdmemory_management_control_operation==6)
                     if(shdmemory_management_control_operation==3 || shdmemory_management_control_operation==6)
                        begin
                        begin
                           $display( "ccl2SHDlong_term_frame_idx %0d", expgolomb_unsigned(buffer) );
                           $display( "ccl2SHDlong_term_frame_idx %0d", expgolomb_unsigned(buffer) );
                           outfifo.enq(SHDlong_term_frame_idx truncate(expgolomb_unsigned(buffer)));
                           outfifo.enq(tagged SHDlong_term_frame_idx truncate(expgolomb_unsigned(buffer)));
                           numbitsused = expgolomb_numbits(buffer);
                           numbitsused = expgolomb_numbits(buffer);
                           nextstate = CodedSlice 22;
                           nextstate = tagged CodedSlice 22;
                        end
                        end
                     else
                     else
                        nextstate = CodedSlice 22;
                        nextstate = tagged CodedSlice 22;
                  end
                  end
                  22:
                  22:
                  begin
                  begin
                     if(shdmemory_management_control_operation==4)
                     if(shdmemory_management_control_operation==4)
                        begin
                        begin
                           $display( "ccl2SHDmax_long_term_frame_idx_plus1 %0d", expgolomb_unsigned(buffer) );
                           $display( "ccl2SHDmax_long_term_frame_idx_plus1 %0d", expgolomb_unsigned(buffer) );
                           outfifo.enq(SHDmax_long_term_frame_idx_plus1 truncate(expgolomb_unsigned(buffer)));
                           outfifo.enq(tagged SHDmax_long_term_frame_idx_plus1 truncate(expgolomb_unsigned(buffer)));
                           numbitsused = expgolomb_numbits(buffer);
                           numbitsused = expgolomb_numbits(buffer);
                           nextstate = CodedSlice 18;
                           nextstate = tagged CodedSlice 18;
                        end
                        end
                     else
                     else
                        nextstate = CodedSlice 18;
                        nextstate = tagged CodedSlice 18;
                  end
                  end
                  23:
                  23:
                  begin
                  begin
                     tempint = unpack(expgolomb_signed(buffer));
                     tempint = unpack(expgolomb_signed(buffer));
                     $display( "ccl2SHslice_qp_delta %0d", tempint );
                     $display( "ccl2SHslice_qp_delta %0d", tempint );
                     outfifo_ITB.enq(SHslice_qp_delta truncate(expgolomb_signed(buffer)));
                     outfifo_ITB.enq(tagged SHslice_qp_delta truncate(expgolomb_signed(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = CodedSlice 24;
                     nextstate = tagged CodedSlice 24;
                  end
                  end
                  24:
                  24:
                  begin
                  begin
                     if(ppsdeblocking_filter_control_present_flag==1)
                     if(ppsdeblocking_filter_control_present_flag==1)
                        begin
                        begin
                           $display( "ccl2SHdisable_deblocking_filter_idc %0d", expgolomb_unsigned(buffer) );
                           $display( "ccl2SHdisable_deblocking_filter_idc %0d", expgolomb_unsigned(buffer) );
                           outfifo.enq(SHdisable_deblocking_filter_idc truncate(expgolomb_unsigned(buffer)));
                           outfifo.enq(tagged SHdisable_deblocking_filter_idc truncate(expgolomb_unsigned(buffer)));
                           numbitsused = expgolomb_numbits(buffer);
                           numbitsused = expgolomb_numbits(buffer);
                           if(expgolomb_unsigned(buffer)!=1)
                           if(expgolomb_unsigned(buffer)!=1)
                              nextstate = CodedSlice 25;
                              nextstate = tagged CodedSlice 25;
                           else
                           else
                              nextstate = CodedSlice 27;
                              nextstate = tagged CodedSlice 27;
                        end
                        end
                     else
                     else
                        nextstate = CodedSlice 27;
                        nextstate = tagged CodedSlice 27;
                  end
                  end
                  25:
                  25:
                  begin
                  begin
                     tempint = unpack(expgolomb_signed(buffer) << 1);
                     tempint = unpack(expgolomb_signed(buffer) << 1);
                     $display( "ccl2SHslice_alpha_c0_offset %0d", tempint );
                     $display( "ccl2SHslice_alpha_c0_offset %0d", tempint );
                     outfifo.enq(SHslice_alpha_c0_offset truncate(expgolomb_signed(buffer) << 1));
                     outfifo.enq(tagged SHslice_alpha_c0_offset truncate(expgolomb_signed(buffer) << 1));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = CodedSlice 26;
                     nextstate = tagged CodedSlice 26;
                  end
                  end
                  26:
                  26:
                  begin
                  begin
                     tempint = unpack(expgolomb_signed(buffer) << 1);
                     tempint = unpack(expgolomb_signed(buffer) << 1);
                     $display( "ccl2SHslice_beta_offset %0d", tempint );
                     $display( "ccl2SHslice_beta_offset %0d", tempint );
                     outfifo.enq(SHslice_beta_offset truncate(expgolomb_signed(buffer) << 1));
                     outfifo.enq(tagged SHslice_beta_offset truncate(expgolomb_signed(buffer) << 1));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = CodedSlice 27;
                     nextstate = tagged CodedSlice 27;
                  end
                  end
                  27:
                  27:
                  begin
                  begin
                     nextstate = SliceData 0;
                     nextstate = tagged SliceData 0;
                  end
                  end
                  default: $display( "ERROR EntropyDec: CodedSlice default step" );
                  default: $display( "ERROR EntropyDec: tagged CodedSlice default step" );
               endcase
               endcase
            end
            end
         tagged SEI .step :
         tagged SEI .step :
            begin
            begin
               nextstate = Start;
               nextstate = Start;
Line 623... Line 623...
                     outputdata = buffer[buffersize-9:buffersize-16];
                     outputdata = buffer[buffersize-9:buffersize-16];
                     $display( "INFO EntropyDec: constraint_set = %b", outputdata );
                     $display( "INFO EntropyDec: constraint_set = %b", outputdata );
                     outputdata = buffer[buffersize-17:buffersize-24];
                     outputdata = buffer[buffersize-17:buffersize-24];
                     $display( "INFO EntropyDec: level_idc = %d", outputdata );
                     $display( "INFO EntropyDec: level_idc = %d", outputdata );
                     numbitsused = 24;
                     numbitsused = 24;
                     nextstate = SPS 1;
                     nextstate = tagged SPS 1;
                  end
                  end
                  1:
                  1:
                  begin
                  begin
                     $display( "ccl2SPSseq_parameter_set_id %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SPSseq_parameter_set_id %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SPSseq_parameter_set_id truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq(tagged SPSseq_parameter_set_id truncate(expgolomb_unsigned(buffer)));
                     spsseq_parameter_set_id <= truncate(expgolomb_unsigned(buffer));
                     spsseq_parameter_set_id <= truncate(expgolomb_unsigned(buffer));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SPS 2;
                     nextstate = tagged SPS 2;
                  end
                  end
                  2:
                  2:
                  begin
                  begin
                     $display( "ccl2SPSlog2_max_frame_num %0d", expgolomb_unsigned(buffer)+4 );
                     $display( "ccl2SPSlog2_max_frame_num %0d", expgolomb_unsigned(buffer)+4 );
                     outfifo.enq(SPSlog2_max_frame_num truncate(expgolomb_unsigned(buffer)+4));
                     outfifo.enq(tagged SPSlog2_max_frame_num truncate(expgolomb_unsigned(buffer)+4));
                     spslog2_max_frame_num <= truncate(expgolomb_unsigned(buffer)+4);
                     spslog2_max_frame_num <= truncate(expgolomb_unsigned(buffer)+4);
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SPS 3;
                     nextstate = tagged SPS 3;
                  end
                  end
                  3:
                  3:
                  begin
                  begin
                     let tttt = expgolomb_unsigned(buffer);
                     let tttt = expgolomb_unsigned(buffer);
                     $display( "ccl2SPSpic_order_cnt_type %0d", tttt );
                     $display( "ccl2SPSpic_order_cnt_type %0d", tttt );
                     outfifo.enq(SPSpic_order_cnt_type truncate(tttt));
                     outfifo.enq(tagged SPSpic_order_cnt_type truncate(tttt));
                     spspic_order_cnt_type <= truncate(tttt);
                     spspic_order_cnt_type <= truncate(tttt);
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     if(tttt == 0)
                     if(tttt == 0)
                        nextstate = SPS 4;
                        nextstate = tagged SPS 4;
                     else if(tttt == 1)
                     else if(tttt == 1)
                        nextstate = SPS 5;
                        nextstate = tagged SPS 5;
                     else
                     else
                        nextstate = SPS 10;
                        nextstate = tagged SPS 10;
                  end
                  end
                  4:
                  4:
                  begin
                  begin
                     $display( "ccl2SPSlog2_max_pic_order_cnt_lsb %0d", expgolomb_unsigned(buffer)+4 );
                     $display( "ccl2SPSlog2_max_pic_order_cnt_lsb %0d", expgolomb_unsigned(buffer)+4 );
                     outfifo.enq(SPSlog2_max_pic_order_cnt_lsb truncate(expgolomb_unsigned(buffer)+4));
                     outfifo.enq(tagged SPSlog2_max_pic_order_cnt_lsb truncate(expgolomb_unsigned(buffer)+4));
                     spslog2_max_pic_order_cnt_lsb <= truncate(expgolomb_unsigned(buffer)+4);
                     spslog2_max_pic_order_cnt_lsb <= truncate(expgolomb_unsigned(buffer)+4);
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SPS 10;
                     nextstate = tagged SPS 10;
                  end
                  end
                  5:
                  5:
                  begin
                  begin
                     $display( "ccl2SPSdelta_pic_order_always_zero_flag %0d", buffer[buffersize-1] );
                     $display( "ccl2SPSdelta_pic_order_always_zero_flag %0d", buffer[buffersize-1] );
                     outfifo.enq(SPSdelta_pic_order_always_zero_flag buffer[buffersize-1]);
                     outfifo.enq(tagged SPSdelta_pic_order_always_zero_flag buffer[buffersize-1]);
                     spsdelta_pic_order_always_zero_flag <= buffer[buffersize-1];
                     spsdelta_pic_order_always_zero_flag <= buffer[buffersize-1];
                     numbitsused = 1;
                     numbitsused = 1;
                     nextstate = SPS 6;
                     nextstate = tagged SPS 6;
                  end
                  end
                  6:
                  6:
                  begin
                  begin
                     if(egnumbits == 0)
                     if(egnumbits == 0)
                        begin
                        begin
                           Bufcount tempbufcount = expgolomb_numbits32(buffer);
                           Bufcount tempbufcount = expgolomb_numbits32(buffer);
                           egnumbits <= tempbufcount;
                           egnumbits <= tempbufcount;
                           numbitsused = tempbufcount-1;
                           numbitsused = tempbufcount-1;
                           nextstate = SPS 6;
                           nextstate = tagged SPS 6;
                        end
                        end
                     else
                     else
                        begin
                        begin
                           tempint32 = unpack(expgolomb_signed32(buffer,egnumbits));
                           tempint32 = unpack(expgolomb_signed32(buffer,egnumbits));
                           $display( "ccl2SPSoffset_for_non_ref_pic %0d", tempint32 );
                           $display( "ccl2SPSoffset_for_non_ref_pic %0d", tempint32 );
                           outfifo.enq(SPSoffset_for_non_ref_pic truncate(expgolomb_signed32(buffer,egnumbits)));
                           outfifo.enq(tagged SPSoffset_for_non_ref_pic truncate(expgolomb_signed32(buffer,egnumbits)));
                           egnumbits <= 0;
                           egnumbits <= 0;
                           numbitsused = egnumbits;
                           numbitsused = egnumbits;
                           nextstate = SPS 7;
                           nextstate = tagged SPS 7;
                        end
                        end
                  end
                  end
                  7:
                  7:
                  begin
                  begin
                     if(egnumbits == 0)
                     if(egnumbits == 0)
                        begin
                        begin
                           Bufcount tempbufcount = expgolomb_numbits32(buffer);
                           Bufcount tempbufcount = expgolomb_numbits32(buffer);
                           egnumbits <= tempbufcount;
                           egnumbits <= tempbufcount;
                           numbitsused = tempbufcount-1;
                           numbitsused = tempbufcount-1;
                           nextstate = SPS 7;
                           nextstate = tagged SPS 7;
                        end
                        end
                     else
                     else
                        begin
                        begin
                           tempint32 = unpack(expgolomb_signed32(buffer,egnumbits));
                           tempint32 = unpack(expgolomb_signed32(buffer,egnumbits));
                           $display( "ccl2SPSoffset_for_top_to_bottom_field %0d", tempint32 );
                           $display( "ccl2SPSoffset_for_top_to_bottom_field %0d", tempint32 );
                           outfifo.enq(SPSoffset_for_top_to_bottom_field truncate(expgolomb_signed32(buffer,egnumbits)));
                           outfifo.enq(tagged SPSoffset_for_top_to_bottom_field truncate(expgolomb_signed32(buffer,egnumbits)));
                           egnumbits <= 0;
                           egnumbits <= 0;
                           numbitsused = egnumbits;
                           numbitsused = egnumbits;
                           nextstate = SPS 8;
                           nextstate = tagged SPS 8;
                        end
                        end
                  end
                  end
                  8:
                  8:
                  begin
                  begin
                     $display( "ccl2SPSnum_ref_frames_in_pic_order_cnt_cycle %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SPSnum_ref_frames_in_pic_order_cnt_cycle %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SPSnum_ref_frames_in_pic_order_cnt_cycle truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq(tagged SPSnum_ref_frames_in_pic_order_cnt_cycle truncate(expgolomb_unsigned(buffer)));
                     spsnum_ref_frames_in_pic_order_cnt_cycle <= truncate(expgolomb_unsigned(buffer));
                     spsnum_ref_frames_in_pic_order_cnt_cycle <= truncate(expgolomb_unsigned(buffer));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SPS 9;
                     nextstate = tagged SPS 9;
                  end
                  end
                  9:
                  9:
                  begin
                  begin
                     if(spsnum_ref_frames_in_pic_order_cnt_cycle == 0)
                     if(spsnum_ref_frames_in_pic_order_cnt_cycle == 0)
                        nextstate = SPS 10;
                        nextstate = tagged SPS 10;
                     else
                     else
                        begin
                        begin
                           if(egnumbits == 0)
                           if(egnumbits == 0)
                              begin
                              begin
                                 Bufcount tempbufcount = expgolomb_numbits32(buffer);
                                 Bufcount tempbufcount = expgolomb_numbits32(buffer);
                                 egnumbits <= tempbufcount;
                                 egnumbits <= tempbufcount;
                                 numbitsused = tempbufcount-1;
                                 numbitsused = tempbufcount-1;
                                 nextstate = SPS 9;
                                 nextstate = tagged SPS 9;
                              end
                              end
                           else
                           else
                              begin
                              begin
                                 tempint32 = unpack(expgolomb_signed32(buffer,egnumbits));
                                 tempint32 = unpack(expgolomb_signed32(buffer,egnumbits));
                                 $display( "ccl2SPSoffset_for_ref_frame %0d", tempint32 );
                                 $display( "ccl2SPSoffset_for_ref_frame %0d", tempint32 );
                                 outfifo.enq(SPSoffset_for_ref_frame truncate(expgolomb_signed32(buffer,egnumbits)));
                                 outfifo.enq(tagged SPSoffset_for_ref_frame truncate(expgolomb_signed32(buffer,egnumbits)));
                                 egnumbits <= 0;
                                 egnumbits <= 0;
                                 spsnum_ref_frames_in_pic_order_cnt_cycle <= spsnum_ref_frames_in_pic_order_cnt_cycle - 1;
                                 spsnum_ref_frames_in_pic_order_cnt_cycle <= spsnum_ref_frames_in_pic_order_cnt_cycle - 1;
                                 numbitsused = egnumbits;
                                 numbitsused = egnumbits;
                                 nextstate = SPS 9;
                                 nextstate = tagged SPS 9;
                              end
                              end
                        end
                        end
                  end
                  end
                  10:
                  10:
                  begin
                  begin
                     $display( "ccl2SPSnum_ref_frames %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SPSnum_ref_frames %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SPSnum_ref_frames truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq(tagged SPSnum_ref_frames truncate(expgolomb_unsigned(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SPS 11;
                     nextstate = tagged SPS 11;
                  end
                  end
                  11:
                  11:
                  begin
                  begin
                     $display( "ccl2SPSgaps_in_frame_num_allowed_flag %0d", buffer[buffersize-1] );
                     $display( "ccl2SPSgaps_in_frame_num_allowed_flag %0d", buffer[buffersize-1] );
                     outfifo.enq(SPSgaps_in_frame_num_allowed_flag buffer[buffersize-1]);
                     outfifo.enq(tagged SPSgaps_in_frame_num_allowed_flag buffer[buffersize-1]);
                     numbitsused = 1;
                     numbitsused = 1;
                     nextstate = SPS 12;
                     nextstate = tagged SPS 12;
                  end
                  end
                  12:
                  12:
                  begin
                  begin
                     $display( "ccl2SPSpic_width_in_mbs %0d", expgolomb_unsigned(buffer)+1 );
                     $display( "ccl2SPSpic_width_in_mbs %0d", expgolomb_unsigned(buffer)+1 );
                     outfifo.enq(SPSpic_width_in_mbs truncate(expgolomb_unsigned(buffer)+1));
                     outfifo.enq(tagged SPSpic_width_in_mbs truncate(expgolomb_unsigned(buffer)+1));
                     calcnc.initialize_picWidth(truncate(expgolomb_unsigned(buffer)+1));
                     calcnc.initialize_picWidth(truncate(expgolomb_unsigned(buffer)+1));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SPS 13;
                     nextstate = tagged SPS 13;
                  end
                  end
                  13:
                  13:
                  begin
                  begin
                     $display( "ccl2SPSpic_height_in_map_units %0d", expgolomb_unsigned(buffer)+1 );
                     $display( "ccl2SPSpic_height_in_map_units %0d", expgolomb_unsigned(buffer)+1 );
                     outfifo.enq(SPSpic_height_in_map_units truncate(expgolomb_unsigned(buffer)+1));
                     outfifo.enq(tagged SPSpic_height_in_map_units truncate(expgolomb_unsigned(buffer)+1));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SPS 14;
                     nextstate = tagged SPS 14;
                  end
                  end
                  14:
                  14:
                  begin
                  begin
                     //SPSframe_mbs_only_flag = 1 for baseline
                     //SPSframe_mbs_only_flag = 1 for baseline
                     numbitsused = 1;
                     numbitsused = 1;
                     nextstate = SPS 15;
                     nextstate = tagged SPS 15;
                  end
                  end
                  15:
                  15:
                  begin
                  begin
                     $display( "ccl2SPSdirect_8x8_inference_flag %0d", buffer[buffersize-1] );
                     $display( "ccl2SPSdirect_8x8_inference_flag %0d", buffer[buffersize-1] );
                     outfifo.enq(SPSdirect_8x8_inference_flag buffer[buffersize-1]);
                     outfifo.enq(tagged SPSdirect_8x8_inference_flag buffer[buffersize-1]);
                     numbitsused = 1;
                     numbitsused = 1;
                     nextstate = SPS 16;
                     nextstate = tagged SPS 16;
                  end
                  end
                  16:
                  16:
                  begin
                  begin
                     $display( "ccl2SPSframe_cropping_flag %0d", buffer[buffersize-1] );
                     $display( "ccl2SPSframe_cropping_flag %0d", buffer[buffersize-1] );
                     outfifo.enq(SPSframe_cropping_flag buffer[buffersize-1]);
                     outfifo.enq(tagged SPSframe_cropping_flag buffer[buffersize-1]);
                     numbitsused = 1;
                     numbitsused = 1;
                     if(buffer[buffersize-1] == 1)
                     if(buffer[buffersize-1] == 1)
                        nextstate = SPS 17;
                        nextstate = tagged SPS 17;
                     else
                     else
                        nextstate = SPS 21;
                        nextstate = tagged SPS 21;
                  end
                  end
                  17:
                  17:
                  begin
                  begin
                     $display( "ccl2SPSframe_crop_left_offset %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SPSframe_crop_left_offset %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SPSframe_crop_left_offset truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq(tagged SPSframe_crop_left_offset truncate(expgolomb_unsigned(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SPS 18;
                     nextstate = tagged SPS 18;
                  end
                  end
                  18:
                  18:
                  begin
                  begin
                     $display( "ccl2SPSframe_crop_right_offset %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SPSframe_crop_right_offset %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SPSframe_crop_right_offset truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq(tagged SPSframe_crop_right_offset truncate(expgolomb_unsigned(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SPS 19;
                     nextstate = tagged SPS 19;
                  end
                  end
                  19:
                  19:
                  begin
                  begin
                     $display( "ccl2SPSframe_crop_top_offset %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SPSframe_crop_top_offset %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SPSframe_crop_top_offset truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq(tagged SPSframe_crop_top_offset truncate(expgolomb_unsigned(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SPS 20;
                     nextstate = tagged SPS 20;
                  end
                  end
                  20:
                  20:
                  begin
                  begin
                     $display( "ccl2SPSframe_crop_bottom_offset %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SPSframe_crop_bottom_offset %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SPSframe_crop_bottom_offset truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq(tagged SPSframe_crop_bottom_offset truncate(expgolomb_unsigned(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SPS 21;
                     nextstate = tagged SPS 21;
                  end
                  end
                  21:
                  21:
                  begin
                  begin
                     nextstate = Start;
                     nextstate = Start;
                     $display( "INFO EntropyDec:VUI data thrown away" );
                     $display( "INFO EntropyDec:VUI data thrown away" );
                  end
                  end
                  default: $display( "ERROR EntropyDec: SPS default step" );
                  default: $display( "ERROR EntropyDec: tagged SPS default step" );
               endcase
               endcase
            end
            end
         tagged PPS .step :
         tagged PPS .step :
            begin
            begin
               case ( step )
               case ( step )
                  0:
                  0:
                  begin
                  begin
                     ppspic_parameter_set_id <= truncate(expgolomb_unsigned(buffer));
                     ppspic_parameter_set_id <= truncate(expgolomb_unsigned(buffer));
                     $display( "ccl2PPSpic_parameter_set_id %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2PPSpic_parameter_set_id %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(PPSpic_parameter_set_id truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq(tagged PPSpic_parameter_set_id truncate(expgolomb_unsigned(buffer)));
                     outfifo_ITB.enq(PPSpic_parameter_set_id truncate(expgolomb_unsigned(buffer)));
                     outfifo_ITB.enq(tagged PPSpic_parameter_set_id truncate(expgolomb_unsigned(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = PPS 1;
                     nextstate = tagged PPS 1;
                  end
                  end
                  1:
                  1:
                  begin
                  begin
                     $display( "ccl2PPSseq_parameter_set_id %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2PPSseq_parameter_set_id %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(PPSseq_parameter_set_id truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq(tagged PPSseq_parameter_set_id truncate(expgolomb_unsigned(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = PPS 2;
                     nextstate = tagged PPS 2;
                     if(spsseq_parameter_set_id != truncate(expgolomb_unsigned(buffer)))
                     if(spsseq_parameter_set_id != truncate(expgolomb_unsigned(buffer)))
                        $display( "ERROR EntropyDec: seq_parameter_set_id don't match" );
                        $display( "ERROR EntropyDec: seq_parameter_set_id don't match" );
                  end
                  end
                  2:
                  2:
                  begin
                  begin
                     //PPSentropy_coding_mode_flag = 0 for baseline
                     //PPSentropy_coding_mode_flag = 0 for baseline
                     numbitsused = 1;
                     numbitsused = 1;
                     nextstate = PPS 3;
                     nextstate = tagged PPS 3;
                  end
                  end
                  3:
                  3:
                  begin
                  begin
                     ppspic_order_present_flag <= buffer[buffersize-1];
                     ppspic_order_present_flag <= buffer[buffersize-1];
                     $display( "ccl2PPSpic_order_present_flag %0d", buffer[buffersize-1] );
                     $display( "ccl2PPSpic_order_present_flag %0d", buffer[buffersize-1] );
                     outfifo.enq(PPSpic_order_present_flag buffer[buffersize-1]);
                     outfifo.enq(tagged PPSpic_order_present_flag buffer[buffersize-1]);
                     numbitsused = 1;
                     numbitsused = 1;
                     nextstate = PPS 4;
                     nextstate = tagged PPS 4;
                  end
                  end
                  4:
                  4:
                  begin
                  begin
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = PPS 5;
                     nextstate = tagged PPS 5;
                     if(expgolomb_unsigned(buffer)+1 != 1)
                     if(expgolomb_unsigned(buffer)+1 != 1)
                        $display( "ERROR EntropyDec: PPSnum_slice_groups not equal to 1" );//=1 for main
                        $display( "ERROR EntropyDec: PPSnum_slice_groups not equal to 1" );//=1 for main
                  end
                  end
                  5:
                  5:
                  begin
                  begin
                     $display( "ccl2PPSnum_ref_idx_l0_active %0d", expgolomb_unsigned(buffer)+1 );
                     $display( "ccl2PPSnum_ref_idx_l0_active %0d", expgolomb_unsigned(buffer)+1 );
                     outfifo.enq(PPSnum_ref_idx_l0_active truncate(expgolomb_unsigned(buffer)+1));
                     outfifo.enq(tagged PPSnum_ref_idx_l0_active truncate(expgolomb_unsigned(buffer)+1));
                     num_ref_idx_l0_active_minus1 <= truncate(expgolomb_unsigned(buffer));
                     num_ref_idx_l0_active_minus1 <= truncate(expgolomb_unsigned(buffer));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = PPS 6;
                     nextstate = tagged PPS 6;
                  end
                  end
                  6:
                  6:
                  begin
                  begin
                     $display( "ccl2PPSnum_ref_idx_l1_active %0d", expgolomb_unsigned(buffer)+1 );
                     $display( "ccl2PPSnum_ref_idx_l1_active %0d", expgolomb_unsigned(buffer)+1 );
                     outfifo.enq(PPSnum_ref_idx_l1_active truncate(expgolomb_unsigned(buffer)+1));
                     outfifo.enq( tagged PPSnum_ref_idx_l1_active truncate(expgolomb_unsigned(buffer)+1));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = PPS 7;
                     nextstate = tagged PPS 7;
                  end
                  end
                  7:
                  7:
                  begin
                  begin
                     //PPSweighted_pred_flag = 0 for baseline; PPSweighted_bipred_idc = 0 for baseline
                     //PPSweighted_pred_flag = 0 for baseline; PPSweighted_bipred_idc = 0 for baseline
                     numbitsused = 3;
                     numbitsused = 3;
                     nextstate = PPS 8;
                     nextstate = tagged PPS 8;
                  end
                  end
                  8:
                  8:
                  begin
                  begin
                     $display( "ccl2PPSpic_init_qp %0d", expgolomb_signed(buffer)+26 );
                     $display( "ccl2PPSpic_init_qp %0d", expgolomb_signed(buffer)+26 );
                     outfifo_ITB.enq(PPSpic_init_qp truncate(expgolomb_signed(buffer)+26));
                     outfifo_ITB.enq(tagged PPSpic_init_qp truncate(expgolomb_signed(buffer)+26));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = PPS 9;
 
 
                     nextstate = tagged PPS 9;
                  end
                  end
                  9:
                  9:
                  begin
                  begin
                     $display( "ccl2PPSpic_init_qs %0d", expgolomb_signed(buffer)+26 );
                     $display( "ccl2PPSpic_init_qs %0d", expgolomb_signed(buffer)+26 );
                     outfifo_ITB.enq(PPSpic_init_qs truncate(expgolomb_signed(buffer)+26));
                     outfifo_ITB.enq(tagged PPSpic_init_qs truncate(expgolomb_signed(buffer)+26));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = PPS 10;
                     nextstate = tagged PPS 10;
                  end
                  end
                  10:
                  10:
                  begin
                  begin
                     tempint = unpack(expgolomb_signed(buffer));
                     tempint = unpack(expgolomb_signed(buffer));
                     $display( "ccl2PPSchroma_qp_index_offset %0d", tempint );
                     $display( "ccl2PPSchroma_qp_index_offset %0d", tempint );
                     outfifo_ITB.enq(PPSchroma_qp_index_offset truncate(expgolomb_signed(buffer)));
                     outfifo_ITB.enq(tagged PPSchroma_qp_index_offset truncate(expgolomb_signed(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = PPS 11;
                     nextstate = tagged PPS 11;
                  end
                  end
                  11:
                  11:
                  begin
                  begin
                     ppsdeblocking_filter_control_present_flag <= buffer[buffersize-1];
                     ppsdeblocking_filter_control_present_flag <= buffer[buffersize-1];
                     $display( "ccl2PPSdeblocking_filter_control_present_flag %0d", buffer[buffersize-1] );
                     $display( "ccl2PPSdeblocking_filter_control_present_flag %0d", buffer[buffersize-1] );
                     outfifo.enq(PPSdeblocking_filter_control_present_flag buffer[buffersize-1]);
                     outfifo.enq( tagged PPSdeblocking_filter_control_present_flag buffer[buffersize-1]);
                     numbitsused = 1;
                     numbitsused = 1;
                     nextstate = PPS 12;
                     nextstate = tagged PPS 12;
                  end
                  end
                  12:
                  12:
                  begin
                  begin
                     $display( "ccl2PPSconstrained_intra_pred_flag %0d", buffer[buffersize-1] );
                     $display( "ccl2PPSconstrained_intra_pred_flag %0d", buffer[buffersize-1] );
                     outfifo.enq(PPSconstrained_intra_pred_flag buffer[buffersize-1]);
                     outfifo.enq( tagged PPSconstrained_intra_pred_flag buffer[buffersize-1]);
                     numbitsused = 1;
                     numbitsused = 1;
                     nextstate = PPS 13;
                     nextstate = tagged PPS 13;
                  end
                  end
                  13:
                  13:
                  begin
                  begin
                     //PPSredundant_pic_cnt_present_flag = 0 for main
                     //PPSredundant_pic_cnt_present_flag = 0 for main
                     numbitsused = 1;
                     numbitsused = 1;
                     nextstate = PPS 14;
                     nextstate = tagged PPS 14;
                     if(buffer[buffersize-1] != 0)
                     if(buffer[buffersize-1] != 0)
                        $display( "ERROR EntropyDec: PPSredundant_pic_cnt_present_flag not equal to 0" );//=0 for main
                        $display( "ERROR EntropyDec: PPSredundant_pic_cnt_present_flag not equal to 0" );//=0 for main
                  end
                  end
                  14:
                  14:
                  begin
                  begin
                     nextstate = Start;
                     nextstate = Start;
                  end
                  end
                  default: $display( "ERROR EntropyDec: PPS default step" );
                  default: $display( "ERROR EntropyDec: tagged PPS default step" );
               endcase
               endcase
            end
            end
         tagged AUD .step :
         tagged AUD .step :
            begin
            begin
               outfifo.enq(AUDPrimaryPicType buffer[buffersize-1:buffersize-3]);
               outfifo.enq( tagged AUDPrimaryPicType buffer[buffersize-1:buffersize-3]);
               numbitsused = 3;
               numbitsused = 3;
               nextstate = Start;
               nextstate = Start;
            end
            end
         tagged EndSequence :
         tagged EndSequence :
            begin
            begin
               outfifo.enq(EndOfSequence);
               outfifo.enq( tagged EndOfSequence);
               nextstate = Start;
               nextstate = Start;
            end
            end
         tagged EndStream :
         tagged EndStream :
            begin
            begin
               outfifo.enq(EndOfStream);
               outfifo.enq( tagged EndOfStream);
               nextstate = Start;
               nextstate = Start;
            end
            end
         tagged Filler :
         tagged Filler :
            begin
            begin
               nextstate = Start;
               nextstate = Start;
Line 973... Line 974...
                  0:
                  0:
                  begin
                  begin
                     if( shslice_type!=2 && shslice_type!=7 )
                     if( shslice_type!=2 && shslice_type!=7 )
                        begin
                        begin
                           $display( "ccl2SDmb_skip_run %0d", expgolomb_unsigned(buffer) );
                           $display( "ccl2SDmb_skip_run %0d", expgolomb_unsigned(buffer) );
                           outfifo.enq(SDmb_skip_run truncate(expgolomb_unsigned(buffer)));
                           outfifo.enq( tagged SDmb_skip_run truncate(expgolomb_unsigned(buffer)));
                           tempreg <= truncate(expgolomb_unsigned(buffer));
                           tempreg <= truncate(expgolomb_unsigned(buffer));
                           calcnc.nNupdate_pskip( truncate(expgolomb_unsigned(buffer)) );
                           calcnc.nNupdate_pskip( truncate(expgolomb_unsigned(buffer)) );
                           numbitsused = expgolomb_numbits(buffer);
                           numbitsused = expgolomb_numbits(buffer);
                           nextstate = SliceData 1;
                           nextstate = tagged SliceData 1;
                        end
                        end
                     else
                     else
                        nextstate = SliceData 2;
                        nextstate = tagged SliceData 2;
                  end
                  end
                  1:
                  1:
                  begin
                  begin
                     if( tempreg>0 )
                     if( tempreg>0 )
                        begin
                        begin
                           currMbAddr <= currMbAddr+1;//only because input assumed to comform to both baseline and main
                           currMbAddr <= currMbAddr+1;//only because input assumed to comform to both baseline and main
                           tempreg <= tempreg-1;
                           tempreg <= tempreg-1;
                           nextstate = SliceData 1;
                           nextstate = tagged SliceData 1;
                        end
                        end
                     else
                     else
                        begin
                        begin
                           ////$display( "ccl2SDcurrMbAddr %0d", currMbAddr );
                           ////$display( "ccl2SDcurrMbAddr %0d", currMbAddr );
                           ////outfifo.enq(SDcurrMbAddr currMbAddr);
                           ////outfifo.enq( tagged SDcurrMbAddr currMbAddr);
                           nextstate = SliceData 2;
                           nextstate = tagged SliceData 2;
                        end
                        end
                  end
                  end
                  2:
                  2:
                  begin
                  begin
                     if( bufcount>8 || buffer[buffersize-1]!=1 || (buffer<<1)!=0 )
                     if( bufcount>8 || buffer[buffersize-1]!=1 || (buffer<<1)!=0 )
                        begin
                        begin
                           calcnc.loadMb(currMbAddr);
                           calcnc.loadMb(currMbAddr);
                           nextstate = MacroblockLayer 0;
                           nextstate = tagged MacroblockLayer 0;
                        end
                        end
                     else
                     else
                        nextstate = SliceData 3;
                        nextstate = tagged SliceData 3;
                  end
                  end
                  3:
                  3:
                  begin
                  begin
                     currMbAddr <= currMbAddr+1;//only because input assumed to comform to both baseline and main
                     currMbAddr <= currMbAddr+1;//only because input assumed to comform to both baseline and main
                     if( bufcount>8 || buffer[buffersize-1]!=1 || (buffer<<1)!=0 )
                     if( bufcount>8 || buffer[buffersize-1]!=1 || (buffer<<1)!=0 )
                        nextstate = SliceData 0;
                        nextstate = tagged SliceData 0;
                     else
                     else
                        nextstate = Start;
                        nextstate = Start;
                  end
                  end
                  default: $display( "ERROR EntropyDec: SliceData default step" );
                  default: $display( "ERROR EntropyDec: tagged SliceData default step" );
               endcase
               endcase
            end
            end
         tagged MacroblockLayer .step : //return to SliceData 3
         tagged MacroblockLayer .step : //return to tagged SliceData 3
            begin
            begin
               case ( step )
               case ( step )
                  0:
                  0:
                  begin
                  begin
                     $display( "ccl2SDMmb_type %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SDMmb_type %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SDMmbtype mbtype_convert(truncate(expgolomb_unsigned(buffer)), shslice_type) );
                     outfifo.enq( tagged SDMmbtype mbtype_convert(truncate(expgolomb_unsigned(buffer)), shslice_type) );
                     outfifo_ITB.enq(SDMmbtype mbtype_convert(truncate(expgolomb_unsigned(buffer)), shslice_type) );
                     outfifo_ITB.enq(tagged SDMmbtype mbtype_convert(truncate(expgolomb_unsigned(buffer)), shslice_type) );
                     sdmmbtype <= mbtype_convert(truncate(expgolomb_unsigned(buffer)), shslice_type);
                     sdmmbtype <= mbtype_convert(truncate(expgolomb_unsigned(buffer)), shslice_type);
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     if(mbtype_convert(truncate(expgolomb_unsigned(buffer)), shslice_type) == I_PCM)
                     if(mbtype_convert(truncate(expgolomb_unsigned(buffer)), shslice_type) == I_PCM)
                        begin
                        begin
                           calcnc.nNupdate_ipcm();
                           calcnc.nNupdate_ipcm();
                           nextstate = MacroblockLayer 1;
                           nextstate = tagged MacroblockLayer 1;
                        end
                        end
                     else
                     else
                        nextstate = MacroblockLayer 4;
                        nextstate = tagged MacroblockLayer 4;
                  end
                  end
                  1:
                  1:
                  begin
                  begin
                     tempreg <= 256;
                     tempreg <= 256;
                     numbitsused = zeroExtend(bufcount[2:0]);
                     numbitsused = zeroExtend(bufcount[2:0]);
                     nextstate = MacroblockLayer 2;
                     nextstate = tagged MacroblockLayer 2;
                  end
                  end
                  2:
                  2:
                  begin
                  begin
                     if( tempreg>0 )
                     if( tempreg>0 )
                        begin
                        begin
                           Bit#(8) outputdata = buffer[buffersize-1:buffersize-8];
                           Bit#(8) outputdata = buffer[buffersize-1:buffersize-8];
                           $display( "ccl2SDMpcm_sample_luma %0d", outputdata );
                           $display( "ccl2SDMpcm_sample_luma %0d", outputdata );
                           outfifo.enq(SDMpcm_sample_luma outputdata);
                           outfifo.enq( tagged SDMpcm_sample_luma outputdata);
                           tempreg <= tempreg-1;
                           tempreg <= tempreg-1;
                           numbitsused = 8;
                           numbitsused = 8;
                           nextstate = MacroblockLayer 2;
                           nextstate = tagged MacroblockLayer 2;
                        end
                        end
                     else
                     else
                        begin
                        begin
                           tempreg <= 128;
                           tempreg <= 128;
                           nextstate = MacroblockLayer 3;
                           nextstate = tagged MacroblockLayer 3;
                        end
                        end
                  end
                  end
                  3:
                  3:
                  begin
                  begin
                     if( tempreg>0 )
                     if( tempreg>0 )
                        begin
                        begin
                           Bit#(8) outputdata = buffer[buffersize-1:buffersize-8];
                           Bit#(8) outputdata = buffer[buffersize-1:buffersize-8];
                           $display( "ccl2SDMpcm_sample_chroma %0d", outputdata );
                           $display( "ccl2SDMpcm_sample_chroma %0d", outputdata );
                           outfifo.enq(SDMpcm_sample_chroma outputdata);
                           outfifo.enq( tagged SDMpcm_sample_chroma outputdata);
                           tempreg <= tempreg-1;
                           tempreg <= tempreg-1;
                           numbitsused = 8;
                           numbitsused = 8;
                           nextstate = MacroblockLayer 3;
                           nextstate = tagged MacroblockLayer 3;
                        end
                        end
                     else
                     else
                           nextstate = SliceData 3;
                           nextstate = tagged SliceData 3;
                  end
                  end
                  4:
                  4:
                  begin
                  begin
                     if(sdmmbtype != I_NxN
                     if(sdmmbtype != I_NxN
                        &&& mbPartPredMode(sdmmbtype,0) != Intra_16x16
                        &&& mbPartPredMode(sdmmbtype,0) != Intra_16x16
                        &&& numMbPart(sdmmbtype) == 4)
                        &&& numMbPart(sdmmbtype) == 4)
                        nextstate = SubMbPrediction 0;
                        nextstate = tagged SubMbPrediction 0;
                     else
                     else
                        nextstate = MbPrediction 0;
                        nextstate = tagged MbPrediction 0;
                  end
                  end
                  5:
                  5:
                  begin
                  begin
                     if(mbPartPredMode(sdmmbtype,0) != Intra_16x16)
                     if(mbPartPredMode(sdmmbtype,0) != Intra_16x16)
                        begin
                        begin
                           $display( "ccl2SDMcoded_block_pattern %0d", expgolomb_coded_block_pattern(buffer,sdmmbtype) );
                           $display( "ccl2SDMcoded_block_pattern %0d", expgolomb_coded_block_pattern(buffer,sdmmbtype) );
                           ////outfifo.enq(SDMcoded_block_pattern expgolomb_coded_block_pattern(buffer,sdmmbtype));
                           ////outfifo.enq( tagged SDMcoded_block_pattern expgolomb_coded_block_pattern(buffer,sdmmbtype));
                           sdmcodedBlockPatternLuma <= expgolomb_coded_block_pattern(buffer,sdmmbtype)[3:0];
                           sdmcodedBlockPatternLuma <= expgolomb_coded_block_pattern(buffer,sdmmbtype)[3:0];
                           sdmcodedBlockPatternChroma <= expgolomb_coded_block_pattern(buffer,sdmmbtype)[5:4];
                           sdmcodedBlockPatternChroma <= expgolomb_coded_block_pattern(buffer,sdmmbtype)[5:4];
                           numbitsused = expgolomb_numbits(buffer);
                           numbitsused = expgolomb_numbits(buffer);
                        end
                        end
                     else
                     else
Line 1100... Line 1101...
                              begin
                              begin
                                 sdmcodedBlockPatternLuma <= {tempv3,tempv3,tempv3,tempv3};
                                 sdmcodedBlockPatternLuma <= {tempv3,tempv3,tempv3,tempv3};
                                 sdmcodedBlockPatternChroma <= tempv2;
                                 sdmcodedBlockPatternChroma <= tempv2;
                              end
                              end
                           else
                           else
                              $display( "ERROR EntropyDec: MacroblockLayer 5 sdmmbtype not I_16x16" );
                              $display( "ERROR EntropyDec: tagged MacroblockLayer 5 sdmmbtype not I_16x16" );
                        end
                        end
                     nextstate = MacroblockLayer 6;
                     nextstate = tagged MacroblockLayer 6;
                  end
                  end
                  6:
                  6:
                  begin
                  begin
                     if(sdmcodedBlockPatternLuma > 0
                     if(sdmcodedBlockPatternLuma > 0
                        || sdmcodedBlockPatternChroma > 0
                        || sdmcodedBlockPatternChroma > 0
                        || mbPartPredMode(sdmmbtype,0) == Intra_16x16)
                        || mbPartPredMode(sdmmbtype,0) == Intra_16x16)
                        begin
                        begin
                           tempint = unpack(expgolomb_signed(buffer));
                           tempint = unpack(expgolomb_signed(buffer));
                           $display( "ccl2SDMmb_qp_delta %0d", tempint );
                           $display( "ccl2SDMmb_qp_delta %0d", tempint );
                           outfifo_ITB.enq(SDMmb_qp_delta truncate(expgolomb_signed(buffer)));
                           outfifo_ITB.enq(tagged SDMmb_qp_delta truncate(expgolomb_signed(buffer)));
                           numbitsused = expgolomb_numbits(buffer);
                           numbitsused = expgolomb_numbits(buffer);
                        end
                        end
                     residualChroma <= 0;
                     residualChroma <= 0;
                     temp5bit <= 0;
                     temp5bit <= 0;
                     maxNumCoeff <= 16;
                     maxNumCoeff <= 16;
                     nextstate = ResidualBlock 0;
                     nextstate = tagged ResidualBlock 0;
                  end
                  end
                  default: $display( "ERROR EntropyDec: MacroblockLayer default step" );
                  default: $display( "ERROR EntropyDec: tagged MacroblockLayer default step" );
               endcase
               endcase
            end
            end
         tagged MbPrediction .step : //return to MacroblockLayer 5
         tagged MbPrediction .step : //return to tagged MacroblockLayer 5
            begin
            begin
               case ( step )
               case ( step )
                  0:
                  0:
                  begin
                  begin
                     if(mbPartPredMode(sdmmbtype,0) == Intra_16x16)
                     if(mbPartPredMode(sdmmbtype,0) == Intra_16x16)
                        begin
                        begin
                           $display( "ccl2SDMMintra_chroma_pred_mode %0d", expgolomb_unsigned(buffer) );
                           $display( "ccl2SDMMintra_chroma_pred_mode %0d", expgolomb_unsigned(buffer) );
                           outfifo.enq(SDMMintra_chroma_pred_mode truncate(expgolomb_unsigned(buffer)));
                           outfifo.enq( tagged SDMMintra_chroma_pred_mode truncate(expgolomb_unsigned(buffer)));
                           numbitsused = expgolomb_numbits(buffer);
                           numbitsused = expgolomb_numbits(buffer);
                           nextstate = MacroblockLayer 5;
                           nextstate = tagged MacroblockLayer 5;
                        end
                        end
                     else if(mbPartPredMode(sdmmbtype,0) == Intra_4x4)
                     else if(mbPartPredMode(sdmmbtype,0) == Intra_4x4)
                        begin
                        begin
                           temp5bit <= 16;
                           temp5bit <= 16;
                           nextstate = MbPrediction 1;
                           nextstate = tagged MbPrediction 1;
                        end
                        end
                     else if(num_ref_idx_l0_active_minus1 > 0)
                     else if(num_ref_idx_l0_active_minus1 > 0)
                        begin
                        begin
                           temp3bit0 <= numMbPart(sdmmbtype);
                           temp3bit0 <= numMbPart(sdmmbtype);
                           nextstate = MbPrediction 2;
                           nextstate = tagged MbPrediction 2;
                        end
                        end
                     else
                     else
                        begin
                        begin
                           temp3bit0 <= numMbPart(sdmmbtype);
                           temp3bit0 <= numMbPart(sdmmbtype);
                           nextstate = MbPrediction 3;
                           nextstate = tagged MbPrediction 3;
                        end
                        end
                  end
                  end
                  1:
                  1:
                  begin
                  begin
                     if(temp5bit == 0)
                     if(temp5bit == 0)
                        begin
                        begin
                           $display( "ccl2SDMMintra_chroma_pred_mode %0d", expgolomb_unsigned(buffer) );
                           $display( "ccl2SDMMintra_chroma_pred_mode %0d", expgolomb_unsigned(buffer) );
                           outfifo.enq(SDMMintra_chroma_pred_mode truncate(expgolomb_unsigned(buffer)));
                           outfifo.enq( tagged SDMMintra_chroma_pred_mode truncate(expgolomb_unsigned(buffer)));
                           numbitsused = expgolomb_numbits(buffer);
                           numbitsused = expgolomb_numbits(buffer);
                           nextstate = MacroblockLayer 5;
                           nextstate = tagged MacroblockLayer 5;
                        end
                        end
                     else
                     else
                        begin
                        begin
                           ////$display( "ccl2SDMMprev_intra4x4_pred_mode_flag %0d", buffer[buffersize-1] );
                           ////$display( "ccl2SDMMprev_intra4x4_pred_mode_flag %0d", buffer[buffersize-1] );
                           if(buffer[buffersize-1] == 0)
                           if(buffer[buffersize-1] == 0)
                              begin
                              begin
                                 Bit#(4) tttt = buffer[buffersize-1:buffersize-4];
                                 Bit#(4) tttt = buffer[buffersize-1:buffersize-4];
                                 $display( "ccl2SDMMrem_intra4x4_pred_mode %0d", tttt );
                                 $display( "ccl2SDMMrem_intra4x4_pred_mode %0d", tttt );
                                 outfifo.enq(SDMMrem_intra4x4_pred_mode tttt);
                                 outfifo.enq( tagged SDMMrem_intra4x4_pred_mode tttt);
                                 numbitsused = 4;
                                 numbitsused = 4;
                              end
                              end
                           else
                           else
                              begin
                              begin
                                 outfifo.enq(SDMMrem_intra4x4_pred_mode 4'b1000);
                                 outfifo.enq( tagged SDMMrem_intra4x4_pred_mode 4'b1000);
                                 numbitsused = 1;
                                 numbitsused = 1;
                              end
                              end
                           temp5bit <= temp5bit-1;
                           temp5bit <= temp5bit-1;
                           nextstate = MbPrediction 1;
                           nextstate = tagged MbPrediction 1;
                        end
                        end
                  end
                  end
                  2:
                  2:
                  begin
                  begin
                     if(num_ref_idx_l0_active_minus1 == 1)
                     if(num_ref_idx_l0_active_minus1 == 1)
                        begin
                        begin
                           $display( "ccl2SDMMref_idx_l0 %0d", 1-buffer[buffersize-1] );
                           $display( "ccl2SDMMref_idx_l0 %0d", 1-buffer[buffersize-1] );
                           outfifo.enq(SDMMref_idx_l0 zeroExtend(1-buffer[buffersize-1]));
                           outfifo.enq( tagged SDMMref_idx_l0 zeroExtend(1-buffer[buffersize-1]));
                           numbitsused = 1;
                           numbitsused = 1;
                        end
                        end
                     else
                     else
                        begin
                        begin
                           $display( "ccl2SDMMref_idx_l0 %0d", expgolomb_unsigned(buffer) );
                           $display( "ccl2SDMMref_idx_l0 %0d", expgolomb_unsigned(buffer) );
                           outfifo.enq(SDMMref_idx_l0 truncate(expgolomb_unsigned(buffer)));
                           outfifo.enq( tagged SDMMref_idx_l0 truncate(expgolomb_unsigned(buffer)));
                           numbitsused = expgolomb_numbits(buffer);
                           numbitsused = expgolomb_numbits(buffer);
                        end
                        end
                     if(temp3bit0 == 1)
                     if(temp3bit0 == 1)
                        begin
                        begin
                           temp3bit0 <= numMbPart(sdmmbtype);
                           temp3bit0 <= numMbPart(sdmmbtype);
                           nextstate = MbPrediction 3;
                           nextstate = tagged MbPrediction 3;
                        end
                        end
                     else
                     else
                        begin
                        begin
                           temp3bit0 <= temp3bit0-1;
                           temp3bit0 <= temp3bit0-1;
                           nextstate = MbPrediction 2;
                           nextstate = tagged MbPrediction 2;
                        end
                        end
                  end
                  end
                  3:
                  3:
                  begin
                  begin
                     tempint = unpack(expgolomb_signed(buffer));
                     tempint = unpack(expgolomb_signed(buffer));
                     $display( "ccl2SDMMmvd_l0 %0d", tempint );
                     $display( "ccl2SDMMmvd_l0 %0d", tempint );
                     outfifo.enq(SDMMmvd_l0 truncate(expgolomb_signed(buffer)));
                     outfifo.enq( tagged SDMMmvd_l0 truncate(expgolomb_signed(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = MbPrediction 4;
                     nextstate = tagged MbPrediction 4;
                  end
                  end
                  4:
                  4:
                  begin
                  begin
                     tempint = unpack(expgolomb_signed(buffer));
                     tempint = unpack(expgolomb_signed(buffer));
                     $display( "ccl2SDMMmvd_l0 %0d", tempint );
                     $display( "ccl2SDMMmvd_l0 %0d", tempint );
                     outfifo.enq(SDMMmvd_l0 truncate(expgolomb_signed(buffer)));
                     outfifo.enq( tagged SDMMmvd_l0 truncate(expgolomb_signed(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     temp3bit0 <= temp3bit0-1;
                     temp3bit0 <= temp3bit0-1;
                     if(temp3bit0 == 1)
                     if(temp3bit0 == 1)
                        nextstate = MacroblockLayer 5;
                        nextstate = tagged MacroblockLayer 5;
                     else
                     else
                        nextstate = MbPrediction 3;
                        nextstate = tagged MbPrediction 3;
                  end
                  end
                  default: $display( "ERROR EntropyDec: MbPrediction default step" );
                  default: $display( "ERROR EntropyDec: MbPrediction default step" );
               endcase
               endcase
            end
            end
         tagged SubMbPrediction .step : //return to MacroblockLayer 5
         tagged SubMbPrediction .step : //return to tagged MacroblockLayer 5
            begin
            begin
               case ( step )
               case ( step )
                  0:
                  0:
                  begin
                  begin
                     $display( "ccl2SDMSsub_mb_type %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SDMSsub_mb_type %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SDMSsub_mb_type truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq( tagged SDMSsub_mb_type truncate(expgolomb_unsigned(buffer)));
                     temp3bit0 <= numSubMbPart(truncate(expgolomb_unsigned(buffer)));
                     temp3bit0 <= numSubMbPart(truncate(expgolomb_unsigned(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SubMbPrediction 1;
                     nextstate = tagged SubMbPrediction 1;
                  end
                  end
                  1:
                  1:
                  begin
                  begin
                     $display( "ccl2SDMSsub_mb_type %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SDMSsub_mb_type %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SDMSsub_mb_type truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq( tagged SDMSsub_mb_type truncate(expgolomb_unsigned(buffer)));
                     temp3bit1 <= numSubMbPart(truncate(expgolomb_unsigned(buffer)));
                     temp3bit1 <= numSubMbPart(truncate(expgolomb_unsigned(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SubMbPrediction 2;
                     nextstate = tagged SubMbPrediction 2;
                  end
                  end
                  2:
                  2:
                  begin
                  begin
                     $display( "ccl2SDMSsub_mb_type %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SDMSsub_mb_type %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SDMSsub_mb_type truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq( tagged SDMSsub_mb_type truncate(expgolomb_unsigned(buffer)));
                     temp3bit2 <= numSubMbPart(truncate(expgolomb_unsigned(buffer)));
                     temp3bit2 <= numSubMbPart(truncate(expgolomb_unsigned(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SubMbPrediction 3;
                     nextstate = tagged SubMbPrediction 3;
                  end
                  end
                  3:
                  3:
                  begin
                  begin
                     $display( "ccl2SDMSsub_mb_type %0d", expgolomb_unsigned(buffer) );
                     $display( "ccl2SDMSsub_mb_type %0d", expgolomb_unsigned(buffer) );
                     outfifo.enq(SDMSsub_mb_type truncate(expgolomb_unsigned(buffer)));
                     outfifo.enq( tagged SDMSsub_mb_type truncate(expgolomb_unsigned(buffer)));
                     temp3bit3 <= numSubMbPart(truncate(expgolomb_unsigned(buffer)));
                     temp3bit3 <= numSubMbPart(truncate(expgolomb_unsigned(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     if(num_ref_idx_l0_active_minus1 > 0
                     if(num_ref_idx_l0_active_minus1 > 0
                              && sdmmbtype != P_8x8ref0)
                              && sdmmbtype != P_8x8ref0)
                        nextstate = SubMbPrediction 4;
                        nextstate = tagged SubMbPrediction 4;
                     else
                     else
                        nextstate = SubMbPrediction 8;
                        nextstate = tagged SubMbPrediction 8;
                  end
                  end
                  4:
                  4:
                  begin
                  begin
                     if(num_ref_idx_l0_active_minus1 == 1)
                     if(num_ref_idx_l0_active_minus1 == 1)
                        begin
                        begin
                           $display( "ccl2SDMSref_idx_l0 %0d", 1-buffer[buffersize-1] );
                           $display( "ccl2SDMSref_idx_l0 %0d", 1-buffer[buffersize-1] );
                           outfifo.enq(SDMSref_idx_l0 zeroExtend(1-buffer[buffersize-1]));
                           outfifo.enq( tagged SDMSref_idx_l0 zeroExtend(1-buffer[buffersize-1]));
                           numbitsused = 1;
                           numbitsused = 1;
                        end
                        end
                     else
                     else
                        begin
                        begin
                           $display( "ccl2SDMSref_idx_l0 %0d", expgolomb_unsigned(buffer) );
                           $display( "ccl2SDMSref_idx_l0 %0d", expgolomb_unsigned(buffer) );
                           outfifo.enq(SDMSref_idx_l0 truncate(expgolomb_unsigned(buffer)));
                           outfifo.enq( tagged SDMSref_idx_l0 truncate(expgolomb_unsigned(buffer)));
                           numbitsused = expgolomb_numbits(buffer);
                           numbitsused = expgolomb_numbits(buffer);
                        end
                        end
                     nextstate = SubMbPrediction 5;
                     nextstate = tagged SubMbPrediction 5;
                  end
                  end
                  5:
                  5:
                  begin
                  begin
                     if(num_ref_idx_l0_active_minus1 == 1)
                     if(num_ref_idx_l0_active_minus1 == 1)
                        begin
                        begin
                           $display( "ccl2SDMSref_idx_l0 %0d", 1-buffer[buffersize-1] );
                           $display( "ccl2SDMSref_idx_l0 %0d", 1-buffer[buffersize-1] );
                           outfifo.enq(SDMSref_idx_l0 zeroExtend(1-buffer[buffersize-1]));
                           outfifo.enq( tagged SDMSref_idx_l0 zeroExtend(1-buffer[buffersize-1]));
                           numbitsused = 1;
                           numbitsused = 1;
                        end
                        end
                     else
                     else
                        begin
                        begin
                           $display( "ccl2SDMSref_idx_l0 %0d", expgolomb_unsigned(buffer) );
                           $display( "ccl2SDMSref_idx_l0 %0d", expgolomb_unsigned(buffer) );
                           outfifo.enq(SDMSref_idx_l0 truncate(expgolomb_unsigned(buffer)));
                           outfifo.enq( tagged SDMSref_idx_l0 truncate(expgolomb_unsigned(buffer)));
                           numbitsused = expgolomb_numbits(buffer);
                           numbitsused = expgolomb_numbits(buffer);
                        end
                        end
                     nextstate = SubMbPrediction 6;
                     nextstate = tagged SubMbPrediction 6;
                  end
                  end
                  6:
                  6:
                  begin
                  begin
                     if(num_ref_idx_l0_active_minus1 == 1)
                     if(num_ref_idx_l0_active_minus1 == 1)
                        begin
                        begin
                           $display( "ccl2SDMSref_idx_l0 %0d", 1-buffer[buffersize-1] );
                           $display( "ccl2SDMSref_idx_l0 %0d", 1-buffer[buffersize-1] );
                           outfifo.enq(SDMSref_idx_l0 zeroExtend(1-buffer[buffersize-1]));
                           outfifo.enq( tagged SDMSref_idx_l0 zeroExtend(1-buffer[buffersize-1]));
                           numbitsused = 1;
                           numbitsused = 1;
                        end
                        end
                     else
                     else
                        begin
                        begin
                           $display( "ccl2SDMSref_idx_l0 %0d", expgolomb_unsigned(buffer) );
                           $display( "ccl2SDMSref_idx_l0 %0d", expgolomb_unsigned(buffer) );
                           outfifo.enq(SDMSref_idx_l0 truncate(expgolomb_unsigned(buffer)));
                           outfifo.enq( tagged SDMSref_idx_l0 truncate(expgolomb_unsigned(buffer)));
                           numbitsused = expgolomb_numbits(buffer);
                           numbitsused = expgolomb_numbits(buffer);
                        end
                        end
                     nextstate = SubMbPrediction 7;
                     nextstate = tagged SubMbPrediction 7;
                  end
                  end
                  7:
                  7:
                  begin
                  begin
                     if(num_ref_idx_l0_active_minus1 == 1)
                     if(num_ref_idx_l0_active_minus1 == 1)
                        begin
                        begin
                           $display( "ccl2SDMSref_idx_l0 %0d", 1-buffer[buffersize-1] );
                           $display( "ccl2SDMSref_idx_l0 %0d", 1-buffer[buffersize-1] );
                           outfifo.enq(SDMSref_idx_l0 zeroExtend(1-buffer[buffersize-1]));
                           outfifo.enq( tagged SDMSref_idx_l0 zeroExtend(1-buffer[buffersize-1]));
                           numbitsused = 1;
                           numbitsused = 1;
                        end
                        end
                     else
                     else
                        begin
                        begin
                           $display( "ccl2SDMSref_idx_l0 %0d", expgolomb_unsigned(buffer) );
                           $display( "ccl2SDMSref_idx_l0 %0d", expgolomb_unsigned(buffer) );
                           outfifo.enq(SDMSref_idx_l0 truncate(expgolomb_unsigned(buffer)));
                           outfifo.enq( tagged SDMSref_idx_l0 truncate(expgolomb_unsigned(buffer)));
                           numbitsused = expgolomb_numbits(buffer);
                           numbitsused = expgolomb_numbits(buffer);
                        end
                        end
                     nextstate = SubMbPrediction 8;
                     nextstate = tagged SubMbPrediction 8;
                  end
                  end
                  8:
                  8:
                  begin
                  begin
                     tempint = unpack(expgolomb_signed(buffer));
                     tempint = unpack(expgolomb_signed(buffer));
                     $display( "ccl2SDMSmvd_l0 %0d", tempint );
                     $display( "ccl2SDMSmvd_l0 %0d", tempint );
                     outfifo.enq(SDMSmvd_l0 truncate(expgolomb_signed(buffer)));
                     outfifo.enq( tagged SDMSmvd_l0 truncate(expgolomb_signed(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SubMbPrediction 9;
                     nextstate = tagged SubMbPrediction 9;
                  end
                  end
                  9:
                  9:
                  begin
                  begin
                     tempint = unpack(expgolomb_signed(buffer));
                     tempint = unpack(expgolomb_signed(buffer));
                     $display( "ccl2SDMSmvd_l0 %0d", tempint );
                     $display( "ccl2SDMSmvd_l0 %0d", tempint );
                     outfifo.enq(SDMSmvd_l0 truncate(expgolomb_signed(buffer)));
                     outfifo.enq( tagged SDMSmvd_l0 truncate(expgolomb_signed(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     temp3bit0 <= temp3bit0-1;
                     temp3bit0 <= temp3bit0-1;
                     if(temp3bit0 == 1)
                     if(temp3bit0 == 1)
                        nextstate = SubMbPrediction 10;
                        nextstate = tagged SubMbPrediction 10;
                     else
                     else
                        nextstate = SubMbPrediction 8;
                        nextstate = tagged SubMbPrediction 8;
                  end
                  end
                  10:
                  10:
                  begin
                  begin
                     tempint = unpack(expgolomb_signed(buffer));
                     tempint = unpack(expgolomb_signed(buffer));
                     $display( "ccl2SDMSmvd_l0 %0d", tempint );
                     $display( "ccl2SDMSmvd_l0 %0d", tempint );
                     outfifo.enq(SDMSmvd_l0 truncate(expgolomb_signed(buffer)));
                     outfifo.enq( tagged SDMSmvd_l0 truncate(expgolomb_signed(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SubMbPrediction 11;
                     nextstate = tagged SubMbPrediction 11;
                  end
                  end
                  11:
                  11:
                  begin
                  begin
                     tempint = unpack(expgolomb_signed(buffer));
                     tempint = unpack(expgolomb_signed(buffer));
                     $display( "ccl2SDMSmvd_l0 %0d", tempint );
                     $display( "ccl2SDMSmvd_l0 %0d", tempint );
                     outfifo.enq(SDMSmvd_l0 truncate(expgolomb_signed(buffer)));
                     outfifo.enq( tagged SDMSmvd_l0 truncate(expgolomb_signed(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     temp3bit1 <= temp3bit1-1;
                     temp3bit1 <= temp3bit1-1;
                     if(temp3bit1 == 1)
                     if(temp3bit1 == 1)
                        nextstate = SubMbPrediction 12;
                        nextstate = tagged SubMbPrediction 12;
                     else
                     else
                        nextstate = SubMbPrediction 10;
                        nextstate = tagged SubMbPrediction 10;
                  end
                  end
                  12:
                  12:
                  begin
                  begin
                     tempint = unpack(expgolomb_signed(buffer));
                     tempint = unpack(expgolomb_signed(buffer));
                     $display( "ccl2SDMSmvd_l0 %0d", tempint );
                     $display( "ccl2SDMSmvd_l0 %0d", tempint );
                     outfifo.enq(SDMSmvd_l0 truncate(expgolomb_signed(buffer)));
                     outfifo.enq( tagged SDMSmvd_l0 truncate(expgolomb_signed(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SubMbPrediction 13;
                     nextstate = tagged SubMbPrediction 13;
                  end
                  end
                  13:
                  13:
                  begin
                  begin
                     tempint = unpack(expgolomb_signed(buffer));
                     tempint = unpack(expgolomb_signed(buffer));
                     $display( "ccl2SDMSmvd_l0 %0d", tempint );
                     $display( "ccl2SDMSmvd_l0 %0d", tempint );
                     outfifo.enq(SDMSmvd_l0 truncate(expgolomb_signed(buffer)));
                     outfifo.enq( tagged SDMSmvd_l0 truncate(expgolomb_signed(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     temp3bit2 <= temp3bit2-1;
                     temp3bit2 <= temp3bit2-1;
                     if(temp3bit2 == 1)
                     if(temp3bit2 == 1)
                        nextstate = SubMbPrediction 14;
                        nextstate = tagged SubMbPrediction 14;
                     else
                     else
                        nextstate = SubMbPrediction 12;
                        nextstate = tagged SubMbPrediction 12;
                  end
                  end
                  14:
                  14:
                  begin
                  begin
                     tempint = unpack(expgolomb_signed(buffer));
                     tempint = unpack(expgolomb_signed(buffer));
                     $display( "ccl2SDMSmvd_l0 %0d", tempint );
                     $display( "ccl2SDMSmvd_l0 %0d", tempint );
                     outfifo.enq(SDMSmvd_l0 truncate(expgolomb_signed(buffer)));
                     outfifo.enq( tagged SDMSmvd_l0 truncate(expgolomb_signed(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     nextstate = SubMbPrediction 15;
                     nextstate = tagged SubMbPrediction 15;
                  end
                  end
                  15:
                  15:
                  begin
                  begin
                     tempint = unpack(expgolomb_signed(buffer));
                     tempint = unpack(expgolomb_signed(buffer));
                     $display( "ccl2SDMSmvd_l0 %0d", tempint );
                     $display( "ccl2SDMSmvd_l0 %0d", tempint );
                     outfifo.enq(SDMSmvd_l0 truncate(expgolomb_signed(buffer)));
                     outfifo.enq( tagged SDMSmvd_l0 truncate(expgolomb_signed(buffer)));
                     numbitsused = expgolomb_numbits(buffer);
                     numbitsused = expgolomb_numbits(buffer);
                     temp3bit3 <= temp3bit3-1;
                     temp3bit3 <= temp3bit3-1;
                     if(temp3bit3 == 1)
                     if(temp3bit3 == 1)
                        nextstate = MacroblockLayer 5;
                        nextstate = tagged MacroblockLayer 5;
                     else
                     else
                        nextstate = SubMbPrediction 14;
                        nextstate = tagged SubMbPrediction 14;
                  end
                  end
                  default: $display( "ERROR EntropyDec: SubMbPrediction default step" );
                  default: $display( "ERROR EntropyDec: SubMbPrediction default step" );
               endcase
               endcase
            end
            end
         tagged ResidualBlock .step : //if(residualChroma==0) return to Residual 1;   else if(maxNumCoeff==4) return to Residual 3;   else return to Residual 5
         tagged ResidualBlock .step : //if(residualChroma==0) return to Residual 1;   else if(maxNumCoeff==4) return to Residual 3;   else return to Residual 5
Line 1429... Line 1430...
                              tempreg <= zeroExtend(calcnc.nCcalc_chroma(truncate(temp5bit)));
                              tempreg <= zeroExtend(calcnc.nCcalc_chroma(truncate(temp5bit)));
                        end
                        end
                     else
                     else
                        tempreg <= zeroExtend(6'b111111);
                        tempreg <= zeroExtend(6'b111111);
                     if(mbPartPredMode(sdmmbtype,0)==Intra_16x16 && maxNumCoeff==16)
                     if(mbPartPredMode(sdmmbtype,0)==Intra_16x16 && maxNumCoeff==16)
                        nextstate = ResidualBlock 1;
                        nextstate = tagged ResidualBlock 1;
                     else if(residualChroma==0 && (sdmcodedBlockPatternLuma & (1 << zeroExtend(temp5bit[3:2])))==0)
                     else if(residualChroma==0 && (sdmcodedBlockPatternLuma & (1 << zeroExtend(temp5bit[3:2])))==0)
                        begin
                        begin
                           calcnc.nNupdate_luma(truncate(temp5bit),0);
                           calcnc.nNupdate_luma(truncate(temp5bit),0);
                           outfifo_ITB.enq(SDMRcoeffLevelZeros maxNumCoeff);
                           outfifo_ITB.enq(tagged SDMRcoeffLevelZeros maxNumCoeff);
                           nextstate = ResidualBlock 5;
                           nextstate = tagged ResidualBlock 5;
                        end
                        end
                     else if(residualChroma==1 && maxNumCoeff==4 && (sdmcodedBlockPatternChroma & 3)==0)
                     else if(residualChroma==1 && maxNumCoeff==4 && (sdmcodedBlockPatternChroma & 3)==0)
                        begin
                        begin
                           outfifo_ITB.enq(SDMRcoeffLevelZeros 4);
                           outfifo_ITB.enq(tagged SDMRcoeffLevelZeros 4);
                           nextstate = ResidualBlock 5;
                           nextstate = tagged ResidualBlock 5;
                        end
                        end
                     else if(residualChroma==1 && maxNumCoeff!=4 && (sdmcodedBlockPatternChroma & 2)==0)
                     else if(residualChroma==1 && maxNumCoeff!=4 && (sdmcodedBlockPatternChroma & 2)==0)
                        begin
                        begin
                           calcnc.nNupdate_chroma(truncate(temp5bit),0);
                           calcnc.nNupdate_chroma(truncate(temp5bit),0);
                           outfifo_ITB.enq(SDMRcoeffLevelZeros 15);
                           outfifo_ITB.enq(tagged SDMRcoeffLevelZeros 15);
                           nextstate = ResidualBlock 5;
                           nextstate = tagged ResidualBlock 5;
                        end
                        end
                     else
                     else
                        nextstate = ResidualBlock 1;
                        nextstate = tagged ResidualBlock 1;
                     //$display( "TRACE EntropyDec: ResidualBlock 0 temp5bit = %0d", temp5bit);
                     //$display( "TRACE EntropyDec: ResidualBlock 0 temp5bit = %0d", temp5bit);
                  end
                  end
                  1:
                  1:
                  begin
                  begin
                     Bit#(2) trailingOnesTemp = 0;
                     Bit#(2) trailingOnesTemp = 0;
Line 1468... Line 1469...
                     tempreg <= 0;//levelCode temp
                     tempreg <= 0;//levelCode temp
                     if(totalCoeffTemp > 10 && trailingOnesTemp < 3)
                     if(totalCoeffTemp > 10 && trailingOnesTemp < 3)
                        temp3bit1 <= 1;//suffixLength
                        temp3bit1 <= 1;//suffixLength
                     else
                     else
                        temp3bit1 <= 0;//suffixLength
                        temp3bit1 <= 0;//suffixLength
                     nextstate = ResidualBlock 2;
                     nextstate = tagged ResidualBlock 2;
                     //$display( "TRACE EntropyDec: ResidualBlock 1 nC = %0d", tempreg);
                     //$display( "TRACE EntropyDec: ResidualBlock 1 nC = %0d", tempreg);
                     $display( "ccl2SDMRtotal_coeff %0d", totalCoeffTemp );
                     $display( "ccl2SDMRtotal_coeff %0d", totalCoeffTemp );
                     $display( "ccl2SDMRtrailing_ones %0d", trailingOnesTemp );
                     $display( "ccl2SDMRtrailing_ones %0d", trailingOnesTemp );
                  end
                  end
                  2:
                  2:
Line 1531... Line 1532...
                     if( totalCoeff==0 || temp5bit2+1==totalCoeff )
                     if( totalCoeff==0 || temp5bit2+1==totalCoeff )
                        begin
                        begin
                           temp5bit2 <= 0;
                           temp5bit2 <= 0;
                           zerosLeft <= 0;
                           zerosLeft <= 0;
                           if(totalCoeff < maxNumCoeff)
                           if(totalCoeff < maxNumCoeff)
                              nextstate = ResidualBlock 3;
                              nextstate = tagged ResidualBlock 3;
                           else
                           else
                              nextstate = ResidualBlock 5;
                              nextstate = tagged ResidualBlock 5;
                        end
                        end
                     else
                     else
                        begin
                        begin
                           temp5bit2 <= temp5bit2 + 1;
                           temp5bit2 <= temp5bit2 + 1;
                           nextstate = ResidualBlock 2;
                           nextstate = tagged ResidualBlock 2;
                        end
                        end
                  end
                  end
                  3:
                  3:
                  begin
                  begin
                     Bit#(4) tempZerosLeft;
                     Bit#(4) tempZerosLeft;
Line 1555... Line 1556...
                        tempZerosLeft = 0;
                        tempZerosLeft = 0;
                     zerosLeft <= tempZerosLeft;
                     zerosLeft <= tempZerosLeft;
                     if(maxNumCoeff - totalCoeff - zeroExtend(tempZerosLeft) > 0)
                     if(maxNumCoeff - totalCoeff - zeroExtend(tempZerosLeft) > 0)
                        begin
                        begin
                           $display( "ccl2SDMRcoeffLevelZeros %0d", maxNumCoeff - totalCoeff - zeroExtend(tempZerosLeft) );
                           $display( "ccl2SDMRcoeffLevelZeros %0d", maxNumCoeff - totalCoeff - zeroExtend(tempZerosLeft) );
                           outfifo_ITB.enq(SDMRcoeffLevelZeros (maxNumCoeff - totalCoeff - zeroExtend(tempZerosLeft)));
                           outfifo_ITB.enq(tagged SDMRcoeffLevelZeros (maxNumCoeff - totalCoeff - zeroExtend(tempZerosLeft)));
                        end
                        end
                     nextstate = ResidualBlock 5;
                     nextstate = tagged ResidualBlock 5;
                  end
                  end
                  5:
                  5:
                  begin
                  begin
                     if( totalCoeff > 0 )
                     if( totalCoeff > 0 )
                        begin
                        begin
Line 1573... Line 1574...
                                 if( totalCoeff > 1 )
                                 if( totalCoeff > 1 )
                                    {run_before,numbitsused} = cavlc_run_before( buffer, zerosLeft);
                                    {run_before,numbitsused} = cavlc_run_before( buffer, zerosLeft);
                                 else
                                 else
                                    run_before = zerosLeft;
                                    run_before = zerosLeft;
                                 zerosLeft <= zerosLeft - run_before;
                                 zerosLeft <= zerosLeft - run_before;
                                 outfifo_ITB.enq(SDMRcoeffLevelPlusZeros {level:cavlcFIFO.first(),zeros:zeroExtend(run_before)});
                                 outfifo_ITB.enq(tagged SDMRcoeffLevelPlusZeros {level:cavlcFIFO.first(),zeros:zeroExtend(run_before)});
                                 if( run_before > 0 )
                                 if( run_before > 0 )
                                    $display( "ccl2SDMRcoeffLevelZeros %0d", run_before );
                                    $display( "ccl2SDMRcoeffLevelZeros %0d", run_before );
                              end
                              end
                           else
                           else
                              outfifo_ITB.enq(SDMRcoeffLevelPlusZeros {level:cavlcFIFO.first(),zeros:0});
                              outfifo_ITB.enq(tagged SDMRcoeffLevelPlusZeros {level:cavlcFIFO.first(),zeros:0});
                           cavlcFIFO.deq();
                           cavlcFIFO.deq();
                           totalCoeff <= totalCoeff-1;
                           totalCoeff <= totalCoeff-1;
                        end
                        end
                     if( totalCoeff <= 1 )
                     if( totalCoeff <= 1 )
                        begin
                        begin
                           if(residualChroma==0)
                           if(residualChroma==0)
                              begin
                              begin
                                 nextstate = ResidualBlock 0;
                                 nextstate = tagged ResidualBlock 0;
                                 if(mbPartPredMode(sdmmbtype,0)==Intra_16x16 && maxNumCoeff==16)
                                 if(mbPartPredMode(sdmmbtype,0)==Intra_16x16 && maxNumCoeff==16)
                                    maxNumCoeff <= 15;
                                    maxNumCoeff <= 15;
                                 else if(temp5bit==15)
                                 else if(temp5bit==15)
                                    begin
                                    begin
                                       temp5bit <= 0;
                                       temp5bit <= 0;
Line 1600... Line 1601...
                                 else
                                 else
                                    temp5bit <= temp5bit+1;
                                    temp5bit <= temp5bit+1;
                              end
                              end
                           else if(maxNumCoeff==4)
                           else if(maxNumCoeff==4)
                              begin
                              begin
                                 nextstate = ResidualBlock 0;
                                 nextstate = tagged ResidualBlock 0;
                                 if(temp5bit==1)
                                 if(temp5bit==1)
                                    begin
                                    begin
                                       temp5bit <= 0;
                                       temp5bit <= 0;
                                       maxNumCoeff <= 15;
                                       maxNumCoeff <= 15;
                                    end
                                    end
Line 1614... Line 1615...
                           else
                           else
                              begin
                              begin
                                 if(temp5bit==7)
                                 if(temp5bit==7)
                                    begin
                                    begin
                                       temp5bit <= 0;
                                       temp5bit <= 0;
                                       nextstate = SliceData 3;
                                       nextstate = tagged SliceData 3;
                                    end
                                    end
                                 else
                                 else
                                    begin
                                    begin
                                       nextstate = ResidualBlock 0;
                                       nextstate = tagged ResidualBlock 0;
                                       temp5bit <= temp5bit+1;
                                       temp5bit <= temp5bit+1;
                                    end
                                    end
                              end
                              end
                        end
                        end
                     else
                     else
                        nextstate = ResidualBlock 5;
                        nextstate = tagged ResidualBlock 5;
                  end
                  end
                  default: $display( "ERROR EntropyDec: ResidualBlock default step" );
                  default: $display( "ERROR EntropyDec: ResidualBlock default step" );
               endcase
               endcase
            end
            end
      endcase
      endcase
 
 
      if(numbitsused+1 > bufcount)
      if(numbitsused+1 > bufcount)
         begin
         begin
            $display( "ERROR EntropyDec: not enough bits in buffer" );
            $display( "ERROR EntropyDec: not enough bits in buffer" );
            nextstate = Start;
            nextstate = tagged Start;
         end
         end
      buffer <= buffer << zeroExtend(numbitsused);
      buffer <= buffer << zeroExtend(numbitsused);
      bufcount <= bufcount-numbitsused;
      bufcount <= bufcount-numbitsused;
      state <= nextstate;
      state <= nextstate;
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.