📄 rec_gclk_gen.v
字号:
//--------------------------------------------------------------------------------------------------// Design : nova// Author(s) : Ke Xu// Email : eexuke@yahoo.com// File : rec_gclk_gen.v// Generated : Jan 3, 2006// Copyright (C) 2008 Ke Xu //-------------------------------------------------------------------------------------------------// Description // Gated clock generation module for reconstruction//-------------------------------------------------------------------------------------------------// synopsys translate_off`include "timescale.v"// synopsys translate_on`include "nova_defines.v"module rec_gclk_gen(clk, //IQIT end_of_NonZeroCoeff_CAVLC,OneD_counter,TwoD_counter,rescale_counter, rounding_counter,residual_state,cavlc_decoder_state, gclk_1D,gclk_2D,gclk_rescale,gclk_rounding, //Intra pred mb_num_h,mb_num_v,NextMB_IsSkip, mb_type_general,blk4x4_rec_counter,blk4x4_sum_counter,blk4x4_intra_preload_counter, blk4x4_intra_precompute_counter,blk4x4_intra_calculate_counter, Intra4x4_predmode,Intra16x16_predmode,Intra_chroma_predmode, gclk_intra_mbAddrA_luma,gclk_intra_mbAddrA_Cb,gclk_intra_mbAddrA_Cr, gclk_intra_mbAddrB,gclk_intra_mbAddrC_luma,gclk_intra_mbAddrD,gclk_seed, //Inter pred blk4x4_inter_preload_counter,gclk_Inter_ref_rf, //sum Inter_blk4x4_pred_output_valid,gclk_pred_output,gclk_blk4x4_sum, //Deblocking filter end_of_MB_DEC,end_of_BS_DEC,DF_duration, gclk_end_of_MB_DEC,gclk_DF, //memory Intra_mbAddrB_RAM_rd,Intra_mbAddrB_RAM_wr,gclk_Intra_mbAddrB_RAM, rec_DF_RAM0_cs_n,gclk_rec_DF_RAM0, rec_DF_RAM1_cs_n,gclk_rec_DF_RAM1, DF_mbAddrA_RF_rd,DF_mbAddrA_RF_wr,gclk_DF_mbAddrA_RF, DF_mbAddrB_RAM_rd,DF_mbAddrB_RAM_wr,gclk_DF_mbAddrB_RAM ); input clk; //IQIT input end_of_NonZeroCoeff_CAVLC; input [2:0] OneD_counter; input [2:0] TwoD_counter; input [2:0] rescale_counter; input [2:0] rounding_counter; input [3:0] residual_state; input [3:0] cavlc_decoder_state; output gclk_1D; output gclk_2D; output gclk_rescale; output gclk_rounding; //Intra pred input [3:0] mb_num_h; input [3:0] mb_num_v; input NextMB_IsSkip; input [3:0] mb_type_general; input [4:0] blk4x4_rec_counter; input [2:0] blk4x4_sum_counter; input [2:0] blk4x4_intra_preload_counter; input [3:0] blk4x4_intra_precompute_counter; input [2:0] blk4x4_intra_calculate_counter; input [3:0] Intra4x4_predmode; input [1:0] Intra16x16_predmode; input [1:0] Intra_chroma_predmode; output gclk_intra_mbAddrA_luma; output gclk_intra_mbAddrA_Cb; output gclk_intra_mbAddrA_Cr; output gclk_intra_mbAddrB; output gclk_intra_mbAddrC_luma; output gclk_intra_mbAddrD; output gclk_seed; //Inter pred input [5:0] blk4x4_inter_preload_counter; output gclk_Inter_ref_rf; //sum input [1:0] Inter_blk4x4_pred_output_valid; output gclk_pred_output; output gclk_blk4x4_sum; //DF input end_of_MB_DEC; input end_of_BS_DEC; input DF_duration; output gclk_end_of_MB_DEC; output gclk_DF; //memory input Intra_mbAddrB_RAM_rd; input Intra_mbAddrB_RAM_wr; output gclk_Intra_mbAddrB_RAM; input rec_DF_RAM0_cs_n; output gclk_rec_DF_RAM0; input rec_DF_RAM1_cs_n; output gclk_rec_DF_RAM1; input DF_mbAddrA_RF_rd,DF_mbAddrA_RF_wr; output gclk_DF_mbAddrA_RF; input DF_mbAddrB_RAM_rd,DF_mbAddrB_RAM_wr; output gclk_DF_mbAddrB_RAM; parameter rst_residual = 4'b0000; parameter Intra16x16DCLevel_s = 4'b0001; parameter Intra16x16ACLevel_s = 4'b0011; parameter Intra16x16ACLevel_0_s = 4'b0010; parameter LumaLevel_s = 4'b0110; parameter LumaLevel_0_s = 4'b0111; parameter ChromaDCLevel_Cb_s = 4'b0101; parameter ChromaDCLevel_Cr_s = 4'b0100; parameter ChromaACLevel_Cb_s = 4'b1100; parameter ChromaACLevel_Cr_s = 4'b1101; parameter Intra4x4_Vertical = 4'b0000; parameter Intra4x4_Horizontal = 4'b0001; parameter Intra4x4_DC = 4'b0010; parameter Intra4x4_Diagonal_Down_Left = 4'b0011; parameter Intra4x4_Diagonal_Down_Right = 4'b0100; parameter Intra4x4_Vertical_Right = 4'b0101; parameter Intra4x4_Horizontal_Down = 4'b0110; parameter Intra4x4_Vertical_Left = 4'b0111; parameter Intra4x4_Horizontal_Up = 4'b1000; parameter Intra16x16_Plane = 2'b11; parameter Intra_chroma_Plane = 2'b11; parameter NumCoeffTrailingOnes_LUT = 4'b0010; //------------------------------------------------- //IQIT //------------------------------------------------- //gclk_end_of_one_residual_block //reg l_end_of_one_residual_block; //wire gclk_end_of_one_residual_block; //always @ (clk or end_of_one_residual_block) // if (!clk) l_end_of_one_residual_block <= end_of_one_residual_block; //assign gclk_end_of_one_residual_block = clk & l_end_of_one_residual_block; //gclk_endof1NonZeroCoeffResBlk //reg l_end_of_NonZeroCoeff_CAVLC; //wire gclk_endof1NonZeroCoeffResBlk; //always @ (clk or end_of_NonZeroCoeff_CAVLC) // if (!clk) l_end_of_NonZeroCoeff_CAVLC <= end_of_NonZeroCoeff_CAVLC; //assign gclk_endof1NonZeroCoeffResBlk = clk & l_end_of_NonZeroCoeff_CAVLC; //gclk_1D wire OneD_en; reg l_OneD_en; wire gclk_1D; assign OneD_en = ( // trap DC case after CAVLC:residual_state is still available now (end_of_NonZeroCoeff_CAVLC == 1'b1 && cavlc_decoder_state != `NumCoeffTrailingOnes_LUT && (residual_state == `Intra16x16DCLevel_s || residual_state == `ChromaDCLevel_Cb_s || residual_state == `ChromaDCLevel_Cr_s)) || // trap AC case after rescale:residual_state is still available now ((residual_state == `Intra16x16ACLevel_s || residual_state == `LumaLevel_s || residual_state == `ChromaACLevel_Cb_s || residual_state == `ChromaACLevel_Cr_s) && rescale_counter == 3'b100) || // trap internal loop OneD_counter != 0); always @ (clk or OneD_en) if (!clk) l_OneD_en <= OneD_en; assign gclk_1D = clk & l_OneD_en; //gclk_2D wire TwoD_en; reg l_TwoD_en; wire gclk_2D; assign TwoD_en = ((OneD_counter == 3'b001 && residual_state != `ChromaDCLevel_Cb_s && residual_state != `ChromaDCLevel_Cr_s) || TwoD_counter != 0); always @ (clk or TwoD_en) if (!clk) l_TwoD_en <= TwoD_en; assign gclk_2D = clk & l_TwoD_en; //gclk_rescale wire rescale_en; reg l_rescale_en; wire gclk_rescale; assign rescale_en = ( //trap AC after CAVLC except all zero coeffs case (end_of_NonZeroCoeff_CAVLC == 1'b1 && cavlc_decoder_state != `NumCoeffTrailingOnes_LUT && ( residual_state == `Intra16x16ACLevel_s || residual_state == `LumaLevel_s || residual_state == `ChromaACLevel_Cb_s || residual_state == `ChromaACLevel_Cr_s)) || //trap DC case after IDCT,chromaDC:after 1D-IDCT,lumaDC:after 2D-IDCT ((residual_state == `Intra16x16DCLevel_s && TwoD_counter == 3'b100) || ((residual_state == `ChromaDCLevel_Cb_s || residual_state == `ChromaDCLevel_Cr_s) && OneD_counter == 3'b001)) || //trap internal loop rescale_counter != 0); always @ (clk or rescale_en) if (!clk) l_rescale_en <= rescale_en; and gc_rescale (gclk_rescale,clk,l_rescale_en); //gclk_rounding wire rounding_en; reg l_rounding_en; wire gclk_rounding; assign rounding_en = (((residual_state == `Intra16x16ACLevel_s || residual_state == `LumaLevel_s || residual_state == `ChromaACLevel_Cb_s || residual_state == `ChromaACLevel_Cr_s) && TwoD_counter == 3'b100) || rounding_counter !=0)?1'b1:1'b0; always @ (clk or rounding_en) if (!clk) l_rounding_en <= rounding_en; assign gclk_rounding = clk & l_rounding_en; //------------------------------------------------- //Intra pred //------------------------------------------------- //1.gclk_intra_mbAddrA_luma @ Intra_pred_reg_ctrl.v // For intra pred,update after every blk4x4 is summed // For inter pred,update after blk4x4 5,7,13,15 is summed wire intra_mbAddrA_luma_ena; reg l_intra_mbAddrA_luma_ena; wire gclk_intra_mbAddrA_luma; wire Is_LumaRightMostBlk4x4; assign Is_LumaRightMostBlk4x4 = (blk4x4_rec_counter == 5 || blk4x4_rec_counter == 7 || blk4x4_rec_counter == 13 || blk4x4_rec_counter == 15);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -