Download presentation
Presentation is loading. Please wait.
1
平成21年度卒業研究 16bitCPUの製作 福永研究室 家村 光 唐木 靖雅 木次 遼太
2
目次 1.CPU 2.I/O 3.アセンブラ 4.今後の展望 3.1 アセンブラとは 3.2 クイックソート 3.3 フィボナッチ数列
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.今後の展望
3
1章 CPU
4
1.1 CPUとは CPU(Central Processing Unit:中央処理装置)とは、プログラムにより各種演算・制御を行う装置のこと。 CPUは、ALUなどの演算装置、データを一時記憶するレジスタ、メモリなどの記憶装置、周辺機器との入出力装置、CPU全体を制御する制御装置などで構成される。 ←Intel corei7 (画像引用:Naopy Hobby Land CPUコレクション
5
1.2 本研究で製作したCPUの構成 今回はPICO-16をベースに製作。
1.2 本研究で製作したCPUの構成 今回はPICO-16をベースに製作。 PICOとは、慶應義塾大学と東京工科大学で共同開発された実験教育用のCPUのシリーズで、PICO-16とは命令サイズが16bitのもの。 16bitの汎用レジスタを8つ持つregister-registerマシン。 データの長さは16bitに固定。 動作クロックは48MHz メモリは32767×8×2bit 入力はシステムリセットとRS232C通信用の2種類 出力はRS232C通信用の1種類 31種類の命令を実行できる。
6
命令一覧 I 形式 (即値命令) R 形式 (レジスタ-レジスタ命令) J 形式 (ジャンプ命令)
7
命令形式 Type I Type R Type J
8
命令形式 Type I Type R Type J I形式(即値命令)はイミーディエイト命令、条件分岐命令などに使用する。OPが命令コード、Rdが使用するレジスタ、immediateが数値を意味する。 (例)ADDI 1,10;
9
命令形式 Type I Type R Type J R形式(レジスタ-レジスタ命令)は算術演算・論理演算などに使用する。OPにはすべて0が入り、FUNCで命令を判断する。Rd、Rsが使用するレジスタ、FUNCが補助命令コードを意味する。 (例)AND 1,2;
10
命令形式 Type I Type R Type J J形式(ジャンプ命令)はジャンプ命令、サブルーチンコールなどに使用する。OPが命令コード、offsetがジャンプ距離を意味する。 (例)JMP 100;
11
ホストコンピュータと通信するための入出力
CPUの概略図 ホストコンピュータと通信するための入出力 (今回はRS232C) (画像引用:フリー素材の来夢来人 )
12
1.3 主なmoduleの概要 Control Unit ALU Reg_file Ir pc
13
Control Unit 全体の制御を行う。各ステージでそれぞれのモジュールに制御信号を出す。 HALT HALT IF1 IF1 IF2
ここまででreg_fileから使用するレジスタを読み出す。 プログラムの異常終了。 ここまででpcで指定されるアドレスの命令をirにセットする。 メモリアクセスを行う命令はここで実際のメモリのアクセスを行う。 HALT HALT IF1 IF1 IF2 IF2 RF1 RF1 RF2 RF2 EX1 EX1 EX2 EX2 プログラムの正常終了。 FIN FIN メモリアクセスを行う命令以外はここで処理を実行し次の処理へ。
14
IF1 0 : (ADD 1,2) 2 : (ANDI 3,100) 4 : (JMP 100) ・・・
15
IF2 制御信号 00000_001_010_00110 0 : (ADD 1,2) 2 : (ANDI 3,100) 4 : (JMP 100) ・・・
16
00000_001_010_00110 RF1 制御信号 2 2 0 : (ADD 1,2) 2 : (ANDI 3,100) 4 : (JMP 100) ・・・
17
00000_001_010_00110 RF2 制御信号 制御信号 0 : (ADD 1,2) 2 : (ANDI 3,100) 4 : (JMP 100) ・・・ R[1] R[2] 2
18
00000_001_010_00110 EX1 R[1]+R[2] 0 : (ADD 1,2) 2 : (ANDI 3,100) 4 : (JMP 100) ・・・ R[1] R[2] 2
19
00000_001_010_00110 IF1 0 : (ADD 1,2) 2 : (ANDI 3,100) 4 : (JMP 100) ・・・ 2
20
00000_001_010_00110 IF2 制御信号 00010_011 0 : (ADD 1,2) 2 : (ANDI 3,100) 4 : (JMP 100) ・・・
21
00010_011 RF1 制御信号 2 4 0 : (ADD 1,2) 2 : (ANDI 3,100) 4 : (JMP 100) ・・・ 2
22
00010_011 RF2 制御信号 制御信号 0 : (ADD 1,2) 2 : (ANDI 3,100) 4 : (JMP 100) ・・・ R[3] 4
23
00010_011 EX1 R[3]&100 0 : (ADD 1,2) 2 : (ANDI 3,100) 4 : (JMP 100) ・・・ R[3] 4
24
00010_011 IF1 0 : (ADD 1,2) 2 : (ANDI 3,100) 4 : (JMP 100) ・・・ 4
25
00010_011 IF2 制御信号 01111 0 : (ADD 1,2) 2 : (ANDI 3,100) 4 : (JMP 100) ・・・ 4
26
00010_011 RF1 2 6 0 : (ADD 1,2) 2 : (ANDI 3,100) 4 : (JMP 100) ・・・ 4
27
00010_011 RF2 制御信号 0 : (ADD 1,2) 2 : (ANDI 3,100) 4 : (JMP 100) ・・・ 6
28
00010_011 EX1 106 0 : (ADD 1,2) 2 : (ANDI 3,100) 4 : (JMP 100) ・・・ 6
29
ALU ・Control Unitからの命令信号によって 色々な演算が行われる。CPUでの演算 は全てここで行われる。 命令 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 命令 入力A 出力 入力B ・Control Unitからの命令信号によって 色々な演算が行われる。CPUでの演算 は全てここで行われる。
30
Reg file 8つのレジスタを格納しているモジュールで、 Control Unitからの命令によって、データの書き込み、読み出しと、それを行うレジスタを指定する。
31
01_001_010の命令の場合
32
10_100_000の命令の場合
33
ir メモリから送られてきたデータを適切な形に変換して、 Control Unitやsbus2に送る。
34
LDHI命令がメモリから送られてきた例。 他にも色々な変換がある。
Control Unit LDHI命令がメモリから送られてきた例。 他にも色々な変換がある。
35
PC これから行う命令の番地を格納しておくレジスタ。命令毎に2ずつ増加する。ジャンプ命令がきた時には、ジャンプしたい数を加算する。
Pc(0) Pc(2) 2 4 6 8 10 12 Pc(14) 14 16
36
2章 I/O
37
I/Oとは 入出力(Input/Output)の事.CPUが人間の脳なら、I/Oは口や手足に当たる.計算結果を外部に出力したい時や、外部からの数値をCPUに入力したい時に必要となる. 具体例としてはキーボードやマウス等、実に様々なものが挙げられる. 今回はRS232Cを製作した.後に、USB通信についても説明する.
38
2.2 RS232Cについて シリアル通信方式の一つ.シリアル通信とはデータを1bitを順番に送っていく事である.シリアル通信とは別に、パラレル通信がある.後述するUSB通信もシリアルバスの1種である 今回作成したCPUの入出力はこのRS232Cで行われる.8bit毎の通信を行う.
39
RS232Cのプロトコル(通信方式) 初期状態としては1が流れている.これは新しいデータの流れがあるまで続く.新しいデータの流れが来たときには最初に0、最後に1を足してデータを挟み込んで入出力する. 下に具体例を示す. ・・・1 “0” “1”・・・・・ データ というデータを送りたい時(“0”と“1”はデータじゃない) “1”以降データが来ない限りは1を出し続ける
40
RS232C(tx) PC CPU RS232Cの実装(その1) ホストPC→CPU(1bit → 16bit) rxという部品が担当する.
何もしていない状態の時0000_0000_0000_0000を出力. 8bit単位でデータを流すのだが今回のCPUは16bit単位で動くので、CPUに送る時には 0000_0010_dddd_dddd(dはデータ)の形で CPUにデータを流すようにしている. RS232C(tx) PC CPU 1bit 16bit
41
RS232C(tx) PC CPU RS232Cの実装(その2) CPU→ホストPC(16bit → 1bit)
8bit単位でデータを扱っているので、RS232Cはxxxx_xxxx_yyyy_yyyyという形のデータを受け取ったらyyyy_yyyyの部分しか流さない. データが来ない限り1を流し続ける.最初に0、最後に1をはさんでデータを流す.txという部品が担当する. RS232C(tx) PC CPU 1bit 16bit
42
RS232Cの実装(その3) クロック分周 今回のCPUのクロック数は48Mhz(1秒間に48万回反転)しているのでRS232Cも同様なのだが、Tera Termでは9600bps(1秒間に9600bit送受信)設定になっている.ビットの幅はクロック数で決まるので、CPUのスピードでRS232Cが動いてもちゃんとしたデータをやり取り出来ない.なので、クロックを分周(遅らせる)して、RS232Cが9600bpsでも正常な動作が出来るようにする.clk_delayという部品が担当. 幅を合わせて正しく読める様にする!! 幅が正しくないと読み取れない!!
43
2.3 USBとは Universal Serial Busの略.インテルが中心となり、マイクロソフト、コンパック(ヒューレット・パッカード)、日本電気(NEC)などが共同で仕様を決めている. 1994年に上記の会社等が集まり規格を決め始めて以来、2010年3月4日現在1.0から始まったUSBのバージョンは3.0まである. 類似独自規格の乱造乱立を防止する目的で特許が存在しているが、使用料が無料とされているのでマウスや携帯の充電器、玩具に至るまで様々な機器で使用されている.
44
USBのピン配置 差動型のデータ線の組(D+とD-)、電源(Vbus)、接地(GND)の四本のピンが配置されている.上の写真の右はシリーズA、左はシリーズBと言うコネクタである. (出典:通信用語の基礎知識
45
USBの利点 USBハブを用いれば、最大127台まで同時に接続できる(各デバイスにアドレスを7bitで振り分けている).
小型コネクタによる省スペース USBポートから電源を取ることが出来る.更にコンピュータ側が自動的に処理を行うことにより、差し込むだけで使用できる(プラグ&プレイ、パワーマネージメント). コンピュータの電源を入れたままでも付け外しを行える構造を備えている(活栓挿抜). USBのハブ.これを用いれば複数のUSB機器を繋いで操作することが出来る.(出典:
46
USBの転送速度 USB1.1・・・フルスピード(12Mbps)・ロースピード(1.5Mbps)の2種類.
USB3.0・・・スーパースピード(5Gbps)を加え4種類. RS232Cの転送速度は最大115.2kbps USBは遥かに速い!!
47
USBのプロトコル シリアルバス規格の一つ.プロトコルは NRZI(Non Return to Zero Invert)変調した
信号を使っている. 送りたいデータ・ビットが 0の時・・・・信号を反転させる 1の時・・・・信号はそのまま データ NRZI ※実際はデータにおいて1が6ビット続いたら、 スタッフビットと呼ばれる0を挿入する.
48
USB通信の流れ(バルクOUT転送の例)
ホストPCからターゲットへのデータ転送を行っている. 出典:USBの基礎知識
49
3章 アセンブラ
50
3.1 アセンブラとは アセンブリ言語を機械語に変換する事をアセンブルすると言い、それを行うプログラムの事をアセンブラと言う。
3.1 アセンブラとは アセンブリ言語を機械語に変換する事をアセンブルすると言い、それを行うプログラムの事をアセンブラと言う。 // test.asm ・・・ ADDI 5,2; MV 0,5; SUBI 0,2; // test.coe ・・・ , , , , , , アセンブラ 今回はC言語で作成!
51
3.2 クイックソート データ列を順番に並べ替えるソートアルゴリズムの一つ。 単純かつ高速なソートとして知られている。 アルゴリズム
3.2 クイックソート データ列を順番に並べ替えるソートアルゴリズムの一つ。 単純かつ高速なソートとして知られている。 アルゴリズム 1、データ列の中から基準値(今回は先頭)をひとつ選ぶ。 2、基準値以上の数を先頭から、基準値未満の数を末尾からひとつずつ探索していく。 3.該当する数同士を入れ替える。 4、再び探索を開始し、お互いの探索がぶつかるか交差するまで続ける。 5、4の位置でデータ列を二つにわけて、それぞれのグループに対して1から繰り返す。 6、以上を再帰的に行う。
52
今回は3、5、1、4、2をソートする。その様子は以下のようになっている。 先頭ポインタ 末尾ポインタ
今回は3、5、1、4、2をソートする。その様子は以下のようになっている。 先頭ポインタ 末尾ポインタ 基準は3 探索(終了)(3以上) (3未満) 交換 (3以上) 探索
53
(3以上)(3未満) 探索終了 交換 交差 分割
54
先頭 末尾 基準値は2 探索(終了) (2以上)(2未満) 交換 交差 分割 基準値は5 同様の作業を行っていく
55
3.3 フィボナッチ数列 F(n) = F(n-1) + F(n-2) (n > 2) F(1) = 1,F(2) = 1
3.3 フィボナッチ数列 F(n) = F(n-1) + F(n-2) (n > 2) F(1) = 1,F(2) = 1 で定義される数列。フィボナッチ数列を表示するプログラムは、n=1からメモリに再帰的に数を格納するようになっている。今回は要素数12の数列を表示する。 クイックソートとフィボナッチ数列の表示をFPGAを用いて実演する。
56
4章 今後の展望
57
4.今後の展望 プログラムのロード機能 プログラムを読み込ませるたびに毎回メモリを書き換える必要がなくなる USBの実装
プログラムを読み込ませるたびに毎回メモリを書き換える必要がなくなる USBの実装 RS232Cよりも速い通信が見込まれる
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.