Код 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