2017 年度情報処理学会関西支部 支部大会

A-04

教育用 16bit プロセッサ KUECHIP-3F の開発
Development of a 16bit Microprocessor for Education : KUECHIP-3F

東 香実 †

大迫 裕樹†

Kagumi Azuma

Yuuki Oosako

柴田 敦也

‡

Atsuya Shibata

國枝 義敏

神原 弘之

§

Hiroyuki Kanbara¶

Yoshitoshi Kunieda

1 はじめに集積回路技術の急速な進歩により, PC やスマートフォ

2 前身となる KUE-CHIP2 プロセッサについて
2.1

背景ンは元より, 自動車等の輸送機器やロボット, 家電製品や大学等の教育機関で, 計算機の動作原理やアーキテクIC カードに至るまで, 私達の日常生活は様々な組込み機チャ入門教育を行う場合, 教科書を用いた座学に加えて,器に支えられ, 維持されている. 一方で搭載されているプ

命令セットシミュレータを用いてプロセッサによる機械ロセッサは複雑かつ多様化し, その動作原理を理解する事

語プログラムの実行を “仮想的” に観察する事が行われてはますます困難になりつつある. このような状況の下,いる. 学生実験では, マイコンを搭載した市販のボードを• 計算機工学の講義に適した簡素な命令セットとアーキテクチャの提示• 集積回路工学の設計実習で参考となるプロセッサの実装例の提供を目指し, 8bit CPU の KUE-CHIP2 プロセッサは設計された [1][2][3]. ASIC (Application Specific IC) で実現された KUE-CHIP2 チップを搭載した教育用ボードは,大学等での学生実験に幅広く用いられている [4].
今回, 教育現場からのフィードバックを反映するため

KUE-CHIP2 を改良し 16bit 化した KUECHIP-3F プロセッサを設計し, FPGA に実装してその動作を確認した.
FPGA 向けハードウェア設計に先立ち, 定義した 16bit命令の動作の正しさを確認するため, 予め命令セットシミュレータを作成した. またアセンブラで KUECHIP-3Fプロセッサをプログラミングし, プロセッサの内部で命令の解釈と実行がどのように行われているかを観察できる,学生実験向けの教育用ボードも開発した.
以下では KUECHIP-3F プロセッサへの要求とその開発方法, 想定している学生実験のあらましを紹介する.

用い, アセンブリ記述プログラムを実行して周辺機器を制御したり, 計算機間で通信する等の演習が行われている.
このようなカリキュラムを実施しても, 計算機の動作原理の真の理解につながらない一因として,• 市販マイコンは, 多くの命令や入出力機能を備えており, 学生は短時間で詳細まで把握できない• PC (Program Counter) や IR (Instruction Register), フラグといった内部レジスタの変化が観測できない• 命 令 の フ ェ ッ チ, デ コ ー ド , メ モ リ ア ク セ ス やALU(Arithmetic Logic Unit) による計算がプロセッ
サの内部でどのように実行されるか, 外部からの観測できないが挙げられる.
また集積回路の設計実習等で, プログラムを実行可能なプロセッサを実現し, かつその動作確認を行うカリキュラムを実施している例は限られている [5].
計算機の動作原理の理解と集積回路の設計教育の高度化をはかるには, 構造が単純でありながらプログラムを実際に実行できる, プロセッサの仕様やその設計例が公開されることが必要である. そこで, 教育用途に特化した† 関西学院大学, Kwansei Gakuin University‡ 奈良先端科学技術大学院大学, NAIST§ 京都高度技術研究所, ASTEM RI¶ 立命館大学, Ritsumeikan University

KUE-CHIP2 プロセッサは設計された.
2.2 KUE-CHIP2 の仕様と課題
KUECHIP-3F の前身となる KUE-CHIP2 プロセッサは, 機械語でのプログラミングに不慣れな学生向けに, 極めて単純なアーキテクチャと命令セットを採用した. また, 命令セットシミュレータのような 1 命令単位での実行/停止に加え, 命令実行の各クロックフェーズ毎に実行/停止を行い, 命令のフェッチ, デコード, 実行がどのように実行されるかを観測できる機能を搭載した. KUE-CHIP2プロセッサは 512 バイトのメモリを内蔵し, ASIC で実表 1 KUECHIP-3F の命令セット

