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

2024年度 3回生前期 前半

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

English page is here (in progress).


目次


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

今年度の計算機科学実験及演習3(ハードウェア)は次のように実施します.
オンラインツールでの演習支援環境を用意しています.リモートワーク力を高めましょう.

実験の概要

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

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

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

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

実験は少人数のグループ制で行います.グループ内での設計データの共有とバージョン管理にはGitを用います. レポート課題の設計データの提出にはGitHub Classroomを利用します.デバッグ相談の際にも活用します.

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


What's New

過去の更新履歴


受講上の注意

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


カレンダー

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

実験日 常駐TA イベント 進度の目安
4/11(木)午後松本導入講義1
(CAD, HDL)
CAD・HDLの習熟を兼ねた導入課題の実施
方式設計,機能設計
作業分担の決定,設計期間のスケジューリング
4/12(金)午前斎藤・赤川
4/12(金)午後浦川・迫田
4/18(木)午後松本・上田・迫田導入講義2
(SIMPLE)
各機能ブロックの論理設計
4/19(金)午前斎藤・赤川・浦川導入レポート
4/19(金)午後浦川・迫田
4/25(木)午後松本・上田・迫田 プロセッサ全体の論理設計,デバッグ
4/26(金)午前斎藤・赤川・浦川
4/26(金)午後浦川・迫田
5/9(木)午後松本・上田・迫田中間デモの準備(命令の実行,表示方法の検討)
+拡張したアーキテクチャの機能設計
5/10(金)午前斎藤・赤川・浦川
5/10(金)午後浦川・迫田中間デモ
中間レポート
5/16(木)午後松本・上田・迫田拡張したアーキテクチャの論理設計,デバッグ
5/17(金)午前斎藤・赤川・浦川
5/17(金)午後浦川・迫田 応用プログラムの作成,デバッグ
5/23(木)午後松本・上田・迫田
5/24(金)午前斎藤・赤川・浦川
5/24(金)午後浦川・迫田 最終デモの準備(応用プログラムの作成)
+デバッグ,性能評価
5/30(木)午後松本・上田・迫田
5/31(金)午前斎藤・赤川・浦川
5/31(金)午後浦川・迫田最終デモ
6/7(金)最終レポート

スタッフ

教員

  役職 居室 内線 GitHub
川原 純 准教授 総合研究7号館230号室 5382 junkawahara
安戸 僚汰 助教  総合研究7号館335号室 5383 r-ricdeau
下西 慶 助教 総合研究5号館306号室 7480 smnimo
加藤 和成 技術職員 総合研究7号館335号室 5397 kazunarikato

TA

  学年 所属 GitHub コアタイム
松本 直樹 D2 岡部研 naoki9911 木午後
齊藤 一希 M2 湊研 ceblab 金午前
赤川 雄紀 M2 湊研 YukiAkagawa23 金午前
浦川 樹 M2 湊研 itscreek 金午前・金午後
上田 結大 M1 湊研 ueffy 木午後
迫田 祥司 M1 岩下研 nzqatd 木午後・金午後

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

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

Git/GitHub

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

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

Gitの使い方

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

導入課題

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

プロセッサ設計演習

中間報告

デモンストレーション [プロトタイプの動作実証]
日時: 5/10(金) 13:15-16:30
PowerMedusaボード上に設計したプロセッサをダウンロードしたうえ,何らかの命令が動作していることを示す. 示し方は各自で工夫すること.
レポート [最終的に設計するプロセッサの仕様]
提出期限:5/10(金) 18:15
提出方法:GitHub Classroomの 2024-simple-team<チーム番号> のリモートリポジトリに,middleというタグ名(Tag version)のリリースを作成して提出する.
リリースの作成をもって提出されたと見なす.再提出したい場合は middle-1 などの接尾番号を付けて改めてリリースを作成すること.

