基于FPGA的边沿检测
一、定义
边沿检测,即信号上升沿或者下降沿的检测。在检测到所需要的边沿后产生一个高电平的脉冲。
使用高频的时钟对信号进行采样,时钟频率至少要在信号最高频率的2倍以上。
二、原理
data_i | tri_1 | pos_edge | neg_edge |
1 | 0 | 1 | 0 |
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 |
由真值表可得:
pos_edge = (~tri_1) & data_i
neg_edge = (~data_i) & tri_1;
double_edge = data_i ^ tri_1;
rx_t是对rx打一拍存储的触发器,当某时刻rx低,rx_t高的时候,说明是下降沿。
电路图:感觉这图画错了
应该是我画的这样:
三、单触发器的verilog实现
//one trigger
module edge_detect(
input clk_i, rst_n_i, data_i, //输入端口
output posedge_o,negedge_o //输出端口
);//one regester
reg tri_1;always@(posedge clk_i or negedge rst_n_i)
beginif (! rst_n_i) //置位begintri_1 <= 1'b0;endelsebegintri_1 <= data_i; //触发器end
endassign negedge_o = tri_1 & (~data_i); //下降沿检测
assign posedge_o = (~tri_1) & data_i; //上升沿检测
endmodule
testbench:
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
结果分析:如果在一个时钟内输入信号发生变化,输出便会产生一个“尖峰”,跟随data_i,而不受时钟节拍约束。专业名词称为glitch。前一时刻通过D触发器已经统一到FPGA的时钟域,而当前时刻直接从外部输入,与FPGA整体逻辑电路不在同一时钟域。
23ps | 25 | |
data_i | 1 | 1 |
tri_1 | =15ns d_i=0 | =25ns d_i=1 |
pos_edge | 1 | 0 |
仿真:
四、双触发器的verilog实现
reg tri_1;
reg tri_2;
always@(posedge clk_i or negedge rst_n_i)
beginif (! rst_n_i) //置位begintri_1 <= 1'b0;tri_2 <= 1'b0;endelsebegintri_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; //双边沿检测
RTL电路:
仿真:
实质区别在于方案一是输入数据时钟域和tri_1所在的本地时钟域作用,而方案2tri_1将输入与时钟同步,保存了t0时刻的信号。利用CLK打两拍,实现了上一时刻信号和本时刻信号和FPGA整体逻辑电路统一到同一时钟域。
加几级触发器,消除抖动,使得信号更稳定,但是级数越多,延迟越高。
这里要加两级的触发器的另一个原因,因触发器跳转产生滞后信号只能在时钟的上升沿,而被检测信号tigger并不一定是在一级触发器跳转的时钟上升沿到来,这样一级触发器所产生的滞后信号与tigger相差就达不到一个CLK周期,所以产生的脉冲信号就小于一个CLK周期了,不利于后面电路对其的应用。
注意:
(1)增大CLK信号可以增强边沿检测的效率,但不能滤去跳变的杂波。
(2)减少CLK可以有效滤去跳变的杂波,但不能及时检测到边沿跳变。
(3)增加D触发器能更好的滤除杂波,寄存信号,但同时检测延时大。
组合逻辑还是时序逻辑?
其实就是差一拍的事。
1用时序逻辑
always@(posedge sys_clk ornegedge sys_rst_n)if(sys_rst_n ==1'b0)podge <=1'b0;else if((data)&&(~data_reg)) podge <=1'b1;else podge <=1'b0;
2用组合逻辑
如前文中的assign
边沿检测应用:
(1)将时钟边沿使能转换为边沿检测使能,使时钟同步化。
(2)捕获信号的突变(UART,SPI等信号使能突变)已遇到
(3)逻辑分析仪中信号的边沿检测。
参考资料:
https://blog.csdn.net/vivid117/article/details/90757350
https://blog.csdn.net/GOGOmusic/article/details/54667746
基于FPGA的边沿检测相关推荐
- 目标检测YOLO实战应用案例100讲-基于FPGA的目标检测硬件加速技术及其应用研究
目录 基于FPGA的目标检测加速器设计 目标检测算法与加速方法 2.1 YOLO v2算法
- FPGA实现边沿检测电路(上升沿、下降沿)
1.什么是边沿检测 边沿检测用于检测信号的上升沿或下降沿,通常用于使能信号的捕捉等场景. 2.采用1级触发器的边沿检测电路设计(以下降沿为例) 2.1.设计方法 设计波形图如下所示: 各信号说明如下: ...
- FPGA 学习-边沿检测技术
一.边沿检测 边沿检测,就是检测输入信号,或者FPGA内部逻辑信号的跳变,即上升沿或者下降沿的检测.在检测到所需要的边沿后产生一个高电平的脉冲.这在FPGA电路设计中相当的广泛. 没有复位的情况下,正 ...
- 基于FPGA和ABZ增量式编码器的转子位置检测
前言 最近在做一个使用FPGA和增量式编码器实时检测转子位置的小课题,第一次完成从硬件到软件的设计以及软硬件的联调,想做一个总结,鼓起勇气开始自己的第一次发帖.并且,在做这个课题的过程中,发现相 ...
- 基于FPGA视频图像处理系统设计
摘 要 本报告给出一个基于FPGA+两片DDR2组成的核心板.带有4路视频输入和VGA接口的开发板进行的视频图像采集和处理系统的设计.使用TW2867进行视频输入信号的编码,存储到DDR2中,通过 ...
- Matlab图像处理基础(2):区域处理,边沿检测
目录 0. 概要 2. 卷积和相关 2.1 卷积 2.2 相关 2.3 卷积与相关的关系 2.4 Matlab函数 2.5 2-D卷积/相关的分解 3. 高通滤波,edge detection 3.1 ...
- 【FPGA】基于OV5640的 图像边沿检测
目录 一 项目结构 1.1 设计思路 1.2 设计流程 二 接口设计 2.1 摄像头配置模块 2.2 IIC_master 模块 之后就进行数据采集 2.3 采集数据模块 2.4 灰度转化 2.5 ...
- 基于Sobel算法的边沿检测设计与实现
基于Sobel算法的边沿检测设计与实现 1. 边缘检测 2. 实战演练 2.1. matlab进行灰度图像生成 2.2. sobel_ctrl控制模块 2.3. vga显示模块 2.4. 顶层模块实例 ...
- FPGA设计心得(2)边沿检测的问题进一步说明(仿真中一定能得到上升沿的设计)
文章目录 背景 新检测方法 旧检测方法 改进旧检测方法 设计介绍 设计代码 仿真情况 仿真图 最后想提出的问题 同行邀请 工程分享 背景 关于边沿检测,写过的博文也很多,不下于4篇了,当然都是学习过程 ...
最新文章
- 架构师的第一阶段:准备做(Pre-Architecture)
- 【S操作】轻松优雅库移植解决方案,arduino库移植应对方案
- Word2Vec ——gensim实战教程
- 阿里、小米、美团或将入恒指,但这还远远不够!
- freeyellowe—book_剑桥少儿英语yellow book内容
- bmp文件格式_一次性解决CAD转换成BMP格式图片的问题
- vue:在router里面给页面加title
- Python_sklearn_回归
- python自动备份手机_python实现自动备份windows应用数据
- K-means聚类分析算法(二)
- Silverlight 4.0 Accordion 解决ScrollViewer 的问题
- 用浏览器做人脸检测,竟然这么简单?(附代码)
- 二进制补码以及为什么要使用补码
- 教育信息化2.0行动计划智慧教育大脑建设方案
- 计算机音乐制作旋律教学,旋律创作的基本规律 管窥小学音乐旋律创作教学
- 什么是PMI指数?PMI指数是什么意思? 如何计算PMI指数?
- 摩天轮社区_摩天轮:基于真实地理位置游戏
- arduino红外遥控控制小灯
- Web前端:什么是前端框架?
- 图形轨迹c语言,OpenCV识别图像上的线条轨迹
热门文章
- [电器]“与狼共舞”——张瑞敏(海尔集团董事局主席兼首席执行官)
- 访格兰特总统之墓与小男孩之墓
- 仿918回忆模特写真网整站数据库源码 zblog内核,
- 上云要有云驱动,中机助力企业上云|中机智库
- 转:多巴胺导致过程大于结果
- 【模拟赛】2018 蓝桥杯省赛 B 组模拟赛(五)
- siki学院 游戏热更新实战案例(基于xLua) 捕鱼达人 完整素材
- 成功解决[Error] reference to ‘xx’ is ambiguous
- OpenCV实现运动模糊图像的模拟
- html5插入video视频文件,为什么有声音不显示画面