ロード/ストア命令装を行った. この KUE-CHIP2 のプログラミング, 内部LDSTの動作の観測, 2 台のプロセッサ間で通信を行う等, 学生算術命令実験に特化した教育用ボードを開発し, 教育現場に提供を行っている. また PC 上で動作するアセンブラも提供されている.

KUE-CHIP2 を搭載した教育用ボードは, 40 大学以上でのべ 900 台が学生実験等に用いられている. この KUE-

CHIP2 プロセッサの仕様に対し, 教育現場から以下のような指摘を受けてきた.

• プログラム領域とデータ領域が 8bit (256 バイト) に限られる• サブルーチン・コールを実現できない• コンパイラが存在しない

3 KUECHIP-3F プロセッサについて前節の指摘に対応するため, 今回アーキテクチャと命令セットの両方を見直し,• KUE-CHIP2 の命令セットを元に 16bit 化• サブルーチンコールに必要な命令とレジスタを追加を行い, KUECHIP-3F プロセッサとして再設計することとなった.

3.1 KUECHIP-3F プロセッサの仕様
KUECHIP-3F では 16bit 化により, アクセス可能なプログラム領域がこれまでの 256 バイト から 65536 バイ
トに拡張された.
また, サブルーチンコールを扱えるようにするため, SP(Stack Pointer) レジスタを追加し, スタック操作命令および, 関数呼出し/復帰命令 (CAL/RET) を追加した.
KUECHIP-3F の命令セット表を表 1 に示す. 命令は46 種で, ロード命令, ストア命令, 算術命令, シフト命令,分岐命令, 制御命令, スタックポインタ操作に関連する命令からなる. 命令は固定長である. メモリアクセスのアドレス指定は 4 つのモードがあり, 即値アドレス, 直接アドレス, インデックスレジスタによる修飾アドレス, スタックポインタによる修飾アドレスの指定ができる.
KUECHIP-3F を用いて構成する計算機のブロックダイアグラムを図 1 に示す. 点線内が FPGA 内に実装されている部分である. 入力データバス (DBi), 出力データバス (DBo), アドレスバス (AB) の他に, 内部状態を観測するための観測バス (OB) がある. 観測バスを通じて
FPGA の外部から, 内部のレジスタやメモリの値を観察できる. 内部のレジスタやメモリの内容は, DBi バス経
由で直接書き換えることができる. 各バスのデータ幅は16bit である.
演算器は ALU が 1 個あり, 演算用レジスタはアキュ
ムレータ (ACC), インデックスレジスタ (IX), スタック

ADD
ADC
SUB
SBC
CMP
AND
OR
EOR

LoaD
STore
ADD
ADd with Carry
SUBtract
SuBtract with Carry
CoMPareAND
OR
Exclusive OR

シフト命令

SRA
SLA
SRL
SLL
RRA
RLA
RRL
RLL

Shift Right Arithmetically
Shift Left Arithmetically
Shift Right Logically
Shift Left Logically
Rotate Right Arithmetically
Rotate Left Arithmetically
Rotate Right Logically
Rotate Left Logically

分岐命令

BABVF
BNZ
BZ
BZP
BN
BP
BZN
BNI
BNO
BNC
BC
BGE
BLT
BGT
BLE

Branch Always
Branch on oVerFlow
Branch on Not Zero
Branch on Zero
Branch on Zero or Positive
Branch on Negative
Branch on Positive
Branch on Zero or Negative
Branch on No Input
Branch on No Output
Branch on No Carry
Branch on Carry
Branch on Greater than or Equal
Branch on Less Than
Branch on Greater Than
Branch on Less than or Equal

制御命令

HLT
NOP
IN
OUT
SCF
RCF

