手把手教你設計CPU(蜂鳥書)讀書筆記

2021-10-06 23:38:43 字數 3117 閱讀 7216

這本書講的是如何用verilog,以riscv為指令集,設計一款cpu。也就是書中說的蜂鳥e200。之前沒有看過類似的書,對cpu的工作流程也不熟悉。這本書以verilog為載體,介紹了cpu的基本原理,對於第一次接觸cpu內部眼裡的菜鳥來說,簡直不要太神奇。而且本書開源**,只要有一塊fpga,你也能夠自己做出一塊cpu來。

這是本書的第一部分,主要是一些介紹。諸如riscv之前的一些架構,以及rv指令集的特性。第三章介紹不同的rv版本,第四章介紹本書的e200的特性。

講了一些很有用的基礎知識

架構指的是指令集架構,微架構是根據架構設計的硬體布局

處理器或者cpu往往是乙個完整的soc,和處理器核或者core是處理器的運算核心。

模組化和可重用性

面積最小化

結構簡單化

效能不追求極端,夠用即可

使用標準dff模組例化生成暫存器

使用assign語句代替ifelse和case

**即注釋

禁止使用clock和reset

五級流水線:取指,解碼,執行,訪存,寫回

流水線也不是必須的,有的處理器用的是狀態機。並且流水線的深度不同的處理器也有不同的設定。

資料衝突

這是三種資料依賴性,其中waw,war可以通過暫存器重新命名的方式去除依賴,而raw是真資料相關,就是它必須要讀已經寫了的這個資料。如果發生這種情況,就要等待寫完才可以。有一些解決方法, 比如找個東西記錄這種相關性。

ifu取指

exu用來解碼和執行

lsu用來訪存

wb用來寫回

對於非分支跳轉指令,就連續不斷地進行取指即可,就算是不是對齊的32位指令,最好也能夠每個週期都能夠讀一條指令

對於分支跳轉指令,能夠快速判斷是否需要跳轉。如果需要跳轉,就從新的pc取出指令。

從itcm或者icache中取指令,e200用的是itcm,很快。

非對齊的指令,對於順序執行的,只需要快取下來,等下次取指拼接到一起就可以了,不耽誤時間。但是對於跳轉的那種,就用多bank,並行一次取倆,也可以在乙個週期內完成。

無條件直接跳轉,比如jal x5,offset。這種,立即數就能跳

無條件簡潔跳轉,不是立即數了,需要從暫存器讀跳轉的位址

帶條件直接跳

帶條件間接跳,這個rv裡沒有

為了提公升效能,就要進行分支**。首先要**方向,也就是到底跳不跳,還有就是**位址。

**方向就有各種方法,比如靜態**和動態**。

**位址是除了直接跳轉,間接跳轉是需要讀暫存器的,很耗費時間。就用比如儲存之前的分支語句,如果匹配,就直接跳到那個位址之類的方法。

規整的編碼指令格式

指令長度指示碼放於低位

簡單的分支跳轉指令

沒有分支延遲槽指令。分支延遲槽是在分支後面放一些不受分支影響的指令,預設現在的分支**精度已經很高,為了減少硬體成本。

提供明確的靜態分支**依據

提供明確的ras依據,這個是**跳轉位址的乙個方法

首先從itcm取指,然後放到ir和pc裡,ir是指令暫存器。同時用minidecode進行初步地解碼來判斷當前指令是普通指令還是分支跳轉,然後生成用bpu來做分支**,生成下乙個pc

如果取指令的位址不在itcm裡,就會通過biu訪問外部儲存。

根據ir中的指令,解碼和派遣

讀暫存器,rd-regfile

維護資料的相關性,oitf

給各種運算單元執行,alu,長指令,lsu,eai等

交付指令

寫回暫存器,wb-regfile

資源衝突:就是運算單元的衝突,就等待

資料衝突:正在派遣的指令和尚未執行完成的長指令存在raw和waw依賴。

為了檢測出這種資料依賴,e200實現了乙個oitf模組。其中儲存的是已經派遣但是還未寫回的長指令資訊。然後每次在進行指令派遣的時候,就把本指令的運算元和長指令的向比較,如果有相同的,就說明有相關性,就等待。

做各種計算

我理解的交付就是這條指令能夠執行,而不是執行完成。

首先alu會計算是否需要跳轉,計算出來之後就發給交付模組。如果交付模組發現結果和**結果一樣,就不會沖刷流水線,否則就沖刷流水線。

兩個仲裁

最終寫回仲裁:長指令比單指令有更高優先順序。如果沒有長指令寫回,單指令可以比更早位置的長指令寫回。

長指令寫回仲裁:根據oitf判斷長指令的先後關係,嚴格控制長指令的寫回順序

是alu的一部分,用於產生訪存位址。

這裡是用於多核操作的原子指令,包括互斥操作等的實現。

e200提出了自己的匯流排協議icb

實現了一從多主和多主一從以及多主多從的匯流排連線方式。

廣義上的異常包含了狹義的中斷和異常。異常主要包括

同步異常:由於執行程式指令或者試圖執行程式指令而造成的異常。這個原因能夠被精確定位到某乙個指令,而且無論執行多少次,都能夠被精確地復現

非同步異常:最常見的非同步異常就是外部中斷,稱之為精確非同步異常。還有非精確非同步異常。

停止執行當前指令,轉而從csr暫存器mtvec定義的pc位址開始執行

更新其他幾個暫存器:異常原因,異常pc,異常值,狀態

退出異常

外部中斷:來自處理器核外部的中斷,還有乙個中斷控制器plic,用來仲裁外部中斷

計時器中斷:mtime,mtimecmp

軟體中斷:軟體自己往msip暫存器裡寫1觸發中斷

除錯中斷

一般外部中斷優先順序最高,軟體中斷次之,計時器中斷再次。

第十四章是講如何除錯,十五章講低功耗的各方面優化,十六章講rv能夠進行協處理器擴充套件。第三部分主要講如何在實際平台上實現e200。附錄講了rv的指令集等其他rv基礎知識。在此不多贅述。

手把手教你寫商業計畫書

商業顧問 企業家 銀行家 投資者都認為創業者應該有乙份商業計畫書。乙份商業計畫書可以幫助拓展業務 做出決策並使你創業成功。計畫書不是千篇一律,不是每份計畫書都需要相同的結構和要點,根據創業時期的wfhpt不同,創業計畫書也會有所不同。在創業初期,乙份簡易版的商業計畫書已經足夠。不過這份簡易版的計畫書...

手把手教你做好OKR設計

對於團隊來說,最好是每個季度召開一次專門的會議,以制定未來一季度okr,由團隊負責人或者顧問在會議中提供引導。一 okr制定前需要思考的問題 作為乙個顧問,在召開會議前需要思考如下幾個問題 1.參會物件,哪些人需要參與?根據團隊規模來確定,根據公司級 部門級 專案級等不同規模確定參會物件,至少需要o...

手把手教你OA選型

oa選型永遠是oa行業的重要焦點,在選型問題上困擾了很多客戶,雲全oa從這幾個方面教你如何選型。了解研發技術 技術是硬道理。只有過關的技術才會研發出過硬的產品。如果技術不過關,後期將會帶來一系列的問題。同時需要考慮技術的先進性。在現如今社會發展日新月異,今天還遙遙領先的管理模式也許明天就會被淘汰。所...