首页 > 其他分享 >数字逻辑综合 DC 相关理解(四)

数字逻辑综合 DC 相关理解(四)

时间:2023-08-01 19:55:53浏览次数:38  
标签:逻辑 set 数字 clock get DC 约束 时序 时钟

  • 参考
    • 《专用集成电路设计实用教程》

1. 多时钟同步设计 时序约束

  • 以下图为例,所有的时钟都来自同一个时钟源,所以是它们是同步设计。

    • 可以看到要综合的模块输入只有CLKC,其他的时钟只作用于综合模块端口,我们需要对端口加以约束。
    • 首先约束作为综合模块的主时钟CLKC,约束语句如下。
      create_clock -p 20 [get_ports CLKC]
      
  • 虚拟时钟

    • 考虑到CLKA\CLKD\CLKE在要综合的设计中没有对应的输入端口,因此需要设置虚拟时钟。

    • 虚拟时钟在设计里并不驱动触发任何寄存器,主要用于说明相对主时钟I/O端口的延迟。

    • 输入端

      • 由于虚拟时钟没有对应的输入端口,所以定义中没有源端口和引脚;另外还需要定义input_delay,约束如下。
        create_clock -period 30 -name CLKA
        set_input_delay 5.5 -clock CLKA -max [get_ports IN1]
        
      • 时序图如下,所以可以计算需要满足$ t_N < 20-5.5-t_{setup}$ 以及 \(t_N < 10-5.5-t_{setup}\)。
    • 输出端

      • 考虑到输出端有两个虚拟时钟,所以要加两个约束。
      • 注:第二个命令中需要加上 -add_delay 选项。如果不加,第二条命令会覆盖第一条命令。
      create_clock -period [expr 1.0/75*1000] -name CLKD #要用1.0而不是1
      create_clock -period 10 -name CLKE
      create_clock -period 20 [get_ports CLKC]
      
      set_output_delay -max 2.5 -clock CLKD [get_ports OUT1]
      set_output_delay -max 4.5 -clock CLKE -add_delay [get_ports OUT1]
      
      • 时序图如下,所以可以计算需要满足$ t_S < 10-4.5$ 以及 \(t_S < 6.7-2.5\)。

2. 异步设计的时序约束

  • 需要考虑异步带来的亚稳态问题,可以考虑在设计中使用一些同步电路处理。
  • 对于穿越异步边界的任何路径,我们都必须禁止对这些路径做时序综合,因为相位关系并不是确定的,对这些路径去做时间约束没有意义。
  • set_false_path
    • 我们可以使用 set_false_path 为跨时钟域路径作解除时序约束。指令如下。

      set_false_path -from [get_clocks CLKA] -to [get_clocks CLKB] 
      set_false_path -from [get_clocks CLKB] -to [get_clocks CLKA]
      
    • 除了上面介绍的功能,还可以用来约束逻辑上不存在的路径,举例如下。

      • 设计中难免会出现一些物理上连接的通路,但信号永远不会从这条路径走。可以使用指令report_timing_requirments命令报告出设计中所有的例外。

3. 多时钟周期的时序约束

  • 以下图电路为例,时钟周期定义为10ns,加法器延迟为6个时钟周期,那么我们需要对其进行多时钟周期的时序约束。

    set_multicycle_path 6 -setup -to [get_pins C_reg[*]/D]
    
    • 建立时间分析

      • 时序图如下,DC只在第6个上升沿做建立时间的分析,此时加法器允许的最大延迟为$ T_{delay} < 60-T_{setup}-T_{uncertainty}-T_{clk2q} $.
    • 保持时间分析

      • 对于单周期的保持时间分析,时序图绘制如下,图中可以看到,对于FF2来说,想要采到正确的A值,那么组合逻辑延时需要满足 $ t_{delay-comb} > t_{hold} + t_{skew}$.
      • 同理,对于多周期的保持时间分析,时序图如下,需要保证加法器的延迟至少要 $ 50+t_{hold}+t_{uncertainty}$.
    • 对于既要综合出一条路径延时满足建立时间60ns又要满足保持时间50ns,实际上是没有必要的,这样会增加电路的复杂度。

      • 在保持时间分析给出的时序图可以看到,在CLK_FF1第一个采样的上升沿就分析保持时间,限定组合逻辑延迟。因此对于多周期也是同样道理,可以在0ns时分析保持时间。约束语句如下。
      set_multicycle_path 5 -hold -to [get_pins C_reg[*]/D]
      # 简化后,指令为: 
      set_multicycle_path 0 -hold -to [get_pins C_reg[*]/D]
      
    • 根据前面的介绍和计算,我们可以设计相应的时钟使能电路,使得最后一级寄存器可以在期望的时钟进行采样接收正确的数据。

4. 门控时钟的约束

  • 关于门控时钟相关内容可以看这篇博客
  • 考虑到不带锁存器的门控时钟可能会出现毛刺的情况,所以下面的分析都是基于带锁存器的。
  • 带锁存器的门控时钟的时序约束如下所示。需要A信号在时钟上升和下降沿分别满足setup和hold的时间约束。

