ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。BootcampのModule2.4で学んだレジスタを使ったフロー制御を学んだ。www.tech-diningyo.info今回はModule2.4の残りである練習問題に取り組んでいく。:シフトレジスタ問題についてはそのまんま引用させていただく。このモジュールで得たレジスタの知識を使ってLSFRのためのシフトレジスタを作ってみよう。仕様は以下のとおりだ:全ての要素は1-bit幅4-bitの出力を持つ1-bitの入力をもらい、それがシフトレジスタへの次の入力となる出力はシフトレジスタの各ビットを並列にしたもので、シフトレジスタの最後の要素がMSB、最初の要素がLSBとなる。io.in基本的なモジュールの雛形、テストベクタ、ドライバーは以下のものとする。最初のレジスタについては既に定義済みにしてある。MyShiftRegisterTester(c)})println("SUCCESS!!")これまでのModuleで学んできたことを使えば、そのまま解けるはず。シフト演算使ってもいいし、上で書いてあるようにCatを使ったやり方も存在してる。クリックすると開くので、見たくない場合は開かないように注意。MyShiftRegisterTester(c)})println("SUCCESS!!")ここではCatを使ったやり方で書いてみた。Catすると処理後の結果が5-bitになるが、Stateが4-bitなのでMSBが削れて、シフトした状態になる。出力は以下のように、テストもパスすることが確認できた。PASSEDSUCCESS!!練習問題:パラメタライズ版シフトレジスタ上記で作成したシフトレジスタをもう少し改良して、「遅延値をパラメタライズしたシフトレジスタを作ってみよう」という問題。先ほどのシフトレジスタからの変更点は以下の3点だ。クリックすると開くので、見たくない場合は開かないように注意。})}println("SUCCESS!!")パラメタライズ版を作ってみよう!な練習問題かと思いきや、その部分はスケルトンに含まれていた。実際に必要なのは、イネーブル信号enの対応のみ。これを実際に実行してみると、以下のようにテストにパスすることが確認できる。明示的なクロックとリセットこのModuleで書いてあったとおり、Chiselでは通常モジュール(Module)を作成すると、クロックとリセットがそのモジュールの入力として定義される。本モジュールで学んだRegはそのクロックとリセットを暗黙的に使用したレジスタとなる。endendmodule見ての通り、clock/resetを使ったRTLが生成されている。これでもそれなりに開発は可能だが、この挙動を変更したいというケースも多々あるはずだ。クロックやリセットを生成するブラックボックモジュールを作りたいマルチクロックの設計を行いたいといったような場合だ。Chiselはこれらの要望に応えられるような機能を提供している。ClockExamples))上記を実行すると以下のような出力が得られる。endmodule一つのalways文で複数のレジスタの記述が入っているため、若干わかりにくいが元のChiselのコードでwith???のブロック式で囲った部分の処理に対応するクロックとリセットが使用されたレジスタができているのがわかると思う。ここで以下の点には気をつけておいてほしいの但し書きがあったので、それについても記載しておくresetは常に同期リセットでかつBool型となるクロックはChiselの型の一つであるClock型となり、明示的に使用する場合にもそれが使われるべきであるBool型の変数はasClockを使うことでClockに変換可能だが、それを使って愚かなことはしないように注意すべきだ現時点ではchisel-testersはマルチクロックのデザインは完全にはサポートされていないラップアップということで、Module2.4の最後の項目”ラップアップ”だ。ここには特に文法的な何かが書いてあるわけではないのだが、頑張ったな!!的なことが書いてあるので、紹介したい。このセクションをやりきったな!君はもうChiselでレジスタを宣言して順序回路を書く方法を学んだんだ。それは実際の回路を書くための基本的は方法を学んだことを意味している。次のセクションでは一つの例題で学んだ各要素を結合していくことになる!もし、もう少し励みがほしいのであれば、このChiselエキスパートの言葉を思い出してほしいとりあえず最低限の要素は学びきったから、もう自分の回路書けるぜ!!ってことのようで。Module2は残すところ2.5が残っている。次のModule2.5ではModule2を通して学んだことを使った練習問題となっており、これまでの各文法を復習していくのにとても有益なので、次回はModule2.5の練習問題に取り組んでいくことにする。BootcampのModule2.4の学習を終えた。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。