Chipyardにはマルチコア構成環境が搭載されており、Rocket-Chipではマルチコア構成環境が作られている。同様にBOOMでもマルチコア構成環境を試行してみる。
BOOMのコンフィグレーションは以下のファイルに定義されている。以下のようににしてDualMediumBoomConfig
を定義した。
generators/chipyard/src/main/scala/config/BoomConfigs.scala
--- a/generators/chipyard/src/main/scala/config/BoomConfigs.scala +++ b/generators/chipyard/src/main/scala/config/BoomConfigs.scala @@ -26,6 +26,10 @@ class DualSmallBoomConfig extends Config( new boom.common.WithNSmallBooms(2) ++ // 2 boom cores new chipyard.config.AbstractConfig) +class DualMediumBoomConfig extends Config( + new boom.common.WithNMediumBooms(2) ++ // 2 boom cores + new chipyard.config.AbstractConfig) + class HwachaLargeBoomConfig extends Config( new chipyard.config.WithHwachaTest ++ new hwacha.DefaultHwachaConfig ++ // use Hwacha vector accelerator
これでRTLをビルドしてみる。
$ make CONFIG=DualMediumBoomConfig VERILATOR_FST_MODE=1
生成されたVerilogファイルを確認してみる。InclusiveCache
がインスタンス化されている。CoherenceManagerWrapperというモジュールの中でインスタンス化されているようだ。
chipyard/sims/verilator/generated-src/chipyard.TestHarness.DualMediumBoomConfig/chipyard.TestHarness.DualMediumBoomConfig.top.v
/* ... 中略 ... */ end // initial `ifdef FIRRTL_AFTER_INITIAL `FIRRTL_AFTER_INITIAL `endif `endif // SYNTHESIS endmodule module InclusiveCache( // @[chipyard.TestHarness.DualMediumBoomConfig.fir 127022:2] input clock, // @[chipyard.TestHarness.DualMediumBoomConfig.fir 127023:4] input reset, // @[chipyard.TestHarness.DualMediumBoomConfig.fir 127024:4] output auto_ctl_in_a_ready, // @[chipyard.TestHarness.DualMediumBoomConfig.fir 127025:4] input auto_ctl_in_a_valid, // @[chipyard.TestHarness.DualMediumBoomConfig.fir 127025:4] input [2:0] auto_ctl_in_a_bits_opcode, // @[chipyard.TestHarness.DualMediumBoomConfig.fir 127025:4] input [2:0] auto_ctl_in_a_bits_param, // @[chipyard.TestHarness.DualMediumBoomConfig.fir 127025:4] input [1:0] auto_ctl_in_a_bits_size, // @[chipyard.TestHarness.DualMediumBoomConfig.fir 127025:4] input [8:0] auto_ctl_in_a_bits_source, // @[chipyard.TestHarness.DualMediumBoomConfig.fir 127025:4] input [25:0] auto_ctl_in_a_bits_address, // @[chipyard.TestHarness.DualMediumBoomConfig.fir 127025:4] input [7:0] auto_ctl_in_a_bits_mask, // @[chipyard.TestHarness.DualMediumBoomConfig.fir 127025:4] input [63:0] auto_ctl_in_a_bits_data, // @[chipyard.TestHarness.DualMediumBoomConfig.fir 127025:4] /* ... 中略 ... */
module DigitalTop( // @[chipyard.TestHarness.DualMediumBoomConfig.fir 656875:2] /* ... 中略 ... */ CoherenceManagerWrapper subsystem_l2_wrapper ( // @[BankedL2Params.scala 47:31 chipyard.TestHarness.DualMediumBoomConfig.fir 656927:4] .auto_coupler_to_bus_named_subsystem_mbus_bus_xing_out_a_ready( subsystem_l2_wrapper_auto_coupler_to_bus_named_subsystem_mbus_bus_xing_out_a_ready), .auto_coupler_to_bus_named_subsystem_mbus_bus_xing_out_a_valid( subsystem_l2_wrapper_auto_coupler_to_bus_named_subsystem_mbus_bus_xing_out_a_valid), .auto_coupler_to_bus_named_subsystem_mbus_bus_xing_out_a_bits_opcode( subsystem_l2_wrapper_auto_coupler_to_bus_named_subsystem_mbus_bus_xing_out_a_bits_opcode), .auto_coupler_to_bus_named_subsystem_mbus_bus_xing_out_a_bits_param( /* ... 中略 ... */ module CoherenceManagerWrapper( // @[chipyard.TestHarness.DualMediumBoomConfig.fir 138552:2] ); /* ... 中略 ... */ InclusiveCache l2 ( // @[Configs.scala 75:24 chipyard.TestHarness.DualMediumBoomConfig.fir 138579:4] );
一応これで完成している。ただしデバッグオプションを付けないと波形を生成できないんだった。再生成する。