Verilog设计_跨时钟域(CDC)

2023-11-01

单bit信号跨时钟域传输,慢到快和快到慢。


一、慢时钟域传递到快时钟域

慢到快很简单,可以直接打两拍同步,也不存在脉冲展宽的问题。

代码实现:

module clk_cross_slow2fast(
             input   clk_slow,
             input   clk_fast,
             input   rst_n,
             input   data_slow,
            output   data_fast
         );

         reg [1:0] sig_fast_r;

         always@(posedge clk_fast or negedge rst_n)begin
             if(!rst_n)begin
                 sig_fast_r <= 2'b0;
             end
             else begin
                 sig_fast_r <= {sig_fast_r[0],data_slow};
             end
         end

         assign data_fast = sig_fast_r[1];

endmodule

测试波形

二、快时钟域传递到慢时钟域

快时钟到慢时钟要稍微麻烦一些,在快时钟下输入数据,输出pulse_slow单脉冲信号和data_slow信号

基本思路:

1、快时钟检测到输入,赋值给有效信号signal_fast

2、慢时钟下将有效信号signal_fast赋值给signal_slow

3、慢时钟下完成输出

4、慢时钟的输出信号对快时钟的反馈,控制快时钟下signal_fast_r拉低,表示一次传输完成

代码实现:

module clk_cross_fast2slow(
             input   clk_slow,
             input   clk_fast,
             input   rst_n,
             input   data_fast,
            output   pulse_slow,
            output   data_slow
         );

         reg sig_fast;
         reg sig_slow;
         reg [1:0] sig_fast_r;
         reg [1:0] sig_slow_r;

         always@(posedge clk_fast or negedge rst_n)begin // 快时钟下保持
             if(!rst_n)begin
                 sig_fast <= 0;
             end
             else if(data_fast)begin
                 sig_fast <= 1;
             end
             else if(sig_fast_r[1])begin
                 sig_fast <= 0;
             end
             else begin
                 sig_fast <= sig_fast;
             end
         end

         always@(posedge clk_slow or negedge rst_n)begin // 传递给慢时钟域
             if(!rst_n)begin
                 sig_slow <= 0;
             end
             else begin
                 sig_slow <= sig_fast;
             end
         end

         always@(posedge clk_slow or negedge rst_n)begin // 慢时钟下保持
             if(!rst_n)begin
                 sig_slow_r <= 2'b0;
             end
             else begin
                 sig_slow_r <= {sig_slow_r[0],sig_slow};
             end
         end

         assign data_slow = sig_slow_r[1];
         assign pulse_slow = ~sig_slow_r[1] & sig_slow_r[0];

         always@(posedge clk_fast or negedge rst_n)begin // 慢时钟对快时钟的反馈
             if(!rst_n)begin
                 sig_fast_r <= 2'b0;
             end
             else begin
                 sig_fast_r <= {sig_fast_r[0],sig_slow_r[1]};
             end
         end

endmodule

测试波形


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Verilog设计_跨时钟域(CDC) 的相关文章

  • Pthreads - 高内存使用率

    我正在用 C 编写一些东西 在 256Mb 系统上的 Linux 中创建大量 Pthread 我通常有 200Mb 的免费空间 当我使用少量线程运行该程序时 它可以工作 但是一旦我让它创建大约 100 个线程 它就会出现错误 因为系统内存不
  • 我想在 Red Hat Linux 服务器中执行 .ps1 powershell 脚本

    我有一个在窗口中执行的 ps1 powershell 脚本 但我的整个数据都在 Linux 服务器中 有什么可能的方法可以让我在红帽服务器中执行 powershell 脚本 powershell脚本是 Clear Host path D D
  • 对于任何真实数据集,数据压缩比的最小可能值是多少

    我在写信ZLIB类似于嵌入式硬件压缩器的 API 它使用 deflate 算法来压缩给定的输入流 在进一步讨论之前 我想解释一下数据压缩率 数据压缩率定义为未压缩大小与压缩大小之间的比率 压缩比通常大于一 这意味着压缩数据通常比未压缩数据小
  • 如何获取与 shell 中的文件名模式匹配的所有文件的总文件大小?

    我正在尝试仅使用 shell 来计算与文件名模式匹配的所有文件 在目录树中 的总大小 以字节为单位 这是我到目前为止所拥有的 find name undo exec stat c s awk 总计 1 END 打印总计 有没有更简单的方法来
  • 使用 shell 脚本发送 HTML 邮件

    如何使用 shell 脚本发送 HTML 电子邮件 首先 您需要撰写消息 最低限度由这两个标头组成 MIME Version 1 0 Content Type text html 以及适当的消息正文 p Hello world p 获得后
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • BASH:输入期间按 Ctrl+C 会中断当前终端

    我的 Bash 版本是 GNU bash version 4 3 11 1 release x86 64 pc linux gnu 我有一段这样的代码 while true do echo n Set password read s pas
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • 正则表达式删除块注释也删除 * 选择器

    我正在尝试使用 bash 从 css 文件中删除所有块注释 我有以下 sed 命令的正则表达式 sed r s w s w d 这可以很好地去除块注释 例如 This is a comment this is another comment
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • linux下无法创建僵尸进程

    嗯 我有一个奇怪的问题 我无法在我的项目中创建僵尸进程 但我可以在其他文件中创建僵尸进程 有简单的说明 int main if fork 0 printf Some instructions n else sleep 10 wait 0 r

