从多级延迟触发器到边沿检测

一、多级延迟触发器(或延迟触发器链)

  (1)多级延迟触发器电路

  多级延迟触发器,顾明思议就是多个触发器串在一起,对信号进行打拍,一个触发器就延时了一拍,也就是延迟了一个时钟周期。

多级触发器的代码如下所示:

 1 module DFF_N #(parameter N=3)(
 2   input clk,
 3   input reset,
 4   input [N-1:0] D,
 5   output reg [N-1:0] Q
 6 );
 7 reg [N-1:0]d0;
 8 reg [N-1:0]d1;
 9 [email protected](posedge clk or negedge reset)
10   if(!reset)begin
11     d0 <= 0; //同步清 0,低电平有效
12     d1 <= 0; //同步清 0,低电平有效
13     Q  <= 0; //同步清 0,低电平有效
14   end
15   else begin
16     d0 <= D;
17     d1 <= d0;
18     Q  <= d1;
19   end
20 
21 endmodule

d0 是 D 的延迟一级采样或者称为 D 的延迟一拍信号,同样 d1 是 D 的延迟两拍信号,而 Q 则是 延迟三拍信号。一方面可以通过修改N来改变对多少位的信号的进行延时;另一方面,可以用通过修改部分代码,添加或者减少延迟计数。

代码综合得到的电路(综合之后)如下所示:

电路中显示出三级延时,可以延时三个时钟节拍(也就是三个时钟周期),需要说明的是,上述每一级触发器都包含了3个触发器(对三位数据总线进行延时)。

  (2)多级延迟触发器的主要用法

①简单的延时

  多级延迟触发器最原始的作用单纯的对 D 信号做延迟操作,这里就不进行详述。

②降低亚稳态往后级传输的概率

  如果 D 信号相对 clk 属于不稳定信号,则 Q 和 d1 输出相对 clk 属 于稳定信号,这样就有效地降低了亚稳态往后级传输的概率,多级延时触发器链有时也称为同步器。有关多级触发器在降级亚稳态传输概率的内容,请查看我的另一篇博文:http://www.cnblogs.com/IClearner/p/6485389.html 。

③用来边沿检测

  可以通过 d1 和 Q 信号获取 D 信号的上升沿或者下降沿,具体介绍如下第二大点所示。

二、边沿检测电路

  边沿检测,顾名思义,就是检查信号的边沿,当信号的上升沿或者下降沿到来时,获取一个脉冲信号,时序图如下所示:

上图的检测信号同时输出上升沿检测和下降沿检测。那么这个波形怎么来的呢,我们来看看下面几组波形:

可以发现:

  始信号与延迟一拍的信号 d0 的反向信号相,就是上升沿脉冲

  而始信号取反,然后与延迟一拍信号d0就是下降沿脉冲

如果担心采样不稳定,可以利用延迟两拍的 d1 信号进行相 与。如果担心不定态,还可以将脉冲信号进行锁存。

代码如下所示:

 1 module  DFF_N #(parameter  N=1)(
 2     input clk,
 3     input reset,
 4     input  [N-1:0]  D,
 5     output [N-1:0] D_rising_edge, //上升沿检测
 6     output [N-1:0] D_falling_edge //下降沿检测
 7 );
 8 reg [N-1:0]d0;
 9 reg [N-1:0]d1;
10 reg [N-1:0]Q;
11 [email protected](posedge clk or negedge reset)
12 if(!reset)begin
13     d0 <= 0;
14     d1 <= 0;
15     Q  <= 0;
16 end    else begin 
17     d0 <= D;
18     d1 <= d0;
19     Q  <= d1;
20 end
21 
22 assign D_rising_edge = ~d0 & D; //关键
23 assign D_falling_edge= d0 & ~D; //关键
24 endmodule

综合得到的电路如下所示:

这个电路把代码中的Q触发器优化掉了。两个输出信号D_rising_edge 、D_falling_edge分别输出上升沿检测信号脉冲和下降沿检测信号脉冲。

时间: 2024-11-08 19:24:33

从多级延迟触发器到边沿检测的相关文章

从延迟触发器链到边沿检测

