FPGA開発日記

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

TileLinkのCache Coherencyプロトコル (3. TileLinkコヒーレンスプロトコルテスト用のDualCore構成生成)

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]
   );
     
     

一応これで完成している。ただしデバッグオプションを付けないと波形を生成できないんだった。再生成する。