今天拿到一个别人的工程,布局布线后发现有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*}]
本文发布于:2024-01-28 05:15:00,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063901045048.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |