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;
|
|
|