【从零开始のIC学习笔记】-跨时钟域处理

这篇具有很好参考价值的文章主要介绍了【从零开始のIC学习笔记】-跨时钟域处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

两个不同时钟域需要进行跨时钟同步处理, 不同情况下的处理方式不同,可分为

慢时钟域到快时钟域

        单比特

        多比特

快时钟域到慢时钟域

        单比特

        多比特

多bit的跨时钟域处理,无论是快时钟域到慢时钟域,还是慢时钟域到快时钟域,都可采用异步FIFO的方式:异步FIFO

异步fifo跨时钟域处理,数字IC,Verilog,学习

 本文主要介绍单bit的跨时钟域方法

无论两个时钟域情况如何,再确保能够采样到数据的情况下,从A时钟域到B时钟域的信号都需要首先消除亚稳态,最后将A时钟域一个周期的信号恢复至B时钟域一个周期

异步fifo跨时钟域处理,数字IC,Verilog,学习


消除亚稳态

        消除亚稳态通常的做法是”打两拍“-两级同步,根据工程经验,打两拍后,能够消除99%以上的亚稳态

异步fifo跨时钟域处理,数字IC,Verilog,学习

实现代码如下,需要注意,由DATA_IN到输出,中间不能有任何组合逻辑

always@(posedge clk_a or negedge rst_n)
    if(!rst_n)
        Q1 <= 1'b0;
    else
        Q1 <= data_in;

always@(posedge clk_b or negedge rst_n)          //b时钟域同步两拍
    if(!rst_n) begin 
        Q2  <= 1'b0;
        out <= 1'b0;
    end
    else begin
        Q2  <= Q1;
        out <= Q2;
    end

慢时钟域到快时钟域-单bit:        

        慢时钟域到快时钟域,可能会存在重复采样的问题,因此需要使用边沿检测将慢时钟域一个周期的数据同步至快时钟域的一个周期

        边沿检测的原理:输出的信号打一拍,当打拍前信号为高电平,打拍后信号为低电平,表示信号由高电平变化为低电平,此时为下降沿;上升沿同理

异步fifo跨时钟域处理,数字IC,Verilog,学习​​​​​​​

always@(posedge clk_a or negedge rst_n)
    if(!rst_n)
        q1  <= 1'b0;
    else
        q1  <= data_in;

always@(posedge clk_b or negedge rst_n)
    if(!rst_n) begin
        q2  <= 1'b0;
        q3  <= 1'b0;
        out <= 1'b0;     
    end
    else begin
        q2  <= q1;
        q3  <= q2;
        out <= q3;
    end

assign out_data_pos = ~q3 && out ;      //上升沿,前为低,后为高
assign out_data_ndg = q3 && ~out ;      //下降沿,前为高,后为低      

快时钟域到慢时钟域-单bit:

        快时钟域到慢时钟域,可能出现漏采,导致数据丢失的问题,使用脉冲同步器将快时钟域的一个脉冲信号转换为电平信号。

异步fifo跨时钟域处理,数字IC,Verilog,学习

       异步fifo跨时钟域处理,数字IC,Verilog,学习

always@(posedge clk_fast or negedge rst_n)
	if(!rst_n)
		q1 <= 1'b0;
	else
		q1 <= data_in? ~q1:q1;      //将脉冲信号转换为电平信号,每来一个脉冲,电平进行翻转

always@(posedge clk_slow or negedge rst_n)
	if(!rst_n)begin
		q2 <= 1'b0;
		q3 <= 1'b0;
		out <= 1'b0;
	end
	else begin	
		q2  <= q1;
		q3  <= q2;
		out <= q3;
	end

assign dataout = out ^ q3;       //得到慢时钟域的一个周期脉冲信号

总结

         跨时钟与处理:

        多比特:异步FIFO

        单比特

        快到慢——脉冲同步器

        慢到快——边沿检测器文章来源地址https://www.toymoban.com/news/detail-621480.html


