剔除最大最小值并求累加
有一个模块,vaild会连续拉高,同时有16bit数据进来,vaild连续拉高的周期数为3-255,然后要把这些数据求和,但是要把最大和最小的数剔除,最后done和sum一起输出。
// 去掉一个最大值和一个最小值,剩下的值求和
module sum(
input clk,
input rst_n,
input valid,
input [15:0] data,
output [23:0] sum_out,
output done);
reg [15:0] max, min;
reg [23:0] sum_all;
// 计算所有值得和
always@(posedge clk or negedge rst_n)
if(!rst_n)
sum_all<=24'b0;
else if(!valid)
sum_all<=24'b0;
else
sum_all<=sum_all+data;
always@(posedge clk or negedge rst_n)
if(!rst_n)
max<=16'b0;
else if(!valid)
max<=16'b0;
else if (data>max) max<=data;
always@(posedge clk or negedge rst_n)
if(!rst_n)
min<=16'b0;
else if(!valid)
min<=16'b0;
else if(data<min) min<=data;
//检测 valid 信号的下降沿,下降沿更新sum_out
reg valid_r;
always@(posedge clk or negedge rst_n)
if(!rst_n)
valid_r<=0;
else