1. 引言
在FPGA邏輯電路設(shè)計中,F(xiàn)PGA設(shè)計能達到的最高性能往往由以下因素決定:
? 工作時鐘偏移和時鐘不確定性;
? 邏輯延遲:在一個時鐘周期內(nèi)信號經(jīng)過的邏輯量;
? 網(wǎng)絡(luò)或路徑延遲:Vivado布局布線后引入的延遲量。
Vivado軟件完成布局布線后,我們可以打開時序分析報告,來查看時序沒有過的路徑是由哪些因素導(dǎo)致的時序違規(guī)。Vivado會通過列表形式展示每條時序違規(guī)路徑的信息,如下圖所示。

雙擊上面表中的其中一條路徑,會展開關(guān)于該路徑更詳細(xì)的時序報告,如下圖:

上圖這個時序違例的例子,可以看到,該路徑邏輯延遲貢獻了11.934%的延遲量、路徑延遲貢獻了88.066%延遲量。該路徑邏輯級數(shù)為5,經(jīng)過了2個CARRY4、1個LUT4和2個LUT6。
2. 降低邏輯延遲的方法
如果邏輯延遲大,我們需要查看該路徑是不是只包含CLB器件,還是說該路徑還經(jīng)過了如DSP、RAMB、URAM、FIFO或GT等器件。
2.1 路徑只包含CLB器件
常規(guī)布線路徑是在寄存器(FD*)或移位寄存器(SRL*)之間的路徑,它們經(jīng)過一些 LUT、MUXF 和 CARRY 元件。通常會遇到以下幾種情形導(dǎo)致邏輯延遲過大:
(1)較高邏輯層數(shù)(logic levels)的組合電路。用戶在兩個寄存器之間插入的組合邏輯過于復(fù)雜,級聯(lián)了過多的LUT、CARRY等元件,導(dǎo)致邏輯延遲過高時序過不了。如下圖中,兩個寄存器之間有一個logic levels為5層的組合邏輯。

建議的解決方案: 在設(shè)計的早期階段,通過TCL命令“report_qor_assessment”,早些識別出邏輯層數(shù)較高組合邏輯,通過代碼優(yōu)化手段來降低邏輯層次?;蛘撸诰C合的時候,將“-retiming”全局變量勾選上。
(2)路徑上有很多小的級聯(lián)LUT(LUT1-LUT4)。這些多個小的級聯(lián)查找表是可以被合并成數(shù)量更少的LUT的。阻止這些級聯(lián)LUT合并的原因可能如下:
- 有些小的LUT表存在一些扇出(扇出為10,或者更高);
- 用戶使用了一些properties語法,比如:KEEP、KEEP_HIERARCHY、DON’T_TOUCH或MARK_DEBUG。
建議的解決方案: 移除掉這些properties語法,重新編譯綜合工程。
(3)路徑上有單個CARRY(非級聯(lián))限制了LUT的優(yōu)化,導(dǎo)致vivado布局也不是最優(yōu)。
建議的解決方案: 在綜合的時候,使用“FewerCarryChains”綜合指令?;蛘邔υ揅ELL在opt_design階段設(shè)置CARRY_REMAP屬性。(具體使用方法可以查看UG904)
2.2 路徑包含其他復(fù)雜器件(DSP、RAM等)
如果時序路徑上會經(jīng)過宏原語元件(macro primitives)如DSP、RAM、URAM、FIFO或GT_CHANNEL等元件,布局布線的難度會加大,也會導(dǎo)致更高的布局布線延遲。降低這些路徑的邏輯延遲方法如下:
(1)在進出宏原語元件電路周圍,增加額外的流水結(jié)構(gòu)。比如:
- 原設(shè)計是用的一個大位寬RAM緩存數(shù)據(jù),把這個大位寬RAM拆分成多個并行的小位寬RAM實現(xiàn)相同的功能。
- 原設(shè)計乘法器為2級流水乘法器,把它改為2級以上的流水乘法器。
- 數(shù)據(jù)進出宏原語元件時,都用寄存器打一拍等。
(2)在包含宏原語元件的路徑上減少邏輯層數(shù),這點對改善整個設(shè)計的性能提升很明顯。
Tips: 在修改RTL之前,可以嘗試把DSP、RAM、URAM的自帶流水寄存器使能都打開,然后重新編譯工程,看時序是否能有改善。比如將下面這條路徑:

設(shè)置如下屬性:
set_property -dict {DOA_REG 1 DOB REG 1} [get_cells xx/ramb18_inst]
注意,由于使能這些寄存器后,邏輯時序會有變動,此時的RTL功能和你原先設(shè)計是有出入的,所以不用生成bitstream,這樣操作的目的只是為了看時序能如何改善。
3. 總結(jié)
本文主要介紹了如何減少時序報告中的邏輯延遲,下期文章我們將向大家介紹如何降低路徑延遲的方法。如果覺得我們原創(chuàng)或引用的文章寫的還不錯,幫忙點贊和推薦吧,謝謝您的關(guān)注。
-
FPGA
+關(guān)注
關(guān)注
1655文章
22278瀏覽量
629953 -
邏輯電路
+關(guān)注
關(guān)注
13文章
503瀏覽量
43819 -
FPGA設(shè)計
+關(guān)注
關(guān)注
9文章
429瀏覽量
27988 -
時序
+關(guān)注
關(guān)注
5文章
402瀏覽量
38622 -
Vivado
+關(guān)注
關(guān)注
19文章
846瀏覽量
70444
發(fā)布評論請先 登錄
soc中的組合邏輯和時序邏輯應(yīng)用說明
FPGA實戰(zhàn)演練邏輯篇65:CMOS攝像頭接口時序設(shè)計5時序報告
在FPGA中何時用組合邏輯或時序邏輯
中規(guī)模集成時序邏輯設(shè)計
降低移動設(shè)計功耗的邏輯技術(shù)方法
時序邏輯電路的分析方法

降低時序報告中邏輯延遲的方法
評論