提出物:下記に示すレポートと中間報告時点の設計データ
レポートの内容:最終的に設計するプロセッサに関して,以下の内容をまとめる.各文書には表紙を付けること.表紙には,文書名,学籍番号と氏名,提出日などを記す.
リモートリポジトリのトップに report_middle のディレクトリを作成し,ここに以下に指定する青字のファイル名で各レポート文書(形式はPDFのみ)を配置すること.
  1. [グループ毎に1部] アーキテクチャ検討報告書 (ファイル名:architecture_study_report.pdf) 「何を目指すか」
    1. 要求仕様,設計目標,設計方針,特長
      • 実現する機能,性能の目標数値,など
    2. 高速化/並列処理の方式
      • 拡張命令,動作周波数,パイプライン化,並列化,など
    3. 性能/コストの予測
      • SIMPLE/Bに比べて性能やハードウェア量が何倍程度か,それは妥当な見積もりか
      • ソート速度コンテストでの計算時間,サイクル数の予測,など
    4. 考察等
  2. [グループ毎に1部] 方式設計仕様書 (ファイル名:system_design_spec.pdf) 「どのように実現するか」
    • 概要
    • 命令セット・アーキテクチャ
    • 構造と動作
  3. [個人毎に1部] 機能設計仕様書 (ファイル名:function_design_spec-[学籍番号].pdf) 「具体的な実現方法」
    • 全体をどのようにコンポーネントに分割したか (方式設計仕様書のブロック図を再掲して説明)
    • 設計を担当するコンポーネントの外部仕様
    • 実装を担当するコンポーネントの内部仕様
  4. [グループ毎に1部] 実施状況報告書 (ファイル名:status_report.pdf)
    • 分担状況:プロセッサを構成する各ブロックの設計を,各グループ構成員がどのように分担していく計画か
    • 最終目標に対する現在の進捗状況,今後の進捗計画
[提出前にチェック]

最終報告

デモンストレーション [完成したプロセッサの動作実証]
日時: 5/31(金) 13:15-16:30
製作したコンピュータの特長などについて発表(セールストーク)を行い,完成したコンピュータ上で応用プログラムを実行するデモンストレーションを行う.
レポート [完成したプロセッサに関するドキュメント]
提出期限: 6/7(金) 13:15
提出方法:GitHub Classroomの 2024-simple-team<チーム番号> のリモートリポジトリに,finalというタグ名(Tag version)のリリースを作成して提出する.
リリースの作成をもって提出されたと見なす.再提出したい場合は final-1 などの接尾番号を付けて改めてリリースを作成すること.

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

[提出前にチェック] 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基本命令で記述されたサンプルプログラム集です.いろいろ入っていますので,演習の進捗に合わせてご利用ください.
simple_assembler
Pythonで記述されたSIMPLE命令コードのアセンブラです.
simple_simulator
Javaで記述されたSIMPLEの命令レベルシミュレータです.アセンブリ記述コードの機能を検証できます.アセンブラ機能も同梱されています.

設計のためのTips

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

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

FPGAボード

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

各資料は PandA に掲載されています.

MU500-RXセット_ユーザーズマニュアルVer1.1.pdf
PowerMedusaボードMU500-RX/RKの取扱説明書.
MU500-RX_ピンアサイン表.xls
PowerMedusaボードMU500-RX/RKのピンアサイン表
MU500-7SEGマニュアルVer2.pdf
PowerMedusaに追加する,7セグメントLEDボードの取扱説明書.
マニュアル用RX_7SEGピンアサイン.xls
PowerMedusaに追加する,7セグメントLEDボードのピンアサイン表(参考)
ピンアサイン表まとめ
ピンアサイン表をわかりやすくまとめたもの

CAD・FPGA

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

Quartus Primeダウンロード・センター
本実験で使用するツールであるQuartus Prime 20.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.ヘネシー著, 成田光彰訳『コンピュータの構成と設計(上) 第6版』(日経BP社) ISBN:9784296070091
  • D.A.パターソン,J.L.ヘネシー著, 成田光彰訳『コンピュータの構成と設計(下) 第6版』(日経BP社) ISBN:9784296070107
  • 小林優『入門Verilog HDL記述―ハードウェア記述言語の速習&実践』(CQ出版) ISBN:4789833984
  • 深山正幸『HDLによるVLSI設計―VerilogHDLとVHDLによるCPU設計』(共立出版) ISBN:4320120272

リンク


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