本文记录一下关于延迟触发器链与它的常用用法(即边沿检测.多级延迟的触发器应该是比较常用的,当我们需要对信号信号进行延时,这个时候我们就用到了延迟触发器链.下面就来记录一下吧. 一.多级延迟触发器(或延迟触发器链) (1)多级延迟触发器电路 多级延迟触发器,顾明思议就是多个触发器串在一起,对信号进行打拍,一个触发器就延时了一拍,也就是延迟了一个时钟周期. 多级触发器的代码如下所示: 1 module DFF_N #(parameter N=3)( 2 input clk, 3 input rese

触发器链的应用——同步器与边沿检测电路

主要内容 多级延迟触发器电路 同步器 边沿检测电路 与移位寄存器的区别 1.多级延迟触发器电路 定义:是多个触发器串联组合,每进行一次传输,数据就延迟一个周期.可以通过增加触发器的数量来决定延时的拍数. module DFF_N #(parameter N=3)( input clk, input reset, input [N-1:0] D, output reg [N-1:0] Q ); reg [N-1:0] d0; reg [N-1:0] d1; always @(posedge clk

GTA5自动驾驶二 边沿检测

边沿检测采用Candy算法,比较经典,opencv自带 Candy算法的原理可以参见这篇博文:http://www.tuicool.com/articles/Y3q2Mf 整个流程是这样的: 读取图像 将图像转化为灰度图像 运行高斯滤波 运行Candy算子得到边沿 示例代码如下: #! usr/bin/python #coding=utf-8 #doing all the relevant imports import matplotlib.pyplot as plt import matplo

FPGA学习笔记之格雷码、边沿检测、门控时钟

一.格雷码 格雷码的优点主要是进位时只有一位跳变,误码率低. 1.二进制转格雷码 我们观察下表: 二进制码 格雷码 00 00 01 01 10 11 11 10 二进制码表示为B[],格雷码表示为G[],则有 G(i) = B(i),i为最高位 G(i-1) = B(i) xor B(i-1),i非最高位 用verilog可以这样写 1 reg [WIDTH-1:0] bin; 2 reg [WIDTH-1:0] gray; 3 parameter WIDTH = 8; 4 always @(

verilog 之数字电路 边沿检测电路

由代码可知:此边沿检测电路是由两个触发器级联而成,sign_c_r 输出是sign_c_r2的输入.并且有异步复位端没有使能端.最后输出:由触发器的输出取反和直接输出相与.如下的RTL图.

边沿检测电路设计verilog

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

[转]FPGA的边沿检测

以前我曾一度傻乎乎的使用 always @ (posedge signal) 这样的代码去检测signal的上升沿,闹出了很多问题. 当受实验室的一同学指教后,再也不会傻乎乎的这样干了.当然,你看完下文也不会这样干了. 检测上升沿的原理:使用高频的时钟对信号进行采样,因此要实现上升沿检测,时钟频率至少要在信号最高频率的2倍以上,否则就可能出现漏检测.具体请参见下面代码. module edge_check(clk, rst_n, signal, pos_edge, neg_edge, both_

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

FPGA基础入门篇(四)--边沿检测电路 一.边沿检测 边沿检测,就是检测输入信号,或者FPGA内部逻辑信号的跳变,即上升沿或者下降沿的检测.在检测到所需要的边沿后产生一个高电平的脉冲.这在FPGA电路设计中相当的广泛. 没有复位的情况下,正常的工作流程如下: (1)D触发器经过时钟clk的触发,输出trigger信号,保存了t0时刻的信号. (2)同时由trigger通过非门输出信号,保留了当前时刻t1的触发信号 (3)经过与门输出信号pos_edge,neg_edge a) 只有t0时刻为高

特定时序规则的错误检测

文档内容:对一个以特定时序传送的协议,在接收端对其进行检测并进行判断,传输正确存储否则丢弃. 一.       协议信息 协议时序图如下: 相应的协议规定如下: A:在CS低有效期间,信源在CLK上升沿发送数据,信宿在CLK的下降沿接受数据,连续的两个字节之间CLK保持低至少2个CLK周期: B:连续两个片选信号有效之间,片选无效高电平的保持时间大于10个CLK周期: C:CLK信号时钟频率为2.5MHz: D:在CS低有效期间,信源连续发送数据大小为188byte: E:第一个字节应该为0x4