verilog设计-CDC:单bit脉冲快时钟域到慢时钟域

一、前言

当单bit信号由快时钟域传递给慢时钟域时,快时钟域的异步信号最小可为快时钟信号的一个时钟周期脉冲,快时钟域的单时钟周期脉冲长度小于慢时钟域的时钟周期,很有可能该脉冲信号在慢时钟域的两个时钟上升沿之间,导致该脉冲没有被慢时钟域采集到,从而导致信号数据丢失。

因此与单bit信号从慢时钟域到快时钟域直接打两拍不同,单bit信号从快时钟域到慢时钟域还需要特殊的处理。

二、脉冲同步器

脉冲同步器的原理为将快时钟域的脉冲拓展为电平信号,使得该电平的宽度大于慢时钟域的时钟周期,从而可以使用两级同步器进行同步,然后在同步后的时钟域进行脉冲恢复,从而完成将信号(尤其是脉冲信号)从快时钟域传递到慢时钟域。

脉冲同步器的电路结构如上图所示。

在快时钟域,待同步信号低电平,寄存器Q端输出保持不变,待同步信号高电平时,寄存器的输出取反。在慢时钟域,首先进行两级寄存器同步,接着通过双边沿检测电路将脉冲信号恢复出来。

该电路具有如下特点:

1.该电路只能传递脉冲信号(也还能传递一直是0的信号,只不过工程意义不大),对于输入信号一直是1,或是只有0到1阶跃信号,只有1到0的变化的信号均无法正确传输;

2.该电路将输入端的脉冲传输给慢时钟域,无论输入端的脉冲有多宽,都只能在慢时钟域恢复成一个时钟周期宽度的脉冲;

3.输入信号的脉冲之间间隔要大于1倍的慢时钟周期,否则连着的两个脉冲问题会在慢时钟域合并为一个脉宽为2个慢时钟周期的脉冲,导致丢失一个脉冲。

三、脉冲同步器代码

