/cpu-experiment-2023

Primary LanguageSystemVerilogMIT LicenseMIT

CSG-CPU-experiment

前準備

  • Slack開設

  • Githubアカウント作成

  • VSCodeインストール+Verilogシンタックス登録(すると便利、ないとキツイ。これは当日フォローしたほうが良い。)

実験目的

  • シングルサイクルCPUで四則演算を行うこと

具体的には提示された簡易命令セットで最小構成のマイCPUを作り、CPUの基本を作って理解する。

身につく技術

  • SystemVerilogの扱い、シミュレーション

  • 論理回路の理解

  • CPU、コンピュータ・アーキテクチャに関する理解

1日目

自己紹介

  • 吉岡、TAの自己紹介

  • みんなの自己紹介

このセミナー開始にあたって

この授業の目的は研究体験であると解釈しています。まず研究と授業は全然違います。授業は基本的に受け身でよく、最悪授業に出席し言われた通りの範囲を勉強しレポートやテストに望めばOKです。

一方で研究は最先端の更にその先を目指す行為です。そのため教員もまだ知らないことも勉強する必要があり、研究遂行に必要な知識やスキルを教員が全て丁寧に教えることはありません(というか無理です)。もちろんベースとなる技術や論文、教科書を最初に提示しますし、輪講などで基本は教えます(それは教員の義務です)が卒論・修論を書くには自分で情報を調べることがかなり重要となります。

これは会社に入っても同様であり、今はどの会社でも新人研修よりもOJTで仕事スキルを付けることが多いかと思います。OJTというと聞こえは良いのですが、メンターは自分の仕事をしながらあなたの指導をするので大学の授業のように懇切丁寧に教えてくれるわけではなく、要点を絞って自分で調べてもわからない範囲で質問をする必要があります。なので研究における姿勢と仕事の姿勢はちょっと似ていますね。

環境設定

  • Slack、github、VSCodeの設定をフォロー

シミュレータ(Modelsim)の準備

Windowsの人

ModelSimをインストールします。インストール方法についてはリンクを参照してください。

Windows、Linux使用の方はリンクからModelSimをダウンロードし、インストールしてください。

ModelSimは記述したハードウェアコード(Verilog)のコンパイラ+シミュレータとなっています。ハードウェアでは波形表示で結果を見ることが多く、GUIソフトが必要となり結果としてファイルサイズなども大きくなってしまいます。ModelSimはフリーの古いソフトですが、今回の実験に必要な結果は得られるはずです。Xilinx社のVivadoの方が高性能ですが有料だったため今回は見送りました。

MACの人

https://qiita.com/RotaryKer/items/d8f6d218962c213b0577

Brewでシミュレータ(IcarusVerilog, WaveGen)が入ります。試してみてください。(当方MAC持っていないため未確認です) (去年MACの人はインストール上手くできず結局MACで開発、Win機にデータ移してmodelsim回しました。)

シミュレータ動作確認+最初の設計

テキスト

本セミナーでは**ディジタル回路設計とコンピュータアーキテクチャ[ARM版]**をベースに勉強します。この本はCPUの作り方まで勉強できる上、比較的わかりやすく書かれています。

3章までは必修のディジタル・アナログ回路の復習ですが、デジタル回路は12月からなので履修していないかもですね。

そこで最初から読んでいきましょう、来週までに4章の途中まで読むことを目標としましょう。

そして4章に書いてある例題をいくつかVerilogで記述し動作を確認してみましょう。

1日目終了後課題

設計してテストベンチを書き、動作を確認してみましょう。

  1. 入力a,bを与えられてa>bならば1を、a≦bならば0を出力する比較器を設計してください。
  2. 入力aを入力bでビットシフト(2^b倍する)回路を設計してください。
  3. a*bを行う掛け算回路を設計してください。
  4. 組み合わせ回路と順序回路の違いを説明してください。
  5. 2.8章の2:1マルチプレクサを実装してください。
  6. 4:1マルチプレクサを実装してください。
  7. 2:4デコーダを実装してください。
  8. (チャレンジ課題)テキスト1.4章にある通り、与えられた加算器は符号付き2の補数を用いたものでした(Verilogでは特に宣言をしないと2の補数で実装されます)符号なし表現を用いた(uintと呼ばれます)加算器を作ってみてください。
  9. Dフリップフロップはとても重要な回路です。回路動作を説明できるようにしてください。

詰まったら4章を見てみると実装が載っています。確認してみて下さい。