TileLink
TileLinkのXbarの仕組みを引き続き解析している。requestAIOの解析の続き。縦方向がマスター側、横方向がスレーブ側である。下記の図において、A(n, m)=1の場合はマスターnがマスターmにリクエスト要求を出していることを意味する。 A(n,m) = 1 : マスターn…
DiplomacyのXbarについて理解を深めるためにソースコードを読んでみよう。とりまOCPの実装をしたいのだが、何せ内部を理解しないとどうも改造できそうにない気がしてきた。どうにかしてソースコードを理解しなければ。 NexusNodeについて NexusNodeは複数のS…
Diplomacyを使ったOCPプロトコルの作成、Xbarをもう少し拡張させてみよう。複数のマスターに対して1つのスレーブを接続する。 val pusher1 = LazyModule(new OCPPatternPusher("pat1", Seq( new WriteReqPattern (0, 0x100, 0x2), new WriteDataPattern (0, …
Diplomacyを使ったOCPプロトコルの作成、次にXbarの作成を行う。Xbarというのはクロスバで、複数のマスターとスレーブを接続する。まずは1マスターから複数スレーブに向けて接続する回路を作成する。 Diplomacyのクロスバの考え方はこうだ。まずはすべてのマ…
Diplomacyを使ったOCPプロトコルの作成、Bufferのデバッグを行っているが、どうも良く分からないところがある。 例えばBufferのインタフェースにQueueを挿入せずにそのまま接続しようとした場合、以下のようなエラーが発生してしまう。 val ram0 = LazyModul…
Diplomacyを使って独自OCPバスの作成を行っているのだが、どうも上手く行かない。いきなりXbarを作るのはさすがに難易度が高かったか。とりあえずまずはBufferだけを作って動作を確認する。 Bufferは、単純に信号を右から左に渡すだけの機能だ。ただ渡すだけ…
Diplomacyを使ってOCPバスを作成するプロジェクト、次はクロスバーを作成してみよう。クロスバーは2つ以上のスレーブノードを接続してバスをスプリットする。 val ram0 = LazyModule(new OCPRAM(AddressSet(0x000, 0x3ff))) val ram1 = LazyModule(new OCPRA…
前回はDiplomacyを使ったOCPバスの作成で、Bundleを作成してValid/Readyの信号をCmd/Readyに変換した。次はこれに基づいてテスト環境を構築する。テスト環境ではまずはPatternPusherを使ってコマンドを挿入する。まずはPatternPusherを改造しなければ始まら…
これまでDiplomacyを使ってOCPバスを作ってきたが、まだ改善したいところがある。まずは OCPバスなのにコマンドチャネルにValid信号がある。 各種コマンドをサポートしていきたい。 特にValid信号は大きな問題だ。OCPはCommand ⇔ Ready信号のハンドシェーク…
Diplomacyを使ってOCPバスを作成している。OCP SRAMの動作を確認しつつ、OCPのDelayerを実装しようと思う。DelayerというのはバスのReady信号を遅らせて、信号を遅らせてバスの問題を検出するための機能だ。 TileLinkのDelayerはすでに実装されている。これ…
Diplomacyを使ってOCPバスを作成している。OCP SRAMの動作を確認しているが、どうも上手く動いていないようだ。Diplomacyの構成を確認している。SRAMは1サイクル後にReadデータが出てくるので、それに合わせてパイプを調整した。 val d_raw_data = Wire(Vec(…
OCP Pattern Pusherのデバッグをしながら、Diplomacyの構築に必要なクラスの構成について見ていこう。 OCP Pattern PusherではDiplomacyのノードが定義され、出力ノードに対してコマンドが発行されている。 TileLinkのDiplomacyノード構成 上記の図ではTileL…
前回、せっかくOCP PusherとOCP SRAMを作って接続してみたのだがなぜかOCP SRAMが途中で消されてしまいきちんとシミュレーションすることができていなかった。 FIR上ではマスターもスレーブも生成されているようなので最適化で消されている。最適化で消され…
Diplomacyを使ってOCPのバスを作成するプロジェクト。PatternPusherウィジェットの次はSRAMを作成する。SRAMを定義することでクライアントとマネージャの両方を定義することで、やっと回路を構築することができるようになる。OCPのSRAMを定義してみよう。 SR…
Diplomacyを使ってOCPのバスを作成するプロジェクト。 バスの定義があってもまずはウィジェットが無いと始まらない。 OCPウィジェットのPatternPusherを作成する。 PatternPusherはOCPのマスター(OCPClientNode)として働く。TileLinkにもPatternPusherがある…
DiplomacyにはTileLinkのウィジェット、AMBA(AXI4, APB, AHB)のウィジェットがあり、これらを自由に組み合わせてタイルを構成することができる。これがDiplomacyのメリットであり、これらの部品を使ってアジャイルにSoCバスを構成することができる。 これま…
Diplomacyのマスターとスレーブを作れるようになったので、次はAXI4を使ってみる。Diplomacyの部品にはAXI4の部品もそろっており、それ以外にもAHB、APBのDiplomacyの部品も用意されている。 rocketchip/src/main/scala ├── amba │ ├── ahb │ ├── apb │ └── …
Diplomacyのスレーブノードに続いて、今度はマスターノードを作成してみる。マスターノードには以下の機能を持たせようと思う。 アドレスをインクリメントさせながら特定のデータを16回書き込むリクエストを発行する。 アドレスを元に戻す。 アドレスをイン…
ここらで、Diplomacyを使った独自のTileLinkスレーブノードを作成してみよう。作成するのはTileLinkのスレーブノードで、書き込みを行うとそのデータの分だけ加算するレジスタを持つ。とりあえずRTLを生成できるように持って行きたい。 作成するノード形態と…
Diplomacyを使ったデザインでは、クロスバーを使って自由にバスを構成することができる。この場合のバスのIDは自動的に計算されるようになっている。例えば、クロスバーに対して4つのマスターが接続される場合、そしてそのマスターのIDのビット幅が最大で3ビ…
Diplomacyを使ったバスの設計では、Chiselの機能を使って設計段階で様々な問題を事前にチェックすることができる。例えば、スレーブノード(Managerノード)のアドレスマップが被っているかどうかをチェックすることができる。 例えば以下のデザインで、TLRAM…
次に作るのは、TLXbarを使って2つのスレーブを使ったデザインだ。2つのスレーブを接続することで、例えば2つのRAMを使ってスレーブに接続できるようになる。 ターゲット回路 例えば、以下のようなデザインを作成した。 class TLTwoRAM(ramBeatBytes: Int, tx…
前回までのデザインでは、Fuzzerと呼ばれるランダムテストパタンを使っていたが、これでは思うように制御ができない。いろいろと調べているとTLPatternPusherを使うと制御できそうだ。この使い方を調べてみよう。 TLPatternPusherとは TLPatternPusherはTile…
TileLinkを使ったDiplomacyのデザイン開発の続き、次は多少デザインを改造して、1つのマスター、1つのスレーブという形式から、2つのスレーブ、1つのマスターになるように改造する。 2つのマスターを使ったデザイン このようなデザインを作るためには、まず…
前回、Diplomacyを使ったデザインを作成し、Verilogの生成まで完了した。次に、RTLシミュレーションを行うための環境を整えていく。 RTLシミュレーションにはVerilatorを使用する。VerilatorはRocket-Chipの環境を使用する。 Rocket-ChipにはVerilatorを自動…
TileLinkの生成フローについて調査を進めている。まずはTileLinkを使った独自のデザインを生成する環境を整えていく。 class TLOriginalRAMSimple(ramBeatBytes: Int, txns: Int)(implicit p: Parameters) extends LazyModule { val fuzz = LazyModule(new T…
TileLinkを使ったデザインを作っていきたい。Diplomacyについて勉強を進めていくなかで、やはり自分でデザインを作ってどの程度コントロールできるのか確認していく。オリジナルのデザインを作り上げていこう。 まず理解しておかなければならないのは、Diplo…
前回の続き。 Chipyardのリファレンスは比較的詳しく書いてあると思うので、この資料を読みながらDiplomacyの勉強をしていこうと思う。 chipyard.readthedocs.io 今回はDiplomacyがサポートするウィジェットについて。AXI4とTileLinkについて様々なウィジェ…
前回の続き。 Chipyardのリファレンスは比較的詳しく書いてあると思うので、この資料を読みながらDiplomacyの勉強をしていこうと思う。 chipyard.readthedocs.io 今回はDiplomacyがサポートするウィジェットについて。AXI4とTileLinkについて様々なウィジェ…
TileLinkはDiplomacyという方式を使って実装されており、それを理解するのは大変だ。実際に触ってみるのが一番良い気がする。 という訳で、RocketChipの中でTileLinkのユニットテストを行っているデザインを抽出して実行してみた。 使用したのは、RocketChip…