0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

芯片设计之CDC异步电路分析(五)

全栈芯片工程师 来源:全栈芯片工程师 2024-02-23 18:23 次阅读

1CDC常见错误

1.1Reconvergence

6ca2977a-d235-11ee-a297-92fbcf53809c.png

1.1.1single_source_reconvergence

6cb13596-d235-11ee-a297-92fbcf53809c.png

结构:同一个信号源头,两个同步处理器。这里提一下,有两个CDC分析工具的参数配置:

6cec29a8-d235-11ee-a297-92fbcf53809c.png

1.1.2案列1:divergence_depths为0

// divergence point
always @ (posedge tx_clk)
    ctrl <= ci0 | ci1 ;
 
// two_dff synchronizer
always @ (posedge rx_clk) begin: two_dff
    reg temp;
    temp <= ctrl;
    two_dff_sync <= temp;
end
 
// shift_reg synchronizer
always @ (posedge rx_clk) begin: shift_reg
    shift_reg_sync <= {shift_reg_sync[0], ctrl};
end
 
// reconvergence point
always @ (posedge rx_clk)
    dout <= two_dff_sync ^ shift_reg_sync[1];
 

电路如下:divergence_depth为0

6cfe82c4-d235-11ee-a297-92fbcf53809c.png

CDC报告如下:

6d390a16-d235-11ee-a297-92fbcf53809c.png

1.2Redundant

6d552d22-d235-11ee-a297-92fbcf53809c.png

案例1:

// two_dff synchronizer of tx_sig
always @ (posedge rx_clk) begin: two_dff
    reg s0 , s1;
    s0 <= tx_sig; // 1st flop
    s1 <= s0; // 2nd flop
end


// two_dff synchronizer of tx_sig
always @ (posedge rx_clk) begin: shift_reg
    reg [1:0] sh_reg;
    sh_reg <= {sh_reg[0], tx_sig};
end

6d73ee6a-d235-11ee-a297-92fbcf53809c.png

1.3multi_sync_mux_select (DMUX)


MUX的sel端fan-in信号超过一组同步器,不推荐。通常MUX的sel端只能有一组同步器。

6d8c7d9a-d235-11ee-a297-92fbcf53809c.png

案例1:

always @(posedge rx_clk) begin
    reg s1_sel1, s2_sel1;
    reg [1:0] s_sel2;
    
    s1_sel1 <= tx_sel1;
    s2_sel1 <= s1_sel1;
    
    s_sel2 <= {s_sel2[0], tx_sel2};
    
    if (s_sel2[1] | s2_sel1)
        rx_data <= tx_data;
end

电路如下:

6dcdb86e-d235-11ee-a297-92fbcf53809c.png

6de1f75c-d235-11ee-a297-92fbcf53809c.png

1.4combo_logic

6dfe816a-d235-11ee-a297-92fbcf53809c.png

1.4.1错误案列1

always @ (posedge rx_clk) begin
    s1 <= tx_sig & din;
    s2 <= s1;
end

6e14e090-d235-11ee-a297-92fbcf53809c.png

6e32bb42-d235-11ee-a297-92fbcf53809c.png


当然还有如下这种错误,除非additional logic全部是静态变量。

6e43c69e-d235-11ee-a297-92fbcf53809c.png

1.5async_reset_no_sync(异步复位、同步撤离)

1.5.1案列1

// Reset triggered by tx_clk
always @(posedge tx_clk)
tx_sig <= rst;
 
// Unsynchronized reset used in
// Rx domain
always @(posedge rx_clk,negedge tx_sig)
if (!tx_sig) rx_sig <= 1’b0;
else rx_sig <= din;

6e6eb8f4-d235-11ee-a297-92fbcf53809c.png

6e7adbc0-d235-11ee-a297-92fbcf53809c.png

1.5.2错误案列2

