当前位置: 首页 > article >正文

fpga系列 HDL:跨时钟域同步 双触发器同步器

目录双触发器同步器Two-Flip-Flop Synchronizer示例代码双触发器同步器的优缺点优点缺点适用场景应用实例同步来自spi_slave的单个使能信号跨时钟域的设计需要特别小心以避免亚稳态问题。双触发器同步器2-Flip-Flop Synchronizer是一种简单且广泛应用的时钟域交叉CDC同步方法用于将一个时钟域中的信号同步到另一个时钟域中。它通过使用两个触发器级联确保信号在跨越不同时钟域时以指数平方级别降低因为时钟的不匹配导致不稳定或亚稳态metastability发生的概率。双触发器同步器Two-Flip-Flop Synchronizer示例代码module nocdc ( input wire clk_dst, // 目标时钟域时钟 input wire async_signal, // 来自源时钟域的异步信号 input wire rst_n, // 异步复位信号低电平有效 output reg sync_signal, // 同步后的信号 output reg [7:0] counter // 计数器输出 ); reg sync_ff1, sync_ff2; // 使用双触发器进行同步 always (posedge clk_dst or negedge rst_n) begin if (!rst_n) begin sync_ff1 1b0; sync_ff2 1b0; end else begin sync_ff1 async_signal; // 第一阶段采样异步信号 sync_ff2 sync_ff1; // 第二阶段消除亚稳态 end end assign sync_signal sync_ff2; // 输出同步后的信号 // 使用同步后的信号更新计数器 always (posedge clk_dst or negedge rst_n) begin if (!rst_n) begin counter 8b0; end else if (sync_signal) begin counter counter 1b1; // 增加计数器 end end endmodule第一寄存器sync_ff1捕获来自源时钟域的信号可能处于亚稳态。第二寄存器sync_ff2采样sync_ff1将信号稳定到目标时钟域。双触发器同步器的优缺点优点简单高效双触发器同步器结构简单通常只需要两个 D 型触发器因此在资源使用上非常高效。低延迟与其他更复杂的同步方法如 FIFO相比双触发器同步器的延迟较低。减少亚稳态的风险通过两个触发器级联可以有效降低亚稳态的发生概率因为第二个触发器会提供额外的稳定化时间。缺点仅适用于低频信号双触发器同步器适用于频率差异较小的时钟域交叉。如果时钟域的频率差异过大可能会导致信号丢失或同步失败。无法处理高数据率如果跨时钟域的数据速率较高双触发器同步器可能无法有效同步所有数据。可能的延迟虽然延迟较小但依然会引入一个时钟周期的延迟。适用场景双触发器同步器特别适合同步单比特控制信号或低速数据例如用于处理外部输入的控制信号、状态标志或较慢的时钟信号。在高数据率的应用中如 SPI、I2C、UART 等接口可能需要更复杂的同步方法如 FIFO 缓存等。应用实例同步来自spi_slave的单个使能信号使能信号SPI_OPEN_LOOP为非同步信号scheduler的开环配置信号输入(SPI_OPEN_LOOP)来自spi_slave,scheduler实现如下// https://github.com/ChFrenkel/tinyODIN/blob/main/scheduler.v // 一个调度器Scheduler模块且相较于原始的ODIN调度器移除了旋转FIFO相关功能 // scheduler.v - Scheduler module, rotating FIFOs removed from the original ODIN scheduler // // Project: tinyODIN - A low-cost digital spiking neuromorphic processor adapted from ODIN. // // Author: C. Frenkel, Delft University of Technology // Cite/paper: C. Frenkel, M. Lefebvre, J.-D. Legat and D. Bol, A 0.086-mm² 12.7-pJ/SOP 64k-Synapse 256-Neuron Online-Learning // Digital Spiking Neuromorphic Processor in 28-nm CMOS, IEEE Transactions on Biomedical Circuits and Systems, // vol. 13, no. 1, pp. 145-158, 2019. module scheduler #( parameter N 256, parameter M 8 )( input wire CLK, input wire RSTN, input wire CTRL_SCHED_POP_N, input wire [3:0] CTRL_SCHED_VIRTS, input wire [7:0] CTRL_SCHED_ADDR, input wire CTRL_SCHED_EVENT_IN, input wire [M - 1:0] CTRL_NEURMEM_ADDR, input wire NEUR_EVENT_OUT, // 来自SPI配置寄存器的输入信号声明此处接收SPI的开环配置信号用于特定调度配置 input wire SPI_OPEN_LOOP, output wire SCHED_EMPTY, output wire SCHED_FULL, output wire [11:0] SCHED_DATA_OUT ); // 用于对SPI_OPEN_LOOP信号进行同步处理的寄存器声明(双同步寄存器) reg SPI_OPEN_LOOP_sync_int, SPI_OPEN_LOOP_sync; wire push_req_n; wire empty_main; wire full_main; wire [11:0] data_out_main; //---------------------------------------------------------------------------------- // SPI信号同步逻辑部分采用同步屏障机制对SPI_OPEN_LOOP信号进行同步处理 // 确保该信号在时钟域内稳定可靠避免亚稳态等问题在复位低电平有效和时钟上升沿时进行操作 //---------------------------------------------------------------------------------- always (posedge CLK, negedge RSTN) begin if(~RSTN) begin // 复位时将中间同步寄存器和最终同步寄存器都置为0 SPI_OPEN_LOOP_sync_int 1b0; SPI_OPEN_LOOP_sync 1b0; end else begin // 在正常时钟上升沿时先将SPI_OPEN_LOOP信号同步到中间寄存器 SPI_OPEN_LOOP_sync_int SPI_OPEN_LOOP; // 再将中间寄存器的值同步到最终同步寄存器形成两级同步 SPI_OPEN_LOOP_sync SPI_OPEN_LOOP_sync_int; end end fifo #( .width(12), .depth(128), .depth_addr(7) ) fifo_spike_0 ( .clk(CLK), .rst_n(RSTN), .push_req_n(full_main | push_req_n),// 推送请求 .pop_req_n(empty_main | CTRL_SCHED_POP_N),// 弹出请求 // 根据不同条件组合数据输入到FIFO若有事件输入则组合虚拟相关信息和地址信息作为输入数据否则用神经元地址信息作为输入 .data_in(CTRL_SCHED_EVENT_IN? {CTRL_SCHED_VIRTS,CTRL_SCHED_ADDR} : {4b0,CTRL_NEURMEM_ADDR}), .empty(empty_main), .full(full_main), .data_out(data_out_main) ); // 推送请求控制逻辑根据SPI_OPEN_LOOP_sync信号以及神经元事件输出等情况来决定是否允许推送数据 // 当SPI_OPEN_LOOP_sync为低电平且有神经元事件输出或者有控制器的事件输入时允许推送数据push_req_n为低电平 assign push_req_n ~((~SPI_OPEN_LOOP_sync NEUR_EVENT_OUT) | CTRL_SCHED_EVENT_IN); assign SCHED_DATA_OUT data_out_main; assign SCHED_EMPTY empty_main; assign SCHED_FULL full_main; endmodule

相关文章:

fpga系列 HDL:跨时钟域同步 双触发器同步器

目录双触发器同步器(Two-Flip-Flop Synchronizer)示例代码:双触发器同步器的优缺点优点:缺点:适用场景:应用实例:同步来自spi_slave的单个使能信号跨时钟域的设计需要特别小心,以避免…...

别再手动打字了!用uniapp+科大讯飞SDK实现语音实时转文字(附完整代码)

零基础实现uniapp语音输入:科大讯飞流式转文字全攻略 移动应用开发中,语音输入功能正成为提升用户体验的关键要素。想象一下,用户只需按住按钮说话,文字就能实时出现在屏幕上——这种交互方式不仅自然高效,还能显著降…...

MiniCPM-V 4.5本地部署指南:从环境配置到图片视频推理全流程(附常见错误排查)

MiniCPM-V 4.5本地部署实战:从零搭建到多模态推理全攻略 在人工智能技术日新月异的今天,能够处理图片、视频等多模态数据的模型正变得越来越重要。MiniCPM-V 4.5作为一款轻量级但功能强大的多模态大语言模型,凭借其仅80亿参数却能达到超越GPT…...

告别华而不实:H3C TX1801 Plus刷OpenWRT后,IPv6和插件功能实测

H3C TX1801 Plus刷OpenWRT实战:解锁IPv6与插件生态的进阶玩法 当你手握一台H3C TX1801 Plus路由器,原厂固件那些看似丰富的功能选项是否总让你感觉"差点意思"?特别是当需要深度定制网络环境、实现完整IPv6支持或部署去广告插件时&a…...

ShutUp10++ vs 其他隐私工具:实测对比哪款更适合你的Windows系统优化需求

ShutUp10 vs 其他隐私工具:实测对比哪款更适合你的Windows系统优化需求 在数字时代,隐私保护已成为每个Windows用户不可忽视的重要议题。面对系统内置的各种数据收集功能,第三方隐私工具应运而生,它们承诺能帮助我们重新掌控自己的…...

如何用QtScrcpy实现Android设备实时投屏:终极免费解决方案

如何用QtScrcpy实现Android设备实时投屏:终极免费解决方案 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScr…...

终极DLSSTweaks配置指南:5步快速解锁NVIDIA DLSS隐藏画质

终极DLSSTweaks配置指南:5步快速解锁NVIDIA DLSS隐藏画质 【免费下载链接】DLSSTweaks Tweak DLL for NVIDIA DLSS, force DLAA on DLSS-supported titles, tweak scaling ratios & DLSS 3.1 presets, override DLSS versions without overwriting game files. …...

开源模型可持续演进:SenseVoice-Small ONNX与FunASR主干版本同步策略

开源模型可持续演进:SenseVoice-Small ONNX与FunASR主干版本同步策略 1. 项目背景与核心价值 语音识别技术正在从云端服务向本地化部署快速发展,SenseVoice-Small ONNX 语音识别工具正是这一趋势的优秀代表。基于FunASR开源框架的SenseVoiceSmall ONNX…...

如何轻松掌握Spring Framework JDBC操作对象化:5个核心技巧与实战指南

如何轻松掌握Spring Framework JDBC操作对象化:5个核心技巧与实战指南 【免费下载链接】spring-framework Spring Framework 项目地址: https://gitcode.com/gh_mirrors/sp/spring-framework Spring Framework JDBC操作对象化是Java开发者处理数据库交互的高…...

手把手教你:在STM32F407上跑通PTPv2从机,实测与Linux ptp4l同步(附完整代码)

STM32F407高精度时钟同步实战:PTPv2从机与Linux主机的微秒级对齐 在工业自动化、电力系统同步和分布式数据采集等场景中,网络设备间的时钟同步精度直接影响着系统性能。传统NTP协议只能达到毫秒级同步,而IEEE 1588v2(PTP)协议则能实现微秒甚至…...

从Matlab到FPGA:A律13折线PCM编码的Verilog实现与仿真

1. 从理论到实践:A律13折线PCM编码基础 第一次接触A律13折线PCM编码时,我被那些分段量化的规则绕得头晕。直到把Matlab生成的测试数据用Verilog在FPGA上跑通,才真正理解这个经典算法的精妙之处。**PCM(脉冲编码调制)**…...

计算机毕业设计:Python天气数据爬虫可视化分析系统 Django框架 线性回归 数据分析 大数据 机器学习 大模型 气象数据(建议收藏)✅

博主介绍:✌全网粉丝50W,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,…...

免费IP离线数据库完全指南:3种方法快速实现IP地址解析与地理位置查询

免费IP离线数据库完全指南:3种方法快速实现IP地址解析与地理位置查询 【免费下载链接】ip-database 免费IP离线数据库,支持IPV4IPV6 ,国家、省、市、县、运营商 项目地址: https://gitcode.com/gh_mirrors/ip/ip-database ip-database…...

AScript动态脚本语言:3大实战场景深度解析与iOS热更新解决方案

AScript动态脚本语言:3大实战场景深度解析与iOS热更新解决方案 【免费下载链接】ascript 用as3写的脚本解释器,语法类似as3 项目地址: https://gitcode.com/gh_mirrors/as/ascript 想要在不重新提交App Store的情况下动态更新iOS应用逻辑&#xf…...

深度解析Blender3mfFormat插件:3MF格式导入导出实战指南

深度解析Blender3mfFormat插件:3MF格式导入导出实战指南 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat Blender3mfFormat是一款专为Blender设计的3MF文件导入…...

OpenClaw硬件要求解析:Qwen3.5-9B流畅运行配置

OpenClaw硬件要求解析:Qwen3.5-9B流畅运行配置 1. 为什么需要关注硬件配置? 去年我在尝试用OpenClaw自动化处理公司周报时,第一次深刻体会到硬件配置的重要性。当时我的MacBook Air(8GB内存)在运行Qwen3.5-9B模型时&…...

新手程序员必看!用缓存优化RAG,让你的大模型知识库性能飙升,收藏学习!

本文介绍了RAG在大模型知识库中的应用及其面临的性能挑战,提出通过结果缓存、检索结果缓存和嵌入缓存等策略来优化RAG系统。文章强调缓存机制能有效提升响应速度、降低Token消耗,并阐述了构建高效知识缓存体系的原则,如冷热分层、设置TTL和监…...

收藏 | 新手程序员必看:大厂AI Agent开发学习路线图

本文深入分析了大厂AI Agent开发岗位的核心要求,包括扎实的后端基础、AI知识储备、主流框架掌握等。文章强调AI Agent开发与后端开发相辅相成,并非对立关系,并提供了详细的学习路线图,涵盖基础阶段、AI知识入门、实践项目及深化拓…...

收藏!小白程序员快速入门大模型:什么是AI Agent?

本文用简洁语言定义AI Agent为“有目标、会思考、能自己调用工具干活”的AI,以Deepseek和ChatGPT为例。文章详细介绍了Agent的核心能力(记忆、自主规划、行动/工具调用)及类型(编程、个人助理、内容生成等)。重点解析了…...

commonmark-java自定义渲染指南:完全掌控HTML输出格式

commonmark-java自定义渲染指南:完全掌控HTML输出格式 【免费下载链接】commonmark-java Java library for parsing and rendering CommonMark (Markdown) 项目地址: https://gitcode.com/gh_mirrors/co/commonmark-java commonmark-java是一个功能强大的Jav…...

实验室安全必备:5种危险有机试剂的淬灭操作指南(含实操视频)

实验室安全必修课:5种高危有机试剂的精准淬灭实战手册 推开有机化学实验室的门,扑面而来的除了试剂特有的气味,还有潜藏在每个操作步骤中的安全挑战。氢化锂铝遇水瞬间释放的氢气、硼氢化钠与酸接触时产生的自燃性硼烷、三光气分解时可能生成…...

手把手教你用MySQL搭建苍穹外卖数据库(附完整sky.sql源码)

从零构建外卖系统数据库:MySQL实战与设计精要 第一次接触数据库设计时,我盯着电脑屏幕发呆了整整半小时——那些看似简单的用户地址、菜品分类和订单状态,到底该如何用数据表合理表达?如果你也曾在数据库建模时感到无从下手&#…...

nli-distilroberta-base构建智能Agent:实现多轮对话与复杂任务推理

基于nli-distilroberta-base构建智能Agent:实现多轮对话与复杂任务推理 1. 智能Agent的应用场景与挑战 在现代人机交互场景中,用户越来越倾向于使用自然语言表达复杂需求。比如"帮我订下周二上午去上海的机票,并安排下午2点与客户A的会…...

3步实现QQ空间完整备份:GetQzonehistory让数字记忆永不丢失

3步实现QQ空间完整备份:GetQzonehistory让数字记忆永不丢失 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字时代,我们的青春记忆大多沉淀在QQ空间里&#…...

Cocos Creator平台适配层框架设计

在 Cocos Creator 多平台开发中,平台抽象层不仅是架构设计问题,更是工程落地能力的体现。如果仅停留在概念层面,很容易流于形式。因此,本文在系统总结的基础上,结合实际代码示例,说明如何构建一个可落地的多…...

2026届毕业生推荐的五大降重复率工具实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 由自然语言处理跟深度学习算法奠基的AI论文查重技术,可辨认文本里的模式重复、语…...

3分钟搭建PUBG终极雷达:免费实现战场全透视的完整指南

3分钟搭建PUBG终极雷达:免费实现战场全透视的完整指南 【免费下载链接】PUBG-maphack-map this is a working copy online-map from jussihi/PUBG-map-hack, use nodejs webserver instead of firebase. 项目地址: https://gitcode.com/gh_mirrors/pu/PUBG-maphac…...

Reportr安全配置指南:如何保护你的个人数据仪表板

Reportr安全配置指南:如何保护你的个人数据仪表板 【免费下载链接】dashboard Your lifes personal dashboard. 项目地址: https://gitcode.com/gh_mirrors/das/dashboard Reportr是一个开源的个人数据仪表板项目,帮助用户追踪和可视化生活中的各…...

Fancy Components最佳实践:性能优化和组件组合技巧终极指南

Fancy Components最佳实践:性能优化和组件组合技巧终极指南 【免费下载链接】fancy 项目地址: https://gitcode.com/gh_mirrors/fan/fancy Fancy Components是一个不断增长的React动画组件库,专注于为网站添加精美、有趣的微交互效果。作为开源项…...

如何快速从Google Drive下载共享文件:Python极简指南

如何快速从Google Drive下载共享文件:Python极简指南 【免费下载链接】google-drive-downloader Minimal class to download shared files from Google Drive. 项目地址: https://gitcode.com/gh_mirrors/go/google-drive-downloader Google Drive作为最常用…...