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

这篇具有很好参考价值的文章主要介绍了Verilog单边沿检测和双边沿检测的方法(HDLBits例题)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.单边沿检测

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

HDLBits例题: 单边沿检测例题

Verilog单边沿检测和双边沿检测的方法(HDLBits例题),FPGA,fpga开发
题目:对于8位向量中的每一位,检测输入信号在一个时钟周期内从0变化到下一个时钟周期的1(类似于正边缘检测)。输出位应该在0到1转换发生后的循环中设置。

解法是让该信号再过一级触发器,令 in_r <= in; 有点像打了一拍,然后当判断到前一次信号为1(in == 1),这一次信号为0(in_r == 0)时即发生了信号0至1的跳变。这就是上升沿检测

module top_module (
    input clk,
    input [7:0] in,
    output [7:0] pedge
);
    reg [7:0] in_r;
    always@(posedge clk)begin
        in_r <= in;
        pedge <= in & ~in_r;
    end
        

endmodule

另外检测下降沿的话也是同样的原理,让该信号再过一级触发器,令 in_r <= in; 然后当判断到前一次信号为0(in == 0),这一次信号为1(in_r == 1)时即发生了信号0至1的跳变。

module top_module (
    input clk,
    input [7:0] in,
    output [7:0] pedge
);
    reg [7:0] in_d;
    always@(posedge clk)begin
        in_d <= in;
        pedge <= ~in & in_d;
    end
        

endmodule

2.双边沿检测的方法

同样用HDLBits里的一道例题来做说明:双边沿检测例题
Verilog单边沿检测和双边沿检测的方法(HDLBits例题),FPGA,fpga开发
题目:你熟悉的触发器是在时钟的正边缘触发的,或者是在时钟的负边缘触发的。双边触发触发器是在时钟的两个边触发的。然而,fpga没有双边触发触发器,并且always @(posedge clk或negedge clk)不被接受为法律敏感性列表。

这一题乍一想,,感觉可以用always @(posedge clk或negedge clk)或者用两个触发器,即两个always语句,一个判断posedge一个判断negedge,但是这样是不行的 😭 ……
但是可以用其他方法解决,这里提供两种解法:
①:

module top_module (
    input clk,
    input d,
    output q
);

    reg [1:0] tmp;
    always @ (posedge clk) begin
        tmp[0] <= d;
    end
    always @ (negedge clk) begin
        tmp[1] <= d;
    end
    
    assign q = clk?tmp[0]:tmp[1];
endmodule

这种比较常规,另一种方法会更妙一些。
②,利用两次异或等于本身的方法,即p^d ^p = d的这种想法来做:

module top_module (
    input clk,
    input d,
    output q
);
    reg n,p; 
    always@(posedge clk)begin
        p <= d ^ n;
    end
    always@(negedge clk)begin
        n <= d ^ p;	
    end    
    assign q = p ^ n;
endmodule

👌文章来源地址https://www.toymoban.com/news/detail-680164.html

