【问题标题】:verilog code to find a single max value for an input that has 1000 samples values为具有 1000 个样本值的输入查找单个最大值的 verilog 代码
【发布时间】:2016-05-25 05:47:22
【问题描述】:

我想为具有 1000 个十进制值的输入信号找到一个最大值,该值从内存中读取一次每个正 clk 边缘。我执行了以下粗略代码来查找最大值,但它没有给我正确的最大值/数字请帮助我,以便我可以在这 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

【问题讨论】:

  • 您可以使用 计数器 来计算 1000 个样本。目前,没有规定考虑 1000 个最新输入值。此外,您需要存储这 1000 个样本(内存)。每次输入发生变化(某个组合块)时,将当前输入与这 1000 个样本中的每一个进行比较。
  • 附带说明,在顺序块中使用非阻塞赋值 (&lt;=)。此外,关键字posedge 必须是小写字母。
  • Sharvil111 感谢您的回复..如果您不介意您可以通过编写计数器代码来计算这些值来编辑我的代码,然后我可以找到单个最大值..

标签: verilog system-verilog iverilog verilator


【解决方案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 个样本的值,因为我们只需要找到最大值。

【讨论】:

  • Prakash Darji ..感谢您的时间..我为我的 din 信号尝试了您的代码,但 dout 显示 0..它不是最大值..我正在附上我的测试台代码 plzz 有一个看看吧。。
  • 上传你的内存文件
  • 首先尝试从文件中读取数据。看到你没有正确从文件中获取数据,先检查再看看。
  • 你还没有创建时钟。做适当的tb,然后看看结果。
  • @PrakashDarji。 reg [15:0] max=0; 这是有效的吗?我没有遇到过对 reg 的双重分配( max 也在 always 块内分配)。可以为我提供阅读此内容的任何参考吗?
【解决方案2】:

当 din

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

【讨论】:

  • 请上传您和我的代码的硬件原理图,并比较它推断的内容?
猜你喜欢
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 2015-07-08
  • 2020-09-19
相关资源
最近更新 更多