如何在Verilog中获得信号幅度

时间:2015-10-15 02:43:20

标签: verilog

我有一个模块Magnitude

module Magnitude(
  input [31:0] re,
  input [31:0] im,
  output [31:0] out
);
  assign out = re * re + im * im;
endmodule

现在,对于128个信号,我需要找出幅度。也就是说,我需要一种最多可以计数128的方法。我该怎么做?

此外,这是我写的第一个Verilog代码。任何有关提高效率的建议都是受欢迎的。

1 个答案:

答案 0 :(得分:1)

根据我对您的问题的理解,您可能打算执行以下操作:

module Magnitude(
  input [31:0] re,
  input clk;
  input reset;
  input [31:0] im,
  output reg [31:0] out
);

reg [6:0] counter;

 always @(posedge clk or negedge reset)
 begin
  if(!reset)
   begin
   counter<=0;
   end
  else 
    begin
     if (counter==7'd128)
       counter<=0;
     else
       counter<=counter+1;
    end
 end

 always @(posedge clk or negedge reset)
 begin
   if(!reset)
     out<=0;
   else 
    begin
     if (counter==7'd127)
       out<=0;            // As soon as counter counts to 128, it will become zero.
     else
       out <= out + re * re + im * im;
    end
 end
endmodule