异步电路后端实现流程(cdc signOff 后端做什么)

news2024/11/17 13:56:04

目录

1.一种后端异步电路的signOff流程

2.cdc maxDelay的原因及relax

2.1为什么要做maxDelay检查

2.2 如果有不同名字的clk 原本是同步时钟域 该怎么办

2.3 如果有异步电路不能满足0.7倍的fastclk maxDelay检查该怎么办?


1.一种后端异步电路的signOff流程

同步电路和异步电路分别signOff

对于同步电路,后端会分析sta setup/hold,这里不在赘述。在该scenario下 异步电路是不会分析,也不会关注异步电路之间的走线

在cdc scenario(mode)下sdc有一下设置:

  1. 将所有同名的clk之间的path都设为falsePath

该scenario下不检查同步电路的sta

     2.对所有不同名的clk 做双向的max_delay检查

设 有clk_a,clk_b;周期分别为period_a和period_b,则两者之间最小的周期为period_min_ab,做一下max_delay检查

set period [expr ${period_min_ab} * ${cdc_ratio}];#normally, we can set cdc_ratio=0.7
set_max_delay -from clk_a to clk_b ${period} -ignore_clock_latency
set_max_delay -from clk_b to clk_a ${period} -ignore_clock_latency

以上约束的含义就是 对所有a to b和b to a的clk做两者之间快时钟周期的0.7倍 max_delay检查。

因为这是异步时钟域的检查,所以可以ignore 所有的clk latency。

那么就有两个问题:

  1. 为什么要做max_delay的检查
  2. 如果有不同名字的clk 原本是同步时钟域 该怎么办
  3. 如果有异步电路不能满足0.7倍的fastclk maxDelay检查该怎么办?

带着这些问题我们进入下一节。

2.cdc maxDelay的原因及relax

任何异步处理有三方面需要考虑

一、防止或减少不定态的出现和传播

二、保证功能的正确性

三、保证性能不受损失

这里首先介绍异步处理的几种常见电路

  • 2级或以上的寄存器打拍(下面就以2级为例)

寄存器打拍本身不能保证captureCLK的capture数据是正确的,只能降低不定态传播,要求同步器内和launchLCK的寄存器都尽量靠近

要保证功能正确,就要求被同步的数据是准静态或静态数据,也就是说在电路中 可以保证只有在launchCLK数据稳定后,captureCLK才会使用(而不是稳定后才capture)这个数据。

  • 有效信号握手同步,数据不做同步

握手信号的同步首先就需要2级同步器,其次握手本身可以保证数据同步过去是正确的,但是前提条件是在握手过程中,被同步数据不能改变。

多bit数据信号在后端尽量相同的布线

另一方面考虑握手越快越好,那就要求launch FF 和capture FF间maxDelay不要过大

  • grayCode做指针同步的异步FIFO

grayCode同步是需要nbit的2级同步器,同时要求在captureCLK capture时最多只有1bit数据在变化,其他bit位全部稳定。比如虽然grayCode在launchCLK是最多一个clk变化1bit,但是如果前后两个launchCLK的2个bit的变化经过不同的delay同时到达了captureCLK,那么在captureCLK看到的就是两个bit同时变化,这样AsyncFIFO的虚空虚满就不正常,会出现fifo中的数据被错误覆盖或错误使用。

另一方面,考虑性能不受影响 需要合理的设置异步fifo的深度

现在的经验是如果里面的指针同步使用2级同步器,AsyncFifo深度设置为8,使用3级同步器,AsyncFifo的深度设置为10.在分析深度保证不断流的最差情况,是假设读写频率相同 相位差接近1个Tclk。有时间再开贴分析。

多bitgrayCode指针信号在后端尽量相同的布线

2.1为什么要做maxDelay检查

  1. maxDelay检查的总体要求是launch FF 和 capture FF的距离不要太远,整个Tco+走线延迟+组合路径延迟小于maxDelay设置的period, 这样capture clk的一个时钟周期内能够采样到变化的数据。
  2. maxDelay保证了格雷码同步的要求,即在captureCLK采样时,只有1个bit是不稳定的

