//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
// Design : nova
|
// Design : nova
|
// Author(s) : Ke Xu
|
// Author(s) : Ke Xu
|
// Email : eexuke@yahoo.com
|
// Email : eexuke@yahoo.com
|
// File : bitstream_gclk_gen.v
|
// File : bitstream_gclk_gen.v
|
// Generated : Jan 9,2005
|
// Generated : Jan 9,2005
|
// Copyright (C) 2008 Ke Xu
|
// Copyright (C) 2008 Ke Xu
|
//-------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------
|
// Description
|
// Description
|
// Gated clock generation module for bitstream controller
|
// Gated clock generation module for bitstream controller
|
//-------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------
|
|
|
// synopsys translate_off
|
// synopsys translate_off
|
`include "timescale.v"
|
`include "timescale.v"
|
// synopsys translate_on
|
// synopsys translate_on
|
`include "nova_defines.v"
|
`include "nova_defines.v"
|
|
|
module bitstream_gclk_gen (clk,reset_n,freq_ctrl0,freq_ctrl1,parser_state,nal_unit_state,slice_layer_wo_partitioning_state,
|
module bitstream_gclk_gen (clk,reset_n,freq_ctrl0,freq_ctrl1,parser_state,nal_unit_state,slice_layer_wo_partitioning_state,
|
slice_header_state,slice_data_state,seq_parameter_set_state,pic_parameter_set_state,residual_state,cavlc_decoder_state,
|
slice_header_state,slice_data_state,seq_parameter_set_state,pic_parameter_set_state,residual_state,cavlc_decoder_state,
|
mb_num,TotalCoeff,start_code_prefix_found,pc_2to0,deblocking_filter_control_present_flag,
|
mb_num,TotalCoeff,start_code_prefix_found,pc_2to0,deblocking_filter_control_present_flag,
|
disable_deblocking_filter_idc,end_of_one_residual_block,
|
disable_deblocking_filter_idc,end_of_one_residual_block,
|
Intra4x4PredMode_mbAddrB_cs_n,mvx_mbAddrB_cs_n,mvy_mbAddrB_cs_n,mvx_mbAddrC_cs_n,mvy_mbAddrC_cs_n,
|
Intra4x4PredMode_mbAddrB_cs_n,mvx_mbAddrB_cs_n,mvy_mbAddrB_cs_n,mvx_mbAddrC_cs_n,mvy_mbAddrC_cs_n,
|
LumaLevel_mbAddrB_cs_n,ChromaLevel_Cb_mbAddrB_cs_n,ChromaLevel_Cr_mbAddrB_cs_n,
|
LumaLevel_mbAddrB_cs_n,ChromaLevel_Cb_mbAddrB_cs_n,ChromaLevel_Cr_mbAddrB_cs_n,
|
trigger_CAVLC,blk4x4_rec_counter,end_of_DCBlk_IQIT,end_of_one_blk4x4_sum,end_of_MB_DEC,disable_DF,bs_dec_counter,
|
trigger_CAVLC,blk4x4_rec_counter,end_of_DCBlk_IQIT,end_of_one_blk4x4_sum,end_of_MB_DEC,disable_DF,bs_dec_counter,
|
|
|
gclk_parser,gclk_nal,gclk_slice,gclk_sps,gclk_pps,
|
gclk_parser,gclk_nal,gclk_slice,gclk_sps,gclk_pps,
|
gclk_slice_header,gclk_slice_data,gclk_residual,gclk_cavlc,
|
gclk_slice_header,gclk_slice_data,gclk_residual,gclk_cavlc,
|
gclk_Intra4x4PredMode_mbAddrB_RF,
|
gclk_Intra4x4PredMode_mbAddrB_RF,
|
gclk_mvx_mbAddrB_RF,gclk_mvy_mbAddrB_RF,gclk_mvx_mbAddrC_RF,gclk_mvy_mbAddrC_RF,
|
gclk_mvx_mbAddrB_RF,gclk_mvy_mbAddrB_RF,gclk_mvx_mbAddrC_RF,gclk_mvy_mbAddrC_RF,
|
gclk_LumaLevel_mbAddrB_RF,gclk_ChromaLevel_Cb_mbAddrB_RF,gclk_ChromaLevel_Cr_mbAddrB_RF,gclk_bs_dec,
|
gclk_LumaLevel_mbAddrB_RF,gclk_ChromaLevel_Cb_mbAddrB_RF,gclk_ChromaLevel_Cr_mbAddrB_RF,gclk_bs_dec,
|
end_of_one_frame);
|
end_of_one_frame);
|
input clk;
|
input clk;
|
input reset_n;
|
input reset_n;
|
input freq_ctrl0;
|
input freq_ctrl0;
|
input freq_ctrl1;
|
input freq_ctrl1;
|
input [1:0] parser_state;
|
input [1:0] parser_state;
|
input [2:0] nal_unit_state;
|
input [2:0] nal_unit_state;
|
input [1:0] slice_layer_wo_partitioning_state;
|
input [1:0] slice_layer_wo_partitioning_state;
|
input [3:0] slice_header_state;
|
input [3:0] slice_header_state;
|
input [3:0] slice_data_state;
|
input [3:0] slice_data_state;
|
input [3:0] seq_parameter_set_state;
|
input [3:0] seq_parameter_set_state;
|
input [3:0] pic_parameter_set_state;
|
input [3:0] pic_parameter_set_state;
|
input [3:0] residual_state;
|
input [3:0] residual_state;
|
input [3:0] cavlc_decoder_state;
|
input [3:0] cavlc_decoder_state;
|
input [6:0] mb_num;
|
input [6:0] mb_num;
|
input [4:0] TotalCoeff;
|
input [4:0] TotalCoeff;
|
input start_code_prefix_found;
|
input start_code_prefix_found;
|
input [2:0] pc_2to0;
|
input [2:0] pc_2to0;
|
input deblocking_filter_control_present_flag;
|
input deblocking_filter_control_present_flag;
|
input [1:0] disable_deblocking_filter_idc;
|
input [1:0] disable_deblocking_filter_idc;
|
input end_of_one_residual_block;
|
input end_of_one_residual_block;
|
input Intra4x4PredMode_mbAddrB_cs_n;
|
input Intra4x4PredMode_mbAddrB_cs_n;
|
input mvx_mbAddrB_cs_n;
|
input mvx_mbAddrB_cs_n;
|
input mvy_mbAddrB_cs_n;
|
input mvy_mbAddrB_cs_n;
|
input mvx_mbAddrC_cs_n;
|
input mvx_mbAddrC_cs_n;
|
input mvy_mbAddrC_cs_n;
|
input mvy_mbAddrC_cs_n;
|
input LumaLevel_mbAddrB_cs_n;
|
input LumaLevel_mbAddrB_cs_n;
|
input ChromaLevel_Cb_mbAddrB_cs_n;
|
input ChromaLevel_Cb_mbAddrB_cs_n;
|
input ChromaLevel_Cr_mbAddrB_cs_n;
|
input ChromaLevel_Cr_mbAddrB_cs_n;
|
input trigger_CAVLC;
|
input trigger_CAVLC;
|
input [4:0] blk4x4_rec_counter;
|
input [4:0] blk4x4_rec_counter;
|
input end_of_DCBlk_IQIT;
|
input end_of_DCBlk_IQIT;
|
input end_of_one_blk4x4_sum;
|
input end_of_one_blk4x4_sum;
|
input end_of_MB_DEC;
|
input end_of_MB_DEC;
|
input disable_DF;
|
input disable_DF;
|
input [1:0] bs_dec_counter;
|
input [1:0] bs_dec_counter;
|
|
|
output gclk_parser;
|
output gclk_parser;
|
output gclk_nal;
|
output gclk_nal;
|
output gclk_slice;
|
output gclk_slice;
|
output gclk_sps;
|
output gclk_sps;
|
output gclk_pps;
|
output gclk_pps;
|
output gclk_slice_header;
|
output gclk_slice_header;
|
output gclk_slice_data;
|
output gclk_slice_data;
|
output gclk_residual;
|
output gclk_residual;
|
output gclk_cavlc;
|
output gclk_cavlc;
|
output gclk_Intra4x4PredMode_mbAddrB_RF;
|
output gclk_Intra4x4PredMode_mbAddrB_RF;
|
output gclk_mvx_mbAddrB_RF;
|
output gclk_mvx_mbAddrB_RF;
|
output gclk_mvy_mbAddrB_RF;
|
output gclk_mvy_mbAddrB_RF;
|
output gclk_mvx_mbAddrC_RF;
|
output gclk_mvx_mbAddrC_RF;
|
output gclk_mvy_mbAddrC_RF;
|
output gclk_mvy_mbAddrC_RF;
|
output gclk_LumaLevel_mbAddrB_RF;
|
output gclk_LumaLevel_mbAddrB_RF;
|
output gclk_ChromaLevel_Cb_mbAddrB_RF;
|
output gclk_ChromaLevel_Cb_mbAddrB_RF;
|
output gclk_ChromaLevel_Cr_mbAddrB_RF;
|
output gclk_ChromaLevel_Cr_mbAddrB_RF;
|
output gclk_bs_dec;
|
output gclk_bs_dec;
|
output end_of_one_frame;
|
output end_of_one_frame;
|
|
|
//Input pin freq_ctrl0 & freq_ctrl1 can be used to adjust frequency after the chip is fabricated
|
//Input pin freq_ctrl0 & freq_ctrl1 can be used to adjust frequency after the chip is fabricated
|
reg [16:0] cycles_per_frame;
|
reg [16:0] cycles_per_frame;
|
always @ (freq_ctrl0 or freq_ctrl1)
|
always @ (freq_ctrl0 or freq_ctrl1)
|
case ({freq_ctrl1,freq_ctrl0})
|
case ({freq_ctrl1,freq_ctrl0})
|
2'b00:cycles_per_frame <= `cycles_per_frame0;
|
2'b00:cycles_per_frame <= `cycles_per_frame0;
|
2'b01:cycles_per_frame <= `cycles_per_frame1;
|
2'b01:cycles_per_frame <= `cycles_per_frame1;
|
2'b11:cycles_per_frame <= `cycles_per_frame3;
|
2'b11:cycles_per_frame <= `cycles_per_frame3;
|
default:cycles_per_frame <= `cycles_per_frame2;
|
default:cycles_per_frame <= `cycles_per_frame2;
|
endcase
|
endcase
|
|
|
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
// decoding rate control
|
// decoding rate control
|
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
reg [16:0] frame_cycle_counter;
|
reg [16:0] frame_cycle_counter;
|
reg end_of_one_frame;
|
reg end_of_one_frame;
|
always @ (posedge clk)
|
always @ (posedge clk)
|
if (reset_n == 1'b0)
|
if (reset_n == 1'b0)
|
begin
|
begin
|
frame_cycle_counter <= 0;
|
frame_cycle_counter <= 0;
|
end_of_one_frame <= 1'b0;
|
end_of_one_frame <= 1'b0;
|
end
|
end
|
else if (parser_state == `start_code_prefix)
|
else if (parser_state == `start_code_prefix)
|
begin
|
begin
|
frame_cycle_counter <= 0;
|
frame_cycle_counter <= 0;
|
end_of_one_frame <= 1'b0;
|
end_of_one_frame <= 1'b0;
|
end
|
end
|
else if (frame_cycle_counter < cycles_per_frame)
|
else if (frame_cycle_counter < cycles_per_frame)
|
begin
|
begin
|
frame_cycle_counter <= frame_cycle_counter + 1;
|
frame_cycle_counter <= frame_cycle_counter + 1;
|
end_of_one_frame <= 1'b0;
|
end_of_one_frame <= 1'b0;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
frame_cycle_counter <= 0;
|
frame_cycle_counter <= 0;
|
end_of_one_frame <= 1'b1;
|
end_of_one_frame <= 1'b1;
|
end
|
end
|
//PPS and SPS doesn't need rate control,so after PPS/SPS decoding,bitstream parser should continue
|
//PPS and SPS doesn't need rate control,so after PPS/SPS decoding,bitstream parser should continue
|
//without waiting for "end_of_one_frame" signal when parser_state == rst_parser.
|
//without waiting for "end_of_one_frame" signal when parser_state == rst_parser.
|
//PPS_SPS_complete is used to identify whether next nal_unit to be decoded is PPS/SPS or normal frame
|
//PPS_SPS_complete is used to identify whether next nal_unit to be decoded is PPS/SPS or normal frame
|
reg PPS_SPS_complete;
|
reg PPS_SPS_complete;
|
always @ (posedge gclk_slice or negedge reset_n)
|
always @ (posedge gclk_slice or negedge reset_n)
|
if (reset_n == 1'b0)
|
if (reset_n == 1'b0)
|
PPS_SPS_complete <= 1'b0;
|
PPS_SPS_complete <= 1'b0;
|
else if (slice_layer_wo_partitioning_state == `slice_header)
|
else if (slice_layer_wo_partitioning_state == `slice_header)
|
PPS_SPS_complete <= 1'b1;
|
PPS_SPS_complete <= 1'b1;
|
|
|
//1.gclk_parser
|
//1.gclk_parser
|
wire parser_ena;
|
wire parser_ena;
|
reg l_parser_ena;
|
reg l_parser_ena;
|
wire gclk_parser;
|
wire gclk_parser;
|
assign parser_ena = (
|
assign parser_ena = (
|
(parser_state == `rst_parser && (!PPS_SPS_complete || (PPS_SPS_complete && end_of_one_frame))) ||
|
(parser_state == `rst_parser && (!PPS_SPS_complete || (PPS_SPS_complete && end_of_one_frame))) ||
|
(parser_state == `start_code_prefix && start_code_prefix_found == 1'b1) ||
|
(parser_state == `start_code_prefix && start_code_prefix_found == 1'b1) ||
|
(nal_unit_state == `rbsp_trailing_one_bit && pc_2to0 == 3'b000) ||
|
(nal_unit_state == `rbsp_trailing_one_bit && pc_2to0 == 3'b000) ||
|
nal_unit_state == `rbsp_trailing_zero_bits)? 1'b1:1'b0;
|
nal_unit_state == `rbsp_trailing_zero_bits)? 1'b1:1'b0;
|
always @ (clk or parser_ena)
|
always @ (clk or parser_ena)
|
if (!clk) l_parser_ena <= parser_ena;
|
if (!clk) l_parser_ena <= parser_ena;
|
assign gclk_parser = l_parser_ena & clk;
|
assign gclk_parser = l_parser_ena & clk;
|
|
|
//2.gclk_nal
|
//2.gclk_nal
|
//including rate control for end of one frame
|
//including rate control for end of one frame
|
wire nal_ena;
|
wire nal_ena;
|
reg l_nal_ena;
|
reg l_nal_ena;
|
wire gclk_nal;
|
wire gclk_nal;
|
assign nal_ena = (parser_state == `nal_unit && (
|
assign nal_ena = (parser_state == `nal_unit && (
|
nal_unit_state == `rst_nal_unit ||
|
nal_unit_state == `rst_nal_unit ||
|
nal_unit_state == `forbidden_zero_bit_2_nal_unit_type ||
|
nal_unit_state == `forbidden_zero_bit_2_nal_unit_type ||
|
(((slice_data_state == `skip_run_duration && end_of_MB_DEC)|| slice_data_state == `mb_num_update)
|
(((slice_data_state == `skip_run_duration && end_of_MB_DEC)|| slice_data_state == `mb_num_update)
|
&& mb_num == 98) ||
|
&& mb_num == 98) ||
|
seq_parameter_set_state == `vui_parameter_present_flag_s ||
|
seq_parameter_set_state == `vui_parameter_present_flag_s ||
|
pic_parameter_set_state == `deblocking_filter_control_2_redundant_pic_cnt_present_flag ||
|
pic_parameter_set_state == `deblocking_filter_control_2_redundant_pic_cnt_present_flag ||
|
nal_unit_state == `rbsp_trailing_one_bit ||
|
nal_unit_state == `rbsp_trailing_one_bit ||
|
nal_unit_state == `rbsp_trailing_zero_bits))? 1'b1:1'b0;
|
nal_unit_state == `rbsp_trailing_zero_bits))? 1'b1:1'b0;
|
always @ (clk or nal_ena)
|
always @ (clk or nal_ena)
|
if (!clk) l_nal_ena <= nal_ena;
|
if (!clk) l_nal_ena <= nal_ena;
|
assign gclk_nal = l_nal_ena & clk;
|
assign gclk_nal = l_nal_ena & clk;
|
|
|
//3.gclk_slice:for slice_layer_wo_partitioning_state FSM
|
//3.gclk_slice:for slice_layer_wo_partitioning_state FSM
|
wire slice_ena;
|
wire slice_ena;
|
reg l_slice_ena;
|
reg l_slice_ena;
|
wire gclk_slice;
|
wire gclk_slice;
|
assign slice_ena = (
|
assign slice_ena = (
|
(nal_unit_state == `slice_layer_non_IDR_rbsp || nal_unit_state == `slice_layer_IDR_rbsp) &&
|
(nal_unit_state == `slice_layer_non_IDR_rbsp || nal_unit_state == `slice_layer_IDR_rbsp) &&
|
(slice_layer_wo_partitioning_state == `rst_slice_layer_wo_partitioning ||
|
(slice_layer_wo_partitioning_state == `rst_slice_layer_wo_partitioning ||
|
(slice_header_state == `slice_qp_delta_s && deblocking_filter_control_present_flag == 1'b0) ||
|
(slice_header_state == `slice_qp_delta_s && deblocking_filter_control_present_flag == 1'b0) ||
|
(slice_header_state == `disable_deblocking_filter_idc_s && disable_deblocking_filter_idc == 2'b01) ||
|
(slice_header_state == `disable_deblocking_filter_idc_s && disable_deblocking_filter_idc == 2'b01) ||
|
slice_header_state == `slice_beta_offset_div2_s ||
|
slice_header_state == `slice_beta_offset_div2_s ||
|
(((slice_data_state == `skip_run_duration && end_of_MB_DEC) || slice_data_state == `mb_num_update)
|
(((slice_data_state == `skip_run_duration && end_of_MB_DEC) || slice_data_state == `mb_num_update)
|
&& mb_num == 98)))? 1'b1:1'b0;
|
&& mb_num == 98)))? 1'b1:1'b0;
|
always @ (clk or slice_ena)
|
always @ (clk or slice_ena)
|
if (!clk) l_slice_ena <= slice_ena;
|
if (!clk) l_slice_ena <= slice_ena;
|
assign gclk_slice = l_slice_ena & clk;
|
assign gclk_slice = l_slice_ena & clk;
|
|
|
//4.gclk_sps
|
//4.gclk_sps
|
wire sps_ena;
|
wire sps_ena;
|
reg l_sps_ena;
|
reg l_sps_ena;
|
wire gclk_sps;
|
wire gclk_sps;
|
assign sps_ena = (nal_unit_state == `seq_parameter_set_rbsp)? 1'b1:1'b0;
|
assign sps_ena = (nal_unit_state == `seq_parameter_set_rbsp)? 1'b1:1'b0;
|
always @ (clk or sps_ena)
|
always @ (clk or sps_ena)
|
if (!clk) l_sps_ena <= sps_ena;
|
if (!clk) l_sps_ena <= sps_ena;
|
assign gclk_sps = l_sps_ena & clk;
|
assign gclk_sps = l_sps_ena & clk;
|
|
|
//5.gclk_pps
|
//5.gclk_pps
|
wire pps_ena;
|
wire pps_ena;
|
reg l_pps_ena;
|
reg l_pps_ena;
|
wire gclk_pps;
|
wire gclk_pps;
|
|
|
assign pps_ena = (nal_unit_state == `pic_parameter_set_rbsp)? 1'b1:1'b0;
|
assign pps_ena = (nal_unit_state == `pic_parameter_set_rbsp)? 1'b1:1'b0;
|
always @ (clk or pps_ena)
|
always @ (clk or pps_ena)
|
if (!clk) l_pps_ena <= pps_ena;
|
if (!clk) l_pps_ena <= pps_ena;
|
assign gclk_pps = l_pps_ena & clk;
|
assign gclk_pps = l_pps_ena & clk;
|
|
|
//6.gclk_slice_header
|
//6.gclk_slice_header
|
wire slice_header_ena;
|
wire slice_header_ena;
|
reg l_slice_header_ena;
|
reg l_slice_header_ena;
|
wire gclk_slice_header;
|
wire gclk_slice_header;
|
assign slice_header_ena = (slice_layer_wo_partitioning_state == `slice_header)? 1'b1:1'b0;
|
assign slice_header_ena = (slice_layer_wo_partitioning_state == `slice_header)? 1'b1:1'b0;
|
always @ (clk or slice_header_ena)
|
always @ (clk or slice_header_ena)
|
if (!clk) l_slice_header_ena <= slice_header_ena;
|
if (!clk) l_slice_header_ena <= slice_header_ena;
|
assign gclk_slice_header = l_slice_header_ena & clk;
|
assign gclk_slice_header = l_slice_header_ena & clk;
|
|
|
//7.gclk_slice_data
|
//7.gclk_slice_data
|
//including rate control for skipped macroblock:skip_run_duration
|
//including rate control for skipped macroblock:skip_run_duration
|
//including rate control for normal macroblock:mb_num_update
|
//including rate control for normal macroblock:mb_num_update
|
wire slice_data_ena;
|
wire slice_data_ena;
|
reg l_slice_data_ena;
|
reg l_slice_data_ena;
|
wire gclk_slice_data;
|
wire gclk_slice_data;
|
assign slice_data_ena = (slice_layer_wo_partitioning_state == `slice_data && (
|
assign slice_data_ena = (slice_layer_wo_partitioning_state == `slice_data && (
|
(slice_data_state != `skip_run_duration && slice_data_state != `residual) ||
|
(slice_data_state != `skip_run_duration && slice_data_state != `residual) ||
|
(slice_data_state == `skip_run_duration && end_of_MB_DEC == 1'b1) ||
|
(slice_data_state == `skip_run_duration && end_of_MB_DEC == 1'b1) ||
|
(slice_data_state == `residual && end_of_MB_DEC == 1'b1)))? 1'b1:1'b0;
|
(slice_data_state == `residual && end_of_MB_DEC == 1'b1)))? 1'b1:1'b0;
|
always @ (clk or slice_data_ena)
|
always @ (clk or slice_data_ena)
|
if (!clk) l_slice_data_ena <= slice_data_ena;
|
if (!clk) l_slice_data_ena <= slice_data_ena;
|
assign gclk_slice_data = l_slice_data_ena & clk;
|
assign gclk_slice_data = l_slice_data_ena & clk;
|
|
|
//8.gclk_residual
|
//8.gclk_residual
|
wire residual_ena;
|
wire residual_ena;
|
reg l_residual_ena;
|
reg l_residual_ena;
|
wire gclk_residual;
|
wire gclk_residual;
|
|
|
assign residual_ena = (slice_data_state == `residual &&
|
assign residual_ena = (slice_data_state == `residual &&
|
(residual_state == `rst_residual ||
|
(residual_state == `rst_residual ||
|
|
|
((residual_state == `Intra16x16DCLevel_s || residual_state == `ChromaDCLevel_Cb_s
|
((residual_state == `Intra16x16DCLevel_s || residual_state == `ChromaDCLevel_Cb_s
|
|| residual_state == `ChromaDCLevel_Cr_s) &&
|
|| residual_state == `ChromaDCLevel_Cr_s) &&
|
((end_of_one_residual_block == 1 && TotalCoeff == 0) || end_of_DCBlk_IQIT)) ||
|
((end_of_one_residual_block == 1 && TotalCoeff == 0) || end_of_DCBlk_IQIT)) ||
|
|
|
((residual_state == `Intra16x16ACLevel_s || residual_state == `Intra16x16ACLevel_0_s
|
((residual_state == `Intra16x16ACLevel_s || residual_state == `Intra16x16ACLevel_0_s
|
|| residual_state == `LumaLevel_s || residual_state == `LumaLevel_0_s)
|
|| residual_state == `LumaLevel_s || residual_state == `LumaLevel_0_s)
|
&& blk4x4_rec_counter == 15 && end_of_one_blk4x4_sum == 1) ||
|
&& blk4x4_rec_counter == 15 && end_of_one_blk4x4_sum == 1) ||
|
(residual_state == `ChromaACLevel_Cb_s && blk4x4_rec_counter == 19 && end_of_one_blk4x4_sum == 1) ||
|
(residual_state == `ChromaACLevel_Cb_s && blk4x4_rec_counter == 19 && end_of_one_blk4x4_sum == 1) ||
|
(residual_state == `ChromaACLevel_Cr_s && blk4x4_rec_counter == 23 && end_of_one_blk4x4_sum == 1) ||
|
(residual_state == `ChromaACLevel_Cr_s && blk4x4_rec_counter == 23 && end_of_one_blk4x4_sum == 1) ||
|
(residual_state == `ChromaACLevel_0_s && blk4x4_rec_counter == 23 && end_of_one_blk4x4_sum == 1)))? 1'b1:1'b0;
|
(residual_state == `ChromaACLevel_0_s && blk4x4_rec_counter == 23 && end_of_one_blk4x4_sum == 1)))? 1'b1:1'b0;
|
|
|
always @ (clk or residual_ena)
|
always @ (clk or residual_ena)
|
if (!clk) l_residual_ena <= residual_ena;
|
if (!clk) l_residual_ena <= residual_ena;
|
assign gclk_residual = l_residual_ena & clk;
|
assign gclk_residual = l_residual_ena & clk;
|
|
|
//9.gclk_cavlc
|
//9.gclk_cavlc
|
wire cavlc_ena;
|
wire cavlc_ena;
|
reg l_cavlc_ena;
|
reg l_cavlc_ena;
|
wire gclk_cavlc;
|
wire gclk_cavlc;
|
assign cavlc_ena = (slice_data_state == `residual && (cavlc_decoder_state != `rst_cavlc_decoder ||
|
assign cavlc_ena = (slice_data_state == `residual && (cavlc_decoder_state != `rst_cavlc_decoder ||
|
(cavlc_decoder_state == `rst_cavlc_decoder && trigger_CAVLC)))? 1'b1:1'b0;
|
(cavlc_decoder_state == `rst_cavlc_decoder && trigger_CAVLC)))? 1'b1:1'b0;
|
|
|
always @ (clk or cavlc_ena)
|
always @ (clk or cavlc_ena)
|
if (!clk) l_cavlc_ena <= cavlc_ena;
|
if (!clk) l_cavlc_ena <= cavlc_ena;
|
assign gclk_cavlc = l_cavlc_ena & clk;
|
assign gclk_cavlc = l_cavlc_ena & clk;
|
|
|
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
//gclk for bitstream controller register file
|
//gclk for bitstream controller register file
|
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
//1.gclk_Intra4x4PredMode_mbAddrB_RF
|
//1.gclk_Intra4x4PredMode_mbAddrB_RF
|
reg l_Intra4x4PredMode_mbAddrB_RF_ena;
|
reg l_Intra4x4PredMode_mbAddrB_RF_ena;
|
wire gclk_Intra4x4PredMode_mbAddrB_RF;
|
wire gclk_Intra4x4PredMode_mbAddrB_RF;
|
always @ (clk or Intra4x4PredMode_mbAddrB_cs_n)
|
always @ (clk or Intra4x4PredMode_mbAddrB_cs_n)
|
if (!clk) l_Intra4x4PredMode_mbAddrB_RF_ena <= ~Intra4x4PredMode_mbAddrB_cs_n;
|
if (!clk) l_Intra4x4PredMode_mbAddrB_RF_ena <= ~Intra4x4PredMode_mbAddrB_cs_n;
|
assign gclk_Intra4x4PredMode_mbAddrB_RF = clk & l_Intra4x4PredMode_mbAddrB_RF_ena;
|
assign gclk_Intra4x4PredMode_mbAddrB_RF = clk & l_Intra4x4PredMode_mbAddrB_RF_ena;
|
|
|
//2.gclk_mvx_mbAddrB_RF
|
//2.gclk_mvx_mbAddrB_RF
|
reg l_mvx_mbAddrB_RF_ena;
|
reg l_mvx_mbAddrB_RF_ena;
|
wire gclk_mvx_mbAddrB_RF;
|
wire gclk_mvx_mbAddrB_RF;
|
always @ (clk or mvx_mbAddrB_cs_n)
|
always @ (clk or mvx_mbAddrB_cs_n)
|
if (!clk) l_mvx_mbAddrB_RF_ena <= ~mvx_mbAddrB_cs_n;
|
if (!clk) l_mvx_mbAddrB_RF_ena <= ~mvx_mbAddrB_cs_n;
|
assign gclk_mvx_mbAddrB_RF = clk & l_mvx_mbAddrB_RF_ena;
|
assign gclk_mvx_mbAddrB_RF = clk & l_mvx_mbAddrB_RF_ena;
|
|
|
//3.gclk_mvy_mbAddrB_RF
|
//3.gclk_mvy_mbAddrB_RF
|
reg l_mvy_mbAddrB_RF_ena;
|
reg l_mvy_mbAddrB_RF_ena;
|
wire gclk_mvy_mbAddrB_RF;
|
wire gclk_mvy_mbAddrB_RF;
|
always @ (clk or mvy_mbAddrB_cs_n)
|
always @ (clk or mvy_mbAddrB_cs_n)
|
if (!clk) l_mvy_mbAddrB_RF_ena <= ~mvy_mbAddrB_cs_n;
|
if (!clk) l_mvy_mbAddrB_RF_ena <= ~mvy_mbAddrB_cs_n;
|
assign gclk_mvy_mbAddrB_RF = clk & l_mvy_mbAddrB_RF_ena;
|
assign gclk_mvy_mbAddrB_RF = clk & l_mvy_mbAddrB_RF_ena;
|
|
|
//4.gclk_mvx_mbAddrC_RF
|
//4.gclk_mvx_mbAddrC_RF
|
reg l_mvx_mbAddrC_RF_ena;
|
reg l_mvx_mbAddrC_RF_ena;
|
wire gclk_mvx_mbAddrC_RF;
|
wire gclk_mvx_mbAddrC_RF;
|
always @ (clk or mvx_mbAddrC_cs_n)
|
always @ (clk or mvx_mbAddrC_cs_n)
|
if (!clk) l_mvx_mbAddrC_RF_ena <= ~mvx_mbAddrC_cs_n;
|
if (!clk) l_mvx_mbAddrC_RF_ena <= ~mvx_mbAddrC_cs_n;
|
assign gclk_mvx_mbAddrC_RF = clk & l_mvx_mbAddrC_RF_ena;
|
assign gclk_mvx_mbAddrC_RF = clk & l_mvx_mbAddrC_RF_ena;
|
|
|
//5.gclk_mvy_mbAddrC_RF
|
//5.gclk_mvy_mbAddrC_RF
|
reg l_mvy_mbAddrC_RF_ena;
|
reg l_mvy_mbAddrC_RF_ena;
|
wire gclk_mvy_mbAddrC_RF;
|
wire gclk_mvy_mbAddrC_RF;
|
always @ (clk or mvy_mbAddrC_cs_n)
|
always @ (clk or mvy_mbAddrC_cs_n)
|
if (!clk) l_mvy_mbAddrC_RF_ena <= ~mvy_mbAddrC_cs_n;
|
if (!clk) l_mvy_mbAddrC_RF_ena <= ~mvy_mbAddrC_cs_n;
|
assign gclk_mvy_mbAddrC_RF = clk & l_mvy_mbAddrC_RF_ena;
|
assign gclk_mvy_mbAddrC_RF = clk & l_mvy_mbAddrC_RF_ena;
|
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
//gclk for CAVLC_decoder related regfiles
|
//gclk for CAVLC_decoder related regfiles
|
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
//1.gclk_LumaLevel_mbAddrB_RF
|
//1.gclk_LumaLevel_mbAddrB_RF
|
reg l_LumaLevel_mbAddrB_RF_ena;
|
reg l_LumaLevel_mbAddrB_RF_ena;
|
wire gclk_LumaLevel_mbAddrB_RF;
|
wire gclk_LumaLevel_mbAddrB_RF;
|
always @ (clk or LumaLevel_mbAddrB_cs_n)
|
always @ (clk or LumaLevel_mbAddrB_cs_n)
|
if (!clk) l_LumaLevel_mbAddrB_RF_ena <= ~LumaLevel_mbAddrB_cs_n;
|
if (!clk) l_LumaLevel_mbAddrB_RF_ena <= ~LumaLevel_mbAddrB_cs_n;
|
assign gclk_LumaLevel_mbAddrB_RF = clk & l_LumaLevel_mbAddrB_RF_ena;
|
assign gclk_LumaLevel_mbAddrB_RF = clk & l_LumaLevel_mbAddrB_RF_ena;
|
|
|
//2.gclk_ChromaLevel_Cb_mbAddrB_RF
|
//2.gclk_ChromaLevel_Cb_mbAddrB_RF
|
reg l_ChromaLevel_Cb_mbAddrB_RF_ena;
|
reg l_ChromaLevel_Cb_mbAddrB_RF_ena;
|
wire gclk_ChromaLevel_Cb_mbAddrB_RF;
|
wire gclk_ChromaLevel_Cb_mbAddrB_RF;
|
always @ (clk or ChromaLevel_Cb_mbAddrB_cs_n)
|
always @ (clk or ChromaLevel_Cb_mbAddrB_cs_n)
|
if (!clk) l_ChromaLevel_Cb_mbAddrB_RF_ena <= ~ChromaLevel_Cb_mbAddrB_cs_n;
|
if (!clk) l_ChromaLevel_Cb_mbAddrB_RF_ena <= ~ChromaLevel_Cb_mbAddrB_cs_n;
|
assign gclk_ChromaLevel_Cb_mbAddrB_RF = clk & l_ChromaLevel_Cb_mbAddrB_RF_ena;
|
assign gclk_ChromaLevel_Cb_mbAddrB_RF = clk & l_ChromaLevel_Cb_mbAddrB_RF_ena;
|
|
|
//3.gclk_ChromaLevel_Cr_mbAddrB_RF
|
//3.gclk_ChromaLevel_Cr_mbAddrB_RF
|
reg l_ChromaLevel_Cr_mbAddrB_RF_ena;
|
reg l_ChromaLevel_Cr_mbAddrB_RF_ena;
|
wire gclk_ChromaLevel_Cr_mbAddrB_RF;
|
wire gclk_ChromaLevel_Cr_mbAddrB_RF;
|
always @ (clk or ChromaLevel_Cr_mbAddrB_cs_n)
|
always @ (clk or ChromaLevel_Cr_mbAddrB_cs_n)
|
if (!clk) l_ChromaLevel_Cr_mbAddrB_RF_ena <= ~ChromaLevel_Cr_mbAddrB_cs_n;
|
if (!clk) l_ChromaLevel_Cr_mbAddrB_RF_ena <= ~ChromaLevel_Cr_mbAddrB_cs_n;
|
assign gclk_ChromaLevel_Cr_mbAddrB_RF = clk & l_ChromaLevel_Cr_mbAddrB_RF_ena;
|
assign gclk_ChromaLevel_Cr_mbAddrB_RF = clk & l_ChromaLevel_Cr_mbAddrB_RF_ena;
|
|
|
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
//gclk for boundary strength decoding
|
//gclk for boundary strength decoding
|
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
wire bs_dec_ena;
|
wire bs_dec_ena;
|
reg l_bs_dec_ena;
|
reg l_bs_dec_ena;
|
wire gclk_bs_dec;
|
wire gclk_bs_dec;
|
|
|
assign bs_dec_ena = ((end_of_MB_DEC == 1'b1 && disable_DF == 1'b0) || bs_dec_counter != 0)? 1'b1:1'b0;
|
assign bs_dec_ena = ((end_of_MB_DEC == 1'b1 && disable_DF == 1'b0) || bs_dec_counter != 0)? 1'b1:1'b0;
|
always @ (clk or bs_dec_ena)
|
always @ (clk or bs_dec_ena)
|
if (!clk) l_bs_dec_ena <= bs_dec_ena;
|
if (!clk) l_bs_dec_ena <= bs_dec_ena;
|
assign gclk_bs_dec = l_bs_dec_ena & clk;
|
assign gclk_bs_dec = l_bs_dec_ena & clk;
|
|
|
endmodule
|
endmodule
|
|
|
|
|
|
|