边沿检测(上升沿检测、下降沿检测、双边沿检测|verilog代码|Testbench|RTL电路图|仿真结果)

这篇具有很好参考价值的文章主要介绍了边沿检测(上升沿检测、下降沿检测、双边沿检测|verilog代码|Testbench|RTL电路图|仿真结果)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。



数字IC经典电路设计

经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字IC中一些经典电路的设计有初步入门了解。能力有限,纰漏难免,欢迎大家交流指正。快速导航链接如下:

个人主页链接

1.数字分频器设计

2.序列检测器设计

3.序列发生器设计

4.序列模三检测器设计

5.奇偶校验器设计

6.自然二进制数与格雷码转换

7.线性反馈移位寄存器LFSR

8.四类九种移位寄存器总结

9.串并转换

10.七种常见计数器总结

11.异步复位同步释放



一、边沿检测原理

数字IC边沿检测是指检测数字信号中从高电平到低电平或从低电平到高电平变化的过程,也就是信号的边缘。边沿检测在许多数字电路和通信系统中都很重要,因为它可以用来同步信号和数据,提取数据时序和时钟信号,并且能够处理数字信号的快速变化。

如何实现边沿检测呢?最直接简单的方法是对信号进行打拍。

如下图所示,输入信号din在经过一级触发器打一拍子后输出延迟一个时钟周期输出,即对原始信号进行延迟操作得到din_r,din_r作为慢一拍的信号状态,可与最初状态信号进行组合逻辑运算变可得到上升沿检测信号(如下图左)、下降沿检测信号(如下图右)以及双边沿检测信号。

简而言之,可以将din_r与din理解为状态的前一刻和后一刻。

上升沿检测,数字IC经典电路设计,fpga开发,单片机,嵌入式硬件

逻辑的实现部分则为:

assign up_edge   = ~din_r & din;
assign down_edge = din_r & ~din;
assign both_edge = din_r ^ din;

二、上升沿检测、下降沿检测、双边沿检测

Verilog代码

module edge_detector(
    input	clk,
    input 	rst_n,
    input	din,
    output 	up_edge,
    output 	down_edge,
    output 	both_edge
    );

reg din_r;

