• FPGA设计时序约束八、others类约束之Set_Case_Analysis


    目录

    一、序言

    二、Set Case Analysis

    2.1 基本概念

    2.2 设置界面

    2.3 命令语法

    2.4 命令示例

    三、工程示例

    四、参考资料


    一、序言

        在Vivado的时序约束窗口中,存在一类特殊的约束,划分在others目录下,可用于设置忽略或修改默认的时序路径分析,以Vivado2022.1版本为例,主要包括以下4类

     

    二、Set Case Analysis

    2.1 基本概念

        Set case analysis(设置案例分析)命令通常通过对逻辑如配置寄存器设置常数值来描述功能模块,设置对象可为端口,线net,层级引脚或子模块输入引脚,常数值通过约束的逻辑单元传输,从而关闭该单元的任何时序分析,功能和设置set false path类似。约束可以在SDC、XDC文件中使用。

        使用set case analysis可以减少分析的空间,运行时间和内存消耗,将信号是一个常量值的信息告知时序分析工具是很重要的,对于保证不去报告非功能路径和不相关的路径也是至关重要的。因此,一个引脚pin带有set_case_anlaysis约束时,上面传输的信号是不活跃信号,和引脚相关的时序arc是关闭的。

        最常见的使用场景是对一个多路选择器选择引脚设置为0或1,使得两个多路选择器中一个输入来传输,以关闭从mux/s到mux/I1引脚的时序分析路径为例,约束命令如下

    set_case_analysis 0 [get_pins mux/S]

        再看一个例子,将一个AND门 的一个输入通过set_case_analysis设为0,AND门的输出也为0,即0传输到了下一逻辑,时序分析工具不会去计算对应的时序arch也不会展示在时序报告中。但是,布局布线中仍会去修复这些引脚上的最大切换,最大扇出违例。

    2.2 设置界面

        进入Timing Constraints界面,在左侧Others栏中选中Set Case Analysis,右侧即显示Set Case Analysis界面,双击空白位置

     

        在Find names of type的下拉框显示可设置的对象,有Port和Cell pins两类

     

    可约束的值有4个:0,1,rising,falling,约束为0或1时,对应的时序路径将不存在,设置为切换边沿时,只有信号为设置的边沿切换时才进行时序分析。

     

    2.3 命令语法

    命令格式如下

    set_case_analysis [‑quiet] [‑verbose] <value> <objects>

    参数含义如下表

    2.4 命令示例

    约束两个主时钟到CLKBUFGMUX的两个输入引脚上,将set_case_analysis约束选择引脚clock_sel/S的值为1,此时将只有clk_B会传输到输出端口,clk_A被阻断了,效果和将对应的pin连接到VDD或VSS相同。。

    1. create_clock -name clk_A -period 10.0 [get_pins clock_sel/I0]
    2. create_clock -name clk_B -period 15.0 [get_pins clock_sel/I1]
    3. set_case_analysis 1 [get_pins clock_sel/S]

    三、工程示例

    工程代码:

    1. module timing_analysis(d1,d2,clk1,clk2,clk3,clk4,rst,out1,out2);
    2. input d1,d2,clk1,clk2,clk3,clk4,rst;
    3. output out1,out2;
    4. reg ff1,ff2,ff3,ff4,ff5;
    5. always @(posedge clk1)
    6. if(!rst)
    7. ff1<=0;
    8. else
    9. ff1<=d1;
    10. always @(posedge clk2)
    11. if(!rst)
    12. ff2<=0;
    13. else
    14. ff2<=ff1;
    15. always @(posedge clk3)
    16. if(!rst)
    17. ff3<=0;
    18. else
    19. ff3<=ff2;
    20. assign out1=ff3&ff2;
    21. always @(posedge clk4)
    22. if(!rst)
    23. ff4<=0;
    24. else
    25. ff4<=d2;
    26. always @(posedge clk4)
    27. if(!rst)
    28. ff5<=0;
    29. else
    30. ff5<=ff4;
    31. assign out2=ff5;
    32. endmodule

    综合后网表连接图

     

    未添加set_case_analysis时的时序报告,同步时钟报告中只有clk4,异步时钟报告中有clk1到clk2,clk2到clk3的时序路径,根据综合网表连接图,符合预期。

     

    对clk1设置set_case_analysis值为fall,clk4设置set_case_analysis值为1,同步时钟路径中已不存在clk4,异步时钟路径中存在clk1到clk2。因为clk1设置的analysis clk为下降沿,而实际为上升沿,clk4设置为常量1,不存在切换

     

    四、参考资料

    1、用户手册《ug835-vivado-tcl-commands-en-us-2023.1.pdf》

    文档链接:https://pan.baidu.com/s/1Su_w9CDHR7R9_tt_in_arQ?pwd=7w4f 

    提取码:7w4f

    2、Vivado的command reference

  • 相关阅读:
    【编码魔法师系列_构建型2.1】单例模式「饿汉式」(Singleton Pattern)
    使用eXtplorer打造简单实用的在线文件管理系统,方便随时随地远程访问文件
    好友让我看这段代码
    Vue-加载流程&&DIFF算法
    在ubuntu中安装filezilla及解决 Ubuntu E:无法定位软件包问题
    babylon 里面加gltf 模型
    Linux下安装部署redis(离线模式)
    Linux内存状态监测工具smem命令 | 如何在#linux OS下找到特定进程的交换(swap)空间使用情况?
    【生活】罗曼·罗兰语录
    汽车电源高压互锁(HVIL)
  • 原文地址:https://blog.csdn.net/zyp626/article/details/134497601