文档库 最新最全的文档下载
当前位置:文档库 › 积分器-FPGA

积分器-FPGA

积分器-FPGA
积分器-FPGA

积分器的一种实现方法:每级积分器都是一个反馈系数为1的单极点IIR滤波器, 其传递函数为:

由上可以推出单级积分器的差分方程y(n) =x(n) + y(n- 1) , 可以看出用累加器即可实现。

Bout=Nlog2(RD)+Bin 其中:Bin 为输入位宽;Bout为输出位宽;N为滤波器阶数;R为抽取因子;D为延迟数值。

以下是3级积分器的实现程序:

module integrator(clk, rst,x_in, y_out);

input clk,rst;

input [7:0] x_in;

output [25:0] y_out;

reg [25:0] IntReg0=0; // 必须初始化!!!

reg [25:0] IntReg1=0;

reg [25:0] IntReg2=0;

reg [7:0] x; // Registered input

wire [25:0] sxtx; // Sign extended input

assign sxtx= {{18{x_in[7]}},x_in}; // 符号扩展,语句必须写在always语句块外面,always @(posedge clk) //否则IntReg0会在第一个时钟上升沿到来时无初始值if(rst)

begin

x <= x_in;

IntReg0 <= IntReg0+sxtx; //第一级输出

IntReg1 <= IntReg1+IntReg0; //第二级输出

IntReg2 <= IntReg2+IntReg1; //第三级输出

end

assign y_out=IntReg2;

endmodule

测试模块:

`timescale 1 ps/ 1 ps

module integrator_vlg_tst();

reg clk,rst;

reg [7:0] x_in;

wire [25:0] y_out;

integrator i1 (

.rst(rst),

.clk(clk),

.x_in(x_in),

.y_out(y_out)

);

initial

begin

clk=0;

rst=0;

# 50 rst=1;

end

always #50 clk=~clk;

always #10 x_in=8'd100; //该时间不能超过第一次时钟上升沿到来的时间。endmodule

仿真图如下:

输入为随机数据即为always #100 x_in={$random}%1024; 时,各寄存器值如下图所示:

相关文档