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

    文章

    18677

    浏览量

    225478
  • 芯片设计
    +关注

    关注

    15

    文章

    960

    浏览量

    54520
  • CDC
    CDC
    +关注

    关注

    0

    文章

    55

    浏览量

    17711
  • 异步电路
    +关注

    关注

    2

    文章

    47

    浏览量

    11068
  • 静态变量
    +关注

    关注

    0

    文章

    13

    浏览量

    6625

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

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

收藏 人收藏

    评论

    相关推荐

    FPGA User Guidereport_cdc

    report_cdc 可以报告设计中所有的 cdc 路径并将其分类(前提是时钟被约束好),我们可以基于该报告来检查设计中是否有不安全的 cdc 路径。
    发表于 11-28 10:53 1088次阅读

    分析单元电路放大电路的特点及其功能作用

    一个复杂电路图是由很多个单元电路组合实现的。 掌握单元电路分析方法,就能够看懂整个电路图。 本文我们将
    发表于 02-20 09:19 1580次阅读
    <b class='flag-5'>分析</b>单元<b class='flag-5'>电路</b><b class='flag-5'>之</b>放大<b class='flag-5'>电路</b>的特点及其功能作用

    异步时序逻辑电路

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

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

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

    ic设计——CDC的基本概念

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

    在进行USB CDC类开发时 无法发送64整数倍的数据

    在进行USB CDC类开发时 无法发送64整数倍的数据(通信电源技术审稿费用)-在向客户推STM32F4芯片的时候,客户反馈使用CDC类无法发送64个字节,于是通过深入研究问题,发现问题
    发表于 08-04 17:57 18次下载
    在进行USB <b class='flag-5'>CDC</b>类开发时 无法发送64整数倍的数据

    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>设备

    电路理论的基础知识正弦稳态电路分析

    电路理论的基础知识正弦稳态电路分析
    发表于 01-13 13:53 0次下载

    电路分析基础第章正弦电路的稳态分析课件下载

    电路分析基础第章正弦电路的稳态分析课件下载
    发表于 02-11 09:09 0次下载

    要实现CDC验证标准,ASIC开发团队将会面临哪些挑战

    在多个第三方IP核、外部接口和低功耗设计驱动下,数十亿门级的专用集成电路(ASIC)已具备几十甚至数百个异步时钟域,而要解决跨时钟域(CDC)问题,RTL仿真和静态时序分析(STA)都
    的头像 发表于 03-21 12:12 1727次阅读

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

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

    XDC约束技巧CDC

    上一篇《XDC 约束技巧之时钟篇》介绍了 XDC 的优势以及基本语法,详细说明了如何根据时钟结构和设计要求来创建合适的时钟约束。我们知道 XDC 与 UCF 的根本区别之一就是对跨时钟域路径(CDC
    的头像 发表于 04-03 11:41 1581次阅读

    PyTorch教程13.2异步计算

    电子发烧友网站提供《PyTorch教程13.2异步计算.pdf》资料免费下载
    发表于 06-05 14:46 0次下载
    PyTorch教程13.2<b class='flag-5'>之</b><b class='flag-5'>异步</b>计算

    PyTorch教程19.3异步随机搜索

    电子发烧友网站提供《PyTorch教程19.3异步随机搜索.pdf》资料免费下载
    发表于 06-05 10:43 0次下载
    PyTorch教程19.3<b class='flag-5'>之</b><b class='flag-5'>异步</b>随机搜索

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

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