`timescale 1ns/1nsmodule pulse_detect(input         clk_fast  , input         clk_slow  ,   input         rst_n    ,input        data_in    ,output         dataout
);//第一部分,脉冲电平转换reg data_in_r;always@(posedge clk_fast or negedge rst_n)beginif(~rst_n) data_in_r <= 1'b0;else if(data_in)data_in_r <= ~data_in_r;elsedata_in_r <= data_in_r;end//第二部分,两级同步reg data_in_rt0,data_in_rt1;always@(posedge clk_slow or negedge rst_n)beginif(~rst_n) begindata_in_rt0 <= 1'b0;data_in_rt1 <= 1'b0;endelse begindata_in_rt0 <= data_in_r;data_in_rt1 <= data_in_rt0;endend//第三部分,电平转换脉冲(边沿检测)reg data_in_m;always@(posedge clk_slow or negedge rst_n)beginif(~rst_n)data_in_m <= 1'b0;elsedata_in_m <= data_in_rt1;endassign dataout = data_in_m ^ data_in_rt1;endmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/762268.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django数据库查询

聚合查询 分组查询 F与Q查询 默认情况下,用Q包裹的两个条件,用逗号分割也是and关系 choices参数 只要某个字段的可能性是完全可以列举出来的,可以采取choices参数 该gender字段存的还是数字,但是如果数字在上面的元组列举范围内,该怎么获取对应的值,如果不在范围内,会怎…

shell脚本实例

背景 centos7环境 1、获取进程pid,并且kill掉 #! /bin/bash searchNameXXX pids$(ps -ef | grep ${searchName} |grep -v grep |awk {print $2})for pid in ${pids} doecho "kill pid" $pidkill -9 $pid doneecho "finished ..."######################…

20240321, 字符串操作,STRING.H,字符串函数的实现

啥意思&#xff0c;这个循环是&#xff1f;每次给P分配一个字节&#xff0c;然后把那个位置写入0&#xff1f;但是0是整数吧&#xff1f;他需要四个字节&#xff1f;&#xff1f;&#xff1f;这和0地址有什么关系……啊啊啊啊啊 一&#xff0c;字符串操作 1.0 字符数组 补 0…

【C语言基础篇】字符串处理函数(五)strncpy strncat strncamp的介绍及模拟实现

个人主页&#xff1a; 倔强的石头的博客 系列专栏 &#xff1a;C语言指南 C语言刷题系列 后续补充完善

C# 读取指定文件夹

string[] fileNames Directory.GetFiles("D:\demo"); //获取整个demo的文件不包含文件夹 DirectoryInfo dirInfo new DirectoryInfo("D:\demo"); FileInfo[] fils dirInfo.GetFiles(); //获取整个demo的 文件 不包含文件夹 DirectoryInf…

【Golang星辰图】Go语言魔法使者:解锁消息队列魅力,轻松构建强大应用

极速通信&#xff1a;Go语言中不可错过的消息队列库全面解析 前言 随着现代应用程序的复杂性不断增加&#xff0c;消息队列成为了构建可靠、高效和可扩展系统的关键组件之一。在Go语言领域&#xff0c;开发人员可以利用各种消息队列库来简化消息传递过程&#xff0c;实现异步…

LeetCode_Java_递归系列(题目+思路+代码)

206.反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]以此类推&#xff0c;直到反转结束返回头结点 class Solution {public ListNode rever…

是德科技N9020A信号分析仪

181/2461/8938产品概述&#xff1a; N9020A MXA信号分析仪通过增加针对新一代技术的信号分析和频谱分析能力&#xff0c;具备了中档分析仪的更高性能。它突破了以往分析仪的极限&#xff0c;支持业界更快的信号和频谱分析,实现了速度与性能的更佳优化。 速度 测试速度超过其它…

动态规划专题之不同路径

LC 62 不同的路径 dp数组以及下标的含义 dp[i][j]:从起点到第i行第j列的方案数为dp[i][j] 递推公式 这么想&#xff0c;当前状态可以由哪些状态得到&#xff1f;由于它只能向下或向右走&#xff0c;所以就只能向下走到第i行第j列或向右走到第i行第j列 所以dp[i][j]dp[i-1][…

linux之shell脚本基础

1.构建基础脚本 1.1 创建shell脚本 1.1.1 第一行需要指定使用的shell # 用作注释行.shell并不会处理脚本中的注释行,但是第一行的注释,会告诉shell使用哪个shell来运行脚本. #!/bin/bash 1.1.2 让shell找到你的脚本 直接运行脚本会提示-bash: a.sh: command not found.因…

jupyter notebook或jupyterlab运行于/切换指定的conda虚拟环境或显示所有环境方法

Jupyter 在一个名为 kernel 的单独进程中运行用户的代码。kernel 可以是不同的 Python 安装在不同的 conda 环境或虚拟环境&#xff0c;甚至可以是不同语言&#xff08;例如 Julia 或 R&#xff09;的解释器。 如何使用 conda 环境和 Jupyter 有三种方法&#xff1a; 1. 在 c…

ES同步失败维护步骤(适用于修改了部分主键值导致同步失败)

维护步骤&#xff1a; 登录到ES服务器&#xff1a;192.168.111.141。停止 Canal 和 Canal-Adapter 服务&#xff1a;cd /home/xiangtan/canal/bin ./stop.shcd /home/xiangtan/canal-adapter/bin ./stop.sh确定修改了主键值的表&#xff0c;例如 tbl_sparking&#xff0c;使用…

一套键盘鼠标控制两台电脑 Mouse Without Borders

有两台电脑&#xff0c;一台笔记本一台台式机&#xff0c;拥有各自拥有鼠标和键盘&#xff0c;但总是需要切换&#xff0c;感觉太麻烦&#xff0c;想找个简单的方式&#xff0c;不需要额外操作就能同时操作这两台电脑。无意间发现了一个微软软件Mouse Without Borders&#xff…

算法体系-13 第十三 二叉树的基本算法+二叉树的递归套路

一 完全二叉树的判断 1.1 描述 完全二叉树&#xff1a;他每一层都是满的&#xff0c;即使不满也是最后一层不满&#xff0c;最后一层不满也是从左到右变满的&#xff1b;话句话说就是 完全二叉树从根结点到倒数第二层满足完美二叉树&#xff0c;最后一层可以不完全填充&#x…

MySQL数据库 - 索引

一. 索引的相关知识 1. 索引的概念 是一个排序的列表&#xff0c;存储着索引值和这个值所对应的物理地址&#xff08;类似于C语言的链表通过指针指向数据记录的内存地址&#xff09;使用索引后可以不用扫描全表来定位某行的数据&#xff0c;而是先通过索引表找到该行数据对应…

How to install PyAlink on Ubuntu 22.04

How to install PyAlink on Ubuntu 22.04 环境准备准备conda python环境创建项目虚拟环境激活虚拟环境 安装脚本细节 环境准备 准备conda python环境 关于如何安装conda环境&#xff0c;可以参阅我此前整理的如下文章&#xff1a; How to install Miniconda on ubuntu 22.04…

一句话讲清脏读 、丢失修改、不可重复读、幻读

脏读 : 一个事务读取到了另一个事务回滚之前的数据. 丢失修改 : 两个事务同时访问一个数据时,一个事务在修改的时候不能获取到另一个事务先前已经修改过的内容. 不可重复读:一个事务A内在第二次查询的时候,查到了另一个事务B在A事务第一次查询之后修改的数据. 幻读&#xff…

【Godot 3.5控件】用TextureProgress制作血条

说明 本文写自2022年11月13日-14日&#xff0c;内容基于Godot3.5。后续可能会进行向4.2版本的转化。 概述 之前基于ProgressBar创建过血条组件。它主要是基于修改StyleBoxFlat&#xff0c;好处是它几乎可以算是矢量的&#xff0c;体积小&#xff0c;所有东西都是样式信息&am…

基于Arduino IDE 野火ESP8266模块WIiFi开发

一、函数介绍 头文件 #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h>ESP8266WiFi.h库主要用于连接单个WiFi网络。如果需要连接到多个WiFi网络&#xff0c;例如在需要切换不同网络或者备用网络时&#xff0c;可以使用ESP8266WiFiMulti.h头文件&#xff…

mysql的基本知识点-排序和分组

分组&#xff08;GROUP BY&#xff09; GROUP BY 语句用于结合聚合函数&#xff0c;根据一个或多个列对结果集进行分组。例如&#xff0c;假设你有一个包含销售数据的表&#xff0c;并且你想按产品类别计算总销售额。你可以使用 GROUP BY 和 SUM() 函数来实现这一点。 SELECT…