// Reset triggered by tx_clk
always @(posedge tx_clk)
tx_sig <= rst;
// Improperly synchronized reset used
// in Rx domain
always @(posedge rx_clk,negedge tx_sig)
if (!tx_sig) rx_reset <= 1’b0;
else rx_reset <= 1’b1;

6e8b1e72-d235-11ee-a297-92fbcf53809c.png

6e9edb42-d235-11ee-a297-92fbcf53809c.png

正确的结构如下:

6ec33690-d235-11ee-a297-92fbcf53809c.png

1.6dff_sync_gated_clk

6ed294c8-d235-11ee-a297-92fbcf53809c.png

案列1,与门做时钟gating有毛刺,需要clock gating cell。

// gated clock expression
assign gclk = rx_clk & clk_en;
always @(posedge gclk)
    sync1 <= tx_sig; // 1st DFF
always @(posedge rx_clk)
    sync2 <= sync1; // 2nd DFF

6edc718c-d235-11ee-a297-92fbcf53809c.png

6eeb849c-d235-11ee-a297-92fbcf53809c.png

1.7fanin_different_clks


同步器的输入由两个异步时钟域的组合逻辑构成,如下图所示:(还有combo logic)

6efecb88-d235-11ee-a297-92fbcf53809c.png

值得注意的是,如果sig_a或者sig_b中有一个信号是stable静态变量,那么上图结构的电路就不会被报fanin_different_clks或者combo_logic错误。

假设有sig_a、sig_b、sig_c三个信号及以上的fan_in呢?抛开静态变量后,

若所有信号都是同一个时钟域,CDC错误类型就是combo_logic;

若所有信号来自至少2个时钟域,CDC错误类型就是fanin_different_clks;

举个例子,如下图:

6f34134c-d235-11ee-a297-92fbcf53809c.png

上图电路仍会报fanin_different_clks,但是电路确实是设计者的意图,我们只需要将TEST时钟域的test_sel设置为常数0即可。

1.7.1案列1

always @ (posedge tx1_clk)
    tx1_sig <= in1;
always @ (posedge tx2_clk)
    tx2_sig <= in2;
always @ (posedge rx_clk) begin
    sync0 <= tx1_sig | tx2_sig;
    sync1 <= sync0;
end

6f490ad6-d235-11ee-a297-92fbcf53809c.png

6f5a6ea2-d235-11ee-a297-92fbcf53809c.png





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18227

    浏览量

    221976
  • 芯片设计
    +关注

    关注

    15

    文章

    888

    浏览量

    54395
  • CDC
    CDC
    +关注

    关注

    0

    文章

    55

    浏览量

    17667
  • 异步电路
    +关注

    关注

    2

    文章

    43

    浏览量

    11045
  • 静态变量
    +关注

    关注

    0

    文章

    13

    浏览量

    6606

原文标题:芯片设计之CDC异步电路(五)