假设grayCode从fastclk clk_a同步到slow clk_b,考虑最恶劣情况,在clk_a中连续两个时钟clk_a(n-1)和clk_a(n)时刻分别有2bit发生了变化,由于设置了maxDelay为fastCLk的0.7倍,那么在采样clk_a(n)的bit变化时,clk_a(n-1)的变化早就已经稳定了至少0.3period(clk_a)的时间。所以此时采样虽然有2bit变化,但clk_a(n-1)的变化已经稳定,实际上最多只有最新的bit变化可能没被正确采样,但是由于AsyncFiFo的虚空虚满特性并不影响功能实际并不会出错。

也可以用公式来描述:

设t0时刻src_gray_code[0]发生变化,t0+tf(tf为fastCLk的周期)时刻src_gray_code[1]发生变化,dst_clk在t0+x时刻第一次采样src_gray_code的变化,如果要满足此时两个bit都不满足dst_clk的setup,则需同时满足以下的条件

0<t_{0}+x-(t_{0}+a\times t_{f}) < t_{setup}

0<t_{0}+x-(t_{0}+t_{f}+b\times t_{f}) < t_{setup}

化简可得:

0<x-a\times t_{f} < t_{setup}

0<x-(1+b)\times t_{f}< t_{setup}

进一步需要满足下面两个条件

a\times t_{f} <x< t_{setup}+a\times t_{f}

(1+b)\times t_{f}<x< t_{setup}+(1+b)\times t_{f}

最终要求如下:

(1+b)\times t_{f}<x< t_{setup}+a\times t_{f} \rightarrow公式(1)

进一步:

 t_{setup}>(1+b-a)\times t_{f} \rightarrow公式(2)

其中a,b都是delay系数 最大0.7,所以最差情况下a=0.7,b=0要求:

t_{setup}>0.3\times t_{f} \rightarrow公式(3)

但在同一工艺下

t_{setup} <0.3 t_{f}是很容易满足的,这个结论和"clk_a(n-1)的变化早就已经稳定了至少0.3period(clk_a)的时间"一致。

这样公式(1,2,3)就是不可能满足的,所以在maxDelay的约束下 不可能在dst_clk采样的时候同时有两bit以上的变化不满足setup,也就是说最多只有1bit不满足setup,而单bit错采并不会引起功能错误。

同理可分析grayCode从slow clk_b同步到fast clk_a的情况。可以得到相同的结论,在任意captureCLK采样时刻,只有1bit是不稳定的,即使在两个captureCLK之间有多个bit的变化。

hold的分析也是一样 这里就不在赘述

2.2 如果有不同名字的clk 原本是同步时钟域 该怎么办

        如果clk_a0和clk_a1原本是同步时钟域,在cdc check时因为clk name不同而做了maxDelay的检查,如过clk_a0和clk_a1之间的maxDelay检查不能满足,那就要relax这种类型的检查,可以直接设

clk_a0 to clk_a1和clk_a1 to clk_a0的path为falsePath。

如果maxdelay检查没有问题,就无需关注。

2.3 如果有异步电路不能满足0.7倍的fastclk maxDelay检查该怎么办?

0.7倍的fastCLK周期 约束是相当严格的,很多情况下并不能满足,这时我们具体电路具体分析:

1.对于2级同步寄存器

        由于本来就是对准静态和静态的信号同步,信号基本没有变化,所以Launch FF到capture的FF并没有很严格的maxDelay需求,此时可以设置falsePath或者放宽该条path的maxDelay period。

2.regArray的asyncFIFO的数据存储阵列reg_data_array

        在launch clk写数据到reg_data_array,当读端通过地址指针grayCode同步后发现reg_data_array上不空时,可以在capture直接采样reg_data_array的输出。

        这里面可以看出来,grayCode同步到读端至少需要2个Tcaptureclk,所以对reg_data_array的maxdelay就可以放松至1.5T_capture,如果是3拍同步器可以放松至2T_capture.

3.一些握手同步

        有效信号先在clk_a打了一拍,在经过2级同步器同步到clk_b,再在clk_b打一拍,后使用。那么对应的data可以设置maxDelay为1T_launch+2T_capture+1ns。

这种常用在apbSync,nic里面的bridge的addr和data上。可以根据实际电路对这些cell进行relax

