ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。Chipの解析の話の4回目。今回は"make"に渡す引数の一つDefaultConfigの中身でああるConfigやParametersについて。この辺の話はすでにmsyksphinzさんのFPGA開発日記で解説してくれているけど、解析の関係上で扱っておくべきだと思うのでざっと見ていく。freechips.rocketchip.system.TestHarnessクラスが実体化していると述べた。Parametersが渡されている。ExampleRocketSystem).module)"emulator"ディレクトリの下でmakeを実行した際には前々回あたりで解析したgenerateFirrtlの実行の際にDefaultConfigというパラメータクラスがTestHarnessに渡されるようになる。そのDefaultConfigはfreechips.rocketchip.systemパッケージの下にあるConfigs.scalaに以下のように定義されている。BaseConfig)雰囲気的にお察しいただけると思うが継承したConfigクラスの中でWithNBigCoresBaseConfigが結合されているような感じだ。(この辺の仕組みは冒頭で記載したmsyksphinzさんの記事も併せてどうぞ)ここで使われている++はParametersクラスのメソッドで、以下のように自分自身(this)と右辺のParametersクラスのインスタンスをChainParametersクラスの引数として使用している。x)このChainParametersも同じ"Config.scala"に定義されている。pname)}お気づきになったと思うが、上記のように++メソッドではChainParametersのメンバxにthisをyに右辺のParametersのインスタンスを入れていくので++でParametersを接続した場合、以下の画像のような感じで++で結合したParametersが入れ子になっていく。DefaultConfigの中身これ使う時にどうすんのよ??って思ったのだが、実際に使う際には以下のような形で所望のパラメータが入ったParametersクラスのインスタンスを引っ張り出すような形で使用する。PeripheryBus(p(PeripheryBusKey)))このp(hoge)はParametersクラスのスーパークラスであるViewクラスのapplyメソッドが実体で、その中でfindメソッドを呼び出してhogeにマッチするParametersを返す仕組みとなっている。objectをキーとして検索し、その中のPeripheryBusParamsを取得する感じ。Field[PeripheryBusParams]このfindを追っていくと最終的には以下のようなthisというメソッドに行き着く。this(Parameters(f))このthisは各派生クラスで実装されており、上記で例に上げたPeripheryBusKeyの場合はBaseBubSystemConfigクラスのthisメソッド内に実装されているmatch式の一つのケースにたどり着いてPeripheryBusParamsが返却されるようになっている。Chipのパラメータが構築されている。今回これを追うまで全く気づいてなかったけどRISC-VのXLENというパラメータすらFieldを使って定義がされていた。Field[Int]この感じだと、自分でモジュールを作ってつなげたい場合にはField[T]とそれを検索するためのmatch式を含むConfigの派生クラスがあれば良さそう。いうことで、ざっくりParametersの仕組みを追ってみた話でした。Chip環境の仕組み解析メモの垂れ流し記事。Chip環境の仕組み解析メモの垂れ流し記事。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。