[Verilog HDL] verilog去除毛刺的方法

[复制链接]
 楼主| gaochy1126 发表于 2023-2-18 15:39 | 显示全部楼层 |阅读模式
去除毛刺的方法除了用纯硬件的方法(串电阻并电容),还常用软硬件的方式,数字电路的方式
input ain; //输入信号
reg[3:0] ainr; //输入信号缓存
//输入信号打4拍
always @(posedge clk or negedge rst_n)
if(!rst_n) ainr <= 4'd0;
else ainr <= {ainr[2:0],ain};
//输入信号上升沿检测,高电平有效
wire pos_ain = ~ainr[3] & ~ainr[2] & ainr[1] & ainr[0];
//通常只要两个信号就行,即wire pos_ain = ~ainr[2] & ainr[1] ;。
//这里用了4个信号就是多次采样滤波的效果
//输入信号下降沿检测,高电平有效
wire neg_ain = ainr[3] & ainr[2] & ~ainr[1] & ~ainr[0];
//通常只要两个信号就行,即wire neg_ain = ainr[2] & ~ainr[1] ;。
//这里用了4个信号就是多次采样滤波的效果
//若该输入信号主要关注其高脉冲,那么可以做以下滤波
wire high_ain = ainr[1] & ainr[0];
//两个信号相与通常可以滤除1个clk的毛刺,相应的,3个信号相与可以滤除2个clk的毛刺
//若该输入信号主要关注其低脉冲,那么可以做以下滤波
wire low_ain = ainr[1] | ainr[0];
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:这个社会混好的两种人:一是有权有势,二是没脸没皮的。

1148

主题

11651

帖子

26

粉丝
快速回复 在线客服 返回列表 返回顶部