首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >同步与异步电路信号交互的问题

同步与异步电路信号交互的问题

作者头像
数字芯片社区
发布于 2022-12-18 06:32:07
发布于 2022-12-18 06:32:07
1K00
代码可运行
举报
文章被收录于专栏:数字芯片数字芯片
运行总次数:0
代码可运行

1.同步电路设计

2.全异步电路设计

3.异步信号与同步电路交互的问题及其解决方法

4.SoC设计中的时钟规划策略

1.同步电路设计

同步电路,即电路中的所有受时钟控制的单元,如触发器(Flip Flop)或寄存器(Register),全部由一个统一的全局时钟控制。

同步电路的时序收敛

触发器的建立时间和保持时间

同步电路设计的优点

  • 在同步设计中,EDA工具可以保证电路系统的时序收敛,有效避免了电路设计中竞争冒险现象
  • 由于触发器只有在时钟边缘才改变取值,很大限度地减少了整个电路受毛刺和噪声影响的可能

同步电路设计的缺点

  • 时钟偏斜(Clock Skew)
  • 时钟树综合,需要加入大量的延迟单元,使得电路的面积和功耗大大增加
  • 时钟抖动(Clock Jitter)

时钟偏斜

2.全异步电路设计

全异步设计跟同步设计最大的不同就是它的电路中的数据传输可以在任何时候发生,电路中没有一个全局的或局部的控制时钟。

异步电路设计的基本原理

自定时的流水线数据通路

握手协议

握手协议原理

异步电路设计的优点

  • 模块化特性突出
  • 对信号的延迟不敏感
  • 没有时钟偏斜问题
  • 有潜在的高性能特性
  • 好的电磁兼容性
  • 具有低功耗的特性 异步电路设计的缺点
  • 设计复杂
  • 缺少相应的EDA工具的支持
  • 在大规模集成电路设计中应避免采用异步电路设计

3.异步信号与同步电路交互的问题及其解决方法

3.1亚稳态现象

亚稳态示意图

亚稳态信号的传播

亚稳态问题的解决及其RTL实现

亚稳态现象的解决方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module  synchronizer (   
              bclk,            //目的时钟,与aclk异步的时钟
              reset_b,         //全局异步复位信号
              adat,            //异步输入信号,工作在aclk
              bdat,            //同步器输出
         );
input     bclk;
input     reset_b;
input     adapt;
output    bdat;
wire     bdat;
reg      bdat1;
reg      bdat2;
always @ (posedge bclk or negedge reset_b)
if (reset_b)
    {bdat2,bdat1} <= 2 ' b0;
else
    {bdat2,bdat1} <= {bdat1,adat};
assign bdat = bdat2;
endmodule

3.2快时钟同步慢时钟域下的异步控制信号

快时钟同步慢时钟信号示意图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module  synchronizer (
                      clk_fst,
                      reset_b,
                      rd_en,
                      rd_en_s2f
               );
    input      clk_fst, reset_b, rd_en
    output     rd_en_s2f;      
    wire      rd_en_s2f;      
    reg       rd_en_s2f1, rd_en_s2f2, rd_en_s2f3
always @ (posedge clk_fst or negedge reset_b)  
    if (!reset_b)                                  
       {rd_en_s2f3,rd_en_s2f2,rd_en_s2f1} <= 3'b111;
    else
       {rd_en_s2f3,rd_en_s2f2,rd_en_s2f1}<={rd_en_s2f2,rd_en_s2f1,rd_en};
always @ (rd_en_s2f3  or  rd_en_s2f2)
    case ({rd_en_s2f3,rd_en_s2f2})
            2'b01:
                rd_en_s2f <= 1'b1;        
            default:
                rd_en_s2f <= 1'b0;
     endcase


3.3慢时钟同步快时钟域下的异步控制信号

慢时钟同步快时钟信号示意图

解决办法 : 握手机制实现方法一

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module adapt_gen (
                 aclk,       //快时钟
                 reset_b,    //系统复位信号
                 adat,       //原始控制信号
                 abdat2,     //从慢时钟域反馈回来的同步控制信号
                 adat1       //经过保持后的信号输出
       );
    input aclk, reset_b, adat, abdat2;
    output adat1;
    reg adat1;
    always @ (posedge aclk or negedge reset_b)
    if (!reset_b)
          adat1 <= 1'b0;    
    else if (abdat2)
          adat1 <= 1'b0;
    else if (adat)
          adat1 <= 1'b1;
endmoudule 

解决办法 : 握手机制实现方法二

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module stall_logic (
                rd_en,
                rd_en_
                ack_s2f,
                stall_b
        );
inputrd_en;
input rd_en_ack_s2f;
output stall_b;      
wire  stall_b;      
always @ (rd_en or rd_en_ack_s2f)
if (rd_en_ack_s2f)
    stall_b <= 1'b1;
else if (rd_en)
    stall_b <= 1'b0;
else
    stall_b <= 1'b1;
endmodule


3.4异步时钟域的数据同步

  • 握手机制

握手同步异步数据

  • 先入先出队列(FIFO)

FIFO结构图

FIFO空满示意图