文章出处:【微信号:全栈芯片工程师,微信公众号:全栈芯片工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    芯片设计中跨时钟域CDC的那些事

    这里我们先复习一下同步电路异步电路的概念。在现代SoC设计中,绝大多数的电路都是同步电路
    发表于 06-20 15:39 1280次阅读
    <b class='flag-5'>芯片</b>设计中跨时钟域<b class='flag-5'>CDC</b>的那些事

    FM电调谐集成电路CDC7099相关资料分享

    CDC7099典型应用电路分析
    发表于 03-31 07:52

    什么是同步逻辑和异步逻辑,同步电路异步电路的区别是什么?

    什么是同步逻辑和异步逻辑,同步电路异步电路的区别是什么?
    发表于 06-18 08:52

    异步电路原理是什么?有哪些优劣势?

    异步电路原理是什么?有哪些优劣势?通过英特尔的Loihi芯片实现异步电路
    发表于 06-21 07:17

    CDC(四)CDC典型错误案例 精选资料分享

    CDC典型错误案例一、主要概念**同步逻辑和异步逻辑:**时钟域为由单个时钟或具有固定相位关系的时钟驱动的设计部分。也就是说,在一个模块中一个时钟和他的翻转或者分频时钟认为是相同的时钟域,其所驱动
    发表于 07-26 07:03

    基于MATLAB的异步电机特性仿真与分析

    基于MATLAB的异步电机特性仿真与分析终稿 摘要 异步电动机以其结构简单、运行可靠、效率较高、成本较低等特点,在日常生活中得到广泛的使用。目前,电动机控制系统在追求更高的控制精度的基础上变得越来越
    发表于 09-03 06:11

    DCDC电源中同步与异步之间有哪些区别

    整流使用的二极管来说,同步整流大大的降低了损耗!但是价格也相对昂贵!采用同步整流和异步整流的好处!采用同步整流时,降低了损耗,提高了工作效率,与对应的是芯片的价格昂贵。异步二极管轻载
    发表于 11-12 08:07

    异步时序逻辑电路

    异步时序逻辑电路:本章主要从同步时序逻辑电路异步时序逻辑电路状态改变方式不同的特殊性出发, 系统的介绍
    发表于 09-01 09:12 0次下载

    cdc路径方案帮您解决跨时钟域难题

    这一章介绍一下CDC也就是跨时钟域可能存在的一些问题以及基本的跨时钟域处理方法。跨时钟域的问题主要存在于异步
    的头像 发表于 11-30 06:29 6649次阅读
    <b class='flag-5'>cdc</b>路径方案帮您解决跨时钟域难题

    火币为什么要停止CDC交易

    一石激起千层浪,火币公告发出之后迅速引发连锁反应,先是ZB交易所紧随其后关闭CDC交易,紧接着CDC项目负责人杨宁迅速接受媒体采访,倒苦水撇清关系。更多媒体开始深挖,CDC更多内幕也被披露出来。广大群众这才知道,原来
    发表于 11-08 11:33 6338次阅读

    如何使用report_cdc命令分析、调试和修复CDC问题

    了解如何使用命令report_cdc分析,调试和修复设计中的CDC问题。 命令report_cdc是一个仅限TCL的命令,用于分析您的设计
    的头像 发表于 11-21 06:05 4297次阅读

    ic设计——CDC的基本概念

    一个系统中往往会存在多个时钟,这些时钟之间有可能是同步的,也有可能是异步的。如果一个系统中,异步时钟之间存在信号通道,则就会存在CDC(clock domain crossing)问题。在下面的文章里,我们将会讨论
    发表于 01-04 16:59 1.4w次阅读
    ic设计——<b class='flag-5'>CDC</b>的基本概念

    STM32 USB如何配置多个CDC设备—5个CDC设备

    title: STM32 USB如何配置多个CDC设备—5个CDC设备,date: 2021/1/18 20:10:25 +8,STM32 USB如何配置多个CDC设备—5个CDC设备
    发表于 12-28 19:43 30次下载
    STM32 USB如何配置多个<b class='flag-5'>CDC</b>设备—5个<b class='flag-5'>CDC</b>设备

    ASIC/FPGA设计中的CDC问题分析

    CDC(不同时钟之间传数据)问题是ASIC/FPGA设计中最头疼的问题。CDC本身又分为同步时钟域和异步时钟域。这里要注意,同步时钟域是指时钟频率和相位具有一定关系的时钟域,并非一定只有频率和相位相同的时钟才是同步时钟域。
    的头像 发表于 05-12 15:29 1376次阅读

    芯片设计进阶之路—SpyGlass CDC流程深入理解

    随着技术的发展,数字电路的集成度越来越高,设计也越来越复杂。很少有系统会只工作在同一个时钟频率。一个系统中往往会存在多个时钟,这些时钟之间有可能是同步的,也有可能是异步的。如果一个系统中,异步时钟之间存在信号通道,则就会存在
    发表于 06-21 10:54 9584次阅读
    <b class='flag-5'>芯片</b>设计进阶之路—SpyGlass <b class='flag-5'>CDC</b>流程深入理解