FPGA学习-边沿检测技术

描述

所谓边沿检测,就是检测输入信号即上升沿或者下降沿的检测。
边沿检测的电路很好实现:上一时刻为低电平,而当前时刻为高电平,此时就为上升沿;上一时刻为高电平,而当前时刻为低电平,此时就为上升沿。
通过边沿采样技术实现上升沿捕获进而实现外部信号的上升沿触发。

边沿检测电路的实现方法;

1、always @ (posedge signal)

FPGA不便于处理此类触发信号,除非外部输入信号作为全局时钟使用。另外众所周知由于电路不能能避免抖动现象,所以用这个检测方法是明显不合理的。

2、一级D触发器实现; 我们先看下代码,

module shizhong
(
    input               clk,
    input               rst_n,
    input               spi_cs,     
    output   mcu_write_done 
);
reg spi_cs_r0;      
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        begin
        spi_cs_r0 <= 1; 
        end
    else
        begin
        spi_cs_r0 <= spi_cs;        
        end
end

assign  mcu_write_done = (~spi_cs_r0 & spi_cs) ? 1'b1 : 1'b0;  //posedge

endmodule 

代码综合后RTL视图如下:
FPGA
正常工作,没有复位的情况下,工作流程如下:
(1)D触发器经过时钟clk的触发,输出spi_cs信号,保存了t0时刻的信号。
(2)同时由spi_cs直接输出到与门,保留了当前时刻t1的触发信号
(3)经过与门输出信号pos_edge,neg_edge
a) 只有t0时刻为高,且t1时候为低的时候,与门输出高,此时为下降沿。
b) 只有to时候为低,且t1时候为高的时候,与门输出高,此时为上升沿。

一级D触发器在寄存器比较时,前一时刻通过D触发器已经统一到FPGA的时钟域,而当前时刻直接从外部输入,与FPGA整体逻辑电路不在同一时钟域,为提高系统的稳定性我们可以采用第三种方法即二级D触发器。

3、二级D触发器;我们仍然先看代码:

module shizhong
(
    input               clk,
    input               rst_n,
    input               spi_cs, 
    output   mcu_write_done 
);
reg spi_cs_r0,      spi_cs_r1;      
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        begin
        spi_cs_r0 <= 1; spi_cs_r1 <= 1;
        end
    else
        begin
        spi_cs_r0 <= spi_cs; spi_cs_r1 <= spi_cs_r0;
        end
end

assign  mcu_write_done = (~spi_cs_r1 & spi_cs_r0) ? 1'b1 : 1'b0;

endmodule 

代码综合后RTL视图如下:
FPGA
正常工作,没有复位的情况下,工作流程如下:
(1)一级D触发器经过时钟clk的触发,输出当前spi_cs信号,保存了t0时刻的信号。送往与门。
(2)二级D触发器经过时钟clk的触发,输出上一时刻spi_cs信号,保存了t1时刻的信号。通过非们送往与门。
(3)经过与门输出信号pos_edge,neg_edge
a) 只有t0时刻为高,且t1时候为低的时候,与门输出高,此时为下降沿。
b) 只有to时候为低,且t1时候为高的时候,与门输出高,此时为上升沿。
利用CLK打两拍,实现了上一时刻信号和本时刻信号和FPGA整体逻辑电路统一到同一时钟域。
这里要加两级的触发器的另一个原因,因触发器跳转产生滞后信号只能在时钟的上升沿,而被检测信号tigger并不一定是在一级触发器跳转的时钟上升沿到来,这样一级触发器所产生的滞后信号与tigger相差就达不到一个CLK周期,所以产生的脉冲信号就小于一个CLK周期了,不利于后面电路对其的应用。
边沿检测应用:
(1)将时钟边沿使能转换为边沿检测使能,使时钟同步化。
(2)捕获信号的突变(UART,SPI等信号使能突变)
(3)逻辑分析仪中信号的边沿检测。
实现指标及存在缺陷:
(1)增大CLK信号可以增强边沿检测的效率,但不能滤去跳变的杂波。
(2)减少CLK可以有效滤去跳变的杂波,但不能及时检测到边沿跳变。
(3)增加DFF能更好的滤除杂波,寄存信号,但同时检测延时大。

FPGA





精彩推荐



至芯科技12年不忘初心、再度起航11月12日北京中心FPGA工程师就业班开课、线上线下多维教学、欢迎咨询!
FPGA学习-CRC校验
FPGA学习-你真的理解IIC吗?
扫码加微信邀请您加入FPGA学习交流群



FPGA
FPGA


欢迎加入至芯科技FPGA微信学习交流群,这里有一群优秀的FPGA工程师、学生、老师、这里FPGA技术交流学习氛围浓厚、相互分享、相互帮助、叫上小伙伴一起加入吧!


点个在看你最好看





原文标题:FPGA学习-边沿检测技术

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分