前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >同步与异步电路信号交互的问题

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

作者头像
数字芯片社区
发布2022-12-18 14:32:07
8710
发布2022-12-18 14:32:07
举报
文章被收录于专栏:数字芯片

1.同步电路设计

2.全异步电路设计

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

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

1.同步电路设计

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

同步电路的时序收敛

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

同步电路设计的优点

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

同步电路设计的缺点

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

时钟偏斜

2.全异步电路设计

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

异步电路设计的基本原理

自定时的流水线数据通路

握手协议

握手协议原理

异步电路设计的优点

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

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

3.1亚稳态现象

亚稳态示意图

亚稳态信号的传播

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

亚稳态现象的解决方法

代码语言:javascript
复制
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
复制
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
复制
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
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.同步电路设计
  • 2.全异步电路设计
  • 3.异步信号与同步电路交互的问题及其解决方法
    • 3.1亚稳态现象
      • 3.3慢时钟同步快时钟域下的异步控制信号
        • 3.4异步时钟域的数据同步
        • 4.SoC设计中的时钟规划策略
        相关产品与服务
        数据集成
        数据集成(DataInLong)源于腾讯开源并孵化成功的 ASF 项目 Apache InLong(应龙),依托 InLong 百万亿级别的数据接入和处理能力支持数据采集、汇聚、存储、分拣数据处理全流程,在跨云跨网环境下提供可靠、安全、敏捷的全场景异构数据源集成能力。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档