同步异步时钟FIFO的电路行为

  • 待同步的数据时钟域会在其写信号的控制之下,将数据写入到FIFO中
  • 目的时钟域在发现空标志位无效后,执行FIFO读动作,读出被异步时钟域写入FIFO的数据
  • 如果只要同步一个数据,空标志位再次有效
  • 如果需要同步多个数据,因为FIFO的读/写之间可以不受影响的进行,所以待同步

FIFO设计中的亚稳态问题

通常,通过比较读/写指针是否相等来判断FIFO是否为空。而因为读/写指针属于不同的时钟域,两者显然不能直接连到比较器的两端来产生空信号,否则会造成读FIFO的目的时钟域的电路碰到亚稳态现象.

解决办法

  • 以格雷码编码表示读/写指针,用格雷码加法器来实现读/写地址的加一动作
  • 用同步器将读指针同步到FIFO满标志的产生逻辑,同样用同步器将写指针同步到FIFO空标志的产生逻辑中

新的异步FIFO的结构框图

4.SoC设计中的时钟规划策略

首先尽可能使用同步设计:

  • 对于同步电路,逻辑综合和时钟树综合等EDA工具能发挥更大的作用,可以用静态时序分析工具分析单时钟同步设计的时序收敛问题
  • 可测性设计(DFT)的插入工作得到最大的简化

其次,注意同步电路设计的缺陷

  • 噪声问题
  • 时钟树上的功耗很大

如果必须采用不同的时钟,则要注意

  • 后端设计的复杂化,如约束条件中要考虑多周期路径(Multi Cycle Path)
  • 可测性设计更加复杂,因为此时系统中需要有多条独立的扫描链
  • 越多的时钟域,发生亚稳态的概率就会越大

最后,设计规划中应注意以下几点:

  • 尽可能将不同时钟域的数量减到越少越好
  • 尽可能将异步交互电路归入同一或多个独立的模块,这样不但方便后端设计脚本的书写,也方便代码的阅读
  • 尽可能避免使用电平触发器(Latch),因为静态时序分析会变得复杂,不能得到EDA工具很好的支持
  • 尽可能减小时钟树的延时,因为这个延时可能会造成系统功能失效和多余的功耗;
  • 任何异步时钟域交互的环节都要尽可能避免亚稳态现象.

声明:未经授权,禁止转载

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字ICer 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
跨时钟域传输总结(包含verilog代码|Testbench|仿真结果)
快时钟域相比慢时钟域采样速度更快,也就是说从慢时钟域来到快时钟域的信号一定可以被采集到。既然快时钟一定可以采集到慢时钟分发的数据,那么考虑的问题就只剩下如何保证采样到的信号质量!最常用的同步方法是双级触发器缓存法,俗称延迟打拍法。信号从一个时钟域进入另一个时钟域之前,将该信号用两级触发器连续缓存两次,可有效降低因为时序不满足而导致的亚稳态问题。
Loudrs
2023/06/08
6.7K1
跨时钟域传输总结(包含verilog代码|Testbench|仿真结果)
verilog同步fifo_verilog 异步复位
在上篇文章:同步FIFO的两种Verilog设计方法(计数器法、高位扩展法)中我们介绍了FIFO的基本概念,并对同步FIFO的两种实现方法进行了仿真验证。而异步FIFO因为读写时钟不一致,显然无法直接套用同步FIFO的实现方法,所以在本文我们将用Verilog实现异步FIFO的设计。
全栈程序员站长
2022/09/21
6910
verilog同步fifo_verilog 异步复位
【FPGA——基础篇】同步FIFO与异步FIFO——Verilog实现「建议收藏」
FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据, 其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。
全栈程序员站长
2022/07/28
6.6K0
【FPGA——基础篇】同步FIFO与异步FIFO——Verilog实现「建议收藏」
FPGA逻辑设计回顾(4)亚稳态与单比特脉冲信号的CDC处理问题
注:本文首发自易百纳技术社区,原文地址:https://www.ebaina.com/articles/140000005331
Reborn Lee
2021/01/26
1K1
异步fifo的10个测试关注点_异步FIFO
FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据。
全栈程序员站长
2022/09/21
1.4K0
异步fifo的10个测试关注点_异步FIFO
同步FIFO和异步FIFO总结[通俗易懂]
FIFO是一种先进先出数据缓存器,它与普通存储器的区别是没有外部读写地址线,使用起来非常简单,缺点是只能顺序读写,而不能随机读写。
全栈程序员站长
2022/09/21
3.9K0
同步FIFO和异步FIFO总结[通俗易懂]
异步FIFO设计原理与设计方法以及重要问题汇总(包含verilog代码|Testbench|仿真结果)
经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字IC中一些经典电路的设计有初步入门了解。能力有限,纰漏难免,欢迎大家交流指正。快速导航链接如下:
Loudrs
2023/06/05
5.7K1
异步FIFO设计原理与设计方法以及重要问题汇总(包含verilog代码|Testbench|仿真结果)
异步复位同步释放(verilog代码|Testbench|仿真结果)
经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字IC中一些经典电路的设计有初步入门了解。能力有限,纰漏难免,欢迎大家交流指正。快速导航链接如下:
Loudrs
2023/05/23
5.3K0
异步复位同步释放(verilog代码|Testbench|仿真结果)
同步fifo的verilog代码_verilog 异步复位
  本文大部分内容来自Clifford E. Cummings的《Simulation and Synthesis Techniques for Asynchronous FIFO Design》,经过自己的一些改变,理论部分为转载,代码自己完成。
