メモ:Chipyard tag 1.5.0
はMediumBoomConfigの生成に失敗する。
master`ブランチを使った方が良い。
commit 02adf86b8261ca4b5baf35b3257e15cdbabd7f87 (HEAD, origin/master, origin/HEAD) Author: Abraham Gonzalez <abe.j.gonza@gmail.com> Date: Thu Dec 2 09:25:51 2021 -0800 Force FIRRTL 1.4.1 (#1053)
前回試行したコンフィグレーションはコンパイルに失敗してしまった。以下のアサーションが入っており上手く行かない。
chipyard/generators/boom/src/main/scala/common/parameters.scala
val mulDivParams = boomParams.mulDiv.getOrElse(MulDivParams()) // TODO: Allow RV32IF require(!(xLen == 32 && usingFPU), "RV32 does not support fp")
別にFPUを使わなくてもいいんだけどな... 試しにusingFPU
をOFFにしてみてもなぜか同じアサーションで失敗した。
/** * 2-wide BOOM. */ class WithNMediumBooms(xlen: Int = 64, n: Int = 1, overrideIdOffset: Option[Int] = None) extends Config( new WithTAGELBPD ++ // Default to TAGE-L BPD new Config((site, here, up) => { case TilesLocated(InSubsystem) => { /* 中略 */ nPerfCounters = 6, usingFPU = false, // これを追加してみる fpu = Some(freechips.rocketchip.tile.FPUParams(sfmaLatency=4, dfmaLatency=4, divSqrt=true)) ), dcache = Some( DCacheParams(rowBits = site(SystemBusKey).beatBits, nSets=64, nWays=4, nMSHRs=2, nTLBWays=8)
仕方がない。目的は32ビットの乗除算器のモジュールを手に入れることなのでBOOMから生成することはとりあえず諦めてRocketの32ビット版から取得しよう。以下のコマンドでVerilogを生成する。
make debug CONFIG=RV32RocketConfig
これで32ビット版のMulDiv
モジュールを取得できる。BOOMで生成した場合にはTag
に関するポートが生成されていなかった。これはコンフィグレーションの違いで生成されているのだろうか。とりあえず32ビットと64ビットのモジュールの共存場合はこれらのポートをifdef
で切り取ることにする。
RV32RocketConfig
で生成した32ビット版MulDiv
module MulDiv( input clock, input reset, output io_req_ready, input io_req_valid, input [3:0] io_req_bits_fn, input [31:0] io_req_bits_in1, input [31:0] io_req_bits_in2, input [4:0] io_req_bits_tag, input io_kill, input io_resp_ready, output io_resp_valid, output [31:0] io_resp_bits_data, output [4:0] io_resp_bits_tag );
MediumBoomConfig
で生成した64ビット版MulDiv
module MulDiv( input clock, input reset, output io_req_ready, input io_req_valid, input [3:0] io_req_bits_fn, input io_req_bits_dw, input [63:0] io_req_bits_in1, input [63:0] io_req_bits_in2, input io_kill, input io_resp_ready, output io_resp_valid, output [63:0] io_resp_bits_data );