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