gaochy1126 发表于 2023-2-18 15:39

verilog去除毛刺的方法

去除毛刺的方法除了用纯硬件的方法(串电阻并电容),还常用软硬件的方式,数字电路的方式
input ain; //输入信号
reg ainr; //输入信号缓存
//输入信号打4拍
always @(posedge clk or negedge rst_n)
if(!rst_n) ainr <= 4'd0;
else ainr <= {ainr,ain};
//输入信号上升沿检测,高电平有效
wire pos_ain = ~ainr & ~ainr & ainr & ainr;
//通常只要两个信号就行,即wire pos_ain = ~ainr & ainr ;。
//这里用了4个信号就是多次采样滤波的效果
//输入信号下降沿检测,高电平有效
wire neg_ain = ainr & ainr & ~ainr & ~ainr;
//通常只要两个信号就行,即wire neg_ain = ainr & ~ainr ;。
//这里用了4个信号就是多次采样滤波的效果
//若该输入信号主要关注其高脉冲,那么可以做以下滤波
wire high_ain = ainr & ainr;
//两个信号相与通常可以滤除1个clk的毛刺,相应的,3个信号相与可以滤除2个clk的毛刺
//若该输入信号主要关注其低脉冲,那么可以做以下滤波
wire low_ain = ainr | ainr;
页: [1]
查看完整版本: verilog去除毛刺的方法