FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

自作CPUコアとBOOMv3のPPA(Performance, Power, Area)を比較する (7. ALU側の命令ペイロードRAMの削減)

今のところ自作CPUは面積が大きすぎる。Vivadoでの論理合成結果をもっと詳細に見ていくことにする。

ALUの発行に必要な命令情報は、命令の機械語、現在のレジスタIDなどの情報を記憶しておく必要がある。 もう一つ、特殊な命令としてAUIPCは、命令のプログラムカウンタを保持しておく必要がある。 しかし、ALUのそのほかの命令はPCを必要としないので、そのためにALUのための命令発行用ペイロードRAMにPCの情報を保存しておくのはイマイチ無駄だ。

そこで、これを改善するためにAUIPCを動作させるパイプラインをALUパイプからBRUパイプ(分岐命令用)に移動することにする。

移動自体は非常に簡単だ。ケアする必要があるものとして、BRUパイプライン上でAUIPC命令が動作したとき、分岐予測関係の機能を動かさないようにすることだ。 AUIPC命令がデコードされた際、命令自体の命令発行の割り当てはBRUパイプライン向けに行うとして、そのほかにBRUパイプラインで確保する分岐予測に必要な情報は動かさないというケアを加えた。

これにより、全体的に2%程度であるがALUの発行ユニットの面積を削減することができた。

AUIPC命令移動前:

+----------------------------+--------+-------+-----------+-------+
|          Site Type         |  Used  | Fixed | Available | Util% |
+----------------------------+--------+-------+-----------+-------+
| CLB LUTs*                  | 176657 |     0 |    230400 | 76.67 |
|   LUT as Logic             | 173667 |     0 |    230400 | 75.38 |
|   LUT as Memory            |   2990 |     0 |    101760 |  2.94 |
|     LUT as Distributed RAM |   2844 |     0 |           |       |
|     LUT as Shift Register  |    146 |     0 |           |       |
| CLB Registers              |  88902 |     0 |    460800 | 19.29 |
|   Register as Flip Flop    |  88838 |     0 |    460800 | 19.28 |
|   Register as Latch        |     64 |     0 |    460800 |  0.01 |
| CARRY8                     |   1246 |     0 |     28800 |  4.33 |
| F7 Muxes                   |  14738 |     0 |    115200 | 12.79 |
| F8 Muxes                   |   2791 |     0 |     57600 |  4.85 |
| F9 Muxes                   |      0 |     0 |     28800 |  0.00 |
+----------------------------+--------+-------+-----------+-------+
  • AUIPC命令移動後:
+----------------------------+--------+-------+-----------+-------+
|          Site Type         |  Used  | Fixed | Available | Util% |
+----------------------------+--------+-------+-----------+-------+
| CLB LUTs*                  | 175216 |     0 |    230400 | 76.05 |
|   LUT as Logic             | 172210 |     0 |    230400 | 74.74 |
|   LUT as Memory            |   3006 |     0 |    101760 |  2.95 |
|     LUT as Distributed RAM |   2860 |     0 |           |       |
|     LUT as Shift Register  |    146 |     0 |           |       |
| CLB Registers              |  87002 |     0 |    460800 | 18.88 |
|   Register as Flip Flop    |  86938 |     0 |    460800 | 18.87 |
|   Register as Latch        |     64 |     0 |    460800 |  0.01 |
| CARRY8                     |   1231 |     0 |     28800 |  4.27 |
| F7 Muxes                   |  14821 |     0 |    115200 | 12.87 |
| F8 Muxes                   |   2787 |     0 |     57600 |  4.84 |
| F9 Muxes                   |      0 |     0 |     28800 |  0.00 |
+----------------------------+--------+-------+-----------+-------+