計算機科学実験及演習3(ハードウェア)

2020年度 3回生前期 前半

─── マイクロコンピュータの作成 ───

2020年度は4月23日(木)から実施します.


新型コロナウイルス感染症(COVID-19)への対応について

今年度の実験及演習の実施には特別な対応が必要です.実験科目は時として対面での濃厚な指導もある科目でしたが,平時の通りの実施は困難な状況です.
学生の皆さんにも不便と迷惑をお掛けするところではありますが,見方を変えれば,情報技術を駆使していって社会全体の行動変容を巻き起こす契機ともいえます.そしてもちろん皆さんの協力も不可欠です.
いっそのことこれまでにない新たな状況を体験できていると考えて,割り切ってチャレンジしてみましょう!

対応方法を下記に記します.やってみなくちゃ分からないところもあるので,柔軟に変更することがあります. オンラインツールでの演習支援環境を用意しています.リモートワーク力を高めましょう. オンラインのサポート体制についてまとめます.

実験の概要

本実験では,FPGAと呼ばれるプログラマブルなLSIを用いて, マイクロコンピュータを作成します.

マイクロコンピュータは,PowerMedusaボードを使用して作成します. また,論理設計には論理CADツールQuartus Prime 17.1を使用します. PowerMedusaボード上のFPGAをプロセッサとしてプログラムすることによって, ボード全体を1つのマイクロコンピュータとして動作させることができるわけです.

実装するプロセッサのアーキテクチャは,SIMPLEアーキテクチャに準拠するものとします.本実験では,このプロセッサの方式設計から論理設計までを行います.
実験の達成目標は,与えられた仕様と方針に沿って設計するだけではなく,独自の改良や拡張を施すことです.また,プロセッサアーキテクチャに関する種々の拡張方式や最適化技術がもたらす有効性などを定量的に評価し,これを考察します.

レポートは計3回提出してもらいます.7SEG LED駆動回路とカウンタの設計の導入課題,プロセッサ設計演習の中間報告最終報告です.最終報告ではデモンストレーションの動画の提出も課します.

2020年度の実験は個人単位で行います.設計データのバージョン管理にはGitを用います. レポート課題の設計データの提出にはGitHub Classroomを利用します.デバッグ相談の際にも活用します.

最後に,最終デモにて完成したマイクロコンピュータ上で,なんらかの応用プログラムを実際に動作させます.
ソート速度コンテストを開催していて,作成したプロセッサの性能を競います.任意ですが是非参加して下さい.


What's New

過去の更新履歴


受講上の注意

以下のページ,資料をよく読んで受講してください.

平時の内容ですが,大事なことなので示しておきます.


カレンダー

レポート提出期限および進度は,目安として示しています.
おおよそ中間レポート提出時点で,なんらかの命令が動作するレベルのものが設計できており,SIMPLEの基本的な仕様と方針に沿ったプロセッサがだいたい出来ていることが望ましいです.

コアタイムは各日4限まで(16:15まで)です.18:00までにPandA課題「実施報告」を提出してください.
5/08(金)および5/22(金)には,実施報告に加えて「進捗報告」としてプロセッサ設計の進捗具合や今後の見通しを教えてください.どんなことを書いてほしいかは,当日のPandA課題を見てください.

実験日 常駐TA イベント 進度の目安
4/23(木)午後山口・原口・安部・曽根ガイダンス CADの習熟を兼ねた導入課題の実施
方式設計,機能設計
4/24(金)午前原口・祐源
4/24(金)午後河上・祐源・安部・清水
4/30(木)午後山口・原口・安部・曽根導入レポート 各機能ブロックの論理設計
5/01(金)午前原口・祐源
5/01(金)午後河上・祐源・安部・清水
5/07(木)午後山口・原口・安部・曽根 プロセッサ全体の論理設計,デバッグ
5/08(金)午前原口・祐源
5/08(金)午後河上・祐源・安部・清水進捗報告
5/14(木)午後山口・原口・安部・曽根 拡張したアーキテクチャの機能設計,論理設計
5/15(金)午前原口・祐源
5/15(金)午後河上・祐源・安部・清水中間レポート
5/21(木)午後山口・原口・安部・曽根 アーキテクチャの洗練,デバッグ
5/22(金)午前原口・祐源
5/22(金)午後河上・祐源・安部・清水進捗報告
5/28(木)午後山口・原口・安部・曽根 最終デモの準備(応用プログラムの作成)
+デバッグ,性能評価
5/29(金)午前原口・祐源
5/29(金)午後河上・祐源・安部・清水最終デモ
6/12(金)最終レポート