全栈程序员站长
2022/09/21
8220
同步fifo的verilog代码_verilog 异步复位
异步FIFO
如上图所示的同步模块synchronize to write clk,其作用是把读时钟域的指针rptr采集到写时钟wr_clk域,然后和写时针wptr进行比较从而产生或撤销写写满标志wfull;类似地,同步模块synchronize to read clk的作用是把写时钟域的写指针wptr采集到读时钟域,然后和读指针rptr进行比较从而产生或撤销读空标志位rempty。
数字芯片社区
2020/08/27
1.5K0
异步FIFO
POE设计实战_python异步执行
脚 本:makefile 工 具:vcs 和 verdi 文 章:1. 同步FIFO的设计和功能验证(附源码)     2. Verilog的亚稳态现象和跨时钟域处理方法
全栈程序员站长
2022/11/03
5330
同步FIFO和异步FIFO
FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据, 其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。
碎碎思
2020/06/30
2.1K0
FPGA中的亚稳态
在FPGA系统中,如果数据传输中不满足触发器的 Tsu和 Th不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值。这段时间称为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是稳定到0或者1,是随机的,与输入没有必然的关系。
数字芯片社区
2020/07/20
1.4K1
FPGA中的亚稳态
FPGA基础知识极简教程(7)详解亚稳态与跨时钟域传输
这篇文章主要是对过去对于亚稳态以及跨时钟域传输问题的一次总结,作为这个系列博文的一次梳理吧。注:微信公众号也会更新,欢迎大家关注,我有了新文章会通过微信公众号推送通知大家,让你有选择的看到我的最新动态。
Reborn Lee
2020/06/29
1.5K0
FPGA基础知识极简教程(4)从FIFO设计讲起之异步FIFO篇
一开始是想既然是极简教程,就应该只给出FIFO的概念,没想到还是给出了同步以及异步FIFO的设计,要不然总感觉内容不完整,也好,自己设计的FIFO模块不用去担心因IP核跨平台不通用的缺陷!那我们开始吧。
Reborn Lee
2020/06/29
1.8K0
高级FPGA设计技巧!多时钟域和异步信号处理解决方案
有一个有趣的现象,众多数字设计特别是与FPGA设计相关的教科书都特别强调整个设计最好采用唯一的时钟域。换句话说,只有一个独立的网络可以驱动一个设计中所有触发器的时钟端口。虽然这样可以简化时序分析以及减少很多与多时钟域有关的问题,但是由于FPGA外各种系统限制,只使用一个时钟常常又不现实。FPGA时常需要在两个不同时钟频率系统之间交换数据,在系统之间通过多I/O接口接收和发送数据,处理异步信号,以及为带门控时钟的低功耗ASIC进行原型验证。本章讨论一下在FPGA设计中多时钟域和异步信号处理有关的问题和解决方案,并提供实践指导。
碎碎思
2020/07/14
2.6K0
高级FPGA设计技巧!多时钟域和异步信号处理解决方案
实现异步的几种方式_异步怎么实现
FIFO根据输入输出时钟是否一致,分为同步FIFO与异步FIFO。同步FIFO中,读写控制信号以及数据均处于同一时钟域,满足STA分析时一般不会出现亚稳态等不稳定情形;而对于异步FIFO,读写相关信号处于不同时钟域,信号的不同步可能会导致亚稳态,导致FIFO工作异常,设计较为复杂;在之前的记录中,我们对同步FIFO的设计进行了分析:
全栈程序员站长
2022/09/21
8130
实现异步的几种方式_异步怎么实现
异步fifo的工作原理(netty异步方法)
本次设计主要介绍异步FIFO中读写指针和格雷码的原理及其实现,最后会有代码和仿真文件
全栈程序员站长
2022/07/28
1.1K0
异步fifo的工作原理(netty异步方法)
FPGA、数字IC系列(1)——乐鑫科技2021数字IC提前批笔试(上)
整理乐鑫科技2021届招聘的数字IC提前批笔试题,并做了部分答案和解析,有问题的地方欢迎一起探讨。
FPGA探索者
2021/03/15
1.1K0
同步时钟电路设计及其与异步时钟信号交互的问题
所谓同步电路,即电路中的所有受时钟控制的单元,如触发器( Flip Flop)或寄存器( register)都由一个统一的全局时钟控制。如图 1.1 所示,触发器 R1 和 R2 都都由一个统一的时钟 clk 来控制时序,在 R1 和 R2 之间有一堆组合逻辑,这就是一个最简单的同步电路。
碎碎思
2020/06/30
2K0
推荐阅读
相关推荐
跨时钟域传输总结(包含verilog代码|Testbench|仿真结果)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验