⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 quant.v

📁 用于FPGA的量化算法的HDL编码
💻 V
📖 第 1 页 / 共 4 页
字号:
       def_q_mem_reg3 <= def_q_mem_reg2;
       end
   end

/*****************************************************************************/

/* Two 64x8 memories to store the user defined intra and non-intra Qmatrix  
   (q_value_new). A 68x12 memory is used to store the input dct values */

initial
begin

q_value_new_intra[0] <= 8'b0; q_value_new_intra[1] <= 8'b0; 
q_value_new_intra[2] <= 8'b0; q_value_new_intra[3] <= 8'b0; 
q_value_new_intra[4] <= 8'b0; q_value_new_intra[5] <= 8'b0; 
q_value_new_intra[6] <= 8'b0; q_value_new_intra[7] <= 8'b0; 
q_value_new_intra[8] <= 8'b0; q_value_new_intra[9] <= 8'b0; 
q_value_new_intra[10] <= 8'b0; q_value_new_intra[11] <= 8'b0; 
q_value_new_intra[12] <= 8'b0; q_value_new_intra[13] <= 8'b0; 
q_value_new_intra[14] <= 8'b0; q_value_new_intra[15] <= 8'b0; 
q_value_new_intra[16] <= 8'b0; q_value_new_intra[17] <= 8'b0; 
q_value_new_intra[18] <= 8'b0; q_value_new_intra[19] <= 8'b0; 
q_value_new_intra[20] <= 8'b0; q_value_new_intra[21] <= 8'b0; 
q_value_new_intra[22] <= 8'b0; q_value_new_intra[23] <= 8'b0; 
q_value_new_intra[24] <= 8'b0; q_value_new_intra[25] <= 8'b0; 
q_value_new_intra[26] <= 8'b0; q_value_new_intra[27] <= 8'b0; 
q_value_new_intra[28] <= 8'b0; q_value_new_intra[29] <= 8'b0;
q_value_new_intra[30] <= 8'b0; q_value_new_intra[31] <= 8'b0; 
q_value_new_intra[32] <= 8'b0; q_value_new_intra[33] <= 8'b0; 
q_value_new_intra[34] <= 8'b0; q_value_new_intra[35] <= 8'b0; 
q_value_new_intra[36] <= 8'b0; q_value_new_intra[37] <= 8'b0; 
q_value_new_intra[38] <= 8'b0; q_value_new_intra[39] <= 8'b0; 
q_value_new_intra[40] <= 8'b0; q_value_new_intra[41] <= 8'b0; 
q_value_new_intra[42] <= 8'b0; q_value_new_intra[43] <= 8'b0; 
q_value_new_intra[44] <= 8'b0; q_value_new_intra[45] <= 8'b0; 
q_value_new_intra[46] <= 8'b0; q_value_new_intra[47] <= 8'b0; 
q_value_new_intra[48] <= 8'b0; q_value_new_intra[49] <= 8'b0; 
q_value_new_intra[50] <= 8'b0; q_value_new_intra[51] <= 8'b0; 
q_value_new_intra[52] <= 8'b0; q_value_new_intra[53] <= 8'b0; 
q_value_new_intra[54] <= 8'b0; q_value_new_intra[55] <= 8'b0; 
q_value_new_intra[56] <= 8'b0; q_value_new_intra[57] <= 8'b0; 
q_value_new_intra[58] <= 8'b0; q_value_new_intra[59] <= 8'b0;
q_value_new_intra[60] <= 8'b0; q_value_new_intra[61] <= 8'b0; 
q_value_new_intra[62] <= 8'b0; q_value_new_intra[63] <= 8'b0;
q_value_new_intra[64] <= 8'b0;
q_value_new_non_intra[0] <= 8'b0; q_value_new_non_intra[1] <= 8'b0; 
q_value_new_non_intra[2] <= 8'b0; q_value_new_non_intra[3] <= 8'b0; 
q_value_new_non_intra[4] <= 8'b0; q_value_new_non_intra[5] <= 8'b0; 
q_value_new_non_intra[6] <= 8'b0; q_value_new_non_intra[7] <= 8'b0; 
q_value_new_non_intra[8] <= 8'b0; q_value_new_non_intra[9] <= 8'b0; 
q_value_new_non_intra[10] <= 8'b0; q_value_new_non_intra[11] <= 8'b0; 
q_value_new_non_intra[12] <= 8'b0; q_value_new_non_intra[13] <= 8'b0; 
q_value_new_non_intra[14] <= 8'b0; q_value_new_non_intra[15] <= 8'b0; 
q_value_new_non_intra[16] <= 8'b0; q_value_new_non_intra[17] <= 8'b0; 
q_value_new_non_intra[18] <= 8'b0; q_value_new_non_intra[19] <= 8'b0; 
q_value_new_non_intra[20] <= 8'b0; q_value_new_non_intra[21] <= 8'b0; 
q_value_new_non_intra[22] <= 8'b0; q_value_new_non_intra[23] <= 8'b0; 
q_value_new_non_intra[24] <= 8'b0; q_value_new_non_intra[25] <= 8'b0; 
q_value_new_non_intra[26] <= 8'b0; q_value_new_non_intra[27] <= 8'b0; 
q_value_new_non_intra[28] <= 8'b0; q_value_new_non_intra[29] <= 8'b0;
q_value_new_non_intra[30] <= 8'b0; q_value_new_non_intra[31] <= 8'b0; 
q_value_new_non_intra[32] <= 8'b0; q_value_new_non_intra[33] <= 8'b0; 
q_value_new_non_intra[34] <= 8'b0; q_value_new_non_intra[35] <= 8'b0; 
q_value_new_non_intra[36] <= 8'b0; q_value_new_non_intra[37] <= 8'b0; 
q_value_new_non_intra[38] <= 8'b0; q_value_new_non_intra[39] <= 8'b0; 
q_value_new_non_intra[40] <= 8'b0; q_value_new_non_intra[41] <= 8'b0; 
q_value_new_non_intra[42] <= 8'b0; q_value_new_non_intra[43] <= 8'b0; 
q_value_new_non_intra[44] <= 8'b0; q_value_new_non_intra[45] <= 8'b0; 
q_value_new_non_intra[46] <= 8'b0; q_value_new_non_intra[47] <= 8'b0; 
q_value_new_non_intra[48] <= 8'b0; q_value_new_non_intra[49] <= 8'b0;   
q_value_new_non_intra[50] <= 8'b0; q_value_new_non_intra[51] <= 8'b0; 
q_value_new_non_intra[52] <= 8'b0; q_value_new_non_intra[53] <= 8'b0;    
q_value_new_non_intra[54] <= 8'b0; q_value_new_non_intra[55] <= 8'b0; 
q_value_new_non_intra[56] <= 8'b0; q_value_new_non_intra[57] <= 8'b0; 
q_value_new_non_intra[58] <= 8'b0; q_value_new_non_intra[59] <= 8'b0;
q_value_new_non_intra[60] <= 8'b0; q_value_new_non_intra[61] <= 8'b0; 
q_value_new_non_intra[62] <= 8'b0; q_value_new_non_intra[63] <= 8'b0;
q_value_new_non_intra[64] <= 8'b0;
end


