BOOM(Berkeley Out-of-order Machine)には、基本的に以下の3種類の構成方式がある。
BOOMの情報源
情報源というか、githubくらいしか情報がないのである。
図. BOOMv2のマイクロアーキテクチャ (https://content.riscv.org/wp-content/uploads/2017/12/Wed0936-BOOM-v2-An-Open-Source-Out-of-Order-RISC-V-Core-Celio.pdf より抜粋)
BOOMのデフォルトの3つの構成
ここでは、すべてBOOMv2をベースにして検証を行った。
- BOOMConfig (MediumBOOMConfig) : 最も標準的な構成。2-Wide, 3-way Issue
- MegaBOOMConfig : 最大構成。 4-Wide, 4-way Issue
- SmallBOOMConfig : 最小構成。1-Wide, 1-way Issue
それぞれの構成でのコンポーネント
といっても、Verilog-HDL生成時に表示されるログをはぎ取っただけである。
さらに、MegaBOOMConfig構成はなぜか途中でVerilog-HDLの生成に失敗してしまうので、ログを貼り付けただけでVerilog-HDLを論理合成施行することができていない。
MegaBOOMConfig | BOOMConfig | SmallBOOMConfig |
|
---|---|---|---|
Wide | 4 | 2 | 1 |
Issue | 4 | 3 | 1 |
ExeUnit | ALU | ALU | ALU |
FPU (Latency: 3) | FPU (Latency: 3) | FPU | |
Mul(Pipelined) | Mul(Pipelined) | Mul(Pipelined) | |
Div | |||
FDiv/Fsqrt | |||
ExeUnit | ALU | ALU | |
Div | Div | ||
FDiv/FSqrt | FDiv/FSqrt | ||
ExeUnit | ALU | ||
ExeUnit | Mem | Mem | Mem |
BROB | 4 | 2 | 1 |
Size | 32 | 24 | 24 |
Gshare Predictor | 16kB | 8kB | 4kB |
Machine Width | 4 | 2 | 1 |
Rob Entries | 128 | 48 | 24 |
Rob Rows | 32 | 24 | 24 |
Rob Row size | 5 | 5 | 5 |
log2UP(width) | 2 | 1 | 1 |
log2Ceil(width) | 2 | 1 | 0 |
FPU FFlag Ports | 2 | 2 | 2 |
FPU Unit | Enabled | Enabled | Enabled |
VM | Enabled | Enabled | Enabled |
FDivSqrt | Enabled | Enabled | Enabled |
Fetch Width | 4 | 2 | 1 |
Issue Width | 4 | 3 | 1 |
ROB Size | 128 | 48 | 24 |
Issue Window Size | 28(Age-based Priority) | 20(Age-based Priority) | 12(Age-based Priority) |
Load/Store Unit Size | 32/32 | 16/16 | 8/8 |
Num Phys. REgisters | 128 | 110 | 100 |
Max Branch Count | 8 | 8 | 4 |
BTB Size | 64 | 64 | 64 |
RAS Size | 8 | 8 | 8 |
Num RF Read Ports | 9 | 7 | 3 |
Num RF Write Ports | 4 | 3 | 2 |
RF Cost(R+W)*(R+2W) | 221 | 130 | 35 |
Num Slow Wakeup Ports | 4 | 3 | 2 |
Num Fast Wakeup Ports | 3 | 2 | 1 |
Num Bypass Ports | 5 | 4 | 3 |
BOOMv2 の論理合成結果
MegaBOOMConfig以外の構成で論理合成を試行した。
+-----------------------------+---------------+------------+------------+---------+------+-------+--------+--------+--------------+ | Instance | Module | Total LUTs | Logic LUTs | LUTRAMs | SRLs | FFs | RAMB36 | RAMB18 | DSP48 Blocks | +-----------------------------+---------------+------------+------------+---------+------+-------+--------+--------+--------------+ | Top (SmallBOOMConfig) | (top) | 69191 | 67303 | 1868 | 20 | 25777 | 17 | 18 | 40 | | Top (BOOMConfig) | (top) | 311303 | 192866 | 118414 | 23 | 37753 | 128 | 0 | 40 | +-----------------------------+---------------+------------+------------+---------+------+-------+--------+--------+--------------+
BOOMv1 の論理合成結果
4種類の構成でBOOMv1の面積を比較した。
Category | SmallBOOMConfig | BOOMConfig | MediumBOOMConfig | MegaBOOMConfig | |
---|---|---|---|---|---|
LUT | LUT6 | 34925 | 70200 | 70996 | 114319 |
Flop & Latch | FDRE | 24452 | 45688 | 41686 | 56547 |
LUT | LUT5 | 13293 | 21625 | 19725 | 38964 |
LUT | LUT3 | 7786 | 16952 | 19112 | 21369 |
LUT | LUT4 | 5446 | 15346 | 11477 | 19964 |
Distributed Memory | RAMD32 | 4120 | 11299 | 9697 | 17130 |
MuxFx | MUXF7 | 4081 | 4144 | 4248 | 6720 |
LUT | LUT2 | 3530 | 3992 | 3876 | 6592 |
MuxFx | MUXF8 | 1810 | 3787 | 2902 | 3854 |
CarryLogic | CARRY4 | 1270 | 2878 | 2414 | 2458 |
Distributed Memory | RAMS32 | 1246 | 2425 | 2068 | 1963 |
LUT | LUT1 | 803 | 1805 | 1801 | 1190 |
IO | OBUF | 526 | 868 | 876 | 1159 |
Flop & Latch | FDSE | 504 | 814 | 654 | 532 |
IO | IBUF | 394 | 526 | 526 | 526 |
Distributed Memory | RAMD64E | 84 | 394 | 394 | 394 |
Block Arithmetic | DSP48E1 | 40 | 40 | 40 | 40 |
Distributed Memory | SRL16E | 39 | 33 | 28 | 34 |
Flop & Latch | FDCE | 33 | 31 | 27 | 28 |
Block Memory | RAMB36E1 | 9 | 9 | 9 | 17 |
Block Memory | RAMB18E1 | 8 | 8 | 8 | 8 |
Clock | BUFG | 1 | 1 | 1 | 1 |