平成21年度卒業研究 16bitcpu の製作
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 PresentationTRANSCRIPT
平成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
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)
1.2 本研究で製作したCPUの構成 今回は PICO-16 をベースに製作。 PICO とは、慶應義塾大学と東京工科大学で共同開発さ
れた実験教育用の CPU のシリーズで、 PICO-16 とは命令サイズが 16bit のもの。
16bit の汎用レジスタを 8 つ持つ register-register マシン。 データの長さは 16bit に固定。 動作クロックは 48MHz メモリは 32767×8×2bit 入力はシステムリセットと RS232C 通信用の2種類 出力は RS232C 通信用の1種類 31 種類の命令を実行できる。
命令コード 命令 説明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 形式(ジャンプ命令)
命令形式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
命令形式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
命令形式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
命令形式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
CPU の概略図
ホストコンピュータと通信するための入出力(今回は RS232C )
( 画像引用:フリー素材の来夢来人 http://ww
w.civillink.net/"> フリー素材の来夢来人 )
1.3 主な module の概要
Control UnitALUReg_fileIrpc
Control Unit
全体の制御を行う。各ステージでそれぞれのモジュールに制御信号を出す。
IF1 IF2 RF1 RF2 EX1 EX2
FIN
HALT
IF1 IF2 RF1 RF2 EX1 EX2
FIN
HALTここまでで pc で指定されるアドレスの命令を ir にセットする。
ここまでで reg_file から使用するレジスタを読み出す。
メモリアクセスを行う命令以外はここで処理を実行し次の処理へ。
メモリアクセスを行う命令はここで実際のメモリのアクセス
を行う。
プログラムの正常終了。
プログラムの異常終了。
0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・
0
IF1
制御信号
0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・
0000000101000110
00000_001_010_00110
IF2
制御信号
0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・
0000000101000110
00000_001_010_00110
0
2
2
RF1
制御信号
制御信号
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
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
0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・
0000000101000110
00000_001_010_00110
2
IF1
制御信号
0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・
0000000101000110
00000_001_010_00110
0001001101010101
000000000101010100010_011
IF2
制御信号
0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・
2
2
0001001101010101
0000000001010101
4
00010_011
RF1
制御信号
制御信号
0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・
00000001010001100001001101010101
4
0000000001010101
R[3]
00010_011
RF2
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
0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・
4
0001001101010101
00010_011
IF1
制御信号
0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・
0001001101100100
00010_011
0111100001100100
4
01111 0000000001100100
IF2
0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・
4
2
6
0111100001100100
00010_011
0000000001100100
RF1
0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・
6
制御信号0000000001100100
00010_011
0111100001100100
RF2
0 : 0000000101000110 (ADD 1,2)2 : 0001001101100100 (ANDI 3,100)4 : 0111100001100100 (JMP 100)・・・・・・・・・
106
6
0111100001100100
00010_011
0000000001100100
EX1
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
Reg file
8つのレジスタを格納しているモジュールで、 Control Unit からの命令によって、データの書き込み、読み出しと、それを行うレジスタを指定する。 R eg file
reg
1re
g2
SE
L
01 _ 001 _ 010の命令の場合
R0
R1
R3
R2
R7
R6
R5
R4
reg1
reg2
10 _ 100 _ 000の命令の場合4
R0
R1
R3
R2
R7
R6
R5
R4
ir
メモリから送られてきたデータを適切な形に変換して、 Control Unit や sbus2に送る。
ir
LDHI命令がメモリから送られてきた例。他にも色々な変換がある。
Control Unit
irsbus2
11101_011_00000001
00000001_000000000000000111101 011
00000001_00000000
PC これから行う命令の
番地を格納しておくレジスタ。命令毎に2ずつ増加する。ジャンプ命令がきた時には、ジャンプしたい数を加算する。
pc
02468
10121416
Pc(0)
Pc(14)
Pc(2)
2章 I/O
2.1 I/O とは
入出力 (Input/Output) の事 .CPU が人間の脳なら、 I/O は口や手足に当たる .計算結果を外部に出力したい時や、外部からの数値を CPU に入力したい時に必要となる .
具体例としてはキーボードやマウス等、実に様々なものが挙げられる .
今回は RS232C を製作した . 後に、 USB通信についても説明する .
2.2 RS232C について
シリアル通信方式の一つ . シリアル通信とはデータを 1bit を順番に送っていく事である . シリアル通信とは別に、パラレル通信がある . 後述する USB 通信もシリアルバスの 1 種である
今回作成した CPU の入出力はこのRS232C で行われる .8bit 毎の通信を行う .
RS232C のプロトコル ( 通信方式 )初期状態としては 1 が流れている . これは新しいデータの流れがあるまで続く .新しいデータの流れが来たときには最初に0 、最後に 1 を足してデータを挟み込んで入出力する .
下に具体例を示す .
データ
“0” 1 1 0 1 0 0 1 1 “1” ・・・・・
11001011 というデータを送りたい時 (“0” と“ 1” はデータじゃない )
“1” 以降データが来ない限りは 1 を出し続ける
・・・1
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
RS232C の実装 ( その 2)
CPU→ ホスト PC(16bit → 1bit)
8bit 単位でデータを扱っているので、 RS232C は xxxx_xxxx_yyyy_yyyy という形のデータを受け取ったら yyyy_yyyy の部分しか流さない .
データが来ない限り 1 を流し続ける . 最初に 0 、最後に1 をはさんでデータを流す .tx という部品が担当する .
PC RS232C(tx) CPU1bit 16bit
RS232C の実装 ( その 3)
クロック分周今回の CPU のクロック数は 48Mhz(1 秒間に 48 万回反転 ) しているので RS232C も同様なのだが、 Tera Termでは 9600bps(1 秒間に 9600bit 送受信 ) 設定になっている . ビットの幅はクロック数で決まるので、 CPU のスピードで RS232C が動いてもちゃんとしたデータをやり取り出来ない . なので、クロックを分周 ( 遅らせる )して、 RS232C が 9600bps でも正常な動作が出来るようにする .clk_delay という部品が担当 .
幅が正しくないと読み取れない!! 幅を合わせて正しく読める様にする!!
2.3 USB とは Universal Serial Bus の略 . インテルが中心となり、マイ
クロソフト、コンパック (ヒューレット・パッカード ) 、日本電気 (NEC) などが共同で仕様を決めている .
1994年に上記の会社等が集まり規格を決め始めて以来、2010年 3月 4日現在 1.0 から始まった USB のバージョンは 3.0まである .
類似独自規格の乱造乱立を防止する目的で特許が存在しているが、使用料が無料とされているのでマウスや携帯の充電器、玩具に至るまで様々な機器で使用されている .
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)
USB の利点 USBハブを用いれば、最大 127台まで同時に接続でき
る ( 各デバイスにアドレスを 7bit で振り分けている ). 小型コネクタによる省スペース USBポートから電源を取ることが出来る .更にコンピュ
ータ側が自動的に処理を行うことにより、差し込むだけで使用できる ( プラグ & プレイ、パワーマネージメント ).
コンピュータの電源を入れたままでも付け外しを行える構造を備えている (活栓挿抜 ).USB のハブ . これを用いれば複数の USB 機器を繋
いで操作することが出来る .( 出典: http://buffalo-kokuyo.jp/products/peripheral/usbhub/bus-self/bsh4a03u3/index.html)
USB の転送速度
USB1.1 ・・・フルスピード (12Mbps) ・ロースピード (1.5Mbps) の 2 種類 .
USB2.0 ・・・ハイスピード (480Mbps) を加え3 種類 .
USB3.0 ・・・スーパースピード (5Gbps) を加え 4 種類 .
RS232C の転送速度は最大 115.2kbps
USB は遥かに速い!!
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 を挿入する .
USB 通信の流れ (バルク OUT転送の例 )
出典 :USB の基礎知識
http://www.kumikomi.net/archives/2007/03/22usb1.php?page=9
ホスト PC からターゲットへのデータ転送を行っている .
3 章 アセンブラ
3.1 アセンブラとは
アセンブリ言語を機械語に変換する事をアセンブルすると言い、それを行うプログラムの事をアセンブラと言う。
// test.asm・・・・・・・・・ADDI 5,2;MV 0,5;SUBI 0,2;・・・・・・・・・
// test.coe・・・・・・・・・00110101,00000010,00000000,01000001,00111000,00000010,・・・・・・・・・
アセンブラ
今回は C言語で作成!
3.2 クイックソート データ列を順番に並べ替えるソートアルゴリズムの一つ。
単純かつ高速なソートとして知られている。
アルゴリズム1、データ列の中から基準値(今回は先頭)をひとつ選ぶ。2、基準値以上の数を先頭から、基準値未満の数を末尾からひと
つずつ探索していく。3.該当する数同士を入れ替える。4、再び探索を開始し、お互いの探索がぶつかるか交差するまで続ける。
5、4の位置でデータ列を二つにわけて、それぞれのグループに対して1から繰り返す。
6、以上を再帰的に行う。
今回は3、5、1、4、2をソートする。その様子は以下のようになっている。
先頭ポインタ 末尾ポインタ
基準は3
探索(終了)(3以上) (3未満)
交換
(3以上) 探索
(3以上)(3未満)探索終了
交換
交差
分割
先頭 末尾
基準値は2
探索(終了) (2以上)(2未満)
交換
交差
分割
基準値は5
同様の作業を行っていく
3.3 フィボナッチ数列
F (n) = F(n-1) + F(n-2) (n > 2)F( 1 ) = 1 ,F( 2 ) = 1 で定義される数列。フィボナッチ数列を表示するプログラムは、 n=1 からメモリに再帰的に数を格納するようになっている。今回は要素数12の数列を表示する。
クイックソートとフィボナッチ数列の表示をFPGAを用いて実演する。
4章 今後の展望
4.今後の展望
プログラムのロード機能 プログラムを読み込ませるたびに毎回メモリを書き
換える必要がなくなるUSBの実装
RS232Cよりも速い通信が見込まれる