ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。Verilog-HDLスポンサーリンク今日は昨日の続き。昨日はBundleをRegInitに渡すときにBundle内の各フィールドを任意の値で初期化する方法について考えた。目的の処理は出来ることは分かったのだが、記述がイマイチなので今日はそれを少し整えてみようと思う。昨日のコードは以下のようなものだった。この方法でもRegInit部分のエラボレートは通り、RTLが生成できることが確認できた。初期値を設定したBundleRegInit0インスタンスをRegInitに渡すことで、所望の処理が出来る。out}もう少し整理してみるただこれだと、初期値の記述をModule内にべた書きで”なんだかなーー”という感じなのでもう少し修正してみた。変更点はMyBundle側に初期化用のメソッドinitを追加して、それを呼び出すようにしたことだ。initで設定している値がout_a/out_bに入っているのがわかると思う。endendmoduleChiselの方の初期化部分がちょっと野暮ったいが最初の例と比較するとこっちのほうが良いかな、と思う。コンパニオン・オブジェクト作ってすっきりさせる更にスッキリさせたければコンパニオン・オブジェクト作って初期化済みのWireを返す形にすればOK。out2}このバージョンでRTLを生成するとしたものがgistにあるので興味があればご確認ください。GitHub全部ソースみたいよーという方は、以下にテストも含めて置いてあるのでそちらもどーぞ。github.comこれで整理したバージョンについての紹介はお終い。今のところ使い途で思い浮かんでいるのは、外部からアクセスするレジスタを32bit単位でまとめたりするようケース。値を保持するフィールドをBundle側に実装して、init/write/readを作っておき、Arrayとかをうまく使うとレジスタへのアクセス部分(デコードやらセレクタ)をいい感じに書けるかなーとか。これについても追ってまとめてみようと思う。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。