セキュリティ・キャンプ全国大会2022 オンライン 開発コース Y4【RISC-V CPU自作ゼミ】応募課題 # 課題 ## 概要 回答の文字数が多いほど評価するということはありませんので、回答はできるだけ短く簡潔に記述してください。 問3の課題に関しては、どのように考えたかを見たいので、テストをパスできていなくても書いてみてください。 ## 問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 以下のポート定義を持つ幅8bit、深さ1024段のFIFOをSystemVerilogで記述してください。記述内容としては、付属のテストを使ってIcarus Verilogでテストをパスすることを目標とします。 (どういう考え方をしたか評価しますので、テストをパスしない内容でもご応募いただければと思います) 逆にテストが足りないと思ったり、付属のテストベンチが使いにくいと思ったのであれば、追加していただいても構いません。 使用可能なSystemVerilogの言語機能はIcarus Verilogでシミュレーションが可能な範囲 (`-g2012` オプションを指定して使えるSystemVerilog 2012のサブセット) とします。 また、記述したコードの動作について日本語で説明してください。 ただし、モジュールの入出力信号のvalid/ready/dataで終わる信号については、以下の制約を満たすものとします。 * 全ての信号はクロック入力の立ち上がりエッジに同期しているものとする。 * valid/readyともに正論理 (1'b0:デアサート、ネゲート, 1'b1: アサート) とする。 * validがアサートされている場合のみ、dataの内容は有効とする。 * validは一度アサートされたら、対応するreadyがアサートされるまでデアサートしてはならない。 * 対応するvalid/readyの両方がアサートされているサイクルでのみデータの入出力が成立する。 * validをアサートする場合は、対応するreadyに関係なくアサートしなければならない。 * 例えば、readyがアサートされたらvalidをアサートするという条件にしてはならない。 (デッドロックを防ぐため) * readyは任意のタイミングでアサート・デアサートしてよい. * 補足:validはデータを出す側がデータが有効であることを表す信号、readyはデータを受け取る側が今のサイクルでデータを受け取れることを表す信号です。 信号のタイミング例はテストベンチに同梱の fifo_waveform.png を参考にしてください。 valid/readyの対応関係は、ARMが定義しているAMBA 4 AXI4-StreamにおけるTVALID/TREADY信号の制約と同等です。参考: https://developer.arm.com/documentation/ihi0051/a/ ```systemverilog module fifo ( input wire clock, // クロック入力 input wire reset, // Active Highの同期リセット入力 input wire in_valid, // 入力VALID output logic in_ready, // 入力READY input wire [7:0] in_data, // 入力データ output logic out_valid, // 出力VALID input wire out_ready, // 出力READY output logic [7:0] out_data // 出力データ ); // ここにFIFOの動作を記述 endmodule ``` ## 問4 本講義を受講するにあたってアピールしておきたいことがあれば自由に記述してください。