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

📄 iir_par.v

📁 《数字信号处理的FPGA实现》代码
💻 V
字号:
//*********************************************************
// IEEE STD 1364-1995 Verilog file: iir_par.v
// Author-EMAIL: Uwe.Meyer-Baese@ieee.org
//*********************************************************
module iir_par (clk, x_in, clk2, y_out); //----> Interface

  parameter W = 14; // bit width - 1
  input          clk;
  input  [W:0]  x_in;
  output [W:0]  y_out;
  output         clk2;

  reg [W:0] x_even, x_odd, xd_odd, x_wait;
  reg [W:0] y_even, y_odd, y_wait, y;  
  reg [W:0] x_e, x_o, y_e, y_o;
  reg [W:0] sum_x_even, sum_x_odd;
  reg        clk_div2;

  always @(posedge clk)          // Clock divider by 2
  begin : clk_divider            // for input clk 
     clk_div2 <= ! clk_div2;
  end

  always @(posedge clk)          // Split x into even
  begin : Multiplex              // and odd samples; 
    parameter even=0, odd=1;     // recombine y at clk rate
    reg [0:0] state;
    case (state) 
      even : begin
          x_even <= x_in; 
          x_odd <= x_wait;
          y <= y_wait;
          state <= odd;
      end
      odd : begin
         x_wait <= x_in;
         y <= y_odd;
         y_wait <= y_even;
         state <= even;
      end
    endcase
  end

  assign y_out = y;
  assign clk2  = clk_div2;
 
  always @(negedge clk_div2)
  begin: Arithmetic                                      
    sum_x_even <= x_odd + {x_even[W],x_even[W:1]} 
                       + {x_even[W],x_even[W],x_even[W:2]};
                     // i.e. x_odd + x_even / 2 + x_even /4 
    y_even <= sum_x_even + {y_even[W],y_even[W:1]} 
                            + {{4{y_even[W]}},y_even[W:4]};
               // i.e. sum_x_even + y_even / 2 + y_even /16
    xd_odd <= x_odd;
    sum_x_odd <= x_even + {xd_odd[W],xd_odd[W:1]} 
                       + {xd_odd[W],xd_odd[W],xd_odd[W:2]};
                    // i.e. x_even + xd_odd / 2 + xd_odd /4
    y_odd  <= sum_x_odd + {y_odd[W],y_odd[W:1]} 
                              + {{4{y_odd[W]}},y_odd[W:4]};
                 // i.e. sum_x_odd + y_odd / 2 + y_odd / 16
  end
endmodule

⌨️ 快捷键说明

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