スタッフ

教員

  役職 居室 内線 GitHub
高瀬 英希 准教授 総合研究7号館334号室 5393 takasehideki
小谷 大祐 助教 総合研究5号館406号室 7468 daisuke-k
下西 慶 助教 学術情報メディアセンター南館412号室 9065 smnimo
加藤 和成 技術職員 総合研究7号館201号室 5397 kazunarikato

TA

  学年 所属 GitHub コアタイム
祐源 英俊 M2 高木研 ken551 金午前・金午後
清水 亮太 M2 湊研 twoabet 金午後
山口 左近 M1 高木研 NASU41 木午後
河上 晃治 M1 (元)高木研 kojiK20 金午後
原口 卓也 M1 高木研 hyaraguchi 木午後・金午前
安部 竜矢 M1 高木研 abe-tatsuya 木午後・金午後
曽根 大雅 M1 湊研 EtoNagisa 木午後

レポート課題/デモンストレーション

レポート課題/デモンストレーションは,導入課題,中間報告,最終報告の3回ある.
導入課題と中間報告はレポートのみ,最終報告は,レポートとデモンストレーション動画の提出からなる.
それぞれの提出期限は目安として示している.間に合わなくても十分にサポートするので,自身の演習環境とペースに合わせて進めていくと良い(ただし,レポートを書くのは面倒だから後回しにして,先に実装を進めてしまおうというのは良くない).

Git/GitHub

レポートおよび設計データは,GitHub Classroomによって提出する.
初期設定についてはPandAお知らせ「HW:GitHub Classroomの登録方法」を参照のこと.

GitとGitHubを初めて使う方は,下記資料を一読されたい.概要および基本的な使い方について解説している.

* Gitの使い方

なお,GitHubのリポジトリをpublicにすることやCollaboratorを追加すること等(つまり作成した設計データやレポート文書を他者に公開すること)は,カンニング等の不正防止の観点から固く禁ずる.

導入課題

内容・レポート:
個人単位で7SEG LED駆動回路およびカウンタの設計を行い,その内容をレポートで提出する.
試験の答案ではなく実験レポートであることに注意すること.
提出期限:
4/30(木) 14:00
提出方法:
GitHub Classroomの intro-<アカウント名> のリモートリポジトリに,下記の提出内容に示すレポートと設計データを配置して,submitというタグ名(Tag version)のリリースを作成して提出する.
リリースの作成をもって提出されたと見なされる.
再提出したい場合は submit-1 などの接尾番号を付けて改めてリリースを作成すること.
提出内容:
  1. リモートリポジトリのトップディレクトリに intro.pdf のファイル名でレポート文書(形式はPDFのみ)を配置する.
    文書には表紙を付けること.表紙には,文書名,学籍番号と氏名,提出日などを記す.
  2. 設計データも本リポジトリに含めて上げること.

プロセッサ設計演習

中間報告

レポート [最終的に設計するプロセッサの仕様]
提出期限:5/15(金) 18:00 ※変更しました
提出方法:GitHub Classroomの simple-<アカウント名> のリモートリポジトリに,middleというタグ名(Tag version)のリリースを作成して提出する.
リリースの作成をもって提出されたと見なす.再提出したい場合は middle-1 などの接尾番号を付けて改めてリリースを作成すること.

提出物:下記に示すレポートと中間報告時点の設計データ
レポートの内容:最終的に設計するプロセッサに関して,以下の内容をまとめる.各文書には表紙を付けること.表紙には,文書名,学籍番号と氏名,提出日などを記す.
リモートリポジトリのトップに report_middle/ のディレクトリを作成し,ここに以下に指定する青字のファイル名で各レポート文書(形式はPDFのみ)を配置すること.
  1. アーキテクチャ検討報告書 (ファイル名:architecture_study_report.pdf) 「何を目指すか」
    1. 要求仕様,設計目標,設計方針,特長
      • 実現する機能,性能の目標数値,など
    2. 高速化や並列処理の方式
      • 拡張命令,動作周波数,パイプライン化,並列化,など
    3. 性能やコストの予測
      • SIMPLE/Bに比べて性能やハードウェア量が何倍程度か,それは妥当な見積もりか
      • ソート速度コンテストでの計算時間,サイクル数の予測,など
    4. 考察等
  2. 方式設計仕様書 (ファイル名:system_design_spec.pdf) 「どのように実現するか」
    • 概要
    • 命令セットアーキテクチャ
    • 構造と動作
