ΔΣーADC実験編 その18 CICフィルタでトラブル発生 //decimation ratio =1/R reg signed[32:0]un=0; //integrator //decimation
z[1]=z[0];
result=z[0]-z[1]; endmodule parameter
DATA_WIDTH2=18; ///// internal variables
//////// assign cy_out= cy; always @(posedge clk) begin
endmodule //integrator //decimation
result=z[0]-z[1];
1/600
decimation using 1st order CIC filter
(fs=56.8MHz/600=94.6KHz)
1.さて、困った....
1st
order CIC filterならば、1/600 まで、decimationできたのですが
2nd order
になると、困った事が発生しました。
1/32
decimation までは、至極 正常でした。
ですが、1/64
decimationになると
正常な状態と、そうでない状態が、1秒位毎に、交互に発生します。
正常な状態: 1/64
decimation using 2nd order CIC filter
正常でない状態: 1/64 decimation
using 2nd order CIC
filter
つまり、不安定な状態が発生するのです、困ったぞ.....
2nd order CIC fiter の moduleは、これでいいと思っているのですが....
module
cic_filter_2nd_order(clk,data_input,result);
parameter R=64;
input clk;
input signed[17:0]data_input;
output reg signed[29:0]result;
reg signed[27:0]yn=0;
reg signed[32:0]yn_1=0;
reg signed[32:0]z[1:0];
reg signed[32:0]un_1=0;
reg signed[32:0]un_z[1:0];
reg signed[32:0]un_result=0;
reg [10:0]decim_count=0;
always@(posedge clk) begin
yn=yn_1+data_input;
yn_1=yn;
un=un_1+yn;
un_1=un;
decim_count=decim_count+1;
if(decim_count==R) begin
//differentiator
un_z[1]=un_z[0];
un_z[0]=un;
un_result=un_z[0]-un_z[1];
z[0]=un_result;
decim_count=0;
end
end
functional simulationも、問題ないと、思います。
ひとつ考えられる事は、
私の採っているDA変換は、Pulse Density
Modulation方式です。
以下のような構造ですので、時間がかかるのです。
module
PDM(clk,VDA,cy_out);
input clk;
input
[DATA_WIDTH2-1:0] VDA;
output cy_out;
reg [DATA_WIDTH2-1:0] R=0;
reg cy=0;
{cy,R} <=R+
VDA;
end
このPDMに要する時間と、CIC filterで要する時間との タイミングのズレでは、ないのかなと........discrepancy
2nd order CIC filter の積分と、微分を、
always@(posedge clk) begin
yn=yn_1+data_input;
yn_1=yn;
un=un_1+yn;
un_1=un;
//differentiator
un_z[1]=un_z[0];
un_z[0]=un;
un_result=un_z[0]-un_z[1];
decim_count=decim_count+1;
if(decim_count==R) begin
//differentiator
z[1]=z[0];
z[0]=un_result;
decim_count=0;
end
微分の一部を、decimation部分から、除外して上記のように配置にすれば、
完全に作動するのですが
これでは、理屈的に、1st
order
CICと、変わりませんねえ......
積分して、微分 -> 元に戻るだけ
しっかし、冒頭の 1st order CIC filter
の効果は、優れています。
ADC自体が bandpass filterを、通していますので
1st
order CIC
filterで、充分かもしれません。
と、苦しい言い訳...... (^_^;;
H.22.9.9