5. 分频电路和多路传输电路的时钟约束

  • 注意,在模块划分时,需要注意将时钟电路和核心功能电路划分成不同模块。
    • 不仅可以对时钟逻辑更好的控制和分析,而且简化了其他模块的输入时钟约束。
  • 多路传输
    • 上图中,CLOCK_GEN是通过多路时钟MUX选出的,如果我们不加约束去指定,那么DC会自己选择一个。
    • 我们可以加约束如下,去掉引脚a到引脚y的时间弧,此时DC认为选择了Ext_Clk.
      set_disable_timing CLOCK_GEN/U1 -from a -to y
      
  • 分频电路
    • DC并不能推导出分频时钟的波形,时钟信号可以通过任何的组合逻辑电路,但是终止于寄存器。因为DC并不知道寄存器的输出是时钟还是非时钟信号。
    • 建议的定义分频时钟脚本:
      create_clock -period 50 [get_ports Ext_Clk]
      create_generated_clock -name Int_Clk \
        -source [get_pins CLOCK_GEN/U2/CP] -divide_by 2 \
        [get_pins CLOCK_GEN/U2/Q]
      set_clock_latency -source 1.5 [get_clocks Int_Clk]
      set_clock_latency 0.5 [get_clocks Int_Clk]
      
    • 注意:对于CTS综合之后,我们不需要使用set_clock_latency为时钟建模,使用下面脚本。
      set_propagated_clock [list [all_clocks] [get_generated_clock *]]
      

标签:逻辑,set,数字,clock,get,DC,约束,时序,时钟
From: https://www.cnblogs.com/qianbinbin/p/17595257.html

相关文章

  • 数字孪生结合GIS能够为城市灾害预防工作提供什么帮助?
    数字孪生技术结合GIS(地理信息系统)在城市灾害预防工作中发挥着重要的作用,为城市的安全和可持续发展提供了关键帮助。数字孪生是一种将现实世界与数字虚拟世界相结合的技术,可以帮助城市规划者和管理者更好地了解城市的实际状况,预测潜在的灾害风险,并制定有效的防灾应对策略。首先,数......
  • 关于菜鸡学习RHEL8的一些小笔记--->LVM逻辑卷
    LVM基础概念:LVM()逻辑卷管理器,主要适用于对Linux环境下面磁盘分区的管理机制在真实的场景中,服务器使用的越久,所产生的数据量就会越来越大,导致硬盘本身空间越来越小;这里针对分区来看,如果想要扩大容量,就得重新挂载硬盘,然后去做数据迁移,这样就会直接导致业务停止运行;#这里分区的大小是在......
  • DC2.5、DC2.1引脚定义
    DC2.5、DC2.1实物对应的引脚定义如下所示,电路结构符号如下所示,在未插入插头时,引脚2、引脚3,默认连接。在插入插头后,引脚2、引脚3断开;引脚1、引脚2与插头相连,若使用内正外负的插头,则引脚1为正极、引脚2为负极,引脚三断开 ......
  • 找出乱序数组第k大的数字(堆排序专场)
    使用堆排序来解决《乱序数组第k大的数字》先放上代码(虽然leetcode要求O(n),但是堆排序是O(nlogn))`classSolution{publicintfindKthLargest(int[]nums,intk){intheapSize=nums.length;buildHeap(nums,heapSize);for(inti=nums.length-1;i>=nums.length-......
  • 《画游清明上河——故宫沉浸艺术展》于重庆凤凰数字艺术中心开幕
    2023年7月31日上午,在凤凰卫视、故宫博物院指导下,由凤凰数字科技、故宫出版社、重庆两江产业发展集团有限公司共同主办的《画游清明上河——故宫沉浸艺术展》开幕仪式在重庆凤凰数字艺术中心盛大举办。开幕仪式现场两江产业集团党委书记、董事长朱军,故宫博物院故宫出版社总编辑宋小......
  • SaaS营销策略详解:透过客户激励做好数字营销,做好口碑营销
    当前很多SaaS厂商为了推广促销,使得市面上的SaaS营销策略五花八门,不同的营销策略所带来的效果则各有优劣。SaaS营销策略一个好的SaaS营销策略最好的成效是四两拨千斤,在数字营销的框架内,传统的口碑营销则重新焕发活力,通过客户激励的形式来做好数字营已经成为了当下SaaS营销策略中最重......
  • DC电源模块输出电压的调节范围
    BOSHIDADC电源模块输出电压的调节范围DC电源模块是一种可以将交流电转换为直流电的设备,可以广泛应用于电子、通信、工业自动化等领域。在实际使用中,输出电压的调节范围非常重要,因为它决定了该模块能够适应的电器设备的种类和使用范围。下面将详细介绍DC电源模块输出电压的调节范......
  • js instanOf的实现逻辑 super()
    在JavaScript中,instanceof 运算符用于检查一个对象是否是另一个对象的实例。它的使用形式是 objinstanceofconstructor,其中 obj 是要检查的对象,constructor 是要检查的构造函数。instanceof 运算符的实现逻辑如下:首先,它会检查 constructor 是否是一个函数。如果 ......
  • [数字人] 从0开始的人脸重建 (一)
    从0开始的人脸重建本篇非教程。一数学基础ScratchapixelGAMES101世界系方向:+Yup,+Xleftand+ZinLookatTransform(属于视图变换):给定一个相机在世界系中的位置和要看向的点在世界系中的位置,求得将世界系原点转向相机坐标系的变换。人脸系统中,往往人脸中心处于(0,0,0)位......
  • 46. 把数字翻译成字符串
    #例如12258一共有5种,分别是abbeh,lbeh,aveh,abyh,lyh。defnumDecodings(s="12258"):defdfs(s,dp):iflen(s)==0:print(dp)returniflen(s)>=2andint(s[:2])<=26:dpcopy=dp.copy()......