Abstract

边沿检测电路(edge detection circuit)是个常用的基本电路。

Introduction

所谓边沿检测就是对前一个clock状态和目前clock状态的比较,如果是由0变为1,能够检测到上升沿,则称为上升沿检测电路(posedge edge detection circuit),若是由1变为0,能够检测到下降沿,则被称为下降沿检测电路(negedge edge dttection circuit),能够同时检测上升沿与下降沿的电路称为双沿检测电路(double edge detection)。

上升沿检测电路

Method 1:  使用两个reg

r_data_in0与r_data_in1为DFF,分别hold住上一个与目前clock的i_data_in,当i_data_in由1变为0时,则

r_data_in0    1  1  1  0  0  0

r_data_in1        1  1  1  0  0  0   //对r_data_in0取反相与

o_rising_edge得到一个时钟周期的高电平。

Posedge detection.v / verilog

 1 module posedge_detection (2    input  clk,3    input  rst_n,4   input  i_data_in,5    output o_rising_edge6 );7  8  reg r_data_in0;9  reg r_data_in1;
10
11  assign o_rising_edge = ~r_data_in0 & r_data_in1;
12
13  always@(posedge clk, negedge rst_n) begin
14   if (!rst_n) begin
15      r_data_in0 <= 0;
16      r_data_in1 <= 0;
17    end
18    else begin
19     r_data_in0 <= r_data_in1;
20      r_data_in1 <= i_data_in;
21    end
22  end
23
24  endmodule

这种写法经过综合后RTL为一个两位的DFF与一个AND。

Methord 2: 使用一个reg

posedge_detection2.v / verilog 