always@(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        din_r <= 1'b0;
    end
    else begin
        din_r <= din;
    end
end

assign up_edge   = ~din_r & din;
assign down_edge = din_r & ~din;
assign both_edge = din_r ^ din;

endmodule

RTL电路

上升沿检测,数字IC经典电路设计,fpga开发,单片机,嵌入式硬件

Testbench

`timescale 1ns / 1ps
module edge_detector_tb () ;

reg	clk;
reg 	rst_n;
reg 	din;
wire 	up_edge;
wire 	down_edge;
wire 	both_edge;

edge_detector u_edge_detector(
    .clk	(clk),
    .rst_n	(rst_n),
    .din	(din),
    .up_edge	(up_edge),
    .down_edge	(down_edge),
    .both_edge	(both_edge));

always #5 clk = ~clk;

initial begin
    clk   = 0;
    rst_n = 1;
    din   = 0;
    #5 rst_n = 0;
    #5 rst_n = 1;
    #10 din   = 1;
    #20 din   = 0;
    #40 $stop;
end

endmodule

仿真结果

上升沿检测,数字IC经典电路设计,fpga开发,单片机,嵌入式硬件

当检测到上升沿时, pos_edge信号输出一个时钟周期的高电平; 检测到下降沿时,neg_edge输出一个时钟周期的高电平。

三、改进——增强稳定性

要实现边沿检测,最直接的想法是用两级寄存器,第二级寄存器锁存住某个时钟上升沿到来时的输入电平,第一级寄存器锁存住下一个时钟沿到来时的输入电平,如果这两个寄存器锁存住的电平信号不同,就说明检测到了边沿,具体是上升沿还是下降沿可以通过组合逻辑来实现。

通过上文可知,主要借助的是触发器延迟进行操作。一般而言,多级延迟触发器有如下两点作用:

①_简单的延时:多级延迟触发器最原始的作用单纯的对原始信号做延迟操作。
降低亚稳态往后级传输的概率_:如果输入信号相对 clk时钟信号属于不稳定信号,则延迟输出信号相对 clk时钟信号属于相对稳定信号,从而有效地降低了亚稳态往后级传输的概率。

上文给出的电路似乎很简单地实现了边沿检测的功能,但是仔细分析就可以发现这种方法存在一个潜在的风险:当待测信号是一个异步信号时,输出可能是亚稳态。例如,信号的变化刚好发生在clk时钟信号的建立时间和保持时间之内,那么第一级寄存器的输出就会进入亚稳态,从而使得整个电路的输出进入亚稳态,进而影响下一级电路的正常工作,甚至导致整个系统崩溃!

那么有什么办法可以改进吗?

答案是增加寄存器的数目来减小亚稳态的发生概率。例如,增加多级寄存器可以几乎消除亚稳态带来的影响(亚稳态还是存在不过概率极小)。

四、总结

边沿检测的核心思想是“打拍子+逻辑运算”,核心为以下几点:

打拍子:通过寄存器寄存延迟一拍输出,因为寄存器的特性,当信号发生改变时,下一级寄存器输出不会立刻改变而会在下一个时钟周期改变。
Tips:有时候为避免亚稳态的影响而加入多级寄存器,相当于打多拍。
逻辑运算:逻辑的实现部分为,可以将din_r与din理解为状态的前一刻和后一刻。

assign up_edge   = ~din_r & din;
assign down_edge = din_r & ~din;
assign both_edge = din_r ^ din;

更多可查看个人主页链接
软件版本:Modelsim 10.6c
不定期纠错补充,欢迎随时交流
最后修改日期:2023.6.2文章来源地址https://www.toymoban.com/news/detail-670952.html

到了这里,关于边沿检测(上升沿检测、下降沿检测、双边沿检测|verilog代码|Testbench|RTL电路图|仿真结果)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Verilog单边沿检测和双边沿检测的方法(HDLBits例题)

    1.单边沿检测 边沿检测是用来检测某一信号是否发送了从0至1或者从1至0的变化,有同步和异步之分。 同步边沿检测:是使用一个基准时钟,即在同一个时钟下来检测一个信号的上升沿或者下降沿。 异步边沿检测:是利用D触发器来实现边沿检测。 HDLBits例题: 单边沿检测例题

    2024年02月11日
    浏览(27)
  • Verilog语法学习——边沿检测

    若为下降沿检测,则为: TB文件 注意,若TB文件中输入信号signal_in的上升下降沿和sys_clk同步,则检测不出边沿。所以我将输入信号的持续时间都设定为随机数字,来和sys_clk产生区别 仿真波形 若出现不定值x或高阻值z,则检测不准确。 可以改进为: 解释: == 和 !== 称为逻辑

    2024年02月11日
    浏览(30)
  • 奇偶校验器设计(奇偶校验与奇偶检测,XOR法和计数器法|verilog代码|Testbench|仿真结果)

    数字IC经典电路设计 经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字I

    2024年02月11日
    浏览(35)
  • verilog手撕代码2——各种加法器介绍——真值表、表达式、电路图

    2023.4.25 两个数直接相加,无进位,真值表如下 两个数和进位一起相加,根据真值表画出卡诺图,对表达式进行化简 用两个半加器来组成一个全加器 原理 : N bit的加法器由N个1 bit的全加器组成 。从低位开始,逐位相加, 每一bit需要等待前面计算出来得到进位,才能进行下一

    2024年02月01日
    浏览(35)
  • 【芯片设计- RTL 数字逻辑设计入门 6 -- 带同步复位的D触发器 RTL实现及testbench 验证】

    同步复位 :复位只能发生在在clk信号的上升沿,若clk信号出现问题,则无法进行复位。 Verilog 代码 testbench 代码 编译及仿真 波形如下 : 从波形可以看到,在第100ns后,第一个 clk 时钟沿变化时 q 的信号和 d 的信号保持一样,后面依次如此。 问题小结 在写 testbench 测试的时候

    2024年02月19日
    浏览(37)
  • 数字分频器设计(偶数分频、奇数分频、小数分频、半整数分频、状态机分频|verilog代码|Testbench|仿真结果)

    目录 一、前言 二、偶数分频 2.1 触发器级联法 2.2 计数器法 2.3 verilog代码 2.4 Testbench 2.5 仿真结果 三、奇数分频 3.1 占空比非50%奇数分频 3.2 占空比50%奇数分频 3.3 Verilog代码 3.4 Testbench 3.5 仿真结果 四、小数分频 4.1 双模前置分频法 4.2 Verilog代码 4.3 Testbench 4.4 仿真结果 五、半整

    2024年02月04日
    浏览(36)
  • 数字分频器设计(偶数分频、奇数分频、小数分频、半整数分频、状态机分频|verilog代码|Testbench|仿真结果)

    数字IC经典电路设计 经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字I

    2024年02月08日
    浏览(29)
  • 【FPGA】对信号上升沿或下降沿的捕捉

    个人笔记。 一、下降沿检测 1、 将输入信号打两拍,第一拍是recvIdle0,第二拍是recvIdle1 2、将第一拍信号取反并与第二拍信号相与 3、最后一行时序得到的高电平就是所要的下降沿信号 二、上升沿检测   1、 将输入信号打两拍,第一拍是recvIdle0,第二拍是recvIdle1 2、将第二拍

    2024年02月16日
    浏览(30)
  • 深度学习过程中测试准确率先上升后下降是为什么?

    很典型的过拟合问题。 在训练过程中的验证准确率前上升,后下降,即在验证集上的表现先好后差。 数据相对模型来说比较简单,即模型的表达能力过剩。在初始训练阶段,模型逐渐开始学习到一些信息,因而在验证集上的表现是提升的,在到达某一点后,模型接着训练则

    2024年02月11日
    浏览(29)
  • ChatGPT帮助提升工作效率和质量:完成时间下降40%,质量评分上升 18%

      自ChatGPT去年11月发布以来,人们就开始使用它来协助工作,热心的用户利用它帮助撰写各种内容,从宣传材料到沟通话术再到调研报告。    两名MIT经济学研究生近日在《科学》杂志上发表的一项新研究表明,ChatGPT可能有助于减少员工之间的写作能力差距。研究发现,它可

    2024年02月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包