セキュリティ・キャンプ全国大会2023 開発コース Y2【RISC-V CPU自作ゼミ】応募課題 # 課題 ## 概要 回答の文字数が多いほど評価するということはありませんので、回答はできるだけ短く簡潔に記述してください。 問4の課題に関しては、どのように考えたかを見たいので、テストをパスできていなくても書いてみてください。 ## 問1 RISC-Vの特徴の一つとして、ISAがロイヤリティフリーなため、RISC-Vの命令セットに対して独自の命令を追加したCPUを設計しても、ISAのライセンスとして問題がないという点があります。 あなたがRISC-Vに命令を追加する場合、どのような命令(群)を追加してみたいかを、その命令の仕様 (ニーモニック、フォーマット、動作) とともに説明してください。 逆に命令が多すぎるのでサブセットでも良いのでは?と思う場合は、RV32Iをベースとしてどの命令を減らすのかとともに、減らすことによる利点・欠点を説明してください。 ## 問2 今までに使ったことがあるCPUの命令セット (x86_64, Arm, PIC, AVR, RL78, RX, RISC-V, etc... なんでもOK) について自由に記述してください。 ## 問3 本講義では、基本的なRISC-V CPUコアをFPGAに実装して動作を確認したのち、余裕があれば受講者の実装したい機能を実装する時間を設ける予定です。 RISC-V CPUの内部、もしくは外部に実装してみたい機能・回路について説明してください。 ## 問4 ### 問4-A 以下のポート定義を持つ、0から1023の範囲 (0および1023を含む) の4の倍数を4サイクルに1度出力するモジュール `quad_gen` を作成してください。 4の倍数を出力するサイクルでは、 `out_valid` に `1` に、それ以外のサイクルでは `out_valid` に `0` を出力してください。 記述内容としては、付属のテストを使ってIcarus Verilogでテストをパスすることを目標とします。 (どういう考え方をしたか評価しますので、テストをパスしない内容でもご応募いただければと思います) 逆にテストが足りないと思ったり、付属のテストベンチが使いにくいと思ったのであれば、追加していただいても構いません。 使用可能なSystemVerilogの言語機能はIcarus Verilogでシミュレーションが可能な範囲 (`-g2012` オプションを指定して使えるSystemVerilog 2012のサブセット) とします。 また、記述したコードの動作について日本語で説明してください。 信号のタイミング例はテストベンチに同梱の quad_gen/waveform.png を参考にしてください。 ```systemverilog `default_nettype none module quad_gen ( input wire clock, // クロック入力 input wire reset, // Active Highの同期リセット入力 output logic out_valid, // 出力VALID output logic [9:0] out_data // 出力データ ); endmodule `default_nettype wire ``` ### 問4-B 4-Aで作成したモジュールに、モジュールの出力を受け取れるかどうかを表す1ビットの信号 `out_ready` を追加してください。 `out_valid` かつ `out_ready` が `1` のサイクルのみ、 `out_data` の出力が更新されます。 ただし、4-Aと違い `out_valid` を `1` にするサイクルは4サイクルに1度にする必要はありません。 信号のタイミング例はテストベンチに同梱の quad_gen_ready/waveform.png を参考にしてください。 ```systemverilog `default_nettype none module quad_gen ( input wire clock, // クロック入力 input wire reset, // Active Highの同期リセット入力 output logic out_valid, // 出力VALID input wire out_ready, // 出力READY output logic [9:0] out_data // 出力データ ); endmodule `default_nettype wire ``` ## 問5 本講義を受講するにあたってアピールしておきたいことがあれば自由に記述してください。