module posedge_detection2(input clk,input rst_n,input i_data_in,output reg o_rising_edge
);reg r_data_in0;always@(posedge clk or negedge rst_n) beginif(!rst_n)r_data_in0 <= 0;else beginr_data_in0 <= i_data_in;if({r_data_in0,i_data_in} == 2'b01)o_rising_edge <= 1;else o_rising_edge <= 0;  endend
endmodule 

这种写法综合成RTL之后只有一个D-FF和一个Equal,右边的o_rising_edge 的D-FF主要是因为always过程块内的reg。

Vwf仿真图形如下

下降沿检测与上升沿相似,不在叙述

双沿检测电路(double edge detection)

r_data_in0与r_data_in1位reg,分别hold住上一个clock和目前的clock得i_data_in,就是i_data_in由1变0,或者由0变1,也就是r_data_in1为1,r_data_in0为0,或者是r_data_in1为0,r_data_in0为1,因此用异或(xor)连接两个寄存器。

Method1 : 使用两个reg

Double_edge_detection.v/ verilog

 module doubleedge_detection (input  clk,input  rst_n,input  i_data_in,output o_double_edge);reg r_data_in0;reg r_data_in1;assign o_double_edge = r_data_in0 ^ r_data_in1;always@(posedge clk, negedge rst_n) beginif (!rst_n) beginr_data_in0 <= 0;r_data_in1 <= 0;endelse beginr_data_in0 <= r_data_in1;r_data_in1 <= i_data_in;endendendmodule

Method2 :使用一个reg

Double_edge_detection2.v/verilog

 module doubleedge_detection2 (input      clk,input      rst_n,input      i_data_in,output reg o_double_edge);reg r_data_in0;always@(posedge clk, negedge rst_n) beginif (!rst_n)r_data_in0 <= 0;else beginr_data_in0    <= i_data_in;if ({r_data_in0, i_data_in} == 2'b10)o_double_edge <= 1;else if ({r_data_in0, i_data_in} == 2'b01)o_double_edge <= 1;elseo_double_edge <= 0;// another method// o_double_edge <= r_data_in0 ^ i_data_in;endendendmodule

Conclusion

什么时候使用这种电路呢?当input是非同步信号时,为了要让input与同步的FSM一起处理,必须先经过边沿检测,使之与clock同步,然后才能跟FSM一起运作。

边沿检测电路设计verilog相关推荐

  1. Edgedetect 边沿检测(Verilog)

    边沿检测的底层逻辑就是把上一时刻的值与当前时刻的值进行比较.若上一时刻的值为0,当前时刻的值为1,则为上升沿:同理,上一时刻的值为1,当前时刻的值为0,则为下降沿. 最常用的实现边沿检测的方法就是连接 ...

  2. FPGA基础入门篇(四) 边沿检测电路

    FPGA基础入门篇(四)--边沿检测电路 一.边沿检测 边沿检测,就是检测输入信号,或者FPGA内部逻辑信号的跳变,即上升沿或者下降沿的检测.在检测到所需要的边沿后产生一个高电平的脉冲.这在FPGA电 ...

  3. chisel边沿检测电路实现(Reg延迟特性)

    一.代码设计 chisel代码 import chisel3._ import chisel3.util._ import chisel3.stage._class EdgeDetect(resetV ...

  4. FPGA实现边沿检测电路(上升沿、下降沿)

    1.什么是边沿检测 边沿检测用于检测信号的上升沿或下降沿,通常用于使能信号的捕捉等场景. 2.采用1级触发器的边沿检测电路设计(以下降沿为例) 2.1.设计方法 设计波形图如下所示: 各信号说明如下: ...

  5. Verilog 边沿检测电路

    边沿检测电路是 Verilog 数字电路设计中较为常用的电路,主要作用是在 clk 的驱使下,检测另一个信号的上升/下降沿电路: 检测的原理是记录指定信号前一个时钟和当前时钟的信号,并做对比,看看是否 ...

  6. (10)Verilog实现上下双边沿检测

    (10)Verilog实现上&下&双边沿检测 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog实现上&下&双边沿检测 5)结 ...

  7. 【Verilog HDL 训练】第 06 天(边沿检测)

    1. 复习verilog语法 [选做题] - reg和wire的区别 寄存器数据类型 Verilog中规定,凡是在程序块中被赋值的变量,都必须是寄存器类型的.(程序块:例如always块) 这里未免还 ...

  8. 边沿检测 Verilog

    1.用verilog实现1bit信号边沿检测功能,输出一个周期宽度的脉冲信号 定义了一个2位的寄存器变量data_r,data_r[0]用来存储当前的状态,data_r[1]用来存储上一拍的状态 每个 ...

  9. verilog实现边沿检测

    verilog边沿检测 下例是基于mealy状态机实现信号上升沿检测 module edge_detect (input wire clk,input wire rst_n,input wire le ...

  10. HDLBITS笔记26:边沿检测(正边沿、任意边沿,边沿捕获寄存器、双边沿触发触发器)

    在做接下来的题目前,首先需要理解什么是边沿检测. **边沿检测:**边沿指的是上升沿或者下降沿,检测指的是检测输入信号的变化,或者FPGA内部电路逻辑信号的跳变.在做边沿检测时,应该注意到复位信号,如 ...

最新文章

  1. 看AI如何改变医疗影像学
  2. linux常用命令简介- 用户管理及文件属性
  3. error while loading shared libraries: libz.so.1错误
  4. C++标准库中的随机数生成
  5. 简单的使用Seajs
  6. java word转html 乱码 poi,java word转html poi
  7. 向量数量积公式_多法 | 向量数量积相关最值问题的常见处理方法
  8. 重新拎一遍js的正则表达式
  9. 分类 Classification
  10. C#实现Ping命令
  11. android设计模式之--观察者模式
  12. 这个与流程管理相结合的低代码平台,你一定不能错过
  13. 浏览器全球的书签都在这里了,看看有没有你的!
  14. three.js 08-03 之 加载和保存对象
  15. 谷歌地球Google Earth打不开的解决办法
  16. 数据可视化——tableau 数据报表样例(报表模板)
  17. 混淆矩阵 Confusion Matrix
  18. ConneR and the A.R.C. Markland-N--- codeforces1293A
  19. HTML 编码规范之布尔型属性
  20. flask自定义过滤器,flash,form表单

热门文章

  1. 石、鋏、布~ 最疯狂的打斗场面,莫要错过,iphone手机游戏
  2. opencv2.4.7.2画圆,画十字,画矩形
  3. 《深度学习Python实践》附录——决策树模型可视化
  4. python 绘制多个子图
  5. EXCEL同一个数据较多的表格里自己比较数据(分屏)
  6. Android studio打包遇到的问题总结
  7. 实习成长之路:关于ElasticSearch深度分页带来的思考,如何解决深度分页和跳页
  8. 计算机的原码, 反码和补码
  9. mysql job 存储过程_mysql 记录下工作中自己写的存储过程
  10. 深度解读 Flink 1.11:流批一体 Hive 数仓