FPGA基础入门篇(四) 边沿检测电路

FPGA基础入门篇(四)——边沿检测电路

一、边沿检测

边沿检测,就是检测输入信号,或者FPGA内部逻辑信号的跳变,即上升沿或者下降沿的检测。在检测到所需要的边沿后产生一个高电平的脉冲。这在FPGA电路设计中相当的广泛。
没有复位的情况下,正常的工作流程如下:

(1)D触发器经过时钟clk的触发,输出trigger信号,保存了t0时刻的信号。
(2)同时由trigger通过非门输出信号,保留了当前时刻t1的触发信号
(3)经过与门输出信号pos_edge,neg_edge

a) 只有t0时刻为高,且t1时候为低的时候,与门输出高,此时为下降沿。

b) 只有to时候为低,且t1时候为高的时候,与门输出高,此时为上升沿。
当然,在复位的时刻,DFF被复位,无法检测触发信号。

二、采用一个触发器的边沿检测电路设计:
  1. verilog代码实现:
//one trigger
module edge_detect(
input clk_i, rst_n_i, data_i, //输入端口
output posedge_o,negedge_o      //输出端口
);

//one regester
reg tri_1;

[email protected](posedge clk_i or negedge rst_n_i)
begin
    if (! rst_n_i)          //置位
    begin
        tri_1 <= 1'b0;
    end
    else
    begin
        tri_1 <= data_i;    //触发器
    end
end

assign negedge_o = tri_1 & (~data_i);       //下降沿检测
assign posedge_o = (~tri_1) & data_i;       //上升沿检测
endmodule
  1. RTL电路
    用vivado RTL分析电路
  2. 仿真代码及结果
module tb_test(
    );

reg clk_i,rst_n_i,data_i;
wire posedge_o, negedge_o;

//模块调用
edge_detect u1(
.clk_i(clk_i),
.rst_n_i(rst_n_i),
.data_i(data_i),
.posedge_o(posedge_o),
.negedge_o(negedge_o)
);

//initial
initial begin
clk_i = 0;
rst_n_i = 0;
#10
rst_n_i = 1;
data_i = 0;
#13
data_i = 1;     //上升沿
#20
data_i = 0;     //下降沿
#15
data_i = 1;     //上升沿
#10
data_i = 0;     //下降沿
end

//clk 信号
always #5 clk_i = ~clk_i;

endmodule

仿真结果:

分析:在第一次上升沿时,由于上升沿离下个时钟上升沿间隔短,结果会产生“毛刺”

下面利用多个触发器可以延迟n-1个触发器的周期时间保证至少有一个时钟周期。
三、采用多个触发器的边沿检测电路设计:
  1. verilog 语言实现(两个触发器及双边沿检测)
//two trigger
module edge_detect(
input clk_i, rst_n_i, data_i,
output posedge_o,negedge_o,double_edge_o
);

//two regester
reg tri_1;
reg tri_2;

[email protected](posedge clk_i or negedge rst_n_i)
begin
    if (! rst_n_i)          //置位
    begin
        tri_1 <= 1'b0;
        tri_2 <= 1'b0;
    end
    else
    begin
        tri_1 <= data_i;
        tri_2 <= tri_1;     二级触发器
    end
end

assign negedge_o = tri_2 & (~tri_1);        //下降沿检测
assign posedge_o = (~tri_2) & tri_1;        //上升沿检测
assign double_edge_o = tri_1 ^ tri_2;       //双边沿检测

endmodule
  1. RTL电路
    用vivado RTL分析电路
  2. 仿真结果:

    tri_1将输入与时钟同步,tri_2延迟一个时钟周期。级数越多,延迟越高。

    可以看到边沿检测结果都出现在下一个时钟周期
    四、边沿检测应用

    边沿检测技术在项目应用中,非常低广泛。如要有效捕获信号跳变沿,边沿检测技术的应用是必不可少的。
    有如下几个方面

(1)将时钟边沿使能转换为边沿检测使能,使时钟同步化。

(2)捕获信号的突变(UART,SPI等信号使能突变)

(3)逻辑分析仪中信号的边沿检测。

五、实现指标及存在缺陷

没有十全十美的东西,也没有十全十美的电路、代码;边沿检测技术亦如此。有如下缺陷:

(1)增大CLK信号可以增强边沿检测的效率,但不能滤去跳变的杂波。

(2)减少CLK可以有效滤去跳变的杂波,但不能及时检测到边沿跳变。

(3)增加DFF能更好的滤除杂波,寄存信号,但同时检测延时大。

参考博文: https://blog.csdn.net/u011412586/article/details/9971455
https://www.cnblogs.com/crazybingo/archive/2011/07/26/2117149.html

原文地址:https://www.cnblogs.com/weivid/p/10975268.html

时间: 2024-10-13 08:55:49

FPGA基础入门篇(四) 边沿检测电路的相关文章

SQLAlchemy 教程 —— 基础入门篇

