iT邦幫忙

0

[simple-mips] 總結,以及其他能學習的主題

  • 分享至 

  • xImage
  •  

系列文章 : 使用 Verilog 實作 in-order CPU

終於實作完一個很簡易的 5-stage pipeline MIPS CPU 了!

這個系列文章簡單介紹了各個 stage 的實作,程式碼的筆記,以及 forwarding unithazard 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 ),還有許多東西需要被實作出來...

學習的越多,就有越多的疑問浮出檯面。感覺還有好多好多可以學習的主題!
希望接下來還有時間可以查一下資料,看有沒有能學習這些知識的機會。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言