/* read in new intra Q value: pipe2 */
always @ (posedge CLK)
begin
if (rdy_in == 1'b1 && load_intra_qmatrix == 1'b1)
q_value_new_intra[cnt64[6:0]] <= q_value;
end

/* read in new non intra Q values:pipe2 */
always @ (posedge CLK)
if (rdy_in == 1'b1 && load_non_intra_qmatrix == 1'b1)
q_value_new_non_intra[cnt64[6:0]] <= q_value;


/* user defined Q values are read out :pipe3*/
always @ (posedge CLK)
  begin
     if (rdy_in == 1'b1 && macroblock_type_reg1 == 1'b0)
       q_value_new_out <= q_value_new_intra[cnt64c[6:0]];
     else if (rdy_in == 1'b1 && macroblock_type_reg1 == 1'b1)
       q_value_new_out <= q_value_new_non_intra[cnt64c[6:0]];
     else q_value_new_out <= 8'b0;
  end


always @ (posedge CLK or posedge RST)
   begin
   if (RST)
       begin
       q_value_new_out_reg1 <= 8'b0; 
       end
   else 
       begin
       q_value_new_out_reg1 <= q_value_new_out; 
       end
   end

/* END MEMORY SECTION */

/*****************************************************************************/

/* q_value_new_out has 3 pipe stages. def_q_mem and q_value_new_out has 2 pipe 
stages each*/

always @ (posedge CLK or posedge RST)
   begin
     if (RST)
       begin
       q_value_select <= 9'b0; 
       end
     else 
       begin
       q_value_select <= (load_intra_qmatrix_reg2 == 1'b0 && load_non_intra_qmatrix_reg2 == 1'b0)
                     ? def_q_mem : q_value_new_out;
       end
   end


