流水線設(shè)計(jì)通??梢栽谝欢ǔ潭壬咸嵘到y(tǒng)的時(shí)鐘頻率,因此常常作為時(shí)序性能優(yōu)化的一種常用技巧。如果某個(gè)原本單個(gè)時(shí)鐘周期完成的邏輯功能塊可以進(jìn)一步細(xì)分為若干個(gè)更小的步驟進(jìn)行處理,而且整個(gè)數(shù)據(jù)處理過(guò)程是單向的,即沒(méi)有反饋運(yùn)算或者迭代運(yùn)算,前一個(gè)步驟的輸出是下一個(gè)步驟的輸入,那么就可以考慮采用流水線設(shè)計(jì)的方法來(lái)提高工作的時(shí)鐘頻率。
如圖3.23所示,典型的流水線設(shè)計(jì)是將原本一個(gè)時(shí)鐘周期完成的較大的組合邏輯(上圖)通過(guò)合理的分割后由多個(gè)時(shí)鐘周期分別完成n個(gè)較小的組合邏輯(下圖)。原本1個(gè)時(shí)鐘周期完成的邏輯功能拆分為n個(gè)時(shí)鐘周期以流水線方式實(shí)現(xiàn),雖然該設(shè)計(jì)的時(shí)鐘頻率會(huì)有所提升,但是需要額外付出n-1個(gè)時(shí)鐘周期的初始延時(shí)。
圖3.23 流水線設(shè)計(jì)的寄存器模型
如圖3.24所示,假設(shè)一個(gè)流水線設(shè)計(jì)需要四個(gè)步驟完成一個(gè)數(shù)據(jù)處理過(guò)程,那么從有數(shù)據(jù)輸入(in1)的第1個(gè)時(shí)鐘周期(1clk)開(kāi)始,直到第4個(gè)時(shí)鐘周期(4clk)才處理第1個(gè)輸入數(shù)據(jù);如果輸出時(shí)再用寄存器打一拍,通常是第5個(gè)時(shí)鐘周期才會(huì)輸出第1個(gè)數(shù)據(jù)的處理結(jié)果;但在以后的每個(gè)時(shí)鐘周期內(nèi)都會(huì)有處理完成的數(shù)據(jù)持續(xù)輸出。也就是說(shuō),流水線設(shè)計(jì)在提高工作的時(shí)鐘頻率的情況下,只在開(kāi)始處理時(shí)需要一定的延時(shí)時(shí)間(和流水線級(jí)數(shù)正相關(guān)),以后就會(huì)不間斷的輸出數(shù)據(jù),從而提高處理速度。如果該設(shè)計(jì)不采用流水線設(shè)計(jì),那么該實(shí)例處理一個(gè)數(shù)據(jù)就需要4個(gè)時(shí)鐘周期,而流水線設(shè)計(jì)則能夠提高最多4倍的處理速度(取決于設(shè)計(jì)的整體性能水平,通常情況下是提升不了4倍的)。
圖3.24 流水線設(shè)計(jì)實(shí)現(xiàn)
這里我們來(lái)看一個(gè)除法器IP核進(jìn)行流水線優(yōu)化的例子。如圖3.25所示,在Xilinx提供的除法器IP核的配置頁(yè)面中,有一個(gè)時(shí)延選項(xiàng)(Latency Options),這個(gè)時(shí)延其實(shí)就是我們剛剛提到的數(shù)據(jù)從輸入到輸出,經(jīng)過(guò)內(nèi)部的流水線處理邏輯,所需要的初始延時(shí)時(shí)鐘周期數(shù)??上攵?,這個(gè)延時(shí)設(shè)置得越大,對(duì)應(yīng)的流水線級(jí)數(shù)越高,可以達(dá)到的時(shí)序性能應(yīng)該是會(huì)約好的;但這個(gè)延時(shí)值如果設(shè)置的較小,對(duì)應(yīng)的流水線級(jí)數(shù)就越低,那么勢(shì)必會(huì)影響它的時(shí)序性能。以筆者的經(jīng)驗(yàn),在一些算法實(shí)現(xiàn)中,經(jīng)常會(huì)涉及除法器IP核的使用,雖然流水線級(jí)數(shù)設(shè)置得高一些能夠帶來(lái)更好的時(shí)序性能,但是往往也會(huì)涉及與該除法器計(jì)算結(jié)果相關(guān)的中間結(jié)果也需要用寄存器進(jìn)行較多的延時(shí)緩存,有時(shí)這也是一筆不小的資源開(kāi)銷(xiāo),所以就比較矛盾,因此通常會(huì)選擇一個(gè)比較折中的時(shí)延參數(shù),而不是單純的“越大越好”。
圖3.25 除法器IP的配置頁(yè)面
在工程note10_prj002中,使用了Latency=2的一個(gè)較小的時(shí)延和流水線級(jí)數(shù)。在編譯后,查看時(shí)序結(jié)果,如圖3.26,對(duì)于50MHz這樣較低頻率下的時(shí)鐘(20.0ns時(shí)鐘周期),竟然也有3條和除法器(uut_div_gen_1)相關(guān)的3條路徑出現(xiàn)了時(shí)序違規(guī)(Slack為負(fù))。
圖3.26 2級(jí)流水線的時(shí)序結(jié)果
在工程note10_prj003中,當(dāng)我們嘗試修改Latency=4,將除法器的流水線數(shù)增加1倍后再做編譯。如圖3.27,此時(shí)已經(jīng)不存在時(shí)序違規(guī)路徑了,并且最小的時(shí)序余量也高達(dá)4.022ns,性能提升明顯。
圖3.27 4級(jí)流水線的時(shí)序結(jié)果
對(duì)于流水線設(shè)計(jì)是否能夠?qū)嶋H的提升設(shè)計(jì)工程的時(shí)鐘頻率,并不能僅從局部的優(yōu)化去考慮,而需要從整體的設(shè)計(jì)去考量。在時(shí)序性能的優(yōu)化中,通常是先找到時(shí)序的關(guān)鍵路徑,即時(shí)鐘頻率的瓶頸所在,從關(guān)鍵路徑下手進(jìn)行必要的流水線優(yōu)化,如此才有可能提升性能。
-
寄存器
+關(guān)注
關(guān)注
31文章
5430瀏覽量
123917 -
Xilinx
+關(guān)注
關(guān)注
73文章
2184瀏覽量
124777 -
流水線
+關(guān)注
關(guān)注
0文章
124瀏覽量
26578 -
除法器
+關(guān)注
關(guān)注
2文章
14瀏覽量
14012 -
時(shí)序
+關(guān)注
關(guān)注
5文章
397瀏覽量
37865
原文標(biāo)題:經(jīng)典設(shè)計(jì)思想:流水線設(shè)計(jì)
文章出處:【微信號(hào):FPGA快樂(lè)學(xué)習(xí),微信公眾號(hào):FPGA快樂(lè)學(xué)習(xí)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
FPGA中的流水線設(shè)計(jì)
現(xiàn)代RISC中的流水線技術(shù)
周期精確的流水線仿真模型
流水線中的相關(guān)培訓(xùn)教程[1]
Verilog基本功之:流水線設(shè)計(jì)Pipeline Design
FPGA之為什么要進(jìn)行流水線的設(shè)計(jì)
各種流水線特點(diǎn)及常見(jiàn)流水線設(shè)計(jì)方式

滾筒輸流水線故障排除方法
如何選擇合適的LED生產(chǎn)流水線輸送方式
嵌入式_流水線

評(píng)論