到了这里,关于【从零开始のIC学习笔记】-跨时钟域处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FIFO设计笔记(双口RAM、同步FIFO、异步FIFO)Verilog及仿真

    0.1、FIFO FIFO (First-In-First-Out) 是一种先进先出的数据缓存器,在数字ASIC设计中常常被使用。在实际开发中,多数都是直接使用公司经过top-out验证的FIFO IP或者是ISE/Vivado工具自带的FIFO IP,并不需要自己造轮子。但是,作为设计者,必须要掌握FIFO的设计方法,这样可以适配于各种

    2023年04月09日
    浏览(41)
  • 【从零开始学习JAVA | 第四十六篇】处理请求参数

            在我们之前的学习中,我们已经基本学习完了JAVA的基础内容,从今天开始我们就逐渐进入到JAVA的时间,在这一大篇章,我们将对前后端有一个基本的认识,并要学习如何成为一名合格的后端工程师。今天我们介绍的内容是:如何在后端处理前端的请求 目录 前言:

    2024年02月11日
    浏览(41)
  • 学习笔记 -- 从零开始学习Android Camera2 -- (1)

    学习一个框架,第一步学习肯定是照着代码看文档。 既然要看代码,就要看最权威的,这里我是代码是参照https://github.com/android/camera-samples android给的官方示例,结合官方文档https://developer.android.com/reference/android/hardware/camera2/package-summary来看,所以首先要先看一遍文档,然后重

    2024年02月03日
    浏览(47)
  • 从零开始学习软件测试-第47天笔记

    yaml yaml是一种所有编程语言都可用的友好的数据参数化标准。 yaml里只能使用字典或列表这两种数据类型。 使用缩进表示层级关系,但只允许使用空格缩进。 缩进时空格的数量不重要,只要在同一层级数据左侧对齐即可。 大小写敏感。 下载yaml模块 pip install PyYAML yaml的写法

    2024年02月07日
    浏览(49)
  • 从零开始学习软件测试-第39天笔记

    http消息结构 请求报文 请求行 请求方式  url  协议版本 请求头 空行 请求体 响应报文 响应行 协议版本  状态码  状态消息 响应头 空行 响应体 请求参数类型 path参数 写在路径中的 https://xxx.xxx.com/参数值 query参数 写在url问号后面,以键值对形式存在 https://xxx.xxx.com/xx?参数名

    2024年02月09日
    浏览(37)
  • 【Web】从零开始的js逆向学习笔记(上)

    目录 一、逆向基础 1.1 语法基础 1.2 作用域 1.3 窗口对象属性 1.4 事件 二、浏览器控制台 2.1 Network Network-Headers Network-Header-General Network-Header-Response Headers Network-Header-Request Headers 2.2 Sources 2.3 Application 2.4 Console 三、加密参数的定位方法 3.1 巧用搜索 3.2 堆栈调试 3.3 控制台调试 3.

    2024年02月21日
    浏览(44)
  • C#从零开始的学习笔记(2)运行和开发环境

    .NET Framework C#的运行环境,换句话说就是.NET Framework的运行环境。Windows7中包含了.NET Framework3.5,windows10中包含了.NET Framework4.6,Windows10 v1703中包含了.NET Framework4.7。安装visual studio的时候,也会安装相应版本的.NET Framework。当然,各位读者也可以自行前往Microsoft官网上下载最新的

    2024年02月08日
    浏览(54)
  • 从零开始学ZYNQ(FPGA)笔记二 | 认识学习内容

    目录 1. 认识FPGA 什么是FPGA FPGA的编程过程  2. 认识ARM 什么是ARM ARM与FPGA的区别 ARM与Linux 3. 认识ZYNQ ZYNQ与FPGA的区别 ZYNQ的\\\"ARM\\\"和\\\"FPGA\\\" 关于PL 关于PS 4. 学习用板载资源 5. 总结         FPGA是一种集成电路,它可以在制造后由客户或设计者根据需要配置电路功能 。FPGA的内部由可

    2024年02月08日
    浏览(51)
  • 从零开始学习Netty - 学习笔记 - NIO基础 - ByteBuffer: 简介和基本操作

    1.1. Channel Buffer Channel 在Java NIO(New I/O)中,“Channel”(通道)是一个重要的概念,用于 在非阻塞I/O操作中进行数据的传输 。Java NIO提供了一种更为灵活和高效的I/O处理方式,相比于传统的I/O,它具有更好的性能和可扩展性。 常见的Java NIO中的通道类型: FileChannel(文件通道

    2024年02月20日
    浏览(46)
  • 【AI】《动手学-深度学习-PyTorch版》笔记(十二):从零开始实现softmax回归

    对于图像算法,每个像素可以视为一个特征,例如图像的分辨率为28x28,则有784个特征。而且常常将二维的图像像素矩阵展开为长度为784的向量。 本例中,将使用Fashion-MNIST数据集,它是一个服装分类数据集,可以将服装分为10个类别。 输入图像的分辨率为28x28,即特征是长度

    2024年02月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包