/*****************************************************************************/

/* store  1/Qmatrix  coefficient values . All the possible 256 values are inverted 
and stored in q_value_mem. Q_value_select is the output of the mux that chooses 
between default matrix and user defined matrix.
q value select has 3 pipe stages. So memoryQ has 4 pipe stages. */

always @ (posedge CLK or posedge RST)
    begin
      if (RST)
       begin
       memoryQ <= 11'b0;
       end
    else 
    begin
    case (q_value_select)
    9'd1 : begin memoryQ <= 11'b10000000000; end 
    9'd2 : begin memoryQ <= 11'b01000000000; end 
    9'd3 : begin memoryQ <= 11'b00101010101; end 
    9'd4 : begin memoryQ <= 11'b00100000000; end 
    9'd5 : begin memoryQ <= 11'b00011001100; end 
    9'd6 : begin memoryQ <= 11'b00010101010; end 
    9'd7 : begin memoryQ <= 11'b00010010010; end 
    9'd8 : begin memoryQ <= 11'b00010000000; end 
    9'd9 : begin memoryQ <= 11'b00001110001; end 
    9'd10: begin memoryQ <= 11'b00001100110; end 
    9'd11: begin memoryQ <= 11'b00001011101; end 
    9'd12: begin memoryQ <= 11'b00001010101; end 
    9'd13: begin memoryQ <= 11'b00001001110; end 
    9'd14: begin memoryQ <= 11'b00001001001; end 
    9'd15: begin memoryQ <= 11'b00001000100; end 
    9'd16: begin memoryQ <= 11'b00001000000; end 
    9'd17: begin memoryQ <= 11'b00000111100; end 
    9'd18: begin memoryQ <= 11'b00000111000; end 
    9'd19: begin memoryQ <= 11'b00000110101; end 
    9'd20: begin memoryQ <= 11'b00000110011; end 
    9'd21: begin memoryQ <= 11'b00000110000; end 
    9'd22: begin memoryQ <= 11'b00000101110; end 
    9'd23: begin memoryQ <= 11'b00000101100; end 
    9'd24: begin memoryQ <= 11'b00000101010; end 
    9'd25: begin memoryQ <= 11'b00000101000; end 
    9'd26: begin memoryQ <= 11'b00000100111; end 
    9'd27: begin memoryQ <= 11'b00000100101; end 
    9'd28: begin memoryQ <= 11'b00000100100; end 
    9'd29: begin memoryQ <= 11'b00000100011; end 
    9'd30: begin memoryQ <= 11'b00000100010; end 
    9'd31: begin memoryQ <= 11'b00000100001; end 
    9'd32: begin memoryQ <= 11'b00000100000; end 

/*----------------------------------------------------------------------------*/

    9'd33: begin memoryQ <= 11'b00000011111; end 
    9'd34: begin memoryQ <= 11'b00000011110; end 
    9'd35: begin memoryQ <= 11'b00000011101; end 
    9'd36: begin memoryQ <= 11'b00000011100; end 
    9'd37: begin memoryQ <= 11'b00000011011; end 
    9'd38: begin memoryQ <= 11'b00000011010; end 
    9'd39: begin memoryQ <= 11'b00000011010; end 
    9'd40: begin memoryQ <= 11'b00000011001; end 
    9'd41: begin memoryQ <= 11'b00000011001; end 
    9'd42: begin memoryQ <= 11'b00000011000; end 
    9'd43: begin memoryQ <= 11'b00000010111; end 
    9'd44: begin memoryQ <= 11'b00000010111; end 
    9'd45: begin memoryQ <= 11'b00000010110; end 
    9'd46: begin memoryQ <= 11'b00000010110; end 
    9'd47: begin memoryQ <= 11'b00000010101; end 
    9'd48: begin memoryQ <= 11'b00000010101; end 
    9'd49: begin memoryQ <= 11'b00000010100; end 
    9'd50: begin memoryQ <= 11'b00000010100; end 
    9'd51: begin memoryQ <= 11'b00000010100; end 
    9'd52: begin memoryQ <= 11'b00000010011; end 
    9'd53: begin memoryQ <= 11'b00000010011; end 
    9'd54: begin memoryQ <= 11'b00000010010; end 
    9'd55: begin memoryQ <= 11'b00000010010; end 
    9'd56: begin memoryQ <= 11'b00000010010; end 
    9'd57: begin memoryQ <= 11'b00000010001; end 
    9'd58: begin memoryQ <= 11'b00000010001; end 
    9'd59: begin memoryQ <= 11'b00000010001; end 
    9'd60: begin memoryQ <= 11'b00000010001; end 
    9'd61: begin memoryQ <= 11'b00000010000; end 
    9'd62: begin memoryQ <= 11'b00000010000; end 
    9'd63: begin memoryQ <= 11'b00000010000; end 
    9'd64: begin memoryQ <= 11'b00000010000; end 