HaLT
No OPeration
INput
OUTputSet Carry Flag
Reset Carry Flag
新規追加命令 (SP 操作関連)
INC
INCrement
DEC DECrement
PSH
PuSH
POP POPCAL CALl
RET RETurn

IBUF
(8b)

PANEL
OB

DBi
IR
(8b)
sel

PC

IDC
Sel.

FLAG

SP

ACC

IX

PANEL

Cont

ALU
Syncro.

Clock
Gen.

MAR AB Mem
DBo

PANEL

CLOCK

OBUF
(8b)

図 1 KUECHIP-3F のブロックダイアグラム図

図 2 KUECHIP-3F シミュレータのクラス図

ポインタ (SP) がある. 制御系は, プログラムカウンタているかが理解できる. 各フェーズの動作の内最終的なレ(PC), 命令レジスタ (IR), 命令デコーダ (IDC) などがあジスタの値の変更は, そのフェーズが終了して次のフェーる. また, メモリアクセスの際のアドレスを保持するメモズに入る時点で行われる.

リアドレスレジスタ (MAR) がある. フラグは 4 種類あKUE-CHIP2 は ASIC を用いて実装していたが, 今回KUECHIP-3F では FPGA を用いて実装する. 65536
ワード × 16bit の内蔵メモリ (Mem) は FPGA のブロック RAM 機能を用いて実現した.
3.2 命令セットシミュレータの作成
3.1 節の仕様に沿った命令セットシミュレータを Processing で実装した.

り, 演算の結果により零フラグ (ZF), ネガティブフラグ(NF), 桁あふれフラグ (VF), 桁上げフラグ (CF) がそれぞれ設定される.
KUECHIP-3F の命令実行フェーズ表を表 2 に示す.
P0, P1 は命令取り出しフェーズであり, P2, P3, P4 が命令の実行フェーズである. KUECHIP-3F は, KUECHIP2 同様, 最大 5 フェーズで 1 命令を実行する. 通常の動作 (SS) モード, 1 命令ごとに動作を止めるシングル
インストラクション (SI) モード, 1 フェーズごとに止まるシングルフェーズ (SP) モードがある. シングルフェー
ズモードを利用して, 各フェーズでどのように回路が動いシミュレータは入力された状態データから命令実行後の状態をシミュレートし, 次の状態を返す. 実行単位は,ボードと同様にシングルフェーズモード, シングルインス
トラクションモード, 通常 (全実行) モードから選択でき,実行プログラムの検証/デバックが容易に行える.
本シミュレータのクラス図を図 2 に示す. KueSim表 2 KUECHIP-3F の各命令の実行フェーズ表
Phase

P0

P1

P2

P3

P4

Instruction
HLT
LDLD

HLT
SP → IX(PC) → MAR(PC+2) → PC
+2 →(SP) → ALU → SP
−2 →(SP) → ALU → SP(PC) → MAR(PC+2) → PC
(SP−2) → MAR(SP−2) → SP(SP) → MAR(SP+2) → SP(SP−2) → MAR(SP−2) → SP(SP) → MAR(SP+2) → SP
No Operation(ACC) → OBUF

IX, SP
SP, d

INC
DEC
ADD
SUB
PSH

SP, d
SP, d
ACC (IX)POP

ACC (IX)

CAL
RET
NOP
OUT
IN
(PC) → MAR(PC+2) → PC

Bcc
Ssm
Rsm
LD

ST

SBC
ADC
SUB
ADD
EOR
OR
AND
CMP

ACC
IX
d[d]
[IX+d][SP+d][d][IX+d][SP+d]ACC
IX(Mem) → IR(SP) →(Mem) → ALU → SP
(ACC(IX)) → Mem
Mem → ACC(IX)(PC+2) → Mem(PC) → MAR(Mem) → PC(Mem) → PC

0 → OBUF WE
0 → IBUF FLG CLR(IBUF) → ACC
0 → IBUF RE(PC) → MAR(PC+2) → PC
TCF SETSHIFT A(A) → BSTATUS CHECK(Mem) → PC (if condition)
NF, ZF, VF, CF Set(Mem) → A
(Mem) → MAR(IX(SP)) →(Mem) → ALU → MAR(Mem) → MAR(IX(SP)) →(Mem) → ALU → MAR(PC) → MAR(PC+2) → PC
(PC) → MAR(PC+2) → PC

