FPGA求取极大值
我的思路是采用状态机,状态1时进行数据的写入,完成状态1后进入状态0进行极大值的求取,逐个将每个值都与左右两边的值进行比较,如果signal[i+1]>signal[i]&&signal[i+1]>signal[i+2]的话就把该值所在地址i+1输出,有没有别的更好的思路什么的?
再就是最后编译得到的结果FPGA占用的资源太大,用的Cyclone IV E total logic elements达到了87%,是因为处理的数据太多的原因还是算法太过麻烦的缘故呢?有没有更好的解决办法?多谢了!
module detection(clk,data_in,fnum);
input clk;
input [15:0]data_in;
output fnum;
reg [15:0]fnum;
reg [15:0] signal [0:511];
reg [9:0]i;
reg state,next_state=1; //初始化状态为1,准备往二维数组中写数据
initial
begin
//$readmemh("memory.txt", signal);
i signal&&signal[i+1]>signal[i+2])
begin
fnum<=i+1;
end
else
begin
fnum<=0;
end
end
endcase
end
endmodule
这个是自己写的代码,仿真出来的结果,fnum一直为0,而且耗费的FPGA资源很多。