4.如果grayCode不能满足0.7 maxdelay

        这种情况下 只能靠后端来修timing,这个是必须meet的,否则grayCode就没有意义了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/728396.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Openpyxl给同个单元格的不同文字“上色”

文章目录 0.背景1. 原文代码2. 我的代码3. 总结 0.背景 openpyxl一直在用&#xff0c;今天看到一直关注的公众号又发出了奇技淫巧&#xff08;想要看原文或者要关注原作者的可以点击这里&#xff09;&#xff0c;就直接收录到主页好了。免得以后找不到了。 1. 原文代码 原来…

全网最详细,Fiddler抓包实战 - 手机APP端https请求(超详细)

前言 Fiddler抓取App端请求 准备工作&#xff1a; 将手机和电脑连接到同一路由器&#xff08;保证两者能够ping通&#xff09;&#xff1b; 如果使用的模拟器则不需要上面的步骤&#xff0c;因为模拟器是共享PC端的网络&#xff0c;两者网络默认就是连通的状态&#xff1b; 查…

【聘】夏日炎炎,高薪IT好岗位给你降温!

微思就业推荐 厦门海翼集团财务有限公司 职位&#xff1a;数字化管理部运维管理岗 6000-12000元/月*18薪 职位描述 负责公司日常办公IT设备、网络及机房服务器、业务系统的管理。 1、负责公司机房、服务器、网络设备规划、建设、管理、巡检&#xff1b;负责建立包括但不…

【Servlet综合项目练习】实现一个简单的博客系统~

目录 &#x1f31f;一、数据库设计部分 1、建表分析&#xff1a;系统中一共要实现几张表&#xff1f; 2、开始建表 &#x1f31f;二、大概框架与实现功能 &#x1f31f; 三、代码实现部分 &#x1f308;前言1&#xff1a;工具类的实现&#xff08;utils包下&#xff09;…

2023年开放式蓝牙耳机选购指南!南卡/韶音/Cleer/索尼/飞利浦等开放式耳机怎么选!最热的开放式蓝牙耳机大盘点!

前言 大家好&#xff0c;作为专注耳机研究多年的发烧级爱好者&#xff0c;毫不夸张的说我为耳机花的钱比买衣服还多&#xff0c;很多人都在问我开放式耳机到底有没有必要买&#xff1f;答案毫无疑问是有必要&#xff01;开放式耳机佩戴舒适又安全的特质让它在耳机届风靡&#…

动态SLAM论文(7) — DOT: Dynamic Object Tracking for Visual SLAM

目录 1 Introduction 2 Related work 3 DOT A 系统概述 B. 实例分割 C. 相机和物体跟踪 D. 跟踪质量、异常值和遮挡 E. 目标是否在运动&#xff1f; F. 掩码传播 4 Experimental results 5 Conclusions 摘要 - 本文我们介绍了DOT&#xff08;Dynamic Object Trackin…

计算机网络实验报告——Wireshark 抓包分析

1. Wireshark软件下载 这里放一个蓝奏云下载链接&#xff1a; https://wwix.lanzoue.com/iEklv11klvje 密码:4g0n 2. Wireshark软件抓包使用 将该软件安装之后&#xff0c;双击打开&#xff0c;首先选择你的过滤器方式&#xff0c;我这里电脑连的是WiFi&#xff0c;就选择了这…

分布式搜索--elasticsearch

一、初识 elasticsearch 1. 了解 ES ① elasticsearch 是一款非常强大的开源 搜索引擎&#xff0c;可以帮助我们从海量数据中 快速找到需要的内容 ② elasticsearch 结合 kibana、Logstash、 Beats&#xff0c;也就是 elastic stack (ELK)&#xff0c;被 广泛应用在日志数据分…

【CANoe示例分析】PythonCAPL_Call_Demo

该工程由Vector官方提供,目的是演示Python如何调用CAPL文件里的自定义函数。里面除了CANoe工程文件外,还有python文件和CAPL: 提供了两种CANoe版本的工程文件,选择其中一种打开即可。 首先我们要确定CAPL文件AnalyseFunctions.can在CANoe工程内的什么地方?首先想到的是Si…

Apache Doris 在金融壹账通指标中台的应用实践

