• FPGA设计时序约束三、设置时钟组set_clock_groups


    目录

    一、背景

    二、时钟间关系

    2.1 时钟关系分类

    2.2 时钟关系查看

    三、异步时钟组

    3.1 优先级

    3.2 使用格式

    3.3 asynchronous和exclusive

    3.4 结果示例

    四、参考资料


    一、背景

        Vivado中时序分析工具默认会分析设计中所有时钟相关的时序路径,除非时序约束中设置了时钟组或false路径。使用set_clock_groups命令可以使时序分析工具不分析时钟组中时钟的时序路径,使用set_false_path约束则会双向忽略时钟间的时序路径

        使用-group参数可以将一个时钟设置到多个时钟组中,如果时钟组中没有时钟,则时钟组为空组。只有至少两个组都是非空组,为有效组时set_clock_groups约束才有效。如果只有一个组有效,其他组是空的,流程将会报错。

    二、时钟间关系

    2.1 时钟关系分类

        两个时钟的关系可以是同步时钟,异步时钟,非扩展时钟。

        同步时钟:  两个时钟的相位关系是可预知的,常见的是两个时钟来源于相同的根时钟或者共同的周期,如生成时钟和主时钟。

        异步时钟:当两个是时钟的相位关系不可预知时,则为异步时钟,例如来源两个晶振的时钟,通过不同的输入端口进入到FPGA内部,无法知道两者的相位关系

        非扩展时钟:当两个时钟在1000个周期内仍无无法找到共同的边沿,在这种情况下,最差的setup关系在超过1000个周期上,但是时序分析工具将无法确认这是最差的情况。典型的例子是两个奇数倍分频的时钟,如clk0和clk1都是由MMCMs产生的生成时钟,周期分别为5.125ns和6.666ns。它们的上升沿在1000个周期内不存在重合。时序分析工具有一个0.01ns的setup路径裕量,尽管两个时钟有已知的相位关系,但它们的波形使得无法进行正确的时序分析。

    异步时钟中,slack值可以按常规方法计算,但计算出的值不一定正确。因此,非扩展时钟通常作为异步时钟。

    2.2 时钟关系查看

    时钟Vivado中Report Clock Interaction可以查看时钟间的关系

     

        ​下图颜色方块中,横坐标表示目的时钟,纵坐标表示源时钟,黑色No path表示不存在时序路径,蓝色User ignored Paths为用户设置了不分析的约束,红色Timed(Unsafe)表示异步时钟或非扩展的时钟,颜色块下方的列表也显示了时序的详细信息。

     

    三、异步时钟组

    3.1 优先级

    异步时钟和非扩展时钟是没法正确地进行时序分析,  在它们之间的时序路径在分析时应该使用set_clock_groups进行忽略。相比于其他时序例外的命令,set_clock_groups的优先级最高,如果需要对异步时钟进行分析,则不能对该时钟使用set_clock_groups命令。

    3.2 使用格式

    在Timing Constraints窗口中,Clocks列下选择Set Clock Groups

     

     进入Set Clock Groups界面

     

    Group name:设置时钟组的名称

    Group 1: 添加属于Group 1中的时钟,点击最右侧的“+”可以设置多个组

    The specified clocks are: 设置时钟组里的时钟与其他时钟的关系,可为asynchronous,logically exclusive,physically exclusive。

    -asynchronous:约束为异步时钟组

    -logically_exclusive:约束为逻辑互斥的时钟组

    -physically_exclusive:约束为物理线路互斥的时钟组,设计中不能同时存在,最终表现的效果和-logically_exclusive是相同的。

    约束命令示例:

    set_clock_groups -name clk_group -asynchronous -group [get_clocks {create_clk1 gen_clk_2}]

    3.3 asynchronous和exclusive

    参数asynchronous表示创建异步时钟组,使用场景如数据在不同速率的时钟间通过FIFO进行传输时,使用异步时钟组隔离时序关系。

    参数exclusive表示时钟组里的时钟为互斥关系,例如,同一个节点中存在多个时钟,当同一时间内只能一个时钟生效,常用在时钟多路复用上。

    3.4 结果示例

    以设计中存在4个时钟clk1,clk2,clk3,clk4为例,时钟之间均存在可分析的时序路径。对时钟进行不同的时钟组约束,约束后的分析结果如下,Y表示进行时序分析,N表示不进行时序分析,参数使用asynchronous。

    a)场景1:

    set_clock_groups -name clk_group -asynchronous -group [get_clocks clk1]

     

    ​b)场景2

    set_clock_groups -name clk_group -asynchronous -group [get_clocks {clk1 clk2}]

    时钟组内部的时钟间进行时序分析,和外部的时钟不会进行时序分析

     

    c)场景3

    set_clock_groups -name clk_group -asynchronous -group [get_clocks clk1] -group [get_clocks clk2]

    设置多个groups时,groups之间的clk不会进行时序分析

     

    d)场景4

    set_clock_groups -name clk_group -asynchronous -group [get_clocks {clk1 clk2}] -group [get_clocks {clk3 clk4}]

    设置多个group时,group内部的时钟间会进行时序分析,group间不会进行时序分析

     

    总结:set_clock_group中group内部的时钟只能组内间进行分析,不能跨组或与非约束中的时钟进行时序分析

    四、参考资料

    用户手册:ug903-vivado-using-constraints-en-us-2022.2.pdf

    链接:https://pan.baidu.com/s/17AK_-J4wRXiFLtLTorlrwg?pwd=mylt 

    提取码:mylt 

  • 相关阅读:
    Pyinstaller的生成exe图标
    Java 【异常】
    英语——分享篇——每日100词——401-500
    uniapp点击事件在小程序中无法传参
    VLQ & Base64 VLQ 编码方式的原理及代码实现
    机器学习强基计划2-3:图文详解决策树预剪枝、后剪枝原理+Python实现
    经济数据预测 | Python实现ELM极限学习机股票价格时间序列预测
    元宇宙+教育:打造个性化、互动化学习生态系统!
    数据同步工具DataX介绍和原理
    Linux内核中ideapad-laptop.c文件全解析1
  • 原文地址:https://blog.csdn.net/zyp626/article/details/133657517