各文書は,中間報告時点の設計および実装に基づくものではなく,最終的に実装を目指すプロセッサに関する内容であることに注意すること.作成にあたってはハードウェア設計の仕様書も参照すること.ただし2020年度は,機能設計仕様書は作成しない(レポートとして提出を求めないが,実装のためには作成したほうが当然良い).

[提出前にチェック]

最終報告

デモンストレーション [完成したプロセッサの動作実証]
提出期限: 5/29(金) 18:00
 ※デモ動画の提出が間に合わない場合は,5/29(金)のPandA課題にてプロセッサ設計演習の「進捗報告」を知らせること.

提出方法:GitHub Classroomの simple-<アカウント名> のリモートリポジトリのトップに,report_demo/ のディレクトリを作成し,そこにデモ動画などを配置する.そして,demoというタグ名(Tag version)のリリースを作成して提出する.
リリースの作成をもって提出されたと見なす.再提出したい場合は demo-1 などの接尾番号を付けて改めてリリースを作成すること.

内容:合計で3-5分程度の動画を作成して提出する.撮影方法や編集方法は任意である.report_demo/ 内に複数の動画ファイルや動画以外(スライド等)を配置しても良いが,その場合はREADMEなどを整備して各ファイルの説明を示すこと.
FPGAボードの実動作を見せるのには,スマホやPCインカメラ等で構わない.PC画面の操作やスライドを掲示しながら口頭説明するには,画面キャプチャの録画やZoomのレコーディング機能も有用であろう.

デモ動画には以下の内容が含まれていることを期待する.
レポート [完成したプロセッサに関するドキュメント]
提出期限: 6/12(金) 16:00
提出方法:GitHub Classroomの simple-<アカウント名> のリモートリポジトリに,finalというタグ名(Tag version)のリリースを作成して提出する.
リリースの作成をもって提出されたと見なす.再提出したい場合は final-1 などの接尾番号を付けて改めてリリースを作成すること.

提出物:下記に示すレポートと完成したプロセッサの設計データ (合成に必要な全てのプロジェクト・ファイルをGitHub管理下に含めること)
レポートの内容:完成したプロセッサに関して,以下の内容をまとめる.各文書には表紙を付けること.表紙には,文書名,学籍番号と氏名,提出日などを記す.
リモートリポジトリのトップに report_final/ のディレクトリを作成し,ここに以下に指定する青字のファイル名で各レポート文書(形式はPDFのみ)を配置すること.
  1. 最終成果物のユーザーズマニュアル (ファイル名:user_manual.pdf)
    • 説明書,リファレンスマニュアル,あるいはデータブックのことを指す
    • IPコア(ソフトコアプロセッサ)として提供することを想定し,プロセッサを使用するうえで必要十分な情報を記載すること
    • 概要,性能と特長,命令セットアーキテクチャ,構造と動作,など
    • (SIMPLE/Bを参照せず) これだけで完結した資料とすること
  2. アーキテクチャ拡張仕様書 (ファイル名:extended_spec.pdf)
    • SIMPLE/B基本アーキテクチャからの拡張仕様の説明
      • どのような拡張を行ったか
      • 本文書のみで拡張した仕様や機能が分かるように説明する
    • その拡張を行うとどのように嬉しいかを説明
      • どのようなことが新たにできるようになるか?(サンプルコード等を交えて説明するのもよい)
  3. 性能評価報告書 (ファイル名:evaluation_report.pdf)
    • それぞれの性能指標について,本演習の最終成果物のプロセッサを評価して報告する.実現した拡張仕様によって各指標がどう変わったか(どのくらい改善されたか)についても報告する.
      • 回路面積:ゲート数(LUT数,全体/コンポーネント毎)
      • クロック周波数(実動作/CADでの予測値),クリティカルパス
      • 応用プログラムの性能:プログラムの命令数/実行命令数/実行サイクル数
    • 評価結果に対して考察を与える.中間報告時点でのアーキテクチャ検討について設定した設計目標に対する達成度合,性能やコストの予測に対する達成度合,さらなる改善指針などについて議論する.
