欲对AD采样数据进行求平均值滤波。
思路是这样的:
采样255次数据,对255次数据求平均.
其中求平均值是这样写的:
if(cnt == 8'd255)
begin
for(i=8'd0;i<8'd255;i= i+1'b1)
sum <= sum+databuf[i];//阻塞赋值
dataout <= sum/255;
end
发现数据会从0到255跳变。
之后改成这样的:
if(cnt == 8'd255)
begin
for(i=8'd0;i<8'd255;i= i+1'b1)
sum = sum+databuf[i];非阻塞赋值
dataout <= sum/255;
end
这时,数据跳变的更快了,而且显示的是错误的结果。完全达不到滤波效果。
想问问,Verilog里边求平均值,怎么求?
整个机算是这样的:
//对数据进行滤波
//方法:求平均值
reg [7:0] databuf1;
reg [7:0] dataout;
reg [7:0] databuf[254:0];//定义一段内存
reg [15:0] sum;
integer i;
reg [7:0] cnt;
always @(posedge convert,negedge sys_rstn)
begin
if(!sys_rstn)
begin
sum<=0;
cnt <= 8'b0;
for(i=8'd0;i<8'd255;i= i+1'b1)
begin
databuf[i] = 7'b0;
end
end
else
begin
databuf[cnt] <= read_data;
cnt <= cnt+1'b1;
if(cnt == 8'd255)
begin
for(i=8'd0;i<8'd255;i= i+1'b1)
sum = sum+databuf[i];
dataout <= sum/255;
end
end
end
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |