FPGA时序约束中set_false_path的使用

A false path can be a path logically impossible. Let's take a circuit shown below as an example.

FPGA时序约束中set_false_path的使用_第1张图片

As we can see from the diagram, it is logically impossible from a1, through f1 and b2, to f2. It also logically impossible from b2, through f1 and a2, to f2. In such cases, we can use PrimeTime command set_false_path to disable the timing paths..

set_false_path -through a1 -through b2

set_false_path -through b1 -through a2

A false path can also be a path cross asynchronous clock domains. Let's assuming clk1 is asynchronous to clk2, we can also disable the false paths like following.

set_false_path -from [get_clocks clk1] -to [get_clocks clk2]

set_false_path -from [get_clocks clk2] -to [get_clocks clk1]

Or we can use set_clock_group to do same thing.

set_clock_group -name asyn_clocks -asynchronous -group clk1 -group -clk2


1. Why we want to set false path? 
   Just We want to tell tools don't care about these special path, and we can make sure these defined path have no need to check or we have other methods to check , such as dynamic simulation for asynchrous path, or handshake function check for different clock domain. 

2. Which path we should set as false path?
  1). logic impossible path: we should specify these path which cannot exist in logic function, but tools cannot get enough info about these impossible path,especially multi master/slave bus commulation , mux selection function, memory R/W function. 

  2). CDC (clock domain constaint) :for these multi asynchrous clock domain, we can use  handshake or FIFO to communicate.

  3). test function logic path : for one real chip , we should have enough logic for  scan test or BIST test, or JTAG test, we should  seperate STA as scan test, function test, at-speed test and BIST test. So in each case, we should set different test mode enable ,and set other path as false path. For example, when we do function test, we should set scan and BIST data path as false path . 

  4) other specified path by designer




FALSE PATH的理解

 

 


最近做了一点FPGA方面的工作,在用QuartusII对代码进行综合时四处查找资料,总算是对FALSE PATH有了一点点的理解,总得来说,FALSE PATH就是我们在进行综合分析时,不希望综合工具进行分析的那些路径。写出来和大家一起讨论。
QuartusII的一个培训文档里面解释了什么时候要用到FALSE PATH
1.           从逻辑上考虑,与电路正常工作不相关的那些路径,比如测试逻辑,静态或准静态逻辑。
2.          从时序上考虑,我们在综合时不需要分析的那些路径,比如跨越异步时钟域的路径。
下面举例说明:
先看图1MUX_1MUX_2是两个多路选择器,MUX_1的使能端C接到时钟clkMUX_2的使能端C接到clk的反。于是可以发现MUX_1S1端口是不可能经过MUX_2S1端口到达MUX_2D端口的,同理MUX_1S2端口是不可能经过MUX_2S2端口到达MUX_2D端口。于是我们就不希望综合工具对这两条路径进行分析,就是说这两条路径就是我们所说的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 clk1to [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]
然后看图3reg1的输出和reg2的输入跨越了不同的时钟域clk1clk2,我们不希望综合工具对这这些路径进行分析,就是说这些路径就是我们所说的FALSE PATH
set_false_path –from [get_pins reg1|clk]to [get_pins reg2|datain]

 

 

 

 

 

 

 

 

3

 


最后我们看图4clk_100clk_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]
实际上,这两条FALSE PATH可以用一条命令来代替:
set_clock_groups –exclusive –group {clk_100} \
group {clk_66} –group {clk_200}
这就涉及到set_clock_groups 命令了,我们以后再说。

 

 

 

 

 

 

 

 

4




你可能感兴趣的:(FPGA开发)