Код verilog, чтобы найти одно максимальное значение для входа, который имеет значения 1000 образцов

Я хочу найти одно максимальное значение для входного сигнала, который имеет 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

2 ответа

Решение

Предположение 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 выборок, потому что мы должны найти только максимальное значение.

Вам не нужно присваивать значение max, когда din<=max, как в операторе else.

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

Другие вопросы по тегам