本文主要是介绍时序例外_Timing Exceptions_False Paths(set_false_path),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天拿到一个别人的工程,布局布线后发现有16个Critical Warning,在生成bit文件时,vivado卡死在布线步骤,说明时序是有问题的。打开综合后的时序报告,发现保持时间Slack为-18ns,而且都是保持时间违例,建立时间没有问题。通过对具体的违例线路分析,发现大部分都是异步fifo读写数据路径违例(如下图所示),最终通过set_false_path解决了问题。所以对false path进行了初步研究。
1、什么是false path
该路径没有逻辑功能(只是数据总线);该路径不需要时序约束;该路径在时序分析的时候可以忽略不分析。
2、那些路劲可能是false path
跨时钟域信号通过寄存器打两拍保持异步信号同步的路径;
一上电只写一次的寄存器路径;
复位或测试逻辑;
异步读写双端口RAM;
3、添加false path的理由
减小布线时间:设置false path后,工具就不会在该路径进行时序检查和优化,就会将主要精力放在关键路径布局布线;
提高QOR(quality of result):提高综合、布局布线和实现的质量。
4、添加false path的命令
set_false_path [-setup] [-hold] [-from <node_list>] [-to <node_list>] \[-through <node_list>]
下面介绍了命令的几种特殊用法:
1.移除全局复位信号到所有寄存器的false path
set_false_path -from [get_port reset] -to [all_registers]
2.移除两个异步时钟域之间的的false path
set_false_path -from [get_clocks CLKA] -to [get_clocks CLKB]
set_false_path -from [get_clocks CLKB] -to [get_clocks CLKA](两者定义的路径方向不同)
3.两个或者多个异步时钟域,彼此之间各个方向的false path(比2定义的范围更广)
set_clock_groups -group CLKA -group CLKB
4.双端口RAM读写异步操作的false path
1)定义RAM之前写寄存器到RAM后读寄存器的false path
set_false_path -from [get_cells <write_registers>] -to [get_cells <read_registers>]
2)从RAM写信号(WE)定义false path
set_false_path -from [get_cells -hier -filter {REF_NAME =~ RAM* && IS_SEQUENTIAL &&
NAME =~ *char_fifo*}]
这篇关于时序例外_Timing Exceptions_False Paths(set_false_path)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!