总得来说,FALSE PATH就是我们在进行时序分析时,不希望工具进行分析的那些路径。一般不需要工具时序分析的路径指的是异步的路径,异步路径就是指的不同时钟域的路径。 在QuartusII的一个培训文档里面解释了什么时候要用到FALSE PATH: 1. 从逻辑上考虑,与电路正常工作不相关的那些路径,比如测试逻辑,静态或准静态逻辑。 2. 从时序上考虑,我们在综合时不需要分析的那些路径,比如跨越异步时钟域的路径。 下面举例说明: 先看图1,MUX_1和MUX_2是两个多路选择器,MUX_1的使能端C接到时钟clk,MUX_2的使能端C接到clk的反。于是可以发现MUX_1的S1端口是不可能经过MUX_2的S1端口到达MUX_2的D端口的,同理MUX_1的S2端口是不可能经过MUX_2的S2端口到达MUX_2的D端口。于是我们就不希望综合工具对这两条路径进行分析,就是说这两条路径就是我们所说的FALSE PATH: set_false_paths –through Mux_1/S1 –through Mux_2/S1 set_false_paths –through Mux_2/S2 –through Mux_2/S2 图1 再看图2,模块test_logic表示一个测试逻辑,它并不真正实现我们电路的功能,只是为了测试电路功能。所以我们就不希望综合工具对这这些路径进行分析,就是说这些路径就是我们所说的FALSE PATH: 图2 set_false_path –fall_from clk1–to [get_pins test_logic|*|datain] set_false_path –from [get_pins test_logic|*|clk] \ -to [get_pins test_logic|*|datain] set_false_path –from [get_pins test_logic|*|clk] -to [get_ports test_out] 然后看图3,reg1的输出和reg2的输入跨越了不同的时钟域clk1和clk2,我们不希望综合工具对这这些路径进行分析,就是说这些路径就是我们所说的FALSE PATH: set_false_path –from [get_pins reg1|clk]–to [get_pins reg2|datain] 图3 最后我们看图4,clk_100和clk_66仍然是两个不同的时钟域,这也是FALSE PATH: set_false_paths –from [get_clocks clk_100] –to [get_clocks clk_66] set_false_paths –from [get_clocks clk_66] –to [get_clocks clk_100] 图4 阿东总结: 一般需要设置FALSE PATH的是图3,就是指两个具有不同寄存器之间的路径。一些情况下,不设置FALSE PATH也可以,工具会去分析相关时序路径,但是肯定会有setup或者hold不满足,这个时候就需要去确认这些路径是否有问题了。而设置了FALSE PATH后,就告诉工具不用去分析这些路径了,这样工具就不会报告出来了,另外还有一个好处就是综合布局布线的时间会大幅减少,因为没有时序问题了,工具就可以跑的很快。一般大型项目一个FPGA(一般都是最高端的FPGA)综合一次的时间高达10几个小时,这个还是使用LINUX高级服务器进行编译,因此综合时间减少收益非常大。一般比较正规的项目,都需要设置FALSE PATH。 另外最近在使用VIVADO工具,和FAE交流后,SET FALSE PATH两个时钟是需要设置两次的,比如:时钟clk1和时钟clk2,两个时钟不相关,需要分别设置clk1->clk2和clk2->clk1两个方向,而使用set_clock_group只需要设置一次,方便很多。 使用set_false_path: set_false_path -from [get_clocks clk1] -to [get_clocks clk2] set_false_path -from [get_clocks clk2] -to [get_clocks clk1] 使用set_clock_group: set_clock_group -name asyn_clocks -asynchronous -group clk1 -group -clk2 ---以下为阿东团队原创开发的FPGA学习板选购指南(覆盖入门进阶+高端各个系列),想和阿东一起学习FPGA的同学可以根据需求选择: 入门级别:完全零基础、想从低端外设学起的同学建议选择暴风四代E6开发板: E6入门板推广链接: 入门级别:有部分基础或者零基础的同学,想学习FPGA驱动以太网、摄像头、TFT彩屏、LCD1602等外设和项目开发的同学选择如下: E10开发板推广链接: Xilinx S6开发板推广链接: 进阶级别:有一定基础或者部分基础的同学,想学习FPGA驱动以太网、摄像头、USB2.0、音频等高端外设和项目开发的同学选择如下: 高端EP4CE10开发板推广链接: 高端EP4CE10开发板高配版本(标配摄像头+高端USB下载器)链接: E10 高配FPGA板链接: 高端级别:有一定基础或者部分基础的同学,想学习FPGA驱动DDR2、以太网、摄像头、USB2.0、音频等高端外设和项目开发的同学选择如下: E30 DDR2 FPGA板链接: |
总得来说,FALSE PATH就是我们在进行时序分析时,不希望工具进行分析的那些路径。一般不需要工具时序分析的路径指的是异步的路径,异步路径就是指的不同时钟域的路径。 在QuartusII的一个培训文档里面解释了什么时候要用到FALSE PATH: 1. 从逻辑上考虑,与电路正常工作不相关的那些路径,比如测试逻辑,静态或准静态逻辑。 2. 从时序上考虑,我们在综合时不需要分析的那些路径,比如跨越异步时钟域的路径。 下面举例说明: 先看图1,MUX_1和MUX_2是两个多路选择器,MUX_1的使能端C接到时钟clk,MUX_2的使能端C接到clk的反。于是可以发现MUX_1的S1端口是不可能经过MUX_2的S1端口到达MUX_2的D端口的,同理MUX_1的S2端口是不可能经过MUX_2的S2端口到达MUX_2的D端口。于是我们就不希望综合工具对这两条路径进行分析,就是说这两条路径就是我们所说的FALSE PATH: set_false_paths –through Mux_1/S1 –through Mux_2/S1 set_false_paths –through Mux_2/S2 –through Mux_2/S2 图1 再看图2,模块test_logic表示一个测试逻辑,它并不真正实现我们电路的功能,只是为了测试电路功能。所以我们就不希望综合工具对这这些路径进行分析,就是说这些路径就是我们所说的FALSE PATH: 图2 set_false_path –fall_from clk1–to [get_pins test_logic|*|datain] set_false_path –from [get_pins test_logic|*|clk] \ -to [get_pins test_logic|*|datain] set_false_path –from [get_pins test_logic|*|clk] -to [get_ports test_out] 然后看图3,reg1的输出和reg2的输入跨越了不同的时钟域clk1和clk2,我们不希望综合工具对这这些路径进行分析,就是说这些路径就是我们所说的FALSE PATH: set_false_path –from [get_pins reg1|clk]–to [get_pins reg2|datain] 图3 最后我们看图4,clk_100和clk_66仍然是两个不同的时钟域,这也是FALSE PATH: set_false_paths –from [get_clocks clk_100] –to [get_clocks clk_66] set_false_paths –from [get_clocks clk_66] –to [get_clocks clk_100] 图4 阿东总结: 一般需要设置FALSE PATH的是图3,就是指两个具有不同寄存器之间的路径。一些情况下,不设置FALSE PATH也可以,工具会去分析相关时序路径,但是肯定会有setup或者hold不满足,这个时候就需要去确认这些路径是否有问题了。而设置了FALSE PATH后,就告诉工具不用去分析这些路径了,这样工具就不会报告出来了,另外还有一个好处就是综合布局布线的时间会大幅减少,因为没有时序问题了,工具就可以跑的很快。一般大型项目一个FPGA(一般都是最高端的FPGA)综合一次的时间高达10几个小时,这个还是使用LINUX高级服务器进行编译,因此综合时间减少收益非常大。一般比较正规的项目,都需要设置FALSE PATH。 另外最近在使用VIVADO工具,和FAE交流后,SET FALSE PATH两个时钟是需要设置两次的,比如:时钟clk1和时钟clk2,两个时钟不相关,需要分别设置clk1->clk2和clk2->clk1两个方向,而使用set_clock_group只需要设置一次,方便很多。 使用set_false_path: set_false_path -from [get_clocks clk1] -to [get_clocks clk2] set_false_path -from [get_clocks clk2] -to [get_clocks clk1] 使用set_clock_group: set_clock_group -name asyn_clocks -asynchronous -group clk1 -group -clk2 ---以下为阿东团队原创开发的FPGA学习板选购指南(覆盖入门进阶+高端各个系列),想和阿东一起学习FPGA的同学可以根据需求选择: 入门级别:完全零基础、想从低端外设学起的同学建议选择暴风四代E6开发板: E6入门板推广链接: 入门级别:有部分基础或者零基础的同学,想学习FPGA驱动以太网、摄像头、TFT彩屏、LCD1602等外设和项目开发的同学选择如下: E10开发板推广链接: Xilinx S6开发板推广链接: 进阶级别:有一定基础或者部分基础的同学,想学习FPGA驱动以太网、摄像头、USB2.0、音频等高端外设和项目开发的同学选择如下: 高端EP4CE10开发板推广链接: 高端EP4CE10开发板高配版本(标配摄像头+高端USB下载器)链接: E10 高配FPGA板链接: 高端级别:有一定基础或者部分基础的同学,想学习FPGA驱动DDR2、以太网、摄像头、USB2.0、音频等高端外设和项目开发的同学选择如下: E30 DDR2 FPGA板链接: |
总得来说,FALSE PATH就是我们在进行时序分析时,不希望工具进行分析的那些路径。一般不需要工具时序分析的路径指的是异步的路径,异步路径就是指的不同时钟域的路径。 在QuartusII的一个培训文档里面解释了什么时候要用到FALSE PATH: 1. 从逻辑上考虑,与电路正常工作不相关的那些路径,比如测试逻辑,静态或准静态逻辑。 2. 从时序上考虑,我们在综合时不需要分析的那些路径,比如跨越异步时钟域的路径。 下面举例说明: 先看图1,MUX_1和MUX_2是两个多路选择器,MUX_1的使能端C接到时钟clk,MUX_2的使能端C接到clk的反。于是可以发现MUX_1的S1端口是不可能经过MUX_2的S1端口到达MUX_2的D端口的,同理MUX_1的S2端口是不可能经过MUX_2的S2端口到达MUX_2的D端口。于是我们就不希望综合工具对这两条路径进行分析,就是说这两条路径就是我们所说的FALSE PATH: set_false_paths –through Mux_1/S1 –through Mux_2/S1 set_false_paths –through Mux_2/S2 –through Mux_2/S2 图1 再看图2,模块test_logic表示一个测试逻辑,它并不真正实现我们电路的功能,只是为了测试电路功能。所以我们就不希望综合工具对这这些路径进行分析,就是说这些路径就是我们所说的FALSE PATH: 图2 set_false_path –fall_from clk1–to [get_pins test_logic|*|datain] set_false_path –from [get_pins test_logic|*|clk] \ -to [get_pins test_logic|*|datain] set_false_path –from [get_pins test_logic|*|clk] -to [get_ports test_out] 然后看图3,reg1的输出和reg2的输入跨越了不同的时钟域clk1和clk2,我们不希望综合工具对这这些路径进行分析,就是说这些路径就是我们所说的FALSE PATH: set_false_path –from [get_pins reg1|clk]–to [get_pins reg2|datain] 图3 最后我们看图4,clk_100和clk_66仍然是两个不同的时钟域,这也是FALSE PATH: set_false_paths –from [get_clocks clk_100] –to [get_clocks clk_66] set_false_paths –from [get_clocks clk_66] –to [get_clocks clk_100] 图4 阿东总结: 一般需要设置FALSE PATH的是图3,就是指两个具有不同寄存器之间的路径。一些情况下,不设置FALSE PATH也可以,工具会去分析相关时序路径,但是肯定会有setup或者hold不满足,这个时候就需要去确认这些路径是否有问题了。而设置了FALSE PATH后,就告诉工具不用去分析这些路径了,这样工具就不会报告出来了,另外还有一个好处就是综合布局布线的时间会大幅减少,因为没有时序问题了,工具就可以跑的很快。一般大型项目一个FPGA(一般都是最高端的FPGA)综合一次的时间高达10几个小时,这个还是使用LINUX高级服务器进行编译,因此综合时间减少收益非常大。一般比较正规的项目,都需要设置FALSE PATH。 另外最近在使用VIVADO工具,和FAE交流后,SET FALSE PATH两个时钟是需要设置两次的,比如:时钟clk1和时钟clk2,两个时钟不相关,需要分别设置clk1->clk2和clk2->clk1两个方向,而使用set_clock_group只需要设置一次,方便很多。 使用set_false_path: set_false_path -from [get_clocks clk1] -to [get_clocks clk2] set_false_path -from [get_clocks clk2] -to [get_clocks clk1] 使用set_clock_group: set_clock_group -name asyn_clocks -asynchronous -group clk1 -group -clk2 ---以下为阿东团队原创开发的FPGA学习板选购指南(覆盖入门进阶+高端各个系列),想和阿东一起学习FPGA的同学可以根据需求选择: 入门级别:完全零基础、想从低端外设学起的同学建议选择暴风四代E6开发板: E6入门板推广链接: 入门级别:有部分基础或者零基础的同学,想学习FPGA驱动以太网、摄像头、TFT彩屏、LCD1602等外设和项目开发的同学选择如下: E10开发板推广链接: Xilinx S6开发板推广链接: 进阶级别:有一定基础或者部分基础的同学,想学习FPGA驱动以太网、摄像头、USB2.0、音频等高端外设和项目开发的同学选择如下: 高端EP4CE10开发板推广链接: 高端EP4CE10开发板高配版本(标配摄像头+高端USB下载器)链接: E10 高配FPGA板链接: 高端级别:有一定基础或者部分基础的同学,想学习FPGA驱动DDR2、以太网、摄像头、USB2.0、音频等高端外设和项目开发的同学选择如下: E30 DDR2 FPGA板链接: |