verilog代码,用于查找具有1000个样本值的输入的单个最大值

时间:2016-05-25 05:47:23

标签: verilog system-verilog iverilog verilator

我想找到一个输入信号的单个最大值,该信号具有1000个十进制值,每个正clk edge.i执行以下粗略代码,但是它没有给我正确的最大值/数量,请帮助我,这样我就可以在这1000个输入信号值中找到一个最大值。提前谢谢

module(input clk, input [15:0]din, output [15:0]dout);
reg [15:0] max=0;

always @ (Posedge clk)
if(din>max)
max<=din;
else
max<=0;

assign dout=max;
endmodule

2 个答案:

答案 0 :(得分:1)

假设1:

如果您的内存读取操作1000估值超出了您的查找最大值模块,则无需跟踪读取的值。

module find_max (input         clk, 
                 input  [15:0] din, 
                 output [15:0] dout
               );

reg [15:0] max=0;

always @ (posedge clk)
begin
  if(din > max)
    max <= din;
  else
    max <= max;
end

assign dout = max;

endmodule

您的最大值反映在输入find_max模块的下一个周期后的输出中。

假设2:

如果您的find_max模块未考虑估值总数,那么我们只需要一个跟踪周期数或估值的计数器。

module find_max (input         clk, 
                 input  [15:0] din, 
                 output [15:0] dout
               );

reg [15:0] max=0;
reg [ 9:0] cnt=0;

always @ (posedge clk)
begin
  cnt <= cnt + 1'b1;
  if(din > max)
    max <= din;
  else
    max <= max;
end

assign dout = (cnt == 10'd1000) ? max : 16'd0;

endmodule

我们不需要存储1000个样本的值,因为我们必须只找到最大值。

答案 1 :(得分:0)

你不需要在din&lt; = max时将值分配给max,就像在else语句中一样。

module(input clk, input [15:0]din, output reg [15:0]dout); always @ (posedge clk) if(din>max) max<=din; endmodule