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

问题描述 投票:0回答:2

我想找到一个输入信号的单个最大值,该输入信号具有 1000 个十进制值,每个正时钟沿从存储器中读取一次。我编写了以下粗略代码来查找最大值,但它没有给我正确的最大值/数字,请帮助我,以便我可以在这 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
verilog system-verilog
2个回答
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
投票

喧闹时不需要给 max 赋值<=max as in else statement.


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

© www.soinside.com 2019 - 2024. All rights reserved.