系列文章 : 使用 Verilog 實作 in-order CPU
終於實作完一個很簡易的 5-stage pipeline MIPS CPU 了!
這個系列文章簡單介紹了各個 stage 的實作,程式碼的筆記,以及 forwarding unit 跟 hazard detection 是怎麼處理 data hazard 以及 control hazard。
可以真的把 instruction 的 binary 輸入進去,並且得到預期的輸出,實在是一件很酷的事情。讓人感覺到,這真的是一個 CPU 阿! 雖然功能很少,但還是有個 CPU 的樣子出來了。
但其實還是有很多疑問,以及可以探討的部分。
- 讀取 instruction,以及記憶體的讀寫
- 在這個簡單的實作,
Inst_Mem 以及 Data_Memory 都可以在一兩個 cycle 內取得資料。但實際上哪有這麼好的事情呢 ? 你的 instruction 可能會是在 icache 裡面,資料可能在 dcache 裡,或是有可能在 SRAM, DRAM, 或甚至是在硬碟裡面。
- 這時候拿取資料的延遲可能會是好多好多 cycle ( 可能會到幾十,幾百,甚至幾千 ? 抱歉我不知道確切的數字 ) 這時候 pipeline 該怎麼進行應對跟處理呢 ?
- 快取 ( cache )
- 通常 CPU 都會配置快取,那 CPU 該怎麼跟 cache 溝通呢 ? 以及 Cache 又該怎麼用硬體描述語言進行實作 ?
- 周邊裝置 ( peripherals )
- 一個電腦通常不會只有 CPU,例如說可能會有 Uart 負責把一些資訊打出來,或是可能會有一些網路設備讓我們可以發送封包...
- CPU 該怎麼跟周邊裝置溝通呢 ? 該怎麼讓 CPU 可以寫資料,並送到周邊裝置呢 ?
- 例外 ( exception ) 以及中斷 ( interrupt )
- 當 CPU 執行到不預期的指令 ( 例如說除以 0 ) 會發生例外 ( exception ),或是當外部有設備發一個 signal 給 CPU,可能會讓 CPU 發生中斷 ( interrupt )。
- CPU 的 pipeline 要怎麼處理 exception 以及 interrupt 呢 ? 是要 flush 掉哪些 stage 嗎 ?
- CPU 與 BUS ( 例如 AMBA AXI protocol )
- 當 CPU 跟外界溝通時,通常會使用 BUS,例如 AMBA 系列的 BUS 就相當的知名。
- 在這個小小專案裡面,CPU 直接接上 instruction memory 以及 data memory ,但實際上 CPU 很可能需要透過 BUS 去發出請求。
- CPU 要怎麼使用 BUS,要怎麼接上 BUS 呢 ?
- BUS 接收到請求之後,要怎麼繞送到正確的目的地呢 ? 假如目的 address 根本沒有東西,又該怎麼處理 ?
- MMU ( memory management unit ) 與 TLB
- 通常 CPU 會需要支援 MMU 來管理 page table,這又該怎麼實作呢 ?
- control hazard 以及分支預測 ( branch predictor )
- 在這個簡單的實作裡,每當我們遇到 branch 的時候,為了指令的正確性,我們會需要把 if->id, id->ex, ex->mem 的 pipeline register 通通都 flush 掉,導致這些都被浪費掉了。
- 那要怎麼不浪費這些 cycles 呢 ? 或許我們可以使用分支預測,從一開始就預測說 branch 會不會發生,假如猜對的話,就算發生了 branch,我們也不需要 flush 掉 pipeline。
- 但是 branch predictor 該怎麼做 ? 又該怎麼整合進 pipeline 呢 ?
- 亂序執行 Out-of-Order ( OoO )
- 現在當我們遇到 lw-use hazard 的時候,我們現在也只能插入 bubble ( nop ),浪費了 cycle。
- 有一個很酷的技術,可以讓某些 instruction 需要等待的時候,直接執行不需要等待的 instruction,讓 CPU 實際執行的 instruction 順序跟執行的 binary 不一樣。
- 但是要怎麼做到亂序執行,並且保證執行的結果都會是正確的呢 ? 這一類的 CPU 又要怎麼實作 ? 實作後效能又能好多少 ?
列出了這些問題後,可以發現,這個小小 CPU 其實還有很多缺失的部分。假如真的要能夠使用,或甚至運行一些知名的 OS 的話 ( 例如 Linux ),還有許多東西需要被實作出來...
學習的越多,就有越多的疑問浮出檯面。感覺還有好多好多可以學習的主題!
希望接下來還有時間可以查一下資料,看有沒有能學習這些知識的機會。