如果你曾看過(guò)VexRSICV的設(shè)計(jì),對(duì)于從事邏輯設(shè)計(jì)的你會(huì)驚訝從未想過(guò)邏輯設(shè)計(jì)還能這么來(lái)做。針對(duì)VexRSICV所衍生出的pipeline Lib,該系列會(huì)對(duì)pipeline進(jìn)行一次梳理。誠(chéng)如之前一篇博客曾講,這是“勇者的游戲”。
雖然并未從事CPU設(shè)計(jì),但這里pipeline的庫(kù)讀完還是當(dāng)浮一大白~
》傳統(tǒng)的設(shè)計(jì)思路
借用博客《The VexRiscV CPU - A New Way to Design》中的觀點(diǎn),在CPU設(shè)計(jì)里,一條典型的五級(jí)流水線: ???
在傳統(tǒng)的流水線設(shè)計(jì)里,一條指令切分到不同的Stage中,每增加一條指令,我們可能就需要對(duì)各個(gè)Stage進(jìn)行修改,牽一發(fā)而動(dòng)全身。如果對(duì)于流水線每個(gè)階段都了然于胸,那么自不是問(wèn)題,否則那就是噩夢(mèng)級(jí)別的難度了~。
那么,是否有新的方式來(lái)做一次流水線設(shè)計(jì)的創(chuàng)新呢?
來(lái)看看SpinalHDL里pipeline的設(shè)計(jì)思路。
》高端操作
本篇為開(kāi)篇系列,先從整體架構(gòu)上看SpinalHDL中pipeline的設(shè)計(jì)整體框架,暫不牽涉具體的設(shè)計(jì)細(xì)節(jié)。
我們先來(lái)看一個(gè)非常簡(jiǎn)單的“pipeline”:
從A到B經(jīng)歷三級(jí)流水線,每經(jīng)一級(jí)加一輸出至下一級(jí)。
回到電路設(shè)計(jì)的本質(zhì)。在FPGA里面,除了RAM、DSP這些資源,邏輯實(shí)現(xiàn)的核心只有LUT喝Reg。LUT負(fù)責(zé)實(shí)現(xiàn)邏輯實(shí)現(xiàn),Reg負(fù)責(zé)狀態(tài)保存。在上面的三級(jí)流水里,我們要思索的無(wú)非兩個(gè)問(wèn)題:
每一級(jí)流水線都做了什么
流水線各級(jí)是如何進(jìn)行連接的
那么在看看上面的電路。每級(jí)流水線里面都是一個(gè)加法器和一個(gè)寄存器輸出。加法器這些功能性的實(shí)現(xiàn)才是每一級(jí)Stage的功能。而寄存器則用于連接本級(jí)Stage與下一級(jí)Stage。也就意味著,每一級(jí)流水線都是邏輯電路負(fù)責(zé)實(shí)現(xiàn)功能,時(shí)序電路寄存器用于Stage連接。為此,對(duì)于pipeline我們可以抽象為下面的要素:
Stage:僅考慮具體的功能實(shí)現(xiàn),它包含了輸入、輸出以及具體的邏輯實(shí)現(xiàn)。
Connection:僅用于實(shí)現(xiàn)各級(jí)Stage的連接。
在邏輯電路設(shè)計(jì)里,不要總是想著把功能實(shí)現(xiàn)和時(shí)序設(shè)計(jì)給拼到一塊兒。將上面的概念與最上面的三級(jí)流水對(duì)照,那么加法器就是對(duì)應(yīng)的Stage的功能,一個(gè)組合電路。而寄存器就對(duì)應(yīng)Connection的功能。
SpinalHDL是基于Scala而設(shè)計(jì),其能夠幫助我們自動(dòng)實(shí)現(xiàn)很多功能。比如兩級(jí)Stage之間都有哪些信號(hào)是要通過(guò)Connection進(jìn)行連接,對(duì)應(yīng)的流水線功能如flush、halt能功能如何在各級(jí)Stage之間進(jìn)行傳播等功能。我們所需要做的,就是通過(guò)一定的規(guī)則告訴pipeline如何去做這些事情。
接下來(lái),先針對(duì)pipeline所涉及的Pipeline、Stage、Connection、Stageable、StageableKey進(jìn)行一個(gè)初步整體了解。
審核編輯:劉清
-
RAM
+關(guān)注
關(guān)注
8文章
1391瀏覽量
116800 -
加法器
+關(guān)注
關(guān)注
6文章
183瀏覽量
30607 -
Pipeline
+關(guān)注
關(guān)注
0文章
29瀏覽量
9618 -
CPU設(shè)計(jì)
+關(guān)注
關(guān)注
0文章
8瀏覽量
10598 -
FPGA開(kāi)發(fā)板
+關(guān)注
關(guān)注
10文章
124瀏覽量
31870
原文標(biāo)題:pipeline高端玩法(一)——系統(tǒng)架構(gòu)
文章出處:【微信號(hào):Spinal FPGA,微信公眾號(hào):Spinal FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
怎樣使用SpinalHDL Pipeline組件里的resulting及overloaded?

在SpinalHDL里switch方法有何用處呢
在SpinalHDL里實(shí)現(xiàn)優(yōu)雅的添加待跟蹤波形信號(hào)
聊一聊SpinalHDL 1.6.1引入的blackbox inline功能
在SpinalHDL中關(guān)于casez的使用
分享一個(gè)在SpinalHDL里apply的有趣用法
SpinalHDL是如何讓仿真跑起來(lái)的
如何在SpinalHDL里啟動(dòng)一個(gè)仿真
在SpinalHDL里有沒(méi)有什么好的方式實(shí)現(xiàn)一個(gè)接口位寬轉(zhuǎn)換呢
SpinalHDL里時(shí)鐘域中的定制與命名
SpinalHDL里用于跨時(shí)鐘域處理的一些手段方法
SpinalHDL里如何實(shí)現(xiàn)Sobel邊緣檢測(cè)
SpinalHDL里pipeline的設(shè)計(jì)思路

評(píng)論