1. 引言
在FPGA邏輯電路設(shè)計(jì)中,F(xiàn)PGA設(shè)計(jì)能達(dá)到的最高性能往往由以下因素決定:
? 工作時(shí)鐘偏移和時(shí)鐘不確定性;
? 邏輯延遲:在一個(gè)時(shí)鐘周期內(nèi)信號(hào)經(jīng)過的邏輯量;
? 網(wǎng)絡(luò)或路徑延遲:Vivado布局布線后引入的延遲量。
Vivado軟件完成布局布線后,我們可以打開時(shí)序分析報(bào)告,來查看時(shí)序沒有過的路徑是由哪些因素導(dǎo)致的時(shí)序違規(guī)。Vivado會(huì)通過列表形式展示每條時(shí)序違規(guī)路徑的信息,如下圖所示。
雙擊上面表中的其中一條路徑,會(huì)展開關(guān)于該路徑更詳細(xì)的時(shí)序報(bào)告,如下圖:
上圖這個(gè)時(shí)序違例的例子,可以看到,該路徑邏輯延遲貢獻(xiàn)了11.934%的延遲量、路徑延遲貢獻(xiàn)了88.066%延遲量。該路徑邏輯級(jí)數(shù)為5,經(jīng)過了2個(gè)CARRY4、1個(gè)LUT4和2個(gè)LUT6。
2. 降低邏輯延遲的方法
如果邏輯延遲大,我們需要查看該路徑是不是只包含CLB器件,還是說該路徑還經(jīng)過了如DSP、RAMB、URAM、FIFO或GT等器件。
2.1 路徑只包含CLB器件
常規(guī)布線路徑是在寄存器(FD*)或移位寄存器(SRL*)之間的路徑,它們經(jīng)過一些 LUT、MUXF 和 CARRY 元件。通常會(huì)遇到以下幾種情形導(dǎo)致邏輯延遲過大:
(1)較高邏輯層數(shù)(logic levels)的組合電路。用戶在兩個(gè)寄存器之間插入的組合邏輯過于復(fù)雜,級(jí)聯(lián)了過多的LUT、CARRY等元件,導(dǎo)致邏輯延遲過高時(shí)序過不了。如下圖中,兩個(gè)寄存器之間有一個(gè)logic levels為5層的組合邏輯。
建議的解決方案: 在設(shè)計(jì)的早期階段,通過TCL命令“report_qor_assessment”,早些識(shí)別出邏輯層數(shù)較高組合邏輯,通過代碼優(yōu)化手段來降低邏輯層次?;蛘?,在綜合的時(shí)候,將“-retiming”全局變量勾選上。
(2)路徑上有很多小的級(jí)聯(lián)LUT(LUT1-LUT4)。這些多個(gè)小的級(jí)聯(lián)查找表是可以被合并成數(shù)量更少的LUT的。阻止這些級(jí)聯(lián)LUT合并的原因可能如下:
- 有些小的LUT表存在一些扇出(扇出為10,或者更高);
- 用戶使用了一些properties語法,比如:KEEP、KEEP_HIERARCHY、DON’T_TOUCH或MARK_DEBUG。
建議的解決方案: 移除掉這些properties語法,重新編譯綜合工程。
(3)路徑上有單個(gè)CARRY(非級(jí)聯(lián))限制了LUT的優(yōu)化,導(dǎo)致vivado布局也不是最優(yōu)。
建議的解決方案: 在綜合的時(shí)候,使用“FewerCarryChains”綜合指令。或者對(duì)該CELL在opt_design階段設(shè)置CARRY_REMAP屬性。(具體使用方法可以查看UG904)
2.2 路徑包含其他復(fù)雜器件(DSP、RAM等)
如果時(shí)序路徑上會(huì)經(jīng)過宏原語元件(macro primitives)如DSP、RAM、URAM、FIFO或GT_CHANNEL等元件,布局布線的難度會(huì)加大,也會(huì)導(dǎo)致更高的布局布線延遲。降低這些路徑的邏輯延遲方法如下:
(1)在進(jìn)出宏原語元件電路周圍,增加額外的流水結(jié)構(gòu)。比如:
- 原設(shè)計(jì)是用的一個(gè)大位寬RAM緩存數(shù)據(jù),把這個(gè)大位寬RAM拆分成多個(gè)并行的小位寬RAM實(shí)現(xiàn)相同的功能。
- 原設(shè)計(jì)乘法器為2級(jí)流水乘法器,把它改為2級(jí)以上的流水乘法器。
- 數(shù)據(jù)進(jìn)出宏原語元件時(shí),都用寄存器打一拍等。
(2)在包含宏原語元件的路徑上減少邏輯層數(shù),這點(diǎn)對(duì)改善整個(gè)設(shè)計(jì)的性能提升很明顯。
Tips: 在修改RTL之前,可以嘗試把DSP、RAM、URAM的自帶流水寄存器使能都打開,然后重新編譯工程,看時(shí)序是否能有改善。比如將下面這條路徑:
設(shè)置如下屬性:
set_property -dict {DOA_REG 1 DOB REG 1} [get_cells xx/ramb18_inst]
注意,由于使能這些寄存器后,邏輯時(shí)序會(huì)有變動(dòng),此時(shí)的RTL功能和你原先設(shè)計(jì)是有出入的,所以不用生成bitstream,這樣操作的目的只是為了看時(shí)序能如何改善。
3. 總結(jié)
本文主要介紹了如何減少時(shí)序報(bào)告中的邏輯延遲,下期文章我們將向大家介紹如何降低路徑延遲的方法。如果覺得我們原創(chuàng)或引用的文章寫的還不錯(cuò),幫忙點(diǎn)贊和推薦吧,謝謝您的關(guān)注。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21748瀏覽量
603880 -
邏輯電路
+關(guān)注
關(guān)注
13文章
494瀏覽量
42641 -
FPGA設(shè)計(jì)
+關(guān)注
關(guān)注
9文章
428瀏覽量
26531 -
時(shí)序
+關(guān)注
關(guān)注
5文章
389瀏覽量
37347 -
Vivado
+關(guān)注
關(guān)注
19文章
812瀏覽量
66611
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論