フィルタ帯域のIIRのVerilogコードのために2次

N

newton2006

Guest
こんにちは、
私はコードをVerilogのに慣れていない私、今は、フィルタ帯域が必要です巡回型注文の2コードのために私に記述します。8ビットのデジタル信号は、フィルタIIR形バンドパスフィルタの注文の入力に2。私は助けてあらゆる種類の感謝本当に。

時間をご利用のありがとうを。

 
ハイ
uは値カットオフを与えていない
しかし、ここでのBPFは16ビット入力16ビット出力第2回次IIRバターワース。
lfc 250 Hzとフロン555Hz。
MathWorks社のMATLABは、コードを生成します。

/ /離散時間IIRフィルタ(実数)
/ / -------------------------------
/ /フィルタの構¥造:直接フォーム私は、2次セクション
数のセクション/ /:1
/ /安定:はい
/ /リニアフェーズ:いいえ
/ /算術:固定
/ /ナメレーター:S16では、14 - > [-2 2)
/ /分母:S16では、14 - > [-2 2)
/ /スケール値:S16では、14 - > [-2 2)
/ /入力:S16では、15 - > [-1 1)
/ /出力:S16では、11 - > [-16 16)
/ /分子状態:S16では、15から1> [-1)
/ /分母の状態:S16では、15から1> [-1)
/ /ナメレーターProd:s32、29 - > [-4 4)
/ /分母Prod:s32、29 - > [-4 4)
/ /分子アックム:s34、29 - > [-16 16)
/ /分母のアックム:s34、29 - > [-16 16)
/ /ラウンドモード:ラウンド
/ /オーバーフローモード:ラップ
/ / ------------------------------------------------ -------------