本文导读&#xff1a; 金融壹账通作为中国平安集团的联营公司&#xff0c;依托平安集团 30 多年金融行业的丰富经验及自主科研能力&#xff0c;向客户提供“横向一体化、纵向全覆盖”的整合产品&#xff0c;以“技术业务”为独特竞争力&#xff0c;帮助客户提升效率、提升服务…

vuex中的四个map方法的使用

vuex中的四个map方法的使用 vuex里面有四个map方法&#xff0c;他们分别可以针对不同的元素进行不同的代码生成 这四个map方法都是异曲同工&#xff0c;明白了一个基本上都明白了 1 编写案例 现在想要展示一段文本&#xff0c;其中里面两个参数要存在store的state里面&…

怎样优雅地增删查改(二):扩展身份管理模块

文章目录 用户关系管理扩展组织管理功能创建可查询仓储 实现控制器测试接口 身份管理模块&#xff08;Identity模块&#xff09;为通用查询接口的按组织架构查询和按户关系查询提供查询依据。 身份管理模块的领域层依赖Volo.Abp.Identity.Domain Abp为我们实现了一套身份管理模…

CentOS 7镜像下载 以及 DVD ISO 和 Minimal ISO 等各版本的区别介绍

1.官网下载 官网下载地址&#xff1a;官网下载链接 点击进入下载页面&#xff0c;随便选择一个下载即可&#xff08;不推荐&#xff0c;推荐阿里云下载&#xff0c;见下文&#xff09; 阿里云下载站点&#xff08;速度非常快推荐&#xff09; 阿里云下载链接&#xff1a; http…

免费下载!10个3D素材网站推荐

在设计工作中&#xff0c;3D素材可以帮助设计师创建高质量的UI设计&#xff0c;提高设计效率和准确性。本文将为您推荐10个好用的3D素材网站&#xff0c;助力设计师实现高效创作。 1.即时设计资源广场 即时设计资源广场是一个致力于为设计师提供丰富多样的设计资产和灵感的社…

chatgpt 与传统3D建模对比分析

推荐&#xff1a;将NSDT场景编辑器加入你的3D工具链 随着人工智能技术的发展&#xff0c;越来越多的领域正逐渐被AI模型所取代。ChatGPT作为一种自然语言处理技术&#xff0c;越来越为人们所熟悉。最近&#xff0c;一些3D建模领域的专家想知道ChatGPT是否可以取代传统的手动3D建…

ClickHouse主键索引最佳实践

在本文中&#xff0c;我们将深入研究ClickHouse索引。我们将对此进行详细说明和讨论&#xff1a; ClickHouse的索引与传统的关系数据库有何不同ClickHouse是怎样构建和使用主键稀疏索引的ClickHouse索引的最佳实践 您可以选择在自己的机器上执行本文给出的所有Clickhouse SQL…

C++之Clang属性大全(一百五十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

NC65自由报表参数设置后,报表发布成节点后,点击查询,在查询框输入条件后,参数值没有拼接到sql中的解决方法

NC65自由报表参数设置后&#xff0c;报表发布成节点后&#xff0c;点击查询&#xff0c;在查询框输入条件后&#xff0c;参数值没有拼接到sql中的解决方法 在语义分析模型中把sql语句放进去&#xff0c;把字段和查询查询设置好 语义模型的sql使用了parameter把参数输入 sel…

eNSP-OSPF组播拓展复杂区域连接

OSPF动态路由 文章目录 OSPF动态路由一、题目要求二、题目分析三、拓扑结构四、基础配置五、测试验证 一、题目要求 1 、 使用172.16.0.0.0/16网段进行子网划分 2 、 用OSPF协议达到全网可达 3 、 保证所有设备均具备最少的 LSDB 以及路由表 二、题目分析 1.网段划分 5个O…

将OxyPlot封装成用户控件后在WPF中的应用

1、文件架构 2、加载依赖项 Newtonsoft.Json OxyPlot.Wpf 3、NotifyBase.cs namespace Accurate.Common {public class NotifyBase : INotifyPropertyChanged{public event PropertyChangedEventHandler? PropertyChanged;public void DoNotify([CallerMemberName] string p…