|
最近做了一點(diǎn)FPGA方面的工作,在用QuartusII對代碼進(jìn)行綜合時四處查找資料,總算是對FALSE PATH有了一點(diǎn)點(diǎn)的理解,總得來說,F(xiàn)ALSE PATH就是我們在進(jìn)行綜合分析時,不希望綜合工具進(jìn)行分析的那些路徑。寫出來和大家一起討論。 在QuartusII的一個培訓(xùn)文檔里面解釋了什么時候要用到FALSE PATH: 1. 從邏輯上考慮,與電路正常工作不相關(guān)的那些路徑,比如測試邏輯,靜態(tài)或準(zhǔn)靜態(tài)邏輯。 2. 從時序上考慮,我們在綜合時不需要分析的那些路徑,比如跨越異步時鐘域的路徑。 下面舉例說明: 先看圖1,MUX_1和MUX_2是兩個多路選擇器,MUX_1的使能端C接到時鐘clk,MUX_2的使能端C接到clk的反。于是可以發(fā)現(xiàn)MUX_1的S1端口是不可能經(jīng)過MUX_2的S1端口到達(dá)MUX_2的D端口的,同理MUX_1的S2端口是不可能經(jīng)過MUX_2的S2端口到達(dá)MUX_2的D端口。于是我們就不希望綜合工具對這兩條路徑進(jìn)行分析,就是說這兩條路徑就是我們所說的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表示一個測試邏輯,它并不真正實(shí)現(xiàn)我們電路的功能,只是為了測試電路功能。所以我們就不希望綜合工具對這這些路徑進(jìn)行分析,就是說這些路徑就是我們所說的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,我們不希望綜合工具對這這些路徑進(jìn)行分析,就是說這些路徑就是我們所說的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] 實(shí)際上,這兩條FALSE PATH可以用一條命令來代替: set_clock_groups –exclusive –group {clk_100} \ –group {clk_66} –group {clk_200} 這就涉及到set_clock_groups 命令了,我們以后再說。

圖4
|
|