(MEM) → A(A) → (Mem)(A)→(B)→ ALU → A[(CF)] →NF, ZF, VF [, CF] SET(A) →(B) → ALU → A[(CF)] →NF, ZF, VF [, CF] SET(Mem) → MAR

d[d](Mem) → SP(PC) → MAR(PC+2) → PC

(IX(SP)) →(Mem) → ALU → MAR[IX+d][SP+d](A)→(B)→ ALU → A[(CF)] →NF, ZF, VF [, CF] SET

はシミュレーション全体を管理するクラスであり, SP

Processing は, GUI ライブラリが充実しており, グラ(ExecStep), SI (ExecInstruction), SS (ExecAll) の実行を行う. プロセッサおよびメモリの状態は KueState クラスで管理する. 命令は, 共通のインターフェイスを持つクラスとして実装される. 命令のオブジェクトは, 内部状態として実行フェーズを持っており, KueState オブジェクトを渡すことにより, 次の状態を生成する. 命
令毎に 1 つのクラスを作成し, アドレッシングの違いは Mix-in や Strategy パターンで実装することが可能である. 命令のオブジェクトの生成には Factory クラス(InstructionFactory) を用いる. InstructionFactory は,1 命令分の機械語 (もしくはそれに等価なアセンブリ) を受け取り, 命令のオブジェクトを生成する. また, ALU の機能は独立したクラスとして実装することにより, フラグ処理と演算を扱いやすくする.

フィカルなシミュレーション結果表示を扱うことができる. また, 処理系に processing.js を利用することで, サー
バ上のシミュレータへ web 経由でアクセスすることが可能である.
実行プログラムを含むメモリデータおよびレジスタ値の入力インターフェイスは Javascript で作成した. ブラウザ
上で, メモリ, レジスタのデータを入力し, SP/SI/SS 等の実行ボタンを押すことにより, Javascript から Processingのシミュレータ側に渡され, シミュレーションが行われる.
シミューレート結果は Processing から Javascript 側へ返され, ブラウザ上に表示される. この表示は, HTML のフォーム, もしくは HTML5 の canvas 要素を用いて描画する processing.js の機能により実現される.

3.3 KUECHIP-3F プロセッサの RTL 記述の作成
KUECHIP-3F プロセッサは, KUE-CHIP2 [6] の記述を改良し作成した. RTL 記述は VHDL で作成した. 今回のアーキテクチャの変更の対応に加え, 命令の実行周期を外部からの指定に従い変化させる機能を内蔵した.
3.4 KUECHIP-3F の FPGA へのマッピングとその動作の確認

Xilinx 社の Artix-7 (xc7a100tcsg324-3) をターゲットに合成を行い, Nexys4-DDR ボードを用いて動作確認を行った. 論理合成には Vivado 2015.4 を使用した. 合成結果を表 3 に示す. LUT は LUT 数, FF はフリップフロッ
プ数, delay は回路の遅延である. () 内の数字は LUT,FF の利用率を示す. 動作確認には, 文献 [3] 内の例題を
KUECHIP-3F に対応する命令に移植した 9 題と, 関数呼び出しのテストのため新たに作成した例題 1 題を用いた.
作成したシミュレータと FPGA 上での動作が一致することを確認した.

択できる.
命令の実行方法は, 以下の 3 つの押しボタンスイッチにより選択できる.

• SP : 命令を 1 クロックフェーズ実行して停止する• SI : 1 命令を実行して停止する• SS : プログラムの実行を開始する. 実行中に押されると停止する
さらに外部機器との入出力実験を行うため, 以下のような通信ポートを備えている.

• 2 台の教育用ボード間で通信実験を行うためのセントロニクス規格準拠の 8bit パラレル入出力ポート(CN1 と CN2)
• PC 上でアセンブルした機械語命令列を転送するための RS232C シリアル通信ポート (CN3)
ボードを試作するにあたり, ブレッドボードやユニバーサ
ル基板上に手配線で回路を作成し, その動作を事前に確認