到了这里,关于Verilog单边沿检测和双边沿检测的方法(HDLBits例题)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Verilog实现上升、下降沿检测 FPGA

    源文件 激励文件 仿真波形 释义 代码的含义,已经通过注释讲明,如有不清楚存在疑问的,可以评论留言。 这里解释下,为什么要拍2拍,为什么不只是拍1拍,也就是为什么存在两个signal_buff。 试想一下,当上升沿到来的时候,signal_buff_1为低电平,signal为高电平,可以直接

    2024年02月11日
    浏览(35)
  • 基于FPGA:运动目标检测(LCD显示+串口输出,纯Verilog工程)

          最早做了基于FPGA:运动目标检测(VGA显示,原理图+源码+硬件选择),有网友反应,VGA一个大大的屏幕,做起来很不方便,并且功能过于单一。      因此,在上个工程的基础上,修改成了TFT-LCD屏幕检测,并且将检测结果通过串口输出到电脑上位机上,以便大家做

    2024年02月07日
    浏览(39)
  • 基于FPGA的信号处理算法,FFT法相差检测verilog实现

    基于FPGA的信号处理算法,FFT法相差检测verilog实现 。 1.硬件平台:altera芯片 2.软件平台:Quartusii 13.1 Verilog 3.实现功能:检测两路正弦波的相位差 基于FPGA的信号处理算法,FFT法相差检测verilog实现 引言 在现代通信系统中,信号处理算法在实时性和精度方面面临着巨大的挑战。

    2024年04月16日
    浏览(59)
  • Verilog FPGA实现倍频方法详解

    Verilog FPGA实现倍频方法详解 在FPGA中实现倍频是一个常见的任务,Verilog作为一种硬件描述语言,在这个过程中发挥了重要作用。本文将会详细介绍使用Verilog语言实现倍频的方法,并提供相应的代码和描述。 在Verilog中实现倍频的方法有很多种,这里我们将介绍其中一种简单有

    2024年02月07日
    浏览(34)
  • Verilog实现FPGA倍频:使用第二种方法

    Verilog实现FPGA倍频:使用第二种方法 在FPGA设计中,时钟频率的提高是一个重要的问题。为了解决这个问题,我们可以使用FPGA的PLL模块来实现倍频,将原本的低频时钟转换成更高的时钟频率。在Verilog语言中,有两种方法可以实现倍频,本篇文章将会介绍使用第二种方法实现倍

    2024年02月08日
    浏览(47)
  • 5.2 FPGA:基于verilog的LED流水灯设计(多种方法)

    目录 设计目标:8个LED灯以每0.5s的速率进行循环闪烁 方法1:移位法实现 设计模块 仿真代码 实验结果  方法2:循环移位方法  设计模块 方法3:使用三八译码器实现流水灯 顶层模块 底层模块 当仿真时时间长,可以减小设计代码的计数次数,对分析移位功能没有影响。 设计

    2024年02月06日
    浏览(42)
  • FPGA的Verilog打拍方式无法打拍,测试的仿真结果不打拍的解决方法。

           先附上参考链接:http://t.csdn.cn/krJki         最近做项目涉及到边缘检测,发现对输入信号打拍时仿真结果无法实现打两拍的功能。这些年多多少少都遇到过类似 打拍失效 的情况,因为当时项目的原因起初没有太过注意,但现在需要对周期数严格把控,就需要实时

    2024年02月12日
    浏览(35)
  • 跨时钟域方法(同步器、异步FIFO、边沿检测器、脉冲同步器、同步FIFO)

    目录 1、跨时钟域方法的原因 2、跨时钟处理的两种思路 3、跨时钟域分类——单比特信号跨时钟 3.1.1慢时钟———快时钟。(满足三边沿准则,有效事件可以被安全采样) 3.1.2慢时钟———快时钟。(不满足三边沿准则,有效事件可以被安全采样) 3.2.1有效事件传输背景下确

    2024年02月12日
    浏览(46)
  • 数字IC/FPGA面试宝典--经典60道例题详解

    1.关于亚稳态的描述错误的是(A) A、多用几级寄存器打拍可以消除亚稳态。 B、亚稳态是极不稳定的,理论上来讲处在亚稳态的时间可以无限长。 C、亚稳态稳定到0或者1,是随机的,与输入没有必然的关系。 D、如果数据传输中不满足触发器的建文时间Tsu和保持时间Th,可能

    2024年01月16日
    浏览(52)
  • FPGA | Verilog基础语法

    菜鸟教程连接 举例(\\\"//\\\"符号后的内容为注释文字): initial $dumpfile (“myfile.dump”); //指定VCD文件的名字为myfile.dump,仿真信息将记录到此文件 可以指定某一模块层次上的所有信号,也可以单独指定某一个信号。 典型语法为$dumpvar(level, module_name); 参数level为一个整数,用于指

    2024年02月05日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包