中間報告時点で検討したアーキテクチャ仕様に追加や変更がある場合は,変更後の各文書(ディレクトリ位置およびファイル名は中間レポートでの指定そのまま)もfinalのリリースに含めること.(middle-x のリリースを改めて作る必要はない)

[提出前にチェック] TA用最終報告チェックポイント一覧 (txt形式,UTF-8)
設計データ提出時の注意点」も確認すること.◎の項目が満たされていない場合は再提出を指示することがある(特によくあるのが,タイミング制約が設定されていなかったり,タイミング違反を起こしている場合)

資 料

資源保護のため,印刷するのは最小限にし,また, 将来のため,オンラインで閲覧することに慣れましょう.

ハードウェア設計の進め方

* Verilog HDL による回路設計記述
代表的なHDLの紹介と,Verilog HDLの基本的な文法について解説しています.
* CADツールを用いた設計フロー (実験3HW編)
Quartus Primeについて,HDL設計での使い方と実機での実行方法までの設計フローを解説しています.
GitHubにはハンズオンのQuartusプロジェクトを正解データ的に公開しています.適宜参照してください.
* タイミング制約の設定と検証
2019年度に補講として実施した,タイミング制約の解説とTimeQuest Timing Analyzerの使用方法に関する説明資料です.今年度もアップデートして実施するかもしれません.
* 2019年度後期 実験及演習2HW「CADツール上での論理設計」
春休みで全て忘れてしまった方へ,,,

SIMPLE

* SIMPLE 設計資料 (ver 4.0: 20200415)
設計するプロセッサのアーキテクチャであるSIMPLEの基本的な仕様と方針を記しています.
* SIMPLEアーキテクチャのプロセッサの実装
SIMPLEアーキテクチャの命令セットと基本的な実装を,図を交えながら解説しています.また,設計を進める上でのヒントを示しています.

simple_tools

プロセッサ設計演習を進める上で便利かもしれないツール集です.随時更新?
GitHubにてMIT Licenseで公開しています.基本命令セットの範囲内で Issue や Pull request を歓迎します.

* simple_sample
SIMPLE基本命令で記述されたサンプルプログラム集です.いろいろ入っていますので,演習の進捗に合わせてご利用ください.
6/08にv1.7 releaseしました.
* simple_assembler
Pythonで記述されたSIMPLE命令コードのアセンブラです.
5/07にv1.0 releaseしました.
* simple_simulator
Javaで記述されたSIMPLEの命令レベルシミュレータです.アセンブリ記述コードの機能を検証できます.アセンブラ機能も同梱されています.
5/15にv1.3 releaseしました.

設計のためのTips

CAD上での設計に参考となるので,追加で注意して見ておいてほしい資料です.

* よくある質問とその答え
要はFAQです.困ったらとりあえず見て下さい.随時追加.
* HDLてにをは集
HDLの設計で特に注意してほしいことやFAQをまとめました.随時追加.
* 主記憶用のRAMの作り方
megafunctionでプロセッサの主記憶を作る方法です.SIMPLE設計にも必須です.
* 設計のヒント
多少発展的な内容も含む設計のヒントがあります. 理解できない項目については,無理に利用する必要はありません.
* 同期設計
同期設計に関する tips. (現在とは違う実験機材について書いているが,参考まで)
* プロセッサの構成に必要となる論理ゲート
最低限覚えておきたいゲートとその真理値表. (論理システムを履修した皆さんには常識ですよね.)
* プロセッサの構成に必要となる回路
基本的な回路を挙げておきます. (論理システムを履修した皆さんには常識ですよね.)

FPGAボード

三菱電機マイコン機器ソフトウエア株式会社のFPGAボードであるPowerMedusa MU500-RX/RKの説明書です.
載っているFPGAはAltera社のCyclone IVファミリのEP4CE30F23I7Nです.
(RX210マイコンも搭載されています.本実験では使いませんが,興味のある人は遊んでみてください.)

各資料へのアクセスにはIDとPASSが必要です.PandAお知らせ「HW:公開制限ファイルへのアクセス方法」に記載しています.

