基于Verilog的边沿检测技术

基于Verilog的边沿检测技术

1、前言

边沿检测,顾名思义是对某一信号上升沿或下降沿的检测,产生出需要的标志信号或使能信号。
常用案例如,按键输入检测电路中,按键按下时输入信号 key 由高电平变为低电平,按键抬起时由低电平变为高电平。应用边沿检测,即可确定电频的变换时刻。
边沿检测电路的原理为:引入一个或多个延时一个周期的信号,当检测到 1 个上升沿或下降沿时,就会出现在同时刻,同时存在高电平和低电平的情况,对信号及延时信号取并,就会产生对应的边沿输出信号 edge_pos、edge_neg 分别输出 1个脉冲(即一个时钟周期的高电平)。
由于输入的信号为一个连续值,我们需要通过时钟进行采样。根据采样定理,采样时钟的频率需要至少为被采信号频率的 2 倍。下面以下降沿进行分析。

2、实例分析

分析:在边沿检测的过程中,通过来寄存输入值 s , 1 个寄存器 reg 寄存器输入 s 延时一个周期的值 s_r ,在时间T内 s 、 s_r 分别为低电平和高电平,证明T时间内存在输入 s 的一个下降沿。
在第6个时钟周期,即存在输入 s 的一个上升沿。
时序图
存在问题:输入信号为异步输入,当 s 信号由高变低的时刻发生在趋近时钟上升沿附近时,会导致 s 变化的时刻与 s_r 变化的时刻的时间间隔 T 很小,导致沿检测输出信号脉冲宽度很窄,系统可能会不稳定。
解决方法:将异步输入转化为同步信号,使用一级寄存器对输入信号进行寄存得到同步信号,再通过一级寄存器延迟一个节拍对输入信号的高低电平变化进行判断。
通过这种方法可以将下降沿检测输出脉冲保持 1 个采样频率的宽度,使得输出信号十分理想。
以下为特权同学对边沿检测处理的一段程序:
always @ (posedge clk or negedge rst_n) begin
if(!rst_n) begin
rs232_rx0 <= 1’b0;
rs232_rx1 <= 1’b0;
rs232_rx2 <= 1’b0;
rs232_rx3 <= 1’b0;
end
else begin
rs232_rx0 <= rs232_rx;
rs232_rx1 <= rs232_rx0;
rs232_rx2 <= rs232_rx1;
rs232_rx3 <= rs232_rx2;
end
end
assign neg_rs232_rx = rs232_rx3 & rs232_rx2 & ~rs232_rx1 & ~rs232_rx0;
这里引入了四个延时寄存器,这样做可以滤除20-40ns的毛刺。
易得,当延时信号rs232_rx0,rs232_rx1为0,且延时信号rs232_rx2,rs232_rx3为1,neg_rs232_rx为1。此时可以判断此时rs232_rx信号存在一个下降沿。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值