FPGA边缘检测(上升沿、下降沿、双边沿)的三种实现方案

2023-11-03

边缘检测在数字电路设计中非常常见,通常包含上升沿检测(posedge)下降沿检测(negedge)、以及双边沿检测(double edge)

边缘检测虽然实现非常简单,但有一些值得注意的地方,在设计中一不留神可能就会出现边沿漏检的情况。下面结合代码、电路图以及仿真时序,来扒一扒里面的坑。

第一种

先来看一种,这是最常见的一种边沿检测设计方案,但其中存在很大的隐患,非常容易漏检:

module edge_detect1(
input	clk,
input	signal,
output	pe,		//上升沿
output	ne,		//下降沿
output	de		//双边沿
);

reg reg1;

always@(posedge clk) begin
	reg1	<= signal;
end

assign pe	= (~reg1) & signal;
assign ne	= reg1 & (~signal);
assign de	= pe | ne; // 或 reg1 ^ signal

endmodule

对应的电路结构如下

在这里插入图片描述

该结构的边沿检测模块,仅使用到1个寄存器,其边沿输出通过信号 signal 与前一时刻的 signal 做逻辑运算得到,正因此,其一旦signal信号发生变动,其边沿信号也会随之改变,其优点是边沿信号响应迅速,而缺点是边沿信号高电平时间小于一个 clk 周期,因此容易出现漏检。其时序仿真如下

在这里插入图片描述

第二种

既然第一种边沿检测模块的问题出在边沿信号随 signal 信号实时改变,因此我们很容易想到解决的方法:在信号输出端口添加寄存器,从而使边沿信号高电平维持一个时钟周期。

module edge_detect2(
input		clk,
input		signal,
output	reg	pe,		//上升沿
output	reg	ne,		//下降沿
output	reg	de		//双边沿
);

reg reg1;

always@(posedge clk) begin
	reg1	<= signal;
	
	pe		<= (~reg1) & signal;
	ne		<= reg1 & (~signal);
	de		<= reg1 ^ signal;
end

endmodule

在这里插入图片描述

通过在输出端口添加寄存器,可以有效削弱输出信号对输入信号的依赖,从而提高系统的稳定性,时序仿真如下

在这里插入图片描述

可以看到,其边沿信号响应会略有迟滞,迟滞时间小于一个时钟周期,而边沿信号高电平时间将维持一个时钟周期。

第三种

第二种边沿检测方案尽管解决了边沿信号高电平时间过短的问题,但需要消耗4个寄存器,我们能不能减少寄存器,而达到同样的效果呢?我们第二种方案维持信号的方式是直接寄存输出信号的值,但实际上我们也可以通过寄存 signal 信号达到信号保持的目的。

module edge_detect3(
input	clk,
input	signal,
output	pe,		//上升沿
output	ne,		//下降沿
output	de		//双边沿
);

reg reg1,reg_2;

always@(posedge clk) begin
	reg1	<= signal;
	reg2	<= reg1;
end

assign pe	= reg1 & (~reg2);
assign ne	= (~reg1) & reg2;
assign de	= reg1 ^ reg2;

endmodule

该方案中,对 signal 进行连续两次寄存,两寄存器 reg1、reg2 相串联,而边沿信号通过 reg1 和 reg2 逻辑运算得到。

在这里插入图片描述

在这里插入图片描述

