TileLinkを使ったDiplomacyのデザイン開発の続き、次は多少デザインを改造して、1つのマスター、1つのスレーブという形式から、2つのスレーブ、1つのマスターになるように改造する。
このようなデザインを作るためには、まずはTLXbarをインスタンス化する。そのあとにTLXbarに対してノードを接続するだけで完成するのだ。
val fuzz1 = LazyModule(new TLFuzzer(txns)) val fuzz2 = LazyModule(new TLFuzzer(txns)) val model1 = LazyModule(new TLRAMModel("SRAMSimple")) val model2 = LazyModule(new TLRAMModel("SRAMSimple")) val ram = LazyModule(new TLRAM(AddressSet(0x0, 0x3ff), beatBytes = ramBeatBytes)) val xbar = LazyModule(new TLXbar)
xbar.node := TLDelayer(0.25) := model1.node := fuzz1.node xbar.node := TLDelayer(0.25) := model2.node := fuzz2.node ram.node := xbar.node
上記のように接続するだけで、RAMに対する2つのマスターの接続が完成する。
この:=
演算子は、Chiselで使われる普通の演算子ではなく、Diplomacyのノードを接続するための演算子だ。これは以下のサイトを見れば分かる。
このデザインからVerilogを生成してみた。あとはGraphMLを接続してノードの接続関係を確認する。
次にこれをシミュレーションした。シミュレーションは一応正常終了している。IDの制御は上手く行っているようだ。
make tilelink
make[1]: Leaving directory '/home/msyksphinz/work/riscv/chisel-development/chisel-hw/generated-src-debug/freechips.rocketchip.unittest.TLOriginalUnitTestConfig' ./tilelink Count = 1000 Count = 2000 Count = 3000 Count = 4000 Count = 5000 Count = 6000 Count = 7000
シミュレーション結果を確認した。
TLXBarを挿入することにより、IDが5ビットから6ビットに拡張されていることが確認できる。