/*----------------------------------------------------------------------------*/
    9'd65: begin memoryQ <= 11'b00000001111; end 
    9'd66: begin memoryQ <= 11'b00000001111; end 
    9'd67: begin memoryQ <= 11'b00000001111; end 
    9'd68: begin memoryQ <= 11'b00000001111; end 
    9'd69: begin memoryQ <= 11'b00000001110; end 
    9'd70: begin memoryQ <= 11'b00000001110; end 
    9'd71: begin memoryQ <= 11'b00000001110; end 
    9'd72: begin memoryQ <= 11'b00000001110; end 
    9'd73: begin memoryQ <= 11'b00000001110; end 
    9'd74: begin memoryQ <= 11'b00000001101; end 
    9'd75: begin memoryQ <= 11'b00000001101; end 
    9'd76: begin memoryQ <= 11'b00000001101; end 
    9'd77: begin memoryQ <= 11'b00000001101; end 
    9'd78: begin memoryQ <= 11'b00000001101; end 
    9'd79: begin memoryQ <= 11'b00000001100; end 
    9'd80: begin memoryQ <= 11'b00000001100; end 
    9'd81: begin memoryQ <= 11'b00000001100; end 
    9'd82: begin memoryQ <= 11'b00000001100; end 
    9'd83: begin memoryQ <= 11'b00000001100; end 
    9'd84: begin memoryQ <= 11'b00000001100; end 
    9'd85: begin memoryQ <= 11'b00000001100; end 
    9'd86: begin memoryQ <= 11'b00000001011; end 
/*----------------------------------------------------------------------------*/

    9'd87: begin memoryQ <= 11'b00000001011; end 
    9'd88: begin memoryQ <= 11'b00000001011; end 
    9'd89: begin memoryQ <= 11'b00000001011; end 
    9'd90: begin memoryQ <= 11'b00000001011; end  
    9'd91: begin memoryQ <= 11'b00000001011; end 
    9'd92: begin memoryQ <= 11'b00000001011; end  
    9'd93: begin memoryQ <= 11'b00000001011; end 
    9'd94: begin memoryQ <= 11'b00000001010; end  
    9'd95: begin memoryQ <= 11'b00000001010; end 
    9'd96: begin memoryQ <= 11'b00000001010; end  
    9'd97: begin memoryQ <= 11'b00000001010; end 
    9'd98: begin memoryQ <= 11'b00000001010; end  
    9'd99: begin memoryQ <= 11'b00000001010; end 
    9'd100: begin memoryQ <= 11'b00000001010; end  
    9'd101: begin memoryQ <= 11'b00000001010;end 
    9'd102: begin memoryQ <= 11'b00000001010; end  
/*----------------------------------------------------------------------------*/

    9'd103: begin memoryQ <= 11'b00000001001;end 
    9'd104: begin memoryQ <= 11'b00000001001; end  
    9'd105: begin memoryQ <= 11'b00000001001;end 
    9'd106: begin memoryQ <= 11'b00000001001; end  
    9'd107: begin memoryQ <= 11'b00000001001;end 
    9'd108: begin memoryQ <= 11'b00000001001; end  
    9'd109: begin memoryQ <= 11'b00000001001;end 
    9'd110: begin memoryQ <= 11'b00000001001; end  
    9'd111: begin memoryQ <= 11'b00000001001;end 
    9'd112: begin memoryQ <= 11'b00000001001; end  
    9'd113: begin memoryQ <= 11'b00000001001;end 
    9'd114: begin memoryQ <= 11'b00000001001; end  
    9'd115: begin memoryQ <= 11'b00000001000;end 
    9'd116: begin memoryQ <= 11'b00000001000; end  
    9'd117: begin memoryQ <= 11'b00000001000;end 
    9'd118: begin memoryQ <= 11'b00000001000; end  
    9'd119: begin memoryQ <= 11'b00000001000;end 
    9'd120: begin memoryQ <= 11'b00000001000; end  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -