ΔΣ-ADC実験編 その27 再び、補償フィルタで躓いてしまった!

 
CICフィルタで1/64decimation後に、補償フィルタを通した。 new fs=781KHz ( 50MHz/64 )                           入力が200KHzを越えると、出力はなくなります。

1.私は怠惰な人間かも知れない...

    Xilinx社のFIR Compilerの存在を知ってから、自力でfir filterを作成する意欲が失せてきました。

    で、今回も FIR Compilerのお世話になりました。

 




    そして、自作のべた書きのfir filterでも、同じ結果を得る事が、できました。

module beta_fir(clk,input_data,output_data);
 input clk;
 input signed[6:0]input_data;
 output reg signed[23:0]output_data=0;
 
 //// other ///////////////////
 reg signed[18:0]coef[62:0];
 reg signed[6:0]z[62:0];
 reg [5:0]count=0;
 //reg signed[23:0]add_unit=0;  
 reg reset=1;
 reg signed[23:0]accum=0;
 
 always @(posedge clk) begin
  if(reset) begin
   coef[0]=-3;coef[1]=0;coef[2]=9;coef[3]=0;
   coef[4]=-26;coef[5]=0;coef[6]=58;coef[7]=0;
   coef[8]=-117;coef[9]=0;coef[10]=215;coef[11]=0;
   coef[12]=-372;coef[13]=1;coef[14]=610;coef[15]=-1;
   coef[16]=-958;coef[17]=1;coef[18]=1458;coef[19]=-2;
   coef[20]=-2170;coef[21]=2;coef[22]=3201;coef[23]=-2;
   coef[24]=-4771;coef[25]=3;coef[26]=7454;coef[27]=-3;
   coef[28]=-13355;coef[29]=3;coef[30]=41535;coef[31]=65533;
   coef[32]=41535;coef[33]=3;coef[34]=-13355;coef[35]=-3;
   coef[36]=7454;coef[37]=3;coef[38]=-4771;coef[39]=-2;
   coef[40]=3201;coef[41]=2;coef[42]=-2170;coef[43]=-2;
   coef[44]=1458;coef[45]=1;coef[46]=-958;coef[47]=-1;
   coef[48]=610;coef[49]=1;coef[50]=-372;coef[51]=0;
   coef[52]=215;coef[53]=0;coef[54]=-117;coef[55]=0;
   coef[56]=58;coef[57]=0;coef[58]=-26;coef[59]=0;
   coef[60]=9;coef[61]=0;coef[62]=-3;
   reset=0;
  end else begin
   for(count=62;count>0;count=count-1)begin
    z[count]=z[count-1];
   end
    z[0]=input_data;
   for(count=0;count<63;count=count+1)begin
    accum=accum+z[count]*coef[count];
   end
   output_data=accum;
   accum=0;
  end
 end
 
 initial begin
  for(count=0;count<63;count=count+1)begin
   z[count]=0;
  end
 end
  
endmodule

    惜しむらくは、LUTの消費量が、大きい事です。

    Fir Compilerを使ったDA filter
    

    自作の べた書き fir filter
       

        CICfilterのみを通した時
    

    CIC filterを通すのみでは 34LUTsだったものが、

    補償filter(fir LPF)を通すと、少なくても、2745LUTsの消費!

    耐えられん....

    それで、

    自力でfir filterを、rom、single ramを使って、作り直す事を考えたのですが

    これが、でけん..........涙  (-_-) 

    なんで? 

    LatticeXP2を使ってた時は、できたのですが.....

    勿論、LatticeXP2の時の、 自作fir filterのHDL記述は、残っているのですが

    自分で書いたものが、さっぱり理解できなくなっています.......   

    これを、老化現象というのでしょうか? 

    うーむ、そう言えば、今年の誕生日で、63歳には、なるのですが、

    未だに、実感が沸きませんねん。

    まあ、それは、それで、よろしいやんか。

    あるがままで、行きましょう。 

    もっかい、考えてみますね。

H.23.01.28