【IC设计】边沿检测电路(上升沿、下降沿、双沿,附带源代码和仿真波形)

文章目录

  • 边沿检测电路的概念
  • 上升沿检测电路
  • 下降沿检测电路
  • 双边沿检测电路
  • 代码和仿真
    • RTL代码
    • Testbench代码
    • 仿真波形
  • 参考资料

边沿检测电路的概念

边沿检测指的是检测一个信号的上升沿或者下降沿,如果发现了信号的上升沿或下降沿,则给出一个信号指示出来。
边沿检测电路根据检测边沿的类型一般分为上升沿检测电路下降沿检测电路双沿检测电路

上升沿检测电路

在这里插入图片描述

如图所示,我们的目标是当检测到a从0变成1时,令a_posedge为高电平,其余情况a_posedge均为低电平。
要检测a从0变成1,也就是说a的上升沿前是低电平,上升沿后是高电平,那么只需要令边沿前取反,再和边沿后相与,如果结果为1,说明必然是边沿前为0,边沿后为1,确认是上升沿。
实际操作中是让a打一拍并取反,再和a相与,得到a_posedge。

下降沿检测电路

在这里插入图片描述
下降沿同理,边沿后取反再和边沿前相与,得到1,说明是下降沿。 边沿前电平可以通过a打一拍得到。

双边沿检测电路

在这里插入图片描述

  1. 方法一:
    前面会了上升沿和下降沿检测,双边沿检测也就是上升沿和下降沿都拉高,只需要将前面两者的结果进行或运算即可。
  2. 方法二:
    更为简便的办法是,上升沿和下降沿都是0和1之间的跳变,使用异或运算符,可以直接得到结果。

代码和仿真

RTL代码

`timescale 1ns / 1ps

module edge_detection
(
    clk,
    rst_n,
    a,
    pos_y,
    neg_y,
    dual_y
);
    input clk;
    input rst_n;
    input a;            //需要检测边沿的信号a
    output pos_y;       //上升沿检测
    output neg_y;       //下降沿检测
    output dual_y;      //双边沿检测
    reg a_delay1;
    
    //将信号a打一拍得到a_delay1
    always@(posedge clk or negedge rst_n) begin
        if( ~rst_n ) begin
            a_delay1 <= 0;       
        end
        else begin
            a_delay1 <= a;
        end
    end
    
    // ~优先级高于&
    assign pos_y = a  & ~a_delay1;
    assign neg_y = ~a & a_delay1;
    assign dual_y = a ^ a_delay1;
endmodule

Testbench代码

`timescale 1ns / 1ps

//tb的基本思路无非就是:制造时钟、复位、例化、构造数据
module tb_edge_detection();
    reg clk,rst_n,a;
    wire pos_y,neg_y,dual_y;
    initial begin
        a   = 0;
        clk = 0;
        rst_n = 0;
        #50
        rst_n = 1;
        a = 1;
        #30;
        a = 0;
        #40;
        a = 1;
        #50;
        a = 0;
        #40;
        $stop;
    end
    
    edge_detection edge_detection_u0
    (
        .clk(clk),
        .rst_n(rst_n),
        .a(a),
        .pos_y(pos_y),
        .neg_y(neg_y),
        .dual_y(dual_y)
    );
    
    always #5 clk = ~clk;

endmodule

仿真波形

在这里插入图片描述

参考资料

  1. 正点原子逻辑设计教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/572719.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OurBMC开源大赛高校获奖队伍专访来啦!

精彩纷呈的 OurBMC 开源大赛已告一段落&#xff0c;经历为期四个月的实战&#xff0c;各个参赛队伍也积淀了丰富的实践经验与参赛心得。本期&#xff0c;社区特别邀请 OurBMC 开源大赛获奖高校团队分享「走进OurBMC开源大赛&#xff0c;共同践行开放包容、共创共赢的开源精神」…

【春秋云境】文件上传漏洞合集

CVE-2022-30887 1.题目简介 2.CVE-2022-30887简介 使用工具&#xff1a; 蚁剑 burpsuite 一句话木马 3.渗透测试 输入用户名密码进行抓包 猜测账号密码 无有用信息&#xff0c;根据页面现有信息找到作者邮箱&#xff1a; mayuri.infospacegmail.com&#xff0c;猜测密码为&a…

每日一题:跳跃游戏II

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1] 的最…

YOLOv3没有比这详细的了吧

YOLOv3&#xff1a;目标检测基于YOLOv2的改进 在目标检测领域&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;系列以其出色的性能和速度而闻名。YOLOv3作为该系列的第三个版本&#xff0c;不仅继承了前身YOLOv2的优势&#xff0c;还在多个方面进行了创新和改进。…

机器学习理论基础—支持向量机的推导(一)

机器学习理论基础—支持向量机的推导 算法原理 SVM:从几何角度&#xff0c;对于线性可分数据集&#xff0c;支持向量机就是找距离正负样本都最远的超平面&#xff0c;相比于感知机&#xff0c;其解是唯一的&#xff0c;且不偏不倚&#xff0c;泛化性能更好。 超平面 n维空间…

如何拿取 macOS 系统中的图标文件

如何拿取 macOS 系统中的图标文件 比如在 Finder 中看到这个文件夹图标很好看&#xff0c;想用一下&#xff0c;就是不知道它在什么位置&#xff0c;我来告诉你。 它在系统中的位置是 /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/如何打开这个位置&am…