此种方案下,其逻辑功能与第二种方案完全一致,但只需要两个寄存器,在资源受限的情况下可以采用该方案,从而达到节省逻辑资源的目的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPGA边缘检测(上升沿、下降沿、双边沿)的三种实现方案 的相关文章

  • STM32【复习串口】

    串口复习加深理解笔记 杂谈 USART FLAG TXE发送缓冲区空标志 说明可以往数据寄存器写入数据了 但并不代码数据发送完成了 USART FLAG TC发送完成标志 这个才是代表USART在缓冲区的数据发送完成了 即从机接收到了数据
  • 数字IC手撕代码-兆易创新笔试真题

    前言 本专栏旨在记录高频笔面试手撕代码题 以备数字前端秋招 本专栏所有文章提供原理分析 代码及波形 所有代码均经过本人验证 目录如下 1 数字IC手撕代码 分频器 任意偶数分频 2 数字IC手撕代码 分频器 任意奇数分频 3 数字IC手撕代
  • DDR的VTT有源端接和无源端接(slua886a笔记)

    DDR的VTT有源端接和无源端接 slua886a笔记 背景 对于DDR的VTT端接 一直有说法是有源端接可降低功耗 之前一直没仔细理解其中原因 现在找了些相关的资料来介绍和对比有源和无源端接 理解有源端接的优点和降低功耗的原理 主要基于读
  • modelsim 关联 notepad++

    modelsim 控制窗口敲入 1 proc external editor filename linenumber exec I notepad notepad exe filename 2 set PrefSource altEdito
  • HDLBits — Verilog Practice(每日一题)

    HDLBits Verilog Practice 每日一题 一 Getting Started 1 Getting Started 一 Getting Started 1 Getting Started 问题描述 Build a circu
  • 紫光同创 FPGA 开发跳坑指南(三)—— 联合 Modelsim 仿真

    Modelsim 是 FPGA 开发中重要的 EDA 设计仿真工具 主要用于验证数字电路设计是否正确 紫光 Pango Design Suite 开发套件支持联合 Modelsim 仿真 这里作简要的介绍 添加仿真库 方法一 打开 Pang
  • Matlab 高斯信道下QPSK通带通信系统的简单仿真

    1 原理 2 仿真 3 总结反思 4 参考资料 1 原理 QPSK的具体内容请参考百度 QPSK的调制jie框图大致如下 QPSK信号可以采用正交调制的方式产生 如第一张图片的左半部分 I路信号与cos 信号相乘 Q 路信号与sin信号相乘
  • DEBUG:Generate Bitstream失败

    问题 约束失败 解决 确保IO初始化引脚正确 和选择合适的电平
  • FPGA零基础学习之Vivado-UART驱动教程

    FPGA零基础学习之Vivado UART驱动教程 本系列将带来FPGA的系统性学习 从最基本的数字电路基础开始 最详细操作步骤 最直白的言语描述 手把手的 傻瓜式 讲解 让电子 信息 通信类专业学生 初入职场小白及打算进阶提升的职业开发者
  • 用Vscode编辑verilog代码配置

    这篇教程感觉很详细了 我这里分享一下vscode和插件的安装包链接 都是官网下载的 放心食用 用VSCode编辑verilog代码 iverilog编译 自动例化 自动补全 自动格式化等常用插件 链接 https pan baidu com
  • 【Xilinx DDR3 MIG】Xilinx FPGA DDR3读写实验相关用户接口引脚解释

    目录 DDR3读写实验 实验框图 时钟模块 DDR3读写及LED指示模块 MIG IP核 用户接口解释
  • IC数字后端

    在 innovus 里面 有时候我们需要控制 tie cell 的 fanout 和 net length 来避免 tie cell 可能出现 max transition 或者 max fanout 的违例 一般来说 只要 fanout
  • TestBench编写_激励产生

    TestBench编写 激励产生 TestBench编写 激励产生 基本背景 读取函数介绍 a fopen函数使用 b fread函数使用 c fclose函数使用 实际使用 TestBench编写 激励产生 基本背景 最近遇到项目中需要对
  • FPGA_时钟显示(时钟可调)

    1 实验说明 在数码管显示数据的基础上 让六位数码管显示数字时钟 并且通过按键可以对时间进行修改 实验目标 六位数码管分别显示时间的时分秒 且通过按键可实现加减调整时间及清零功能 key1 切换键 选择待调整的时间单位 时 分 秒 key2
  • 【FPGA】面试问题及答案整理合集

    面试问题及答案整理合集 1 硬件描述语言和软件编程语言的区别 2 FPGA选型问题 3 建立时间和保持时间问题 3 亚稳态问题 4 竞争和冒险问题 5 乒乓操作问题 6 同步和异步逻辑电路 7 同步复位和异步复位 8 MOORE 与 MEE
  • 【DDR3 控制器设计】(3)DDR3 的写操作设计

    写在前面 本系列为 DDR3 控制器设计总结 此系列包含 DDR3 控制器相关设计 认识 MIG 初始化 读写操作 FIFO 接口等 通过此系列的学习可以加深对 DDR3 读写时序的理解以及 FIFO 接口设计等 附上汇总博客直达链接 DD
  • 蓝桥杯真题:迷宫

    目录 题目描述 运行限制 dfs bfs 结果 题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 下图给出了一个迷宫的平面图 其中标记为 11 的为障碍 标记为 00 的为可以通行的地方 010000 000
  • 基于FPGA的AHT10传感器温湿度读取

    文章目录 一 系统框架 二 i2c接口 三 i2c控制模块 状态机设计 状态转移图 START INIT CHECK INIT IDLE TRIGGER WAIT READ 代码 四 数据处理模块 串口 代码 五 仿真 testbench设
  • 【FPGA多周期时序约束详解】- 解读FPGA多周期时序约束的全过程

    FPGA多周期时序约束详解 解读FPGA多周期时序约束的全过程 FPGA作为数字电路设计的常见工具 其设计中必然会遇到时序约束的问题 而多周期时序约束更是FPGA设计中不可避免的难点之一 本文将详细介绍FPGA多周期时序约束的全过程 并结合
  • Matlab图像处理系列——图像复原之噪声模型仿真

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二

