平成21年度卒業研究 16bitcpu の製作

57
平平 平平平平平平 21 16bitCPU 平平平 福福福福福 福福 福 福福 福福 福福 福福

Upload: bethan

Post on 12-Jan-2016

60 views

Category:

Documents


0 download

DESCRIPTION

平成21年度卒業研究 16bitCPU の製作.               福永研究室                   家村 光                   唐木 靖雅                   木次 遼太. 目次. 1.CPU 1.1 CPUとは 1.2 本研究で製作したCPUの構成 1.3 主な module の概要 2. I/O 2.1  I/O とは 2.2 RS232C 2.3 USBについて 3.アセンブラ 3.1 アセンブラとは 3.2 クイックソート 3.3 フィボナッチ数列 4.今後の展望. 1章 CPU. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 平成21年度卒業研究 16bitCPU の製作

平成21年度卒業研究

 16bitCPUの製作

              福永研究室                  家村 光                  唐木 靖雅                  木次 遼太

Page 2: 平成21年度卒業研究 16bitCPU の製作

目次 1.CPU

1.1 CPUとは 1.2 本研究で製作したCPUの構成 1.3 主な module の概要

2. I/O 2.1  I/O とは 2.2 RS232C 2.3 USBについて

3.アセンブラ 3.1 アセンブラとは 3.2 クイックソート 3.3 フィボナッチ数列

4.今後の展望

Page 3: 平成21年度卒業研究 16bitCPU の製作

1章 CPU

Page 4: 平成21年度卒業研究 16bitCPU の製作

1.1 CPUとは CPU ( Central Processing Unit :中央処理装置)とは、

プログラムにより各種演算・制御を行う装置のこと。 CPU は、 ALU などの演算装置、データを一時記憶する

レジスタ、メモリなどの記憶装置、周辺機器との入出力装置、 CPU 全体を制御する制御装置などで構成される。

←Intel corei7