SQLAlchemy 教程 -- 基础入门篇 一.课程简介 1.1 实验内容 本课程带领大家使用 SQLAlchemy 连接 MySQL 数据库,创建一个博客应用所需要的数据表,并介绍了使用 SQLAlchemy 进行简单了 CURD 操作及使用 Faker 生成测试数据. 1.2课程知识点 学会用 SQLALchemy 连接数据库(MySQL, SQLite, PostgreSQL), 创建数据表: 掌握表数据之间一对一,一对多及多对多的关系并能转化为对应 SQLAlchemy 描述: 掌握使

Linux及Arm-Linux程序开发笔记(零基础入门篇)

Linux及Arm-Linux程序开发笔记(零基础入门篇)  作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/beer/archive/2011/05/05/2037449.html 目录 一.Arm-Linux程序开发平台简要介绍... 3 1.1程序开发所需系统及开发语言... 3 1.2系统平台搭建方式... 4 二.Linux开发平台搭建... 5 2.1安装虚拟工作站... 5 2.2安装Linux虚拟

verilog 之数字电路 边沿检测电路

由代码可知:此边沿检测电路是由两个触发器级联而成,sign_c_r 输出是sign_c_r2的输入.并且有异步复位端没有使能端.最后输出:由触发器的输出取反和直接输出相与.如下的RTL图.

【SSRS】入门篇(四) -- 向报表添加数据

原文:[SSRS]入门篇(四) -- 向报表添加数据 定义好数据集后 [SSRS]入门篇(三) -- 为报表定义数据集 ,就可以开始设计报表了,将要显示在报表的字段.文本框.图像和其他项从工具箱拖放到报表设计图画上,如下图: 1.打开在[SSRS]入门篇(一) -- 创建SSRS项目 建立的报表Sales Orders.rdl: 2.从工具箱把"表"拖放到"设计图画": 注:如果左边没有显示工具箱的话,可以通过"菜单 -> 视图 -> 工具箱&

触发器链的应用——同步器与边沿检测电路

主要内容 多级延迟触发器电路 同步器 边沿检测电路 与移位寄存器的区别 1.多级延迟触发器电路 定义:是多个触发器串联组合,每进行一次传输,数据就延迟一个周期.可以通过增加触发器的数量来决定延时的拍数. module DFF_N #(parameter N=3)( input clk, input reset, input [N-1:0] D, output reg [N-1:0] Q ); reg [N-1:0] d0; reg [N-1:0] d1; always @(posedge clk

SVG矢量图形课程基础入门篇

SVG矢量图形基础入门(一) SVG完整名称是Scalable Vector Graphics,基于XML的互联网图形标准,本课程将介绍SVG的基本相关使用 课程链接:http://www.gbtags.com/gb/gbliblist/66.htm SVG矢量图形基础入门(二) SVG完整名称是Scalable Vector Graphics,基于XML的互联网图形标准,本课程将介绍SVG的基本相关使用 课程链接:http://www.gbtags.com/gb/gbliblist/76.ht

FPGA基础设计(四):IIC协议

很多数字传感器.数字控制的芯片(DDS.串行ADC.串行DAC)都是通过IIC总线来和控制器通信的.不过IIC协议仍然是一种慢速的通信方式,标准IIC速率为100kbit/s,快速模式速率为400kbit/s.本文致力于讲述如何用计数器控制和分频时钟控制两种方式完成IIC的读写操作. IIC协议 ??IIC协议是一种多机通讯,由SDA数据线和SCL时钟线构成串行总线,所有的IIC设备都可以挂载到总线上,但每个设备都有唯一的设备读地址和设备写地址.在使用IIC作为数字接口的芯片datasheet中

FPGA基础知识(四)锁存器、触发器、寄存器和缓冲器的区别

一.锁存器锁存器(latch)---对脉冲电平敏感,在时钟脉冲的电平作用下改变状态锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,仅当锁存器处于使能状态时,输出才会随着数据输入发生变化.锁存器不同于触发器,它不在锁存数据时,输出端的信号随输入信号变化,就像信号通过一个缓冲器一样:一旦锁存信号起锁存作用,则数据被锁住,输入信号不起作用.锁存器也称为透明锁存器,指的是不锁存时输出对于输入是透明的.锁存器(latch):我听过的最多的就是它是电平触发的,呵呵.锁存器是

.NET ORM 的 “SOD蜜”--零基础入门篇

PDF.NET SOD框架不仅仅是一个ORM,但是它的ORM功能是独具特色的,我在博客中已经多次介绍,但都是原理性的,可能不少初学的朋友还是觉得复杂,其实,SOD的ORM是很简单的.下面我们就采用流行的 Code First的方式,一步步来了解下. 一.准备工作 1.1,添加SOD包引用 首先建立一个控制台项目,并使用程序包管理器添加PDF.NET SOD的程序引用: PM> Install-Package PDF.NET 更多详细使用信息说明,请参考nuget 网站说明 https://www