电子产业一站式赋能平台

PCB联盟网

搜索
查看: 16|回复: 0
收起左侧

【芯片设计】set_clock_latency在sram时序路径上的使用

[复制链接]
匿名  发表于 昨天 13:01 |阅读模式
交付总结系列里最后一篇有关sram的文章,记录优化时序时的一次set_clock_latency的操作,以及由此进行的一些思考与学习。可以结合前文一同阅读:
【芯片设计】sram wrapper的封装思路
【芯片设计】sram的一次选型与优化之旅
先说一下set_clock_latency这个指令,这个指令在参考手册和网上有很多的资料可供查询。
set_clock_latency 是一个在综合和时序分析中使用的指令,用于指定时钟网络中的额外延迟,也就是latency。这个延迟值代表从虚拟(或理想)时钟到最长Late(-late)或者最短Early(-early)路径的外部延迟,参考时钟跳变的Rise(-rise)或者Fall(-fall)。
set_clock_latency 的主要作用和特点:
  • 定义时钟延迟:set_clock_latency 允许用户指定时钟网络中的延迟,这个延迟可以是时钟源延迟(source latency)或者是时钟网络延迟(network latency)。
  • 区分源延迟和网络延迟:源延迟是从时钟源到时钟定义点(例如,时钟端口)的传播延迟,而网络延迟是从时钟定义点到寄存器时钟管脚的传播延迟。
  • 仅表征源延迟:在使用set_clock_latency时,用户只能使用-source选项来表征源延迟,因为时序分析工具会自动计算网络延迟。
  • 时钟延迟的建模:在布局布线之前,set_clock_latency 用于建模时钟源延迟和时钟网络延迟。在布局布线之后,可以使用set_propagated_clock命令来代替set_clock_latency命令,以计算实际的网络延迟。
  • 时钟延迟的约束:在命令中加入-max选项可以约束最大的延时,这对于确保时钟信号的稳定性和准确性至关重要。
  • 影响时序分析:在进行设置分析时,时钟延迟对于数据到达路径和时钟到达路径的计算至关重要。Timing Analyzer对数据到达路径使用晚期时钟延迟,对时钟到达路径使用早期时钟延迟。
    set_clock_latency 是一个重要的指令,它帮助设计者在综合和时序分析阶段精确地控制和预测时钟信号的延迟,从而确保设计的时序正确性和性能。简单来说,set_clock_latency就是把网表上某个节点(或某个区域)的时钟(沿)往前或者往后推一下。而后说下这次交付中遇到的问题,由于优化了ram选型(优化选型的经历在另一篇中),sram例化部分前后的时序路径由原本的没有违例变成了下游sram数据读回路径有违规。查了一下违规的原因,主要是因为新的sram C2Q delay比之前的大了很多导致的(相应的,D端req setup time小了)。而这块sram又确实比之前的好,主要面积小了很多,数据的读写delay表现也更优异。所以如果坚持选用这个型号的sram,那么这个时序违规就是需要解决的。而这个sram的前后逻辑比较复杂,轻易不想去动,那么最后的解决方式就是动时钟了。

    在sram的时钟端口set_clock_latency为一个负值,这项相当于将sram时钟接口的时钟沿前移了如下图所示。那么对应的影响就是,路径FF1.CK to sram.D的允许时间窗口变短,检查变严格;而sram.CK to FF2.D的允许时间窗口变长,检查变宽松。

    这样一来,sram C2Q较大的时间就被遮住了,因为sram.C2Q + logic = arrival time 综合结果反馈这样做确实是有效的,该路径不再有违规,而路径FF1.CK to sram.D本来时序就比较好,也没有产生新的违规。
    那接下来的问题就是,这样做合理么?关于这点说下请教朋友之后的看法,不确定是不是正确,可能还需要和后端伙伴再聊聊。通常通过DC进行时序路径分析时,会把sram近似的看成一个触发器,有建立时间、保持时间、C2Q时间等和寄存器类似的时序特性。但是二者实际上是不一样的,最大的区别在于数据到了寄存器D端那是真的到家了,而到了sram的D端进入内部后还有一段路要走。简单画一下图,可以近似成这样(再次声明,不一定准确):

    那么也就是说,对于sram的时序检查来说,其D端少算了一段时间,C2Q端多算了一段时间。这有时就表现为setup time比较小而C2Q time比较大。因此我们将sram的时钟向“负”向推等价于收紧D端的时序检查,放宽Q端的时序检查,是一种更加贴近于真实情况的操作。故而,这样设置是合理且可以被后端接纳的。不确定这个说法是否正确,只在此记录。
    附原文评论:“synthesis 不用设,反正是ideal clk,过约一下,看能到多少。后端会用 use full skew 来修, 当然这种前端已经很难meet timing的,靠tree去修,也是很麻烦的,这里如果 同一个reg有mem2reg reg2mem的路径,那mem的tree做长,hold 可能会vio”
    “我觉得在确定PD可以通过调整时钟树的前提下,可以用这个约束让综合器不对这个路径做无谓优化努力,但对DC来说这个约束没有实际意义,因为DC里没有真实的时钟树。PD要拿到综合的网表才能干活,这相当解决鸡蛋互相依赖问题。个人看法哈。”

    系列文章入口——
    【芯片设计】SoC 101(一):绪论
    【芯片设计】FIFO漫谈(零)从无处不在的FIFO开始说起
    【芯片设计】计算机体系结构(一)虚拟内存
    【芯片设计】深入理解AMBA总线(零)绪论
    【芯片设计】握手协议的介绍与时序说明
    【芯片设计】复位那些小事 —— 复位消抖
    【芯片设计】快速入门数字芯片设计(一)Introduction
    【芯片验证】UVM源码计划(零)下定决心读源码前的自测环节
    【芯片设计】异步电路碎碎念(一) 到底什么是异步电路
    【芯片设计】从RTL到GDS(一):Introduction
    其他文章链接——
    【芯片验证】sva_assertion: 15道助力飞升的断言练习
    【芯片验证】可能是RTL定向验证的巅峰之作
    【芯片验证】RTL仿真中X态行为的传播 —— 从xprop说起
    【芯片验证】年轻人的第一个systemVerilog验证环境全工程与解析
    【芯片设计】verilog中有符号数和无符号数的本质探究
    【芯片设计】论RTL中always语法的消失术
    【芯片设计】代码即注释,注释即代码
    【芯片设计】700行代码的risc处理器你确实不能要求太多了
    入职芯片开发部门后,每天摸鱼之外的时间我们要做些什么呢
    如何计算系统的outstanding 和 burst length?
    芯片搬砖日常·逼死强迫症的关键词不对齐事件
    熟人社会里,一群没有社会价值的局外人
  • 本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    回复

    使用道具

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表