( 画像引用: Naopy Hobby Land CPU コレクション http://www7a.biglobe.ne.jp/~naopy/cpu_sub.html#CPU)

Page 5: 平成21年度卒業研究 16bitCPU の製作

1.2 本研究で製作したCPUの構成 今回は PICO-16 をベースに製作。 PICO とは、慶應義塾大学と東京工科大学で共同開発さ

れた実験教育用の CPU のシリーズで、 PICO-16 とは命令サイズが 16bit のもの。

16bit の汎用レジスタを 8 つ持つ register-register マシン。 データの長さは 16bit に固定。 動作クロックは 48MHz メモリは 32767×8×2bit 入力はシステムリセットと RS232C 通信用の2種類 出力は RS232C 通信用の1種類 31 種類の命令を実行できる。

Page 6: 平成21年度卒業研究 16bitCPU の製作

命令コード 命令 説明00000dddsss00000 NOP 何もしない00000dddsss00001 MV d s s dの値を にコピーする00000dddsss00010 AND d s d & s dの値を に格納00000dddsss00011 OR d s d | s dの値を に格納00000dddsss00100 XOR d s d ̂s dの値を に格納00000dddsss00101 NOT d s ~s dを に格納00000dddsss00110 ADD d s d + s dを に格納00000dddsss00111 SUB d s d - s dを に格納00000dddsss01000 LD d s sで示す番地の中身をdに格納00000dddsss01001 ST d s dで示す番地にsを格納00000dddsss01010 LB d s 8bitsで示す番地の中身をsの下位 に格納00000dddsss01011 SB d s dで示す番地にsの下位8bitを格納00000dddsss01100 SL d s s bit dの1 左シフトを に格納00000dddsss01101 SR d s s 1bit dの 右シフトを に格納00110dddxxxxxxxx ADDI d X d + X dを に格納00111dddxxxxxxxx SUBI d X d - X dを に格納00010dddxxxxxxxx ANDI d X d X( 1) dと 上位は の論理積を に格納00011dddxxxxxxxx ORI d X d X( 0) dと 上位は の論理和を に格納00100dddxxxxxxxx XORI d X d X( 0) dと 上位は の排他的論理和を に格納01000dddxxxxxxxx J ALR d R7 dに戻り番地を格納して へ絶対分岐01001dddxxxxxxxx BNEZ d X d ≠ 0ならば相対分岐01010dddxxxxxxxx BEQZ d X d = 0ならば相対分岐01011dddxxxxxxxx BMI d X d < 0ならば相対分岐01100dddxxxxxxxx BPL d X d ≧0ならば相対分岐01101dddxxxxxxxx J AL X R7 dに戻り番地を格納して へ相対分岐01110ddduuuuuuu J R d dの内容に絶対分岐01111xxxxxxxxxxx J MP X 無条件相対分岐10000xxxxxxxxxxx BIOR X RS232Cが読み出し可能な状態なら相対分岐10001xxxxxxxxxxx BIOW X RS232Cが書き込み可能な状態なら相対分岐11100dddxxxxxxxx LDLI d X X d 8bit ( )を の下 に格納 符号拡張11101dddxxxxxxxx LDHI d X X d 8bit ( 0)を の上 に格納 下位は

命令一覧

R  形式(レジスタ - レジスタ命令)

I  形式(即値命令)

J  形式(ジャンプ命令)

Page 7: 平成21年度卒業研究 16bitCPU の製作

命令形式15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

O P

O P

O P

R d

R d

im m ed ia te

R s FU N C

offse t

Type I

Type R

Type J

Page 8: 平成21年度卒業研究 16bitCPU の製作

命令形式15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

O P

O P

O P

R d

R d

im m ed ia te

R s FU N C

offse t

Type I

Type R

Type J

I 形式(即値命令)はイミーディエイト命令、条件分岐命令などに使用する。 OP が命令コード、 Rd が使用するレジスタ、 immediate が数値を意味する。

(例) ADDI 1,10; 00110 001 00001010

Page 9: 平成21年度卒業研究 16bitCPU の製作

命令形式15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

O P

O P

O P

R d

R d

im m ed ia te

R s FU N C

offse t

Type I

Type R

Type J

R 形式(レジスタ - レジスタ命令)は算術演算・論理演算などに使用する。 OP にはすべて 0 が入り、 FUNC で命令を判断する。 Rd 、 Rs が使用するレジスタ、FUNC が補助命令コードを意味する。

(例) AND 1,2; 00000 001 010 00010

Page 10: 平成21年度卒業研究 16bitCPU の製作

命令形式15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

O P

O P

O P

R d

R d

im m ed ia te

R s FU N C

offse t

Type I

Type R

Type J

J 形式(ジャンプ命令)はジャンプ命令、サブルーチンコールなどに使用する。 OP が命令コード、 offset がジャンプ距離を意味する。

(例) JMP 100; 01111 01100100

Page 11: 平成21年度卒業研究 16bitCPU の製作

CPU の概略図

ホストコンピュータと通信するための入出力(今回は RS232C )

( 画像引用:フリー素材の来夢来人   http://ww

w.civillink.net/"> フリー素材の来夢来人 )

Page 12: 平成21年度卒業研究 16bitCPU の製作

1.3 主な module の概要

Control UnitALUReg_fileIrpc

Page 13: 平成21年度卒業研究 16bitCPU の製作

Control Unit

全体の制御を行う。各ステージでそれぞれのモジュールに制御信号を出す。

IF1 IF2 RF1 RF2 EX1 EX2

FIN

HALT

IF1 IF2 RF1 RF2 EX1 EX2

FIN

HALTここまでで pc で指定されるアドレスの命令を ir にセットする。

ここまでで reg_file から使用するレジスタを読み出す。

メモリアクセスを行う命令以外はここで処理を実行し次の処理へ。

メモリアクセスを行う命令はここで実際のメモリのアクセス

を行う。

プログラムの正常終了。

プログラムの異常終了。

Page 14: 平成21年度卒業研究 16bitCPU の製作

0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・

0

IF1

Page 15: 平成21年度卒業研究 16bitCPU の製作

制御信号

0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・

0000000101000110

00000_001_010_00110

IF2

Page 16: 平成21年度卒業研究 16bitCPU の製作

制御信号

0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・

0000000101000110

00000_001_010_00110

0

2

2

RF1

Page 17: 平成21年度卒業研究 16bitCPU の製作

制御信号

制御信号

0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・

0000000101000110

00000_001_010_00110

2

R[1]

R[2]

RF2

Page 18: 平成21年度卒業研究 16bitCPU の製作

0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・

0000000101000110

00000_001_010_00110

2

R[1]

R[2]

R[1]+R[2]

EX1

Page 19: 平成21年度卒業研究 16bitCPU の製作

0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・

0000000101000110

00000_001_010_00110

2

IF1

Page 20: 平成21年度卒業研究 16bitCPU の製作

制御信号

0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・

0000000101000110

00000_001_010_00110

0001001101010101

000000000101010100010_011

IF2

Page 21: 平成21年度卒業研究 16bitCPU の製作

制御信号

0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・

2

2

0001001101010101

0000000001010101

4

00010_011

RF1

Page 22: 平成21年度卒業研究 16bitCPU の製作

制御信号

制御信号

0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・

00000001010001100001001101010101

4

0000000001010101

R[3]

00010_011

RF2

Page 23: 平成21年度卒業研究 16bitCPU の製作

0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・

00000001010001100001001101010101

4

0000000001010101

R[3]

R[3]&100

00010_011

EX1

Page 24: 平成21年度卒業研究 16bitCPU の製作

0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・

4

0001001101010101

00010_011

IF1

Page 25: 平成21年度卒業研究 16bitCPU の製作

制御信号

0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・

0001001101100100

00010_011

0111100001100100

4

01111 0000000001100100

IF2

Page 26: 平成21年度卒業研究 16bitCPU の製作

0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・

4

2

6

0111100001100100

00010_011

0000000001100100

RF1

Page 27: 平成21年度卒業研究 16bitCPU の製作

0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・

6

制御信号0000000001100100

00010_011

0111100001100100

RF2

Page 28: 平成21年度卒業研究 16bitCPU の製作

0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・

106

6

0111100001100100

00010_011

0000000001100100

EX1

Page 29: 平成21年度卒業研究 16bitCPU の製作

ALU命令 0000 0001 0010 0011 0100 0101 1100 1101 1110 1111

出力 THA

THB

AND

OR XOR

NOT

SHL SHR ADD

SUB

A B A&B

A|B

A^B

~B B<<1

B>>1

A+B

A-B

・ Control Unit からの命令信号によって

色々な演算が行われる。CPUでの演算

は全てここで行われる。

A LU

入力A

入力B

命令

出力 A LU

Page 30: 平成21年度卒業研究 16bitCPU の製作

Reg file

8つのレジスタを格納しているモジュールで、 Control Unit からの命令によって、データの書き込み、読み出しと、それを行うレジスタを指定する。 R eg file

reg

1re

g2

SE

L

Page 31: 平成21年度卒業研究 16bitCPU の製作

01 _ 001 _ 010の命令の場合

R0

R1

R3

R2

R7

R6

R5

R4

reg1

reg2

Page 32: 平成21年度卒業研究 16bitCPU の製作

10 _ 100 _ 000の命令の場合4

R0

R1

R3

R2

R7

R6

R5

R4

Page 33: 平成21年度卒業研究 16bitCPU の製作

ir

メモリから送られてきたデータを適切な形に変換して、 Control Unit や sbus2に送る。

ir

Page 34: 平成21年度卒業研究 16bitCPU の製作

LDHI命令がメモリから送られてきた例。他にも色々な変換がある。

Control Unit

irsbus2

11101_011_00000001

00000001_000000000000000111101 011

00000001_00000000

Page 35: 平成21年度卒業研究 16bitCPU の製作

PC これから行う命令の

番地を格納しておくレジスタ。命令毎に2ずつ増加する。ジャンプ命令がきた時には、ジャンプしたい数を加算する。

pc

02468

10121416

Pc(0)

Pc(14)

Pc(2)

Page 36: 平成21年度卒業研究 16bitCPU の製作

2章  I/O

Page 37: 平成21年度卒業研究 16bitCPU の製作

2.1 I/O とは

入出力 (Input/Output) の事 .CPU が人間の脳なら、 I/O は口や手足に当たる .計算結果を外部に出力したい時や、外部からの数値を CPU に入力したい時に必要となる .

具体例としてはキーボードやマウス等、実に様々なものが挙げられる .

今回は RS232C を製作した . 後に、 USB通信についても説明する .

Page 38: 平成21年度卒業研究 16bitCPU の製作

2.2 RS232C について

シリアル通信方式の一つ . シリアル通信とはデータを 1bit を順番に送っていく事である . シリアル通信とは別に、パラレル通信がある . 後述する USB 通信もシリアルバスの 1 種である

今回作成した CPU の入出力はこのRS232C で行われる .8bit 毎の通信を行う .

Page 39: 平成21年度卒業研究 16bitCPU の製作

RS232C のプロトコル ( 通信方式 )初期状態としては 1 が流れている . これは新しいデータの流れがあるまで続く .新しいデータの流れが来たときには最初に0 、最後に 1 を足してデータを挟み込んで入出力する .

下に具体例を示す .

データ

“0” 1 1 0 1 0 0 1 1 “1” ・・・・・

11001011 というデータを送りたい時 (“0” と“ 1” はデータじゃない )

“1” 以降データが来ない限りは 1 を出し続ける

・・・1

Page 40: 平成21年度卒業研究 16bitCPU の製作

RS232C の実装 ( その 1)

ホスト PC→CPU(1bit → 16bit)

rx という部品が担当する .

何もしていない状態の時 0000_0000_0000_0000 を出力 .

8bit 単位でデータを流すのだが今回の CPU は 16bit 単位で動くので、 CPU に送る時には0000_0010_dddd_dddd(d はデータ ) の形でCPU にデータを流すようにしている .

PC RS232C(tx) CPU1bit 16bit

Page 41: 平成21年度卒業研究 16bitCPU の製作

RS232C の実装 ( その 2)

CPU→ ホスト PC(16bit → 1bit)

8bit 単位でデータを扱っているので、 RS232C は xxxx_xxxx_yyyy_yyyy という形のデータを受け取ったら yyyy_yyyy の部分しか流さない .

データが来ない限り 1 を流し続ける . 最初に 0 、最後に1 をはさんでデータを流す .tx という部品が担当する .

PC RS232C(tx) CPU1bit 16bit

Page 42: 平成21年度卒業研究 16bitCPU の製作

RS232C の実装 ( その 3)

クロック分周今回の CPU のクロック数は 48Mhz(1 秒間に 48 万回反転 ) しているので RS232C も同様なのだが、 Tera Termでは 9600bps(1 秒間に 9600bit 送受信 ) 設定になっている . ビットの幅はクロック数で決まるので、 CPU のスピードで RS232C が動いてもちゃんとしたデータをやり取り出来ない . なので、クロックを分周 ( 遅らせる )して、 RS232C が 9600bps でも正常な動作が出来るようにする .clk_delay という部品が担当 .

幅が正しくないと読み取れない!! 幅を合わせて正しく読める様にする!!

Page 43: 平成21年度卒業研究 16bitCPU の製作

2.3 USB とは Universal Serial Bus の略 . インテルが中心となり、マイ

クロソフト、コンパック (ヒューレット・パッカード ) 、日本電気 (NEC) などが共同で仕様を決めている .

1994年に上記の会社等が集まり規格を決め始めて以来、2010年 3月 4日現在 1.0 から始まった USB のバージョンは 3.0まである .

類似独自規格の乱造乱立を防止する目的で特許が存在しているが、使用料が無料とされているのでマウスや携帯の充電器、玩具に至るまで様々な機器で使用されている .

Page 44: 平成21年度卒業研究 16bitCPU の製作

USB のピン配置

差動型のデータ線の組 (D+ と D-) 、電源 (Vbus) 、接地 (GND) の四本のピンが配置されている . 上の写真の右はシリーズ A 、左はシリーズ B と言うコネクタである .( 出典:通信用語の基礎知識http://www.wdic.org/w/WDIC/USB%E3%82%B3%E3%83%8D%E3%82%AF%E3%82%BF)

Page 45: 平成21年度卒業研究 16bitCPU の製作

USB の利点 USBハブを用いれば、最大 127台まで同時に接続でき

る ( 各デバイスにアドレスを 7bit で振り分けている ). 小型コネクタによる省スペース USBポートから電源を取ることが出来る .更にコンピュ

ータ側が自動的に処理を行うことにより、差し込むだけで使用できる ( プラグ & プレイ、パワーマネージメント ).

コンピュータの電源を入れたままでも付け外しを行える構造を備えている (活栓挿抜 ).USB のハブ . これを用いれば複数の USB 機器を繋

いで操作することが出来る .( 出典: http://buffalo-kokuyo.jp/products/peripheral/usbhub/bus-self/bsh4a03u3/index.html)

Page 46: 平成21年度卒業研究 16bitCPU の製作

USB の転送速度

USB1.1 ・・・フルスピード (12Mbps) ・ロースピード (1.5Mbps) の 2 種類 .

USB2.0 ・・・ハイスピード (480Mbps) を加え3 種類 .

USB3.0 ・・・スーパースピード (5Gbps) を加え 4 種類 .

RS232C の転送速度は最大 115.2kbps

 USB は遥かに速い!!

Page 47: 平成21年度卒業研究 16bitCPU の製作

USB のプロトコル

シリアルバス規格の一つ . プロトコルはNRZI(Non Return to Zero Invert) 変調した信号を使っている .

送りたいデータ・ビットが0 の時・・・・信号を反転させる 1 の時・・・・信号はそのまま

0 1 1 0 0 0 1

データ 0 0 0 1 0 1 1

NRZI※実際はデータにおいて 1 が 6ビット続いたら、

スタッフビットと呼ばれる 0 を挿入する .

Page 48: 平成21年度卒業研究 16bitCPU の製作

USB 通信の流れ (バルク OUT転送の例 )

出典 :USB の基礎知識

http://www.kumikomi.net/archives/2007/03/22usb1.php?page=9

ホスト PC からターゲットへのデータ転送を行っている .

Page 49: 平成21年度卒業研究 16bitCPU の製作

3 章 アセンブラ

Page 50: 平成21年度卒業研究 16bitCPU の製作

3.1 アセンブラとは

アセンブリ言語を機械語に変換する事をアセンブルすると言い、それを行うプログラムの事をアセンブラと言う。

// test.asm・・・・・・・・・ADDI 5,2;MV 0,5;SUBI 0,2;・・・・・・・・・

// test.coe・・・・・・・・・00110101,00000010,00000000,01000001,00111000,00000010,・・・・・・・・・

アセンブラ

今回は C言語で作成!

Page 51: 平成21年度卒業研究 16bitCPU の製作

3.2 クイックソート データ列を順番に並べ替えるソートアルゴリズムの一つ。

単純かつ高速なソートとして知られている。

アルゴリズム1、データ列の中から基準値(今回は先頭)をひとつ選ぶ。2、基準値以上の数を先頭から、基準値未満の数を末尾からひと

つずつ探索していく。3.該当する数同士を入れ替える。4、再び探索を開始し、お互いの探索がぶつかるか交差するまで続ける。

5、4の位置でデータ列を二つにわけて、それぞれのグループに対して1から繰り返す。

6、以上を再帰的に行う。

Page 52: 平成21年度卒業研究 16bitCPU の製作

 今回は3、5、1、4、2をソートする。その様子は以下のようになっている。

     先頭ポインタ       末尾ポインタ

   基準は3

探索(終了)(3以上)      (3未満)

交換

  (3以上)  探索  

Page 53: 平成21年度卒業研究 16bitCPU の製作

           (3以上)(3未満)探索終了

交換

交差

分割

Page 54: 平成21年度卒業研究 16bitCPU の製作

   先頭   末尾

基準値は2

探索(終了)  (2以上)(2未満)

交換

交差

分割

基準値は5

同様の作業を行っていく

Page 55: 平成21年度卒業研究 16bitCPU の製作

3.3 フィボナッチ数列

F (n) = F(n-1) + F(n-2) (n > 2)F( 1 ) = 1 ,F( 2 ) = 1 で定義される数列。フィボナッチ数列を表示するプログラムは、 n=1 からメモリに再帰的に数を格納するようになっている。今回は要素数12の数列を表示する。

 クイックソートとフィボナッチ数列の表示をFPGAを用いて実演する。

Page 56: 平成21年度卒業研究 16bitCPU の製作

4章 今後の展望

Page 57: 平成21年度卒業研究 16bitCPU の製作

4.今後の展望

プログラムのロード機能  プログラムを読み込ませるたびに毎回メモリを書き

換える必要がなくなるUSBの実装

 RS232Cよりも速い通信が見込まれる