Slide 1

Slide 1 text

MICROPROCESSOR DESIGN & IMPLEMENTATION

Slide 2

Slide 2 text

実装方針 ● 5段パイプライン ● 2bit分岐予測 ● フォワーディング有り ● スーパースカラー ○ 2つ目のパイプライ ンは制約有り ○ ALU/Branch x 2 ○ RegRead x 4 2

Slide 3

Slide 3 text

第一世代 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 1093050850 Total time (secs): 13 Iterations/Sec : 23 Iterations : 300 3 ● 5サイクル化 ● パイプライン化はしない ○ FDEMW -> FDEMW … ● 80Mhzで実機動作

Slide 4

Slide 4 text

第二世代 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 2095233356 Total time (secs): 17 Iterations/Sec : 117 Iterations : 2000 4 ● パイプライン化 ● 常に分岐しない予測 ○ ストールを短くする ○ ストールは addi x0, 0 で命令 を差し替える ● メモリアドレス専用の加算機 ● 123Mhzで実機動作 D E M W F D X X X F X X X X F F D E M W

Slide 5

Slide 5 text

第三世代 5 ● 第二世代に分岐予測を足した ● 118Mhzで実機動作

Slide 6

Slide 6 text

第三世代 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 1958052487 Total time (secs): 15 Iterations/Sec : 133 Iterations : 2000 6 ● 第二世代に分岐予測を足した ● 118Mhzで実機動作 ※2bit分岐予測でも2レベル適応型分岐予測でもCoremarkのスコアは変わらず🤔

Slide 7

Slide 7 text

第四世代 7 ● スーパースカラー化 ● 以下のときは2つ目は実行しない ○ 1つ目が分岐予測のとき ○ メモリ命令のとき ○ 1つ目の命令とRAWハザード ○ 1つ目の命令とWAWハザード すべてのテストに通過したが CoreMarkは動作せず… 参考: IntRegReg 47clock-> 35clock IntRegImm 48clock -> 31clock

Slide 8

Slide 8 text

困った事 ● すべてのテストに通ってCoremarkのトレースが一致しても Coremark_for_Synthesisが動かないことがあった ○ Hardware counterの実装バグ ○ 自前でテストを書いて解決 ● LoadAndStoreの仕様に気づくのに時間がかかる ● ALU内で >>> が想定動作をしない($signedつけてもダメ) ● vivadoのsimulationが結構な頻度で落ちる 8

Slide 9

Slide 9 text

やりたかったこと ● スーパースカラー化完遂 ● メモリアライメントを無視した命令への対応 (公式曰くoptional) ● M命令、 FPU実装など… ● 公式テストの実行 ○ https://github.com/riscv-software-src/riscv-tests ○ jalrはこれでテストしてみたがあってるかわからない (Privileged/CSR Instructionを実装していないため) 9

Slide 10

Slide 10 text

おわり 10 楽しかったです!!!