随机推荐

  • 【Vue/element】 el-table实现表格动态新增/插入/删除 表格行,可编辑单元格

    el table实现表格动态新增 插入 删除 表格行 可编辑单元格 效果如下 点击 新增一行 可以在表格最后新增一行 单元格内容可编辑 点击绿色 按钮 可在指定行的后面插入一行 点击红色 按钮 可以删除指定行 原理 表格el table是通
  • 值得收藏的30道Python练手题(附详解)

    今天给大家分享30道Python练习题 建议大家先独立思考一下解题思路 再查看答案 文末附python学习资料 1 已知一个字符串为 hello world yoyo 如何得到一个队列 hello world yoyo 使用 split 函
  • 指针数组与数组指针、函数指针与函数指针数组

    一 指针数组 是一个存放指针的数组 eg int arr 优先级高 所以arr首先是一个数组 里面存放的是一个个指针 int arr 数组中放入二级指针 二 数组指针 是一个指向数组的指针 eg int arr 10 指向int 10 的指
  • Mybatis:in在where查询条件中的写法(mysql和pgsql)

    在mybatis使用过程中 有时需要传递一个包含多个值的参数 用in来查询这些值范围内的数据 如fid是一个Int类型字段 现在需要查询1 2 3 这三个fid的记录 直接将 1 2 3作为一个入参传递进来时 需要做些修改才能正确实现In的
  • 哪些行业需要重点防御ddos攻击

    DDoS攻击是网络安全领域最为常见 危害性十分庞大的攻击方式之一 各大行业都很容 易遭受DDoS攻击 因此受到了各个企业的广泛关注 那么到底什么是DDoS攻击 哪些行业最 需要预防DDoS攻击 我们一起来看看吧 到底什么是DDoS攻击 DD
  • 类什么时候被加载

    在Java中 类会在第一次使用时被加载 而加载类的时机取决于类的加载触发条件 Java类的加载过程是按需加载的 这意味着只有在需要使用类的时候 类才会被加载到内存中 类加载的触发条件包括以下情况 创建类的实例 当你使用 new 关键字创建一
  • 组合优化

    组合优化 MATLAB实现GA BP和PSO BP多输入单输出预测 目录 组合优化 MATLAB实现GA BP和PSO BP多输入单输出预测 基本介绍 程序设计 GA BP PSO BP 参考资料 基本介绍 MATLAB实现GA BP和PS
  • Android混合开发详解

    1 Android加载HTML页面 1 1 WebView简介与使用 Webview的应用场景 WebView控件功能强大 除了具有一般View的属性和设置外 还可以对url请求 页面加载 渲染 页面交互进行强大的处理 主要用于html页面
  • 淘宝购物车测试用例

    功能 购物车界面的所有跳转链接都可以点的动 点击店铺名可以跳转到店铺界面 点击商品可以跳转到商品界面 如果店铺的 table 区域中有 凑单 字样 跳转到凑单界面 如果店铺有 领券 字样 可以弹出领券界面 如果不选择任何商品就进行结算 则显
  • C语言可以开发哪些项目?

    C语言是我们大多数人的编程入门语言 对其也再熟悉不过了 不过很多初学者在学习的过程中难免会出现迷茫 比如 不知道C语言可以开发哪些项目 可以应用在哪些实际的开发中 这些迷茫也导致了我们在学习的过程中不知道如何学 学什么 所以 总结这个列表
  • 第147篇 笔记-预言机(Oracle)

    定义 区块链预言机是将区块链连接到外部系统的实体 从而使智能合约能够基于现实世界的输入和输出执行 预言机为分散的 Web3 生态系统提供了一种访问现有数据源 遗留系统和高级计算的方式 去中心化预言机网络 DON 支持创建混合智能合约 其中链
  • Sentinel服务熔断和流控

    简介 Sentinel 随着微服务的流行 服务和服务之间的稳定性变得越来越重要 Sentinel 是面向分布式服务架构的流量控制组件 主要以流量为切入点 从限流 流量整形 熔断降级 系统负载保护 热点防护等多个维度来帮助开发者保障微服务的稳
  • Spring 框架——利用HandlerExceptionResolver实现全局异常捕获

    一 需求描述 因为在项目中 我们不可否认的会出现异常 而且这些异常并没有进行捕获 经常出现的bug如空指针异常等等 在之前的项目中 如果我们没有进行任何配置 那么容器会自动打印错误的信息 如果tomcat的404页面 400页面等等 如果我
  • kettle(五):下载 Sakila数据库

    Step1 下载 Sakila数据库 参考网址 https blog csdn net geekcoder article details 8988052 下载地址 https dev mysql com doc index other h
  • 基于arduino实现的智能窗

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 器件 二 代码 1 引入库 成果图 初次检测 https img blog csdnimg cn 921efe361a3043acaa08048f2ca0
  • weex 可用样式,与唯一布局方式flex

    Weex 布局模型基于 CSS Flexbox Flexbox 是默认且唯一的布局模型 所以你不需要手动为元素添加 display flex 属性 对于刚开始接触 weex想把它当html5 css3使用的我 在没看文档的情况下也是蒙蔽了
  • 深度学习自学第二周:基于keras实现猫狗大战

    目录 一 初步实现 一 选取训练集 测试集 验证集 二 构建神经网络模型 三 数据预处理 四 绘制损失曲线和精度曲线 二 优化模型 三 数据测试 结合之前学习的知识 现在可以进行猫狗大战的实现了 数据集是采用猫狗大战kaggle竞赛提供的2
  • 三句话,让Ai帮你画18万张图

    本文介绍Stable Diffusion的快速上手 本地部署 以及更多有趣的玩法展示 在 DALL E 2 和 Imagen 之后 AI绘图领域又一个热乎的深度学习模型出炉 Stable Diffusion 8月份发布的 Stable Di
  • Python 异常的传递性

    视频版教程 Python3零基础7天入门实战视频教程 异常是具有传递性的 假如方法A调用方法B 方法B调用方法C 如果方法C代码出现异常 并且没有处理异常 则会传递给方法B 同理 如果B依然没有处理异常 则最终传递给方法A def funC
  • FPGA边缘检测(上升沿、下降沿、双边沿)的三种实现方案

    边缘检测在数字电路设计中非常常见 通常包含上升沿检测 posedge 下降沿检测 negedge 以及双边沿检测 double edge 边缘检测虽然实现非常简单 但有一些值得注意的地方 在设计中一不留神可能就会出现边沿漏检的情况 下面结合