`タイムスケールは1 ns / 1 nsの

モジュールフィルタ(CLKの、clk_enable、リセット、filter_in、filter_out);

入力CLKの。
入力clk_enable;
入力リセット;
入力がfilter_inを締結[15:0]; / / sfix16_En15を
出力はfilter_outを締結[15:0]; / / sfix16_En11を

/ /ローカル関数
/ /タイプの定義
/ /定数
パラメータは16'b0000000101011100を締結[15:0] scaleconst1 =; / / sfix16_En14を
パラメータは16'b0100000000000000を締結[15:0] coeff_b1_section1 =; / / sfix16_En14を
パラメータは16'b0000000000000000を締結[15:0] coeff_b2_section1 =; / / sfix16_En14を
パラメータは16'b1100000000000000を締結[15:0] coeff_b3_section1 =; / / sfix16_En14を
パラメータは16'b1000001011100110を締結[15:0] coeff_a2_section1 =; / / sfix16_En14を
パラメータは16'b0011110101000111を締結[15:0] coeff_a3_section1 =; / / sfix16_En14を
/ /は、信号制御
ワイヤはinput_typeconvert署名[は15:0] / / sfix16_En15を
線が署名[15:0] scale1 / / sfix16_En15
ワイヤはmul_temp署名[は31:0]; / / sfix32_En29を
/ /第1章信号
線が署名[33:0] a1sum1 / / sfix34_En29
線が署名[33:0] a2sum1 / / sfix34_En29
線が署名[33:0] b1sum1 / / sfix34_En29
線が署名[33:0] b2sum1 / / sfix34_En29
線が署名[15:0] numtypeconvert1 / / sfix16_En15
線が署名[15:0] dentypeconvert1 / / sfix16_En15
regは]を締結[15:0] numdelay_section1 [0:1; / / sfix16_En15を
regは]を締結[15:0] dendelay_section1 [0:1; / / sfix16_En15を
線が署名[31:0] a2mul1 / / sfix32_En29
線が署名[31:0] a3mul1 / / sfix32_En29
線が署名[31:0] b1mul1 / / sfix32_En29
線が署名[31:0] b3mul1 / / sfix32_En29
ワイヤはunaryminus_temp署名[は16時]; / / sfix17_En15を
線が署名[33:0] b1multypeconvert1 / / sfix34_En29
ワイヤはadd_castを締結[33:0]; / / sfix34_En29を
線が署名[33:0] add_cast_1 / / sfix34_En29
ワイヤはadd_temp署名[は34:0]; / / sfix35_En29を
ワイヤはsub_castを締結[33:0]; / / sfix34_En29を
線が署名[33:0] sub_cast_1 / / sfix34_En29
ワイヤはsub_temp署名[は34:0]; / / sfix35_En29を
線が署名[33:0] sub_cast_2 / / sfix34_En29
線が署名[33:0] sub_cast_3 / / sfix34_En29
線が署名[34:0] sub_temp_1 / / sfix35_En29
ワイヤはoutput_typeconvert署名[は15:0] / / sfix16_En11を

/ /ブロックステートメント
filter_in =割り当てるinput_typeconvertを。

scaleconst1 *割り当てるmul_tempを= input_typeconvertの;
[mul_temp割り当てるscale1を(= 29:13] 1)>>> 1;

/ / ------------------第1節------------------

scale1を割り当てるnumtypeconvert1 =;

割り当てるdentypeconvert1 =(a1sum1 [29:13] 1)>>> 1;

常に@(posedgeのCLKのかposedgeリセット)
開始:numdelay_process_section1を
開始(リセット== 1'b1場合)
numdelay_section1 [0] <= 0;
numdelay_section1 [1] <= 0;
終了
他の開始
開始)する場合(clk_enable == 1'b1
numdelay_section1 [0] <= numtypeconvert1;
numdelay_section1 [1] <= numdelay_section1 [0];
終了
終了
最後に/ / numdelay_process_section1

常に@(posedgeのCLKのかposedgeリセット)
開始:dendelay_process_section1を
開始(リセット== 1'b1場合)
dendelay_section1 [0] <= 0;
dendelay_section1 [1] <= 0;
終了
他の開始
開始)する場合(clk_enable == 1'b1
dendelay_section1 [0] <= dentypeconvert1;
dendelay_section1 [1] <= dendelay_section1 [0];
終了
終了
最後に/ / dendelay_process_section1

coeff_a2_section1割り当てるa2mul1 = dendelay_section1 [0] *;

coeff_a3_section1割り当てるa3mul1 = dendelay_section1 [1] *;

$ =割り当てるb1mul1)署名((numtypeconvert1 [15:0]、14'b00000000000000);

)16'b1000000000000000割り当てるunaryminus_tempを=(numdelay_section1 [1] ==?$は]を締結((1'b0、numdelay_section1 [1])):- numdelay_section1 [1;
$ =割り当てるb3mul1を[署名(unaryminus_temp(夜四時00]、14'b00000000000000));

$ =割り当てるb1multypeconvert1を(署名((2(b1mul1 [31]))、b1mul1));

b1multypeconvert1を割り当てるb1sum1 =;

b1sum1 =割り当てるadd_castを。
$ =割り当てるadd_cast_1を(署名((2(b3mul1 [31]))、b3mul1));
add_cast_1 割り当てるadd_tempを= add_castの;
[割り当てるb2sum1 = add_tempする[33:0;

b2sum1 =割り当てるsub_castを。
$ =割り当てるsub_cast_1を(署名((2(a2mul1 [31]))、a2mul1));
sub_cast =割り当てるsub_tempを- sub_cast_1;
[割り当てるa2sum1 = sub_tempする[33:0;

a2sum1を割り当てるsub_cast_2 =;
$ =割り当てるsub_cast_3を(署名((2(a3mul1 [31]))、a3mul1));
割り当てるsub_temp_1 = sub_cast_2 - sub_cast_3;
[割り当てるa1sum1 = sub_temp_1 [を33:0;

(割り当てるoutput_typeconvert =((4(dentypeconvert1 [15]))、dentypeconvert1 [15時03]) 1)>>> 1;

/ /割り当てステートメント
output_typeconvert =割り当てるfilter_outを。

endmodule / /フィルタスリニバス

 

Welcome to EDABoard.com

Sponsor

Back
Top