随机推荐

  • 图解fork函数机制(简单易懂)

    fork函数机制十分难以理解 尤其涉及到循环fork时就更难搞清楚 例如 for i 0 i lt 3 i pid fork if pid gt 0 std cout lt lt pid lt
  • 经常访问的站点

    色色日语网 www qianxunjp com 日本软件 www flatworld jp
  • MySQL执行计划解读

    Explain语法 EXPLAIN SELECT 变体 1 EXPLAIN EXTENDED SELECT 将执行计划 反编译 成SELECT语句 运行SHOW WARNINGS 可得到被MySQL优化器优化后的查询语句 2 EXPLAIN
  • 首看世界杯

    首看世界杯 不谈技术 只聊自己的几点感受 纯属个人感想 今年是第一次关注世界杯 本来对足球是没有什么兴趣的 如果说对足球有什么了解的话 大部分还是来自小时候的动画片 足球小将 但是看现实中的足球比赛 半天进一个球 甚至一个球都不会进 感觉没
  • 【技术碎片】jcraft.jsch 文件传输工具与方法

    目录 前言 依赖 ChannelSftp功能 实现 JschUtil java ImageInfoService java ImageInfoServiceImpl java 参考资料 前言 SFTP相当于SSH FTP 其中FTP则协议通
  • 2023第一个重大漏洞,几乎影响所有组织

    Dark Reading 网站披露 微软修复了 Outlook 中存在的零日漏洞 漏洞被追踪为 CVE 2023 23397 是一个权限提升漏洞 攻击者可以利用该漏洞访问受害者的 Net NTLMv2 响应身份验证哈希并冒充用户 安全研究人
  • 集训一月小结

    暑假集训过了4个周了 仔细想想这4个周我都做了些什么 学到了什么 又有什么让我感到开心 有什么令我绝望 不管是谁都必须承认在板凳上每天坐上9个小时以上 学习那些算法 有时候会让我感到兴奋 有时候又会让我不愿意在电脑前坐一分钟 想想过程 究其
  • 中国智能卡车“遥遥领先”:卡车NOA落地5000万公里0事故,全球首个

    贾浩楠 发自 副驾寺智能车参考 公众号 AI4Auto 成熟的 擎天柱 已经可以自己出去赚钱了 此时此刻 遍及华东 华北 华南 西北 几乎全国所有主要货运干线上 都有智能重卡承运商单 高速路段由卡车智能驾驶系统完全承担驾驶任务 自主控制油门
  • chinesecalendar报错:no available data for year 2022, only year between [2004, 2021] supported

    Error no available data for year 2022 only year between 2004 2021 supported 解决 更新最新chinesecalendar 每年年底需更新最新版本的chineseca
  • BGP route processing

    路由协议 套用IT里面的术语 实际上就是分布式数据库系统 它包含了节点间的数据传递和节点内的数据处理 对于BGP来说 节点间基于TCP 端口179 的连接 在这个基础上 可以构建AS间的EBGP AS内的IBGP IBGP有full mes
  • python中的os.walk函数的用法

    转自http blog csdn net bagboy taobao com article details 8938126 os walk top topdown True nerr r None followlinks False 可以
  • Check failed: registry.count(t ype) == 1 (0 vs. 1) Unknown layer type: Input (known types: Input )

    自己建立一个工程 调用libcaffe lib 成功编译 但是运行就会遇到报错 F0519 14 54 12 494139 14504 layer factory hpp 77 Check failed registry count t y
  • Random类和UUID以及验证码的生成

    一 介绍与测试 Random 产生随机数 UUID 通用唯一识别码 目的是让分布式系统中的所有元素 都能有唯一的辨识信息 根据当前时间和电脑网卡 生成一段字符 Radom类 import java util public class Ran
  • 你为成为一名DBA,做好准备了吗?

    之前的文章中 我提到了 如何找到第一份DBA工作 云时代的来临 DBA该何去何从 关于从事数据库工作 需要哪些经验 那么 如果你想成为一名DBA 你为此做好准备了吗 我曾问过的一个问题是一个人应该从事DBA这样的职业么 这个问题并不容易回答
  • Android 实现隐私政策提示弹窗

    button shape xml
  • hisi3516dv300芯片基于hwmon驱动框架的温度获取驱动源码分析

    1 内核hwmon驱动框架 参考博客 内核hwmon驱动框架详解以及海思芯片温度驱动分析 2 驱动实现的效果 sys devices virtual hwmon hwmon0 pwd sys class hwmon hwmon0 sys d
  • flush()函数用法详解

    最近在写一个小项目时用到了Java的序列化 在写入输出流时用到了flush 函数 网上搜了一下感觉讲的不是很详细 在此写一下自己的理解 先给出代码片段 第一种关闭资源方式 try FileOutputStream fileOut new F
  • 【硬件】对电源模块的梳理(包括DC-DC、LDO等不同芯片应用电路)

    目录 1 DC DC 变换器 ME3116 24V转5V JW5017S 18V转5V CX802 输入电压 4 5 80V 输出电压5V 输出电流1 2A LM2596S ADJ 输入电压3 3 40V 输出电压5V 2 LDO 低压差
  • JSON格式数据示例 1维到6维JSON例子

    一 1维数据 flocbxnutio a3XVvfPJNFKA aei1L7t uilwtvirlx true ccsvba 423469322 nllzyzj 500901304 9595631 rqttybsmtx true 二 2维数
  • Verilog设计_跨时钟域(CDC)

    单bit信号跨时钟域传输 慢到快和快到慢 目录 一 慢时钟域传递到快时钟域 二 快时钟域传递到慢时钟域 一 慢时钟域传递到快时钟域 慢到快很简单 可以直接打两拍同步 也不存在脉冲展宽的问题 代码实现 module clk cross slo