表 3 KUECHIP-3F の合成結果

LUT
1,989 (3.14%)

FF
157 (0.12%)

してからプリント基板の試作を行った.

delay [ns]6.597

4 教育現場への適用
現在の一般的なコンピュータの動作を詳細に理解する

3.5 KUECHIP-3F を搭載した教育用ボード
学生実験等で KUECHIP-3F プロセッサをプログラミングし, その内部の命令の解釈実行を観測することができる専用の教育用ボードを試作した. 本教育用ボードの概観を図 3 に示す. KUECHIP-3F プロセッサは, 本ボード上の Digilent Cmod A7 FPGA モジュールに実装される.

JP1

JP2

CN1

DC 5Vしている.

5 おわりにMODE

CN4成し, 命令セットの定義の正しさを確認した上で RTL 記
述の作成を行った. FPGA で実装を行い, シミュレータとPWR

KUECHIP-3F Board
OP P0Key 0123
Adr: 89AB Mem: CDEF
CF:1 VF:0 NF:1 ZF:1

実行結果が一致することを確認した. 現在, 試作した教育SPSISSCDE

FADR89AB

INC

4567DEC0123SETHEXARSTCLKを, KUECHIP-3F 教育用ボードを用いて行うことを計画開発について報告した. 開発に先駆け, シミュレータを作
Digilent
Cmod A7ASSEMBLER

前期に 2 コマ× 7 週間で “機械語プログラミングを実体験する”, “命令の実行過程をつぶさに観察する” 学生実験

本稿では, 教育用 16bit プロセッサ KUECHIP-3F のCN3CN2ことを目標に, 立命館大学情報理工学部では学部 2 回生のSEL 54321用ボードを用いて教材としての評価を進めている.
謝辞0図 3 KUECHIP-3F 教育用ボード

教育用ボードは 20 文字の英数字を 4 行表示する蛍光表示管デバイスを搭載している. この表示管には• メモリのアドレスとその値 (命令/データ)• KUECHIP-3F プロセッサ内部のレジスタの値• 16 進キーボードで入力した 16bit の値• 現在の実行状態とクロックフェーズが表示される. 値の表示は 16 進数に加え, KUECHIP-3Fのアセンブリ記述に逆アセンブルして表示することも選

命令セットとアーキテクチャの改良に際し, ご助言を頂きました立命館大学情報理工学部の越智裕之教授に感謝します. 本稿の開発を行なうにあたり, 有益なアドバイスを頂いた元立命館大学の中谷嵩之氏, 元京都大学の矢野正治氏, 元関西学院大学の田村真平氏に感謝致します.

参考文献[1] 越智裕之, 澤田宏, 岡田和久, 上嶋明, 神原弘之, 濱口清治,
安浦寛人: “計算機工学・集積回路工学教育用 マイクロプロ
セッサ KUE-CHIP2,” 情報処理学会研究報告, 1992-ARC96-13 (1992).
[2] 神原弘之, 越智裕之, 澤田宏, 濱口清治, 岡田和久, 上嶋明, 安浦寛人: “KUE-CHIP2 設計ドキュメント,” 京都高度技術研究所 (1992).
[3] 神原弘之, 越智裕之, 澤田宏, 濱口清治, 岡田和久, 上嶋明, 安浦寛人: “KUE-CHIP2 教育用ボードリファレンスマニュア
ル,” 京都高度技術研究所 (1992).

[4] 川端英之, 弘中哲夫, 寺内衛: “情報工学基礎実験,” 大学教育
出版 (Arp. 2005).
[5] POCO/PICO Home Page, http://www.am.ics.keio.
ac.jp/pico/ (accessed 2017-07-29).
[6] 神 原 弘 之, 安 浦 寛 人, Pankaj Kukkal, Hideaki
KOBAYASHI, 野地保, 小栗清: “ハードウェア記述言語の比較,” 情報処理学会誌, Vol. 33 No. 11 (1992).