從昨天的描述我們可以知道接縫有很多層面
今天專注在拆解 pipeline 的部分
在開始之前,我們可以先欣賞 Jserv 前輩的作品 ca2025-mycpu
雖然這是用 chisel 的實作,但各種 HDL 的表現形式都很像
我們先忽略那些語法上的不同,可以從名稱很明顯地看到整個 pipeline 結構
inst_fetch.io
...
if2id.io
...
id.io
...
id2ex.io
...
ex.io
...
ex2mem.io
...
mem.io
...
mem2wb.io
...
wb.io
只要是想讓自己生活舒服一點的工程師
大部分都會形成這類把細節隱藏,展現意圖和流程的設計共識
除非在時程不允許或者有特殊需求的情況下
迫於無奈才會跟實作細節混合在一起
產生俗稱"義大利麵式"的設計
而現在,我們面對的就是這個狀況
昨天有看過這份 in order CPU 實作的朋友應該都會發現 core_pipeline.sv 跟預期的結構不一樣
fetch
...
decoder
...
decode_dispatch_register
...
<combinational logic> <------ ????
...
issue_buffer
...
issue_execute_register
...
execution
...
completion
...
retirement
碰到這種情況
最終只能從 waveform 觀察結果
從這邊我們就看到有趣的東西了
大家可以一起來看一下,這個行為跟昨天預期的是一樣的嗎?
.
.
.
.
.
.
.
.
.
防雷頁
.
.
.
.
.
.
.
.
.
.
蝦密!!
if 到 id 中間竟然多了一個 cycle
跟神燈精靈昨天告訴我們的不一樣!
沒學過怎麼追 waveform 是真的會被騙過去的
剛好對應到前輩最近的貼文
感謝前輩的提醒,小猴還有很多努力的空間
(偷偷說 Jev 太有趣,玩一玩就要超時了(艸
git link with tag: https://github.com/hsufit/TINY5_OOO/tree/ithome2026_D8