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

主要内容

  • 多级延迟触发器电路
  • 同步器
  • 边沿检测电路
  • 与移位寄存器的区别

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 or negedge reset)
        if(!reset)
            begin
                d0 <= 0;
                d1 <= 0;
                Q   <= 0;
            end
        else
            begin
                d0 <= D;
                d1 <= d0;
                Q   <= d1;
            end

endmodule

上述代码中d0是输入信号D延迟一级采样或称为延迟一拍的信号,以此类推d1是延迟两拍信号,Q是延迟三拍信号。可以通过修改N来确定信号的位宽,和修改部分代码决定延迟的拍数。

作用:使用如上延迟触发器链可以对D信号进行延吃操作。

2、同步器

同步器的两种类型:见https://www.cnblogs.com/lizhiqing/p/12059436.html

3、边沿检测电路

定义:待检测的信号的上升沿或者下降沿到来时,会输出一个脉冲信号。

检测方法:

  • 上升沿:原始信号与延迟一拍的信号d0的反向信号
  • 下降沿:原始信号取反,与延迟一拍的信号d0

如果担心采样不稳定,可以使用d1代替d0。

module side_detect #(parameter  N=1)(
        input                   clk,
        input                   reset,
        input           [N-1:0] D,
        output          [N-1:0] D_rising_edge,
        output          [N-1:0] D_falling_edge,
        output  reg     [N-1:0] Q
);
    reg [N-1:0] d0;
    reg [N-1:0] d1;

    always @(posedge clk or negedge reset)
        if(!reset)
            begin
                d0 <= 0;
                d1 <= 0;
                Q  <= 0;
            end
        else
            begin
                d0 <= D;
                d1 <= d0;
                Q  <= d1;
            end
    assign  D_rising_edge = D & ~d0;
    assign  D_falling_edge = ~D & d0;
endmodule

边沿检测

module tb_edge_dec #(parameter N=1)();
    wire     D_rising_edge;
    wire     D_falling_edge;
    wire     Q;
    reg             clk;
    reg             reset;
    reg             D;

    side_detect inst_edge(
    .clk                (clk),
    .reset              (reset),
    .D                  (D),
    .D_rising_edge      (D_rising_edge),
    .D_falling_edge     (D_falling_edge),
    .Q                  (Q)
    );

    initial
        begin
            #0      reset = 0;
                    clk = 0;
            #10     reset = 1;
        end
    always #10 clk = !clk;

    initial
        begin
            repeat(20)
            #20 D = {$random} % 2;
        end
endmodule

边沿检测_testbench

4、与移位寄存器区别

  • 移位寄存器用于实现串转并的功能,每个触发器的输出都可读;而用于延时的触发器链每个触发器的输出仅作为内部信号;
  • 移位寄存器能根据控制信号的要求决定移动位数,触发器链则是通过触发器的数量来决定延迟的时长;

原文地址:https://www.cnblogs.com/lizhiqing/p/12690824.html

时间: 2024-10-12 02:14:58

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

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

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

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

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

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

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

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

一.多级延迟触发器(或延迟触发器链) (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

边沿检测电路设计verilog

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

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 @(

[转]FPGA的边沿检测

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

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

高性能电流检测电路

大多数模拟集成电路(比较器.运算放大器.仪表放大器.基准.滤波器等)都是用来处理电压信号的.至于处理电流信号的器件,设计师们的选择却少得可怜,而且还要面对多得多的难题.这很不幸,因为直接监视和测量电流有很大的优势.通过观察电流流动,可以最好地监视电动机扭矩.螺线管受力.LED 密度.太阳能电池受光量和电池电量.所需要的只是一个能准确测量电流并将电流转换成电压的电路,这样就可以用很容易买到现有的电压器件(放大器.比较器.ADC 等)以放大.调节和测量电压. 工具/原料 LTC2053,LTC610