第13回: 実習(8): FPGAへのCPUの実装(3)
全体設計
最後にこれまでに設計した要素回路を統合してCPUとメモリを含む
全体cpu_topを設計し、をつくってみましょう。
(もちろんcpu_topにはスイッチやLEDなどがつきます)
入出力の構成は、例えば7セグメントLED表示回路のseg7.vhdと
スイッチPSW(0), PSW(1)を交互に押すことでクロック信号を生成する
sw_clk.vhdを使い、
次のようにするとわかりやすいでしょうか。
(もちろん他の構成でも構いません)
- PSW(0), PSW(1) : sw_clkによるクロック生成
- PSW(3) : リセット(rst)
- seg7のd0(7セグメントLEDの一の位) : r0
- seg7のd1(7セグメントLEDの十の位) : r1
- seg7のd2(7セグメントLEDの百の位) : addr
- led : data (opとimm)
プログラムの動作
mem.vhdにいろいろなプログラムを書き込み、それを動作させて
正しい結果が得られるかを確認してみましょう。
プログラム1: レジスタへの値の代入
addr data
0 00000001 : mov 1, r0
1 00010010 : mov 2, r1
2 01100010 : jmp 2
プログラム2: 乗算(3×4=12)
addr data
0 00000000 : mov 0, r0
1 00010100 : mov 4, r1
2 00100011 : add r0, 3, r0
3 01011111 : add r1, 15, r1
4 01110110 : jz 6
5 01100010 : jmp 2
6 01100110 : jmp 6
この他にも、例えば除算の実行などのいろいろなプログラムを記述して
実行させてみましょう。
CPUの機能拡張
ここまでで設計したCPUは、非常に基本的な機能しかありません。
しかしHDLの機能拡張が容易である特長を生かして、
機能を拡張させてみましょう。
例えば、以下のような拡張が考えられます。
- 扱う即値・レジスタの範囲(ビット数)の拡張
- 扱えるメモリ容量の拡張(アドレスバスのビット数を増やす)
- 命令の拡張(例えば減算命令やシフト演算命令の追加)
- CPU機能の拡張(例えば「演算結果が負」であることを示すフラグ
(キャリー(C)フラグ)の追加とそれに対応する分岐命令の追加)
- 値をメモリから読み出したり、演算結果のメモリへの書き込む命令の実装
(ノイマンアーキテクチャやハーバードアーキテクチャなど)
レポート
今回設計したCPU、またはそれを独自に拡張したCPUをFPGA上で動作させ、
そこでプログラムを実行させて、その実行結果などをまとめる。
- 形式: 自由(A4版・WordやLaTeX・PDFなどの電子データが望ましい)。
ただし最低限、設計した各回路のVHDL記述と実行させたプログラム、
実行結果(記述のみでも写真などを用いてもよい)を含むこと。
- 期限: 2012/9/18(火) 17:00(厳守: 締め切りを過ぎたものは受理しません)
- 提出方法: 電子データをakita@ifdl.jpまでメール添付で送付。
または印刷媒体の場合を田中さんか金森さんへ提出。
※メール提出の場合は24時間以内に受理確認メールを返信します。
返信がない場合は送信に失敗していることになるので、
別の方法で送信または送信方法の相談を連絡してください。
- 評点: シラバス通りレポート評点は30%の割合で成績に加味します。
ただし未提出の場合は、期末試験の成績にかかわらず不可とします。
- 評価基準: (下記の範囲で内容に応じて評価します)
- 50点〜60点: 例示のCPUの実装とプログラムの実行
- 60点〜80点: 例示のCPUの実装と独自プログラムの実行
- 80点〜100点: CPUの機能拡張の実装と独自プログラムの実行
- 注意:必ず自分の力で完成させること。ただしその過程で、友人等に相談したり文献・Webページ等を調べるのは大いにやってください。ただしレポートには必ず「出典」として明記すること。(例:「○○君に教えてもらいました」「○○君の???.vhd」ほんの著者名・題目、Webページの等)/出典に書かない場合は「不正コピー」とみなします。
戻る