[pdf] MU500-RXセット_ユーザーズマニュアルVer1.1.pdf
PowerMedusaボードMU500-RX/RKの取扱説明書.
[xls] MU500-RX_ピンアサイン表.xls
PowerMedusaボードMU500-RX/RKのピンアサイン表
[pdf] MU500-7SEGマニュアルVer2.pdf
PowerMedusaに追加する,7セグメントLEDボードの取扱説明書.
[xls] マニュアル用RX_7SEGピンアサイン.xls
PowerMedusaに追加する,7セグメントLEDボードのピンアサイン表

CAD・FPGA

CADはIntel PSG (旧Altera)のQuartus Prime 17.1を使います.バージョン違いでネットの情報があてにならないことが多いので,注意してください.
FPGAはAltera社のCycloneIV EP4CE30F23I7Nを使用します.

* Quartus Primeダウンロード・センター
本実験で使用するツールであるQuartus Prime 17.1のライトエディションのダウンロードページです.(演習室にはスタンダードエディションがインストールされています)
* オンライン資料: インテル FPGA開発ツールのサポート
Intel Quartus Primeのオンライン資料です. 基本的には最新バージョンのツールについて掲載されているため,日本語化が追いついていません.古いものを探せば日本語版もありますが,バージョンが異なると説明が通らない解説もあることに注意してください.
尻込みするくらい多くの資料があって困りますが,以下の物を重点的に見るのが役に立つと思います.
  • Quartus Prime Standard Edition Handbook
    Volumeごとに3つのファイルに分かれていますが,今回の実験の内容で役に立つのは以下のあたりです.
    • Volume 1, Chapter 17: Optimizing the Design Netlist
    • Volume 2, Chapter 1: Constraining Designs
    • Volume 2, Chapter 10: Design Optimization Overview
    • Volume 2, Chapter 12: Timing Closure and Optimization
    • Volume 2, Chapter 13: Power Optimization
    • Volume 2, Chapter 14: Area Optimization
    • Volume 3, Chapter 8: The Intel Quartus Prime Timing Analyzer
    • (Volume 1, Chapter 3: Intel Quartus Prime Incremental Compilation for Hierarchical and Team-Based Design.
    • (Volume 2, Chapter 2: Managing Device I/O pins)
  • Timing Analyzer Quick Start Tutorial
  • Simulation Quick-Start for ModelSim-Intel FPGA Edition (Intel Quartus Prime Standard Edition)
* Cycloneデバイスファミリのドキュメント
Cycloneデバイスファミリのハンドブックやデータシートがあります.
* Intel Community Forums
いわゆるQ&Aサイトで,"FPGA Developers"カテゴリが該当します.どうせなら英語で世界中に質問しましょう.

過去の参考資料

旧カリキュラムにて本ページに掲載していた参考資料です.当時はスケマ設計推奨だったので現在のHDL設計では必要になることは少ないですが,参考になることがあるかもしれません.

* CAD立ち上げからFPGAへのダウンロードまでの操作
CAD立ち上げからFPGAへのダウンロードまでの操作を箇条書きでまとめたものです.講義資料と内容はだいたい重複しています.

参考文献

* 富田眞治,中島浩『コンピュータハードウェア』(昭晃堂) ISBN:4785620447
* D.A.パターソン,J.L.ヘネシー著, 成田光彰訳『コンピュータの構成と設計(上) 第5版』(日経BP社) ISBN:9784822298425
* D.A.パターソン,J.L.ヘネシー著, 成田光彰訳『コンピュータの構成と設計(下) 第5版』(日経BP社) ISBN:9784822298432
* 小林優『入門Verilog HDL記述―ハードウェア記述言語の速習&実践』(CQ出版) ISBN:4789833984
* 深山正幸『HDLによるVLSI設計―VerilogHDLとVHDLによるCPU設計』(共立出版) ISBN:4320120272

リンク

* 京都大学
* 工学部
* 情報学科計算機科学コース
* 情報学科計算機科学コース 計算機室(学生実験)
* 情報学研究科
* Intel PSG (Altera)

本ページへの質問や問合せは le3ahw@lab3.kuis.kyoto-u.ac.jp
このコンテンツは,最初に嶋田創先生が作成され,高木一義先生が更新されたものをベースにしています.
ここに感謝の意を表します.