280 likes | 531 Views
CNP 実験 (P 実験 ) 第 5 回. MinIPS システムの設計 ( Nios ボードへの実装). はじめに. 前回までにプロセッサの設計を行ってきた。しかし、そのプロセッサには、まだメモリや I/O 等が備わっていない。 そこで、今回から、そのプロセッサにメモリや、各種 I/O を装備し、 FPGA 上に実装して動作の検証を行う。. 設計の流れ. Quartus の使い方 (1 回 ) ↓ 簡単なモジュールの設計 (2 回 ) ↓ MinIPS のアーキテクチャ (3 回 ) ↓
E N D
CNP実験 (P実験) 第5回 MinIPSシステムの設計 (Niosボードへの実装)
はじめに 前回までにプロセッサの設計を行ってきた。しかし、そのプロセッサには、まだメモリやI/O等が備わっていない。 そこで、今回から、そのプロセッサにメモリや、各種I/Oを装備し、FPGA上に実装して動作の検証を行う。
設計の流れ • Quartusの使い方 (1回) ↓ • 簡単なモジュールの設計 (2回) ↓ • MinIPSのアーキテクチャ (3回) ↓ • MinIPSの設計 (2回) ↓ • MinIPSシステムの設計 (2回) *今回 ↓ • C-N-P 結合実験 (2回)
システムの構成 FPGA MinIPS (32bit RISC Processor) Instruction Cache (256word) Data Cache (256word) BUS Boot loader SRAM & LAN91C111 Controller RS232C Controller SRAM 256kword RS232 XCVR LAN91C111
キャッシュメモリ • ダイレクトマップ方式を採用 • 命令、データ共に、256 wordとする • キャッシュミス時に、4命令分ロードしてくる • キャッシュミス時には、プロセッサの動作は止める • 書き込みは、キャッシュと同時にメモリへも書き込む、ライトスルー方式を採用 • 0xFFFF0000以降のI/Oアドレスのアクセスでは、キャッシュへの保存はしない
ダイレクト・マップ方式 010 011 100 101 000 001 110 111 キャッシュ 00001 00101 01001 01101 10001 10101 11001 11101
キャッシュの構造 10 9 2 1 0 31 バイトオフセット Tag (22bit) Data (32bit) valid 256entry = Data Hit
BUS • キャッシュからの要求に対し、適切なI/Oとの接続を行う
Boot loader • プロセッサの立ち上がり時に読み出されるメモリ領域 • アドレスが、0x00000000から始まる • 容量は、256 word とする • プログラムをRS232Cを通してロードするローダをあらかじめ格納してある
FSE コントローラ MinIPSシステムのメインメモリにあたるSRAM及びEthernetのコントロールチップであるLAN91C111を制御する • SRAM • 命令メモリと、データメモリの両方で使う • SRAMの容量は、256 k wordである • アドレスは、0x10000000から始まる • LAN91C111 • LAN91C111のI/O空間と制御レジスタをメモリにマップしている • データバスは8bit接続である • 制御レジスタの割り込み許可が立ち上がっていると、受信の時、または、送信可能状態であるときに割り込みが発生する
RS232C コントローラ コントロールレジスタ • 制御は全てレジスタを用いて行う。 • 受信の場合受信が行われるとレシーバ制御レジスタのレディが立ち上がり、レシーバデータレジスタに受信したデータが現れる。 • 送信の場合トランスミッタ制御レジスタのレディが立ち上がっていると送信可能状態にあり、トランスミッタデータレジスタに書き込みを行うことによって送信が行われる。 • 割り込みについて制御レジスタの割り込み許可が立ち上がっていると、受信の時、または、送信可能状態であるときに割り込みが発生する。 31 1 0 未使用 レシーバ制御 割り込み許可 レディ 31 7 0 未使用 受信データ レシーバ・データ 1 0 31 未使用 トランスミッタ制御 割り込み許可 レディ 7 31 0 未使用 送信データ トランスミッタ・データ
メモリ割り当て 0x00000000 Boot loader 0x000000FF 0x10000000 SRAM 0x100FFFFF 0xFFFF0000 RS232C Control Register 0xFFFF0010 LED 0xFFFF0020 Switch 0xFFFF002F 0xFFFF0040 Seven Segment Display 0xFFFF0050 Timer 0xFFFF005F 0xFFFF0300 LAN91C111 Control Register 0xFFFF0313
メモリ割り当て (I/O) • 0xFFFF0000RS232C・レシーバ制御(下位8bit) • 0xFFFF0004RS232C・レシーバデータ(下位8bit) • 0xFFFF0008RS232C・トランスミッタ制御(下位8bit) • 0xFFFF000CRS232C・トランスミッタデータ(下位8bit) • 0xFFFF0010LED1~LED8(下位8bit) • 0xFFFF0020Switch・スイッチデータ(下位8bit) • 0xFFFF0024Switch・スイッチ1制御(下位8bit) • 0xFFFF0028Switch・スイッチ2制御(下位8bit) • 0xFFFF0040Seven Segment Display・表示データ • 0xFFFF0050Timer・タイマー制御(下位8bit) • 0xFFFF0054Timer・タイマーリロード値 • 0xFFFF0058Timer・タイマーカウンタ値 • 0xFFFF0300LAN91C111・I/O空間(8bit単位) • 0xFFFF0310LAN91C111・割り込み制御(下位8bit)
配布ソースについて その1 MinIPS_core を除いたMinIPSシステムに かかわる全てのソースはダウンロードする • MinIPS.vMinIPSシステムのTop記述 • Cache.vキャッシュメモリ用のメモリマクロ • DataCache.vデータキャッシュモジュール • InstructionCache.v命令キャッシュモジュール
配布ソースについて その2 • Boot_ROM.vBoot loaderのTop記述 • Boot_ROM_core.v Boot loader用のメモリマクロ • BIOS.mifBoot loader用のメモリ内データ • FSE_Control.vSRAM・LAN91C111の制御モジュール
配布ソースについて その3 • RS232C.vRS232CコントローラのTop記述 • in_shift_reg.v 受信用シフトレジスタ • out_shift_reg.v 送信用シフトレジスタ • reg8sp.v8bit レジスタ
配布ソースについて その4 • switch.v チャタリング除去モジュール • LEDUnit.vLED制御モジュール • SWUnit.v スイッチ制御モジュール • Display_7_segment.vSeven Segment Display制御モジュール • TransHexUnit.vSeven Segment Display用16進数表示モジュール • Timer.v タイマー制御モジュール
配布ソースについて その5 • MinIPS.qsf セッティングファイル • MinIPS.qpf プロジェクトファイル
問題15 (MinIPS システム) 配布した MinIPS.v のソースを読み、各インタフェースのソースと、自分が作成した、MinIPS_core.v 及び、その下位モジュールのソースを加えて、Quartusを用いて論理合成せよ。 また、FPGA上に実装し、Niosボードで動作を確認せよ。
動作の検証 • コンパイルに成功しているなら、TeraTermを起動して、MinIPSをリセットする(SW0)と、”READY”という文字が出る。 • それが確認できたなら、プログラムを受信することが出来るので、プログラムを格納したファイルの送信を行う。
プログラム送信時の形式 アドレス データ プログラムの終わり
プログラムのロード方法 これを選択 Send file…から、書き込みしたいプログラムのファイルを選択する。
MinIPSへのプログラミングの様子 アドレス 起動メッセージ データ プログラム プログラムの終わり 書き込み終了メッセージ
問題16 (LEDの交互点滅) アドレス、0xFFFF0010の下位8 bit に値を書き込むと、LEDを点灯させることができる。 そこで、8つのLEDを交互に点滅させるプログラムをMinIPSのアセンブラで書き、MinIPS上で実行させてみよ。アドレスは、0x10000000から使うようにせよ。
モニタプログラムについて 配布したモニタプログラム(load.bin)には、下記の6つの命令がある。 • listアドレスを引数として、メモリの内容をダンプする。 例:list 10004000 • load メモリに、プログラムやデータをロードする。 • reg レジスタの内容をダンプする。 • rnew アドレスを引数として、そのアドレスから、ひとつずつデータの内容を更新することが出来る。 • jump アドレスを引数として、そのアドレスにジャンプする。 • rtn 割り込みによりモニタプログラムに戻った場合、実行していたルーチンに戻る
モニタプログラムが実行されている様子 コマンド プロンプト
問題17 (オリジナルプログラム) MinIPSのアセンブラを用いて、自分のオリジナルのプログラムを2種類作成し、実行してみよ。 作成した全ての命令を含むように組み立てて、全ての命令が正しく動作することを証明せよ。(除く、mfe、mte、rfe)
問題18 (応用課題) MinIPSでは、MIPSの全ての命令を実装しているわけではない。そこで、MIPSにあって、MinIPSに無い命令を追加し、動作を確認せよ。 MIPSの命令は各自調べよ。