计算机网络物理层思维导图+大纲笔记

大纲笔记&#xff1a; 物理层的基本概念 解决如何在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是具体的传输媒体 主要任务 确定与传输媒体接口有关的一些特性 机械特性 电气特性 功能特性 规程特性信道上传送的信号 基带信号 来自信源的信号&#xff0c;直接表…

【CLI命令行接口和Java连接openLooKeng查询数据 】

CLI命令行接口和Java连接openLooKeng查询数据 一、摘要二、正文0. 环境说明1. CLI命令行工具的使用2. Java API 的使用三、小结一、摘要 通过CLI命令行接口工具连接openLooKeng,可帮助初学者能够使用SQL语句的方式快速操作openLooKeng,任何只要熟悉SQL的人都可以快速切换到op…

解决 uniapp uni.getLocation 定位经纬度不准问题

【问题描述】 直接使用uni.getLocation获取经纬度不准确&#xff0c;有几百米的偏移。 【解决办法】 加偏移量 //加偏移 let x longitude let y latitude let x_pi (3.14159265358979324 * 3000.0) / 180.0 let z Math.sqrt(x * x y * y) 0.00002 * Math.sin(y * x_pi)…

ArcGIS Pro专题地图系列教程

专题地图系列是ArcGIS Pro3.2的新功能。之前&#xff0c;如果要做8张相同区域的专题图&#xff0c;可能需要新建8个布局&#xff0c;分别进行排版&#xff0c;再导出。现在&#xff0c;一幅地图&#xff0c;一个布局&#xff0c;就可以完成这个流程。 原理是&#xff0c;根据单…

Swift-24-集合对象

概述 在了解正式内容之前可以先回顾下objectiveC中提供的集合特性。 它的特点是&#xff0c;拿NSArray举例&#xff0c;包含NSArray 和 NSMutableArray两个API&#xff0c;前者是不可变数组&#xff0c;一旦创建其值和数量就不能改变了&#xff1b;NSMutableArray是可变数组&…

tableau基础学习——添加标靶图、甘特图、瀑布图

标靶图 添加参考线 添加参考分布 甘特图 创建新的字段 如设置延迟天数****计划交货日期-实际交货日期 为正代表提前交货&#xff0c;负则代表延迟交货 步骤&#xff1a;创建——计算新字段 把延迟天数放在颜色、大小里面就可以 瀑布图 两个表按照地区连接 先做个条形图&…

工业4.0的基石:探索工业级光模块的力量

引言 工业4.0代表着智能制造的新时代&#xff0c;而工业级光模块则是这一革命性转变的基石。这些高科技组件不仅是现代通信网络的核心&#xff0c;更是连接智能工厂、智慧城市和远程服务的关键。本文将深入探讨工业级光模块的技术特性、应用领域以及它们如何塑造未来工业的面貌…

公司网页制作需要多少钱

公司网页制作需要多少钱&#xff1f;这是一个非常常见的问题。答案取决于您需要的功能和设计。一些小型企业网站可能只需要一些基本的功能&#xff0c;花费可能低至几百美元&#xff0c;而一些大型企业网站可能需要高级功能和设计&#xff0c;可能需要几万美元。 以下是一些考虑…

js如何获取对象的属性值

获取对象的属性值&#xff0c;有两种方式。 方式一&#xff1a; 对象.属性名 let obj {name:张三,age:23 }; console.log(obj.name); //张三方式二&#xff1a; 对象[属性名] let obj {name:张三,age:23 }; console.log(obj[name]); //张三 两种方式有什么不同&am…

Mac安装telnet

一、安装Homebrew 1、打开官网&#xff1a;Homebrew — The Missing Package Manager for macOS (or Linux) 2、打开终端输入&#xff1a; /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 二、安装Telnet bre…

内容策略的精准定位:Kompas.ai的目标受众分析

在这个信息爆炸的时代&#xff0c;内容营销已经成为品牌与消费者沟通的重要桥梁。然而&#xff0c;随着内容的海量增长&#xff0c;品牌如何从众多信息中脱颖而出&#xff0c;成为营销人员面临的巨大挑战。精准定位目标受众&#xff0c;不仅能够帮助品牌更有效地传达信息&#…

nginx 的漏洞改造

Nginx 的漏洞扫描有很多整改项 资源下载地址&#xff1a;https://download.csdn.net/download/wangzhi291/89216805 资源里面需要conf/modules 需要上传 然后docker镜像文件 配置按下面的修改就行了 整改方法为增加 ngx_http_headers_more_filter_module模块 include /usr…

贪吃蛇详解

Win32 API介绍&#xff1a; 在写贪吃蛇这款游戏时需要用到一些有关Win32 API的知识&#xff0c; 接下来我会将设计到的知识点列举并讲解&#xff1a; 首先我们先了解一下Win32 API是什么&#xff0c;Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外&am…

Unity射线实现碰撞检测(不需要rigbody组件)

使用physic.CapsulCast&#xff08;&#xff09;&#xff1b; 前面3个参数生成一个胶囊体&#xff0c; 向着发射方向&#xff0c;发射出一串的胶囊&#xff08;没有最大距离&#xff09; 有最大距离&#xff0c;可以节约性能开销。 physic.CapsulCast&#xff08;&#xff0…