• VIVADO时序约束之时序例外(set_false_path)


    前言

    当FPGA设计中的逻辑行为不能满足默认的时序要求时,设计者需要使用时序例外语法对该逻辑行为进行处理,例如:有些结果只需每个一个或多个时钟周期捕获一次。
    vivado开发工具支持4个时序例外约束的语法,如下表所示:

    命令功能
    set_multicycle_path表示从路径的开始到结束传播数据所需的时钟周期数。
    set_false_path表示不应分析设计中的逻辑路径。
    set_max_delay设置最大路径延迟值。 这将使用用户指定的最大和最小延迟值覆盖默认的建立和保持约束。
    set_min_delay设置最小路径延迟值。 这将使用用户指定的最大和最小延迟值覆盖默认的建立和保持约束。

    基于运行时间的考虑,vivado工具不支持冲突时序例外的实时分析,可以使用命令report_exceptions对整个工程进行时序例外进行分析和报告。

    false路径

    false路径指设计中存在的,但是1、不起作用,2、不需要关心时序的路径。因此,false路径常常不做时序分析。常见的false路径包括:
    1、跨时钟域信号经两级同步逻辑处理的;
    2、上电后,只需要被写一次;
    3、复位或者测试逻辑;
    4、异步分布式RAM的写入时钟和异步读取时钟之间的路径;

    移除false路径的约束的好处

    1、减少编译时间:当false路径已从时序分析中移除时,该工具不需要计时或优化那些非功能性路径。 使时序和优化引擎满足的非功能性路径的时序要求,会浪费大量的运行时间;
    2、可以提高编译结果的质量:一些时序问题,会极大的影响工具对工程的综合、布局和优化质量;例如,某些非功能性路径存在时序违规,该工具可能会尝试修复这些路径,而不是处理真正的功能性路径。 不仅可能会不必要地增加设计的大小(例如逻辑克隆),而且该工具可能会跳过修复实际问题,因为非功能性路径具有更大的违规,掩盖了其他实际违规。

    set_false_path

    set_false_path 	[-setup] [-hold] [-rise] [-fall] [-reset_path] 
    				[-from <args>] [-rise_from <args>] [-fall_from <args>]
    				[-to <args>] [-rise_to <args>] [-fall_to <args>]
    				[-through <args>] [-rise_through <args>] [-fall_through <args>]
    				[-quiet] [-verbose] 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    选项含义
    -setup排除路径上的setup分析;
    -hold排除路径上的hold分析;
    -rise/fall排除路径上的上升沿/下降沿延迟;
    -reset_path复位之前该路径上的约束;
    -from 起始点或时钟列表;
    -rise_from 作用于路径上上升沿开始的起始点或时钟列表;
    –fall_from 作用于路径上下降沿开始的起始点或时钟列表;
    -to 终端点或时钟列表;
    -rise_to 作用于路径上上升沿接收的终端点或时钟列表;
    -fall_to 作用于路径上下降沿接收的终端点或时钟列表;
    -through pins、cell、nets列表,所有经过该列表的路径均受约束作用;
    -rise_through pins、cell、nets列表,所有经过该列表的上升沿路径均受约束作用;
    -fall_through pins、cell、nets列表,所有经过该列表的下降沿路径均受约束作用;
    -quiet忽略命令错误

    使用不带 -from 和 -to 的 -through 选项时要小心,因为它会从时序分析中删除通过此引脚或端口列表的任何路径。 当时序约束是为 IP 或子块设计的,但随后用于不同的环境或更大的项目时,要特别小心。 当单独使用 -through 时,可以删除比预期更多的路径。

    实例说明:

    1、删除从端口reset到所有寄存器的所有路径的时序分析:

    set_false_path -from [get_port reset] -to [all_registers]
    
    • 1

    2、禁止工具对两个异步时钟域CLKA和CLKB之间,从CLKA到CLKB的路径的时序分析:

    set_false_path -from [get_clocks CLKA] -to [get_clocks CLKB]
    
    • 1

    3、非功能路径的约束可以使用-through替代-from -to的选项完成约束:
    在这里插入图片描述

    set_false_path -through [get_pins MUX1/a0] -through [get_pins MUX2/a1]
    
    • 1

    注意:
    -through选项的顺序很重要,下面例子的命令是完全不相同的

    set_false_path -through cell1/pin1 -through cell2/pin2
    set_false_path -through cell2/pin2 -through cell1/pin1
    
    • 1
    • 2

    4、公共的例子:异步双端口分布式RAM。写操作与RAM时钟域是同步的,但是读操作与RAM时钟域是异步的,这种情况下,写时钟域和读时钟域设置false路径是安全的。两种方式实现以上约束:
    a、定义RAM前端的写寄存器到RAM后端的读时钟域下寄存器之间的路径为false路径:

    set_false_path -from [get_cells ] -to [get_cells ]
    set_false_path -from [get_cells -hier -filter {NAME =~ *gntv_or_sync_fifo.gl0.wr*reg[*]}] -to [get_cells -hier -filter {NAME=~ *gntv_or_sync_fifo.mem*gpr1.dout_i_reg[*]}]
    
    • 1
    • 2

    b、定义以写引脚WE为起始点的所有路径为false路径:

    set_false_path -from [get_cells -hier -filter {REF_NAME =~ RAM* && IS_SEQUENTIAL && NAME =~ }]
    set_false_path -from [get_cells -hier -filter {REF_NAME =~ RAM* && IS_SEQUENTIAL && NAME =~ *char_fifo*}]
    
    • 1
    • 2

    特别说明:

    对于有些同步时钟下的路径,可以适当放松约束,但这些路径仍然必须满足一定的时序要求,可以使用多路径约束替代set_false_path约束。

  • 相关阅读:
    一文搞定Pandas核心概念之Series
    App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
    centos7 Nginx一键安装自动化脚本
    《向量数据库指南》——提高向量数据库Milvus Cloud 2.3的运行效率
    特征工程-主成分分析PCA
    用AI的智慧,传递感恩之心——GPT-4o助力教师节祝福
    某大学ipv6和ipv4结合的校园网规划设计
    java基于ssm+vue的共享充电宝管理系统 elementui
    《痞子衡嵌入式半月刊》 第 84 期
    计算机网络-谢希任第八版学习笔记总结
  • 原文地址:https://blog.csdn.net/aaaaaaaa585/article/details/119151399