ハードウェアの気になるあれこれ

技術的に興味のあることを調べて書いてくブログ。主にハードウェアがネタ。

自分で作ったBundleでレジスタ作ったらハマった話

今回は最近進めていたRISC-Vの実装の際にBundleの使い方でハマったのでそれについての話を

  • Bundleのおさらい
  • 本題:自分で作ったBundleでRegを作ったらハマった
    • テストコードを作って確認
    • RTLはどうなってる?
    • 原因は??
    • 解決策
続きを読む

Chiselで3次元メモリっぽいのを作る

今回もChiselのMemについての話。
元ネタは自分の以下のツイート。

おそらくお察し頂けたとは思うが、3次元のメモリを作る場合についてまとめておく。

  • Chiselで3次元のメモリ
    • ChiselのMemで実現するには?
    • とりあえずテストして確認
    • RTLを生成して比較
      • writeタスク不使用版
      • writeタスク使用版
続きを読む

Chiselで2次元メモリっぽいのを作る(2)

令和になって最初の投稿。ほんとは昨日上げたかったんだけど。。 いずれにしても読んでくれてる方は引き続きどうぞよろしくですm(_ _)m

前回の記事の終わりに以下のようなこと書いた。

MemBaseにマスク付きのライトタスクが用意されているので、ひょっとするとそっちを使うと何か変化が起きるのかもしれないので別途試してみようと思う。

www.tech-diningyo.info

なので、今回は上記のネタ提起の回収編を書こうと思う。 あと実は前回の2次元メモリは不要な記述があったので、それについての訂正も。。。

  • Chiselで2次元のメモリの続き
    • Memのwriteメソッドを使用する形に書き換えてみる
      • MemBaseのwriteの実装
    • Mem2Dを書き換える
      • 新しいMem2Dクラスのテスト
        • テスト結果
      • RTLを比較してみる
続きを読む

Chiselで2次元メモリっぽいのを作る(1)

今回はふとChiselで2次元のメモリは作れるのか??と思ったので試してみたのでそれをまとめてみようと思う

  • Chiselで2次元のメモリ
    • 試してみたことその1~Mem in Mem~
    • 試してみたことその2~じゃあBundleでくるんでみよう~
    • 試してみたことその3~それならVecにしてみよう~
      • Vec版の2次元メモリのテスト結果
      • FIRRTL
      • RTL
続きを読む

ChiselのBundleをRegInitに渡すときに各フィールドを任意の値で初期化する方法(2)

今日は昨日の続き。
昨日はBundleRegInitに渡すときにBundle内の各フィールドを任意の値で初期化する方法について考えた。
目的の処理は出来ることは分かったのだが、記述がイマイチなので今日はそれを少し整えてみようと思う。

www.tech-diningyo.info

  • 引き続き「Bundleをインスタンスして作るRegInitで各フィールドを任意の値で初期化する方法」
    • もう少し整理してみる
      • 少し整理したバージョンのエラボレート結果
    • コンパニオン・オブジェクト作ってすっきりさせる
続きを読む

ChiselのBundleをRegInitに渡すときに各フィールドを任意の値で初期化する方法(1)

以前にBunldeで構造化したデータを使ってレジスタインスタンスする方法を紹介したのだがその記事を書いたときにもう一つコレ出来たらいいなっと思いながら出来なかったことがあった。 それは”Bundleを使ってレジスタ郡を作る際に、各フィールド毎に任意の値で初期化出来ないか?”というものだった。 んでやっとそのやり方が分かったので、今日はそのやり方についてまとめようと思う。

  • Bundleをインスタンスして作るRegInitで各フィールドを任意の値で初期化する方法
続きを読む