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

📄 fir_lms.v

📁 这是关于智能天线的自适应算法的MATLAB代码
💻 V
字号:
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date:    20:24:37 08/18/2007 
// Design Name: 
// Module Name:    fir_lms 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////
module fir_lms(clk, x_in, d_in, e_out, y_out, f0_out, f1_out);

  parameter W1 = 8,   // 输入信号的宽度
            W2 = 16,  // 乘法器的输出宽度2*W1
            L  = 2;   // FIR自适应滤波器的长度

  input clk;  // 输入信号的时钟
  input [W1-1:0] x_in, d_in;  // 滤波器的输入信号和参考信号
  output [W2-1:0] e_out, y_out;  // 滤波器的输出信号和误差信号
  output [W1-1:0] f0_out, f1_out;  // Results

  reg  [W1-1:0] x, x0, x1, f0, f1; // 存放系数的寄存器
  reg  [W1-1:0] d;
  wire [W1-1:0] emu;
  wire [W2-1:0] p0, p1, xemu0, xemu1; // 存放乘积的寄存器
  wire  [W2-1:0]  y, sxty, e, sxtd; 
  wire  clken, aclr;
  wire  [W2-1:0] sum;  

  assign sum=0; 
  assign aclr=0; 
  assign clken=0;

   //将输入的参考信号扩展到16比特
  assign  sxtd = {{8{d[7]}}, d};

  always @(posedge clk)  begin
      d <= d_in;    // 完成寄存器的数据采样,并存放数据 
      x0 <= x_in;   
      x1 <= x0;   // 移位
      f0 <= f0 + xemu0[15:8]; ////截位相当于乘以步长因子
      f1 <= f1 + xemu1[15:8]; 
  end

// 完成 p(i) = f(i) * x(i)的乘法计算
  mult mult_0(      //  x0*f0 = p0  
		 .clk(clk), 
		 .a(x0), 
		 .b(f0), 
		 .q(p0));
 
  mult mult_1(     // x0*f0 = p0  
		 .clk(clk), 
		 .a(x1), 
		 .b(f1), 
		 .q(p1));
		 
  assign y = p0 + p1;  // 计算ADF的输出

  // 将y扩展到16位
  assign  sxty = { {7{y[15]}}, y[15:7]};

  assign e = sxtd - sxty;
  assign emu = e[8:1];  

 // 完成 xemu(i) = emu * x(i)的计算
  mult mult_2( // Multiply  x0*f0 = p0  
		 .clk(clk), 
		 .a(x0), 
		 .b(emu), 
		 .q(xemu0));
		 
  mult mult_3( // Multiply  x0*f0 = p0  
		 .clk(clk), 
		 .a(x1), 
		 .b(emu), 
		 .q(xemu1));
		 
  assign  y_out  = y;    // 监控输出控制信
  assign  e_out  = e;
  assign  f0_out = f0;
  assign  f1_out = f1;

endmodule


⌨️ 快捷键说明

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