【IC设计】跨时钟异步处理系列——单比特跨时钟

2024-08-28 10:36

本文主要是介绍【IC设计】跨时钟异步处理系列——单比特跨时钟,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 建立时间和保持时间
  • 单比特信号的跨时钟处理
    • 慢时钟域的信号传输到快时钟域
      • 打两拍
    • 快时钟域的信号传输到慢时钟域
      • 方案一 脉冲展宽+同步 (打拍打拍,进行或)
        • 代码
        • 原理图
      • 方案二 脉冲电平检测+双触发器同步+边沿检测
        • 代码
        • 原理图

建立时间和保持时间

  1. 所谓的建立时间或者保持时间都是在描述一种时钟变化的边沿上的数据状态。
  2. 建立时间:在时钟的有效沿(以上升沿为例)到来之前,数据的输入端信号必须保持稳定的最短时间
  3. 保持时间:在时钟的有效沿(以上升沿为例)到来之后,数据的输入端信号必须保持稳定的最短时间

单比特信号的跨时钟处理

慢时钟域的信号传输到快时钟域

打两拍

快时钟域的信号传输到慢时钟域

在这里插入图片描述
如图所示,第一行是脉冲信号,第二行是慢时钟域的时钟。如果从快时钟域要同步一个脉冲信号到慢时钟域,容易出现上升沿没有采样到脉冲信号的情况。

方案一 脉冲展宽+同步 (打拍打拍,进行或)

在这里插入图片描述

代码
module fast2slow_cdc 
(input   i_clk_f     ,input   i_pluse_f   ,input   i_rst_n     ,input   i_clk_s     ,output  o_pluse_s  
);
/*
always @(posedge i_clk_f) beginr_pluse[0] <= i_pluse_f  ;r_pluse[1] <= r_pluse[0] ;r_pluse[2] <= r_pluse[1] ;r_pluse[3] <= r_pluse[2] ;r_pluse[4] <= r_pluse[3] ;
end
*/reg [2:0]    r_pluse    ;
always @(posedge i_clk_f or negedge i_rst_n) beginif(~i_rst_n)    beginr_pluse <=  'b0;endelse beginr_pluse <= {r_pluse[1:0],i_pluse_f};end
endwire   w_pluse ;
assign  w_pluse = |r_pluse ;reg   r_pluse_d0  ;
reg   r_pluse_d1  ;
always @(posedge i_clk_s) beginr_pluse_d0 <= w_pluse    ;r_pluse_d1 <= r_pluse_d0 ;
endassign  o_pluse_s = r_pluse_d1 ;endmodule

存在的问题:采用脉冲展宽+同步,在或时可能产生毛刺

原理图

在这里插入图片描述

方案二 脉冲电平检测+双触发器同步+边沿检测

优点: 对时序比较友好
缺点: 相邻的脉冲太近时,会检测不到
在这里插入图片描述

代码
module fast2slow_cdc2(input	i_clk_f			,input	i_pluse_f		,input	i_clk_s			,output	o_pluse_s
);reg	r_temp	=	0	;always@(posedge i_clk_f)	beginif(i_pluse_f)r_temp	    <=	~r_temp;elser_temp	<=	r_temp;endreg	r_temp_d0;reg	r_temp_d1;reg	r_temp_d2;always@(posedge i_clk_s)	beginr_temp_d0	<=	r_temp		;r_temp_d1	<=	r_temp_d0	;r_temp_d2	<=	r_temp_d1	;endassign o_pluse_s	=	r_temp_d2	^	r_temp_d1	;
endmodule
原理图

在这里插入图片描述

这篇关于【IC设计】跨时钟异步处理系列——单比特跨时钟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114522

相关文章

基于C++的UDP网络通信系统设计与实现详解

《基于C++的UDP网络通信系统设计与实现详解》在网络编程领域,UDP作为一种无连接的传输层协议,以其高效、低延迟的特性在实时性要求高的应用场景中占据重要地位,下面我们就来看看如何从零开始构建一个完整... 目录前言一、UDP服务器UdpServer.hpp1.1 基本框架设计1.2 初始化函数Init详解

Python字符串处理方法超全攻略

《Python字符串处理方法超全攻略》字符串可以看作多个字符的按照先后顺序组合,相当于就是序列结构,意味着可以对它进行遍历、切片,:本文主要介绍Python字符串处理方法的相关资料,文中通过代码介... 目录一、基础知识:字符串的“不可变”特性与创建方式二、常用操作:80%场景的“万能工具箱”三、格式化方法

Spring Boot 处理带文件表单的方式汇总

《SpringBoot处理带文件表单的方式汇总》本文详细介绍了六种处理文件上传的方式,包括@RequestParam、@RequestPart、@ModelAttribute、@ModelAttr... 目录方式 1:@RequestParam接收文件后端代码前端代码特点方式 2:@RequestPart接

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

SpringSecurity中的跨域问题处理方案

《SpringSecurity中的跨域问题处理方案》本文介绍了跨域资源共享(CORS)技术在JavaEE开发中的应用,详细讲解了CORS的工作原理,包括简单请求和非简单请求的处理方式,本文结合实例代码... 目录1.什么是CORS2.简单请求3.非简单请求4.Spring跨域解决方案4.1.@CrossOr

requests处理token鉴权接口和jsonpath使用方式

《requests处理token鉴权接口和jsonpath使用方式》文章介绍了如何使用requests库进行token鉴权接口的处理,包括登录提取token并保存,还详述了如何使用jsonpath表达... 目录requests处理token鉴权接口和jsonpath使用json数据提取工具总结reques

C# 空值处理运算符??、?. 及其它常用符号

《C#空值处理运算符??、?.及其它常用符号》本文主要介绍了C#空值处理运算符??、?.及其它常用符号,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、核心运算符:直接解决空值问题1.??空合并运算符2.?.空条件运算符二、辅助运算符:扩展空值处理

浅析Python中如何处理Socket超时

《浅析Python中如何处理Socket超时》在网络编程中,Socket是实现网络通信的基础,本文将深入探讨Python中如何处理Socket超时,并提供完整的代码示例和最佳实践,希望对大家有所帮助... 目录开篇引言核心要点逐一深入讲解每个要点1. 设置Socket超时2. 处理超时异常3. 使用sele