KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者...

80
KUECHIP-3F CPU 制御/観測 リファレンスマニュアル 著者 東 香実 (関西学院大学大学院) 大迫 裕樹 (関西学院大学大学院) 柴田 敦也 (奈良先端科学技術大学院大学) 中野 和香子 (関西学院大学大学院) 神原 弘之 (京都高度技術研究所) 2019 4 28 Ver.0.983

Transcript of KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者...

Page 1: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

KUECHIP-3F CPU

制御/観測 リファレンスマニュアル

著者東 香実 (関西学院大学大学院)

大迫 裕樹 (関西学院大学大学院)

柴田 敦也 (奈良先端科学技術大学院大学)

中野 和香子 (関西学院大学大学院)

神原 弘之 (京都高度技術研究所)

2019年 4 月 28 日Ver.0.983

Page 2: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)
Page 3: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

3

目次

第 1章 KUECHIP-3F CPU の概要 5

第 2章 KR-CHIP 教育用ボードの仕様 7

2.1 KR-CHIP 教育用ボードのディスプレイ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.2 KR-CHIP 教育用ボードのスイッチ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.3 KR-CHIP 教育用ボードのコネクタ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.4 KR-CHIP 教育用ボードの LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

第 3章 プログラムの入力と実行 19

3.1 KR-CHIP 教育用ボードの操作手順 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.2 命令シミュレータの使用方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

第 4章 サンプルプログラム 33

4.1 1 から N までの和 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

4.2 多倍長の加算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

4.3 ユークリッドの互除法による最大公約数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

4.4 バブルソートによる整列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

4.5 CRC の計算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

4.6 符号無し 1 バイトの乗算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.7 符号無し 16 バイトの乗算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

4.8 符号無し 2 バイトの除算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

4.9 マーチングによるメモリテスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

4.10 サブルーチンコールを用いた階乗計算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

第 5章 KUECHIP-3F CPU の命令セット 51

5.1 アセンブラ文法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

5.2 命令セット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

5.3 Shift / Rotate 命令の機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

5.4 LoaD / STore 命令の機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

5.5 スタックに関連する機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

5.6 フラグ機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

5.7 命令コード早見表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

5.8 命令実行フェーズ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

Page 4: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

4 目次

5.9 ブロック図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

第 6章 KUECHIP-3F CPU によるボード間通信 67

6.1 KUECHIP-3F CPU 間での通信 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

第 7章 演習課題 69

第 8章 アセンブラの使い方 71

8.1 アセンブラの使い方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

8.2 入力ファイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

8.3 アセンブリの実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

8.4 注意点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

第 9章 PC と KUECHIP-3F CPU 間の通信 73

9.1 接続方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

9.2 通信コマンド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

第 10章 本マニュアルの変更履歴 79

10.1 Ver.0.98 (2019年 4月 9日) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

第 11章 演習問題の回答例 81

Page 5: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

5

第 1章

KUECHIP-3F CPU の概要

KUECHIP-3F は、8ビット CPUの KUE-CHIP2 を「命令/データバス幅を 16ビットに拡張」し「SP (Stack

Pointer)レジスタを追加」した CPU である。

Page 6: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)
Page 7: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

7

第 2章

KR-CHIP 教育用ボードの仕様

KR-CHIP 教育用ボードは, 以下の 3種類の CPU の実行制御と内部動作の観測を行うために開発された.

• KUECHIP-3F (16bit アキュムレータ方式)

• KUE-CHIP2 (8bit アキュムレータ方式)

• RUECHIP (32bit 5段パイプライン方式)

本リファレンスマニュアルでは, KUECHIP-3F CPU (16bit アキュムレータ方式) の実行制御/観測の方法を解説する.

CLK FRQ

SP SI SS

C D E F ADR

8 9 A B INC

4 5 6 7 DEC

0 1 2 3 SET

CN4CN1JP1 CN2JP2

CN5

PC

HALT P0---- KEY:0000@0000 NOPMAR :1234 MEM :CDEFFLAG:---- kue3

ARTIX-735TLD2LD1

LD0

BTN1

BTN0

SW_SELECT

F 7 6 5 4 3 2 1 0

OBUFMODE

ASSEMBLER

HEXA

DIPSW

CONNECTOR

IBUF IBUF

F 7 6 5 4 3 2 1 0

RESET

PMO

D_3 PMO

D_4

PMO

D_1

P

MO

D_2

SMAJ1 SMAJ2 SMAJ3JMP1

SELECT

OFF

POWER

ON

5 4 3 2 1 0

図 2.1 KR-CHIP 教育用ボード

図 2.1に KR-CHIP 教育用ボードの外観を示す.

Page 8: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

8 第 2章 KR-CHIP 教育用ボードの仕様

2.1 KR-CHIP 教育用ボードのディスプレイ本章では, 蛍光表示管: VFD の機能について説明する.

ボードの起動時は, 図 2.2 のような画面が 1 秒間表示される.

KR-CHIPver. 20181027

wait configuration

図 2.2 ボード起動時の画面例

数秒後に, 図 2.3 のような画面が表示される. 一行目は, 左から実行状態 (実行中: RUN, 停止中: HALT), 現在のフェーズ (P0~P4), 16 進キーボードにより入力された値 (初期値は 0000) を出力する. 二行目は, PC の値とIR に格納されている命令 (初期値は @0000 NOP) を出力する. 三行目は, SW SEL にて指定した KUECHIP-3F

CPU 内部のレジスタの値を出力する. (観測可能なレジスタについては 2.2.14 節を参照) 四行目は, 各種フラグの状態を表し, 1 であれば各種アルファベット (C, V, N, Z) を出力する. (左から順に Carry Flag, oVerflow Flag,

Negative Flag, Zero Flag)

HALT P0---- KEY:0000@0000 NOPMAR :1234 MEM: CDEFFLAG:--N- kue3

図 2.3 起動完了後に表示される画面

図 2.4 の画面が出力されているときは, キーボードからの入力を受け付けない状態である. KUECHIP-3F CPU

を搭載する FPGA ボード: Cmod A7 上の LED LD0 が青色に点灯している場合 (LED の詳細については 2.4 節を参照) に下記の画面が出力された場合には電源を付け直す必要がある. LD0 が緑色または赤色に点灯している場合には PC との接続モードとなる. 詳細は 9 章に記載する.

NO RESPONSE FRM FPGA

PLEASE RESTART

図 2.4 PC との接続モード

Page 9: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

2.2 KR-CHIP 教育用ボードのスイッチ 9

2.2 KR-CHIP 教育用ボードのスイッチ本章では, 以下に示すスイッチの機能について説明する. 点線で表示されているトグルスイッチは, KUECHIP-

3F CPU の制御/観測では使用しない (※オン/オフを切り替えても観測や制御に影響しない).

CLK FRQ

OFF

SP SI SS

C D E F ADR

8 9 A B INC

4 5 6 7 DEC

0 1 2 3 SET

PC

POWER

ON

SW_SELECT

MODE

ASSEMBLER

HEXA

DIPSW

CONNECTOR

IBUF

RESETSELECT

5 4 3 2 1 0

IBUF

図 2.5 KR-CHIP 教育用ボードのスイッチ

2.2.1 電源スイッチ:POWER

OFF

POWER

ON

KR-CHIP 教育用ボードの電源のオン/オフを行う. 奥側に倒すと電源がオンになり, 蛍光表示管: VFD が点灯する. VFD は, 電源スイッチをオフにしても電源コードを抜くまでは画面はそのまま表示され続ける.

2.2.2 リセットボタン: RESET

RESET

KUECHIP-3F CPU 内部のすべてのレジスタ, カウンタ, フラグ, その他のフリップフロップの値を 0 にリセットする. IBUF, OBUF のデータとフラグを 0 にリセットする. メモリの内容はそのまま保持される.

Page 10: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

10 第 2章 KR-CHIP 教育用ボードの仕様

2.2.3 IBUF 切替えスイッチ: SW IBUF

DIPSW

CONNECTOR

IBUF

IN 命令利用時の入力元を切り替える. CONNECTOR 側 (奥側) に倒すと IBUF 入力コネクタ CN2 からの入力, DIPSW 側 (手前側) に倒すと DIP スイッチ IBUF からの入力となる.

2.2.4 DIPスイッチ : SW DIP

IBUF

IBUF 切替えスイッチが DIPSW を選択しているとき, 入力ポート IBUF のデータをセットする. F は IBUF

のフラグをセットする. 7 が最上位ビット (MSB) であり, 0 が最下位ビット (LSB) ビットである.

注: DIP スイッチは 10 ビットの部品が用いられており, 一番左端のビットは利用しない.

2.2.5 16進数入力キーボード

C D E F

8 9 A B

4 5 6 7

0 1 2 3

メモリの編集を行う際, 16 bit の値を入力する. 16 bit の値の入力には 4 回のプッシュが必要で, プッシュする度に下位から上位に入力された値が左シフトする. 入力された内容は蛍光表示管: VFD の KEY の右側に表示される.

2.2.6 メモリ/レジスタ編集ボタン:SET

SET

メモリ領域の値を 16進数キーボードで入力した値に書換える. また観測レジスタ切替えスイッチ:SELECT [3

~0]で指定した観測対象のレジスタ (蛍光表示管: VFD の上から 3行目の MEM の左側) の値が書き換えられる.

Page 11: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

2.2 KR-CHIP 教育用ボードのスイッチ 11

2.2.7 メモリアドレス・デクリメントボタン:DEC

DEC

メモリ領域を編集する際, アドレスの値を 2 つデクリメントする. MAR の値が書き換わる.

2.2.8 メモリアドレス・インクリメントボタン:INC

INC

メモリ領域を編集する際, アドレスの値を 2 つインクリメントする. MAR の値が書き換わる.

2.2.9 メモリアドレス書換えボタン:ADR

ADR

メモリのアドレスを 16進数キーボードで入力した値に変更する.

2.2.10 プログラム実行/停止ボタン:SS

SS

KUECHIP-3F CPU がプログラムの実行が停止している「HALT」状態で「SS」ボタンを押すと, プログラムの解釈実行が開始され, プログラムが連続して実行される「RUN」状態になる. 「RUN」状態で「SS」ボタンを押すと, 「HALT」状態に移行しプログラムの実行を停止する.

2.2.11 1命令実行ボタン:SI

Si

KUECHIP-3F CPU により 1 命令だけ解釈実行が行われ, HALT 状態に戻る.

2.2.12 1フェーズ実行ボタン:SP

SP

Page 12: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

12 第 2章 KR-CHIP 教育用ボードの仕様

KUECHIP-3F CPU により 1 クロックフェーズだけ解釈実行が行われる. クロックフェーズ P0 で HALT 状態のときに SP をプッシュすると, PC の値が 2 つインクリメント, P0 時の PC の値が MAR に格納され, HALT

状態に戻る. P1 のときに SP をプッシュすると, IR に MAR で指定されたアドレスの命令が転送される. P2 以降は各命令毎に処理が行われる. このように, 状態が遷移するときにレジスタ転送が行われる.

2.2.13 プログラムカウンタ書換えボタン:PC

PC

KUECHIP-3F CPU の PC(プログラムカウンタ)の値を 16 進数キーボードで入力した値に書き換える. 蛍光表示管: VFD の @ の右側に表示されるプログラムカウンタの中身が書き換えられる. PC はプログラムの開始アドレスを指定する場合に利用する.

2.2.14 観測レジスタ切替スイッチ:SELECT (6bit)

SELECT

5 4 3 2 1 0

観測を行う KUECHIP-3F CPU 内部のレジスタ (あるいはメモリ) を指定する. スイッチの値と観測対象の関係を表 2.1 に示す. ◎のついたレジスタは, Set ボタンを押すことで, 16進キーボードで指定した値で書換えることができる. IR を観測するときは, IR の値とその値が格納されていたアドレス (EXPC) の値を蛍光表示管に表示する. 表 2.1 の SELECT は, スイッチ SELECT 3 ~ 0 を表している. SELECT 4 を変更しても観測される対象は変化しない. KUECHIP-3F CPU の動作の制御/観測を行うときには, SELECT 5 は 0(下側)に設定しておく.

表 2.1 観測可能なレジスタの指定

SELECT [3~0] 観測対象 SELECT [3~0] 観測対象

0000 メモリ領域 1000 ◎ MAR (Memory Address Register)

0001 未定義 1001 ◎ IR (Instruction Register)

0010 ◎ PC (Program Counter) 1010 ◎ SP (Stack Pointer)

0011 ◎ FLAG (CF,VF,NF,ZF) 1011 未定義0100 ◎ ACC 1100 未定義0101 ◎ IX 1101 未定義0110 DBi 1110 未定義0111 DBo 1111 未定義

表 2.2 は 16 進キーボードの値とセットされるフラグの一覧表である. FLAG 入力時は, 各フラグを 1 bit ずつ割り当てている. つまり, NF のみをセットするときには, 16 進キーボードで “2” を入力, すべてのフラグをセットするときには, 16 進キーボードで “F” を入力する必要がある.

フラグが変更するタイミングは 5.8 節の命令実行フェーズに従っている.

Page 13: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

2.2 KR-CHIP 教育用ボードのスイッチ 13

表 2.2 FLAG セット一覧表

入力値 対応するフラグ 入力値 対応するフラグ

0 – – – – 8 CF – – –

1 – – – ZF 9 CF – – ZF

2 – – NF – A CF – NF –

3 – – NF ZF B CF – NF ZF

4 – VF – – C CF VF – –

5 – VF – ZF D CF VF – ZF

6 – VF NF – E CF VF NF –

7 – VF NF ZF F CF VF NF ZF

CF: Carry Flag/VF: oVerflow Flag/NF: Negative Flag/ZF: Zero Flag

2.2.15 動作クロック周波数切替スイッチ:CLK FRQ

CLK FRQ

KUECHIP-3F CPU の動作クロック周波数を切替えを行う. CLKFRQ の目盛りと動作周波数の関係を表 2.3

に示す.

CLKFRQ 動作クロック CLKFRQ 動作クロック CLKFRQ 動作クロック CLKFRQ 動作クロック

0 1 MHz 1 333 kHz 2 100 kHz 3 33 kHz

4 10 kHz 5 3 kHz 6 1 kHz 7 333 Hz

8 100 Hz 9 33 Hz 10 10 Hz 11 3.3 Hz

12 1 Hz 13 0.33 Hz 14 0.10 Hz 15 0.033 Hz

表 2.3 動作クロック周波数の設定 

2.2.16 制御/観測 CPU の選択:SW SELECT (スライド SW)

KUE-CHIP2, KUECHIP-3F, RUECHIP のどの CPU を制御/観測するかを切り替えるためのスイッチである. KUECHIP-3F CPU の動作を制御/観測するときには, 左側に設定する. 右側に設定すると, RUECHIP が制御/観測の対象になる. 本スイッチの設定を変更した時は POWER スイッチで電源をオン/オフし, KR-CHIP

教育用ボードを再起動する必要がある.

SW_SELECT

Page 14: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

14 第 2章 KR-CHIP 教育用ボードの仕様

2.2.17 表示切替スイッチ:SW DISP

HEXA

ASSEMBLER

KUECHIP-3F CPU が制御/観測対象の時, 蛍光表示菅:VFD の表示は変化しない.

2.2.18 R8C29 マイコンのファームウェア書換え:MODE (スライド SW)

KUECHIP-3F CPU を制御/観測するとき, MODE スイッチを左側に設定する. KR-CHIP 教育用ボード上のR8C29 マイコン (U04) のプログラムを書換える時だけ, 右側にする.

MODE

MODE

Page 15: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

2.3 KR-CHIP 教育用ボードのコネクタ 15

2.3 KR-CHIP 教育用ボードのコネクタ以下では, KR-CHIP 教育用ボードのコネクタの機能について説明する.

CN4CN1JP1 CN2JP2

CN5

PMO

D_3 PMO

D_4

PMO

D_1

P

MO

D_2

SMAJ1 SMAJ2 SMAJ3JMP1

図 2.6 KR-CHIP 教育用ボードのコネクタ

2.3.1 電源コネクタ:J1

J1

電圧 5.0V, 電流容量 1.8Aの直流安定化電源に接続する. 極性はセンター+ (プラス) で, センター (ピン) の直径は 2.1mmである.

2.3.2 OBUF 出力コネクタ:JP1と CN1

CN1JP1

OBUF (出力バッファ) 命令を用いて外部へ 8ビットの値を出力する. 別の KR-CHIP 教育用ボードと通信を行う際には, 本ボードの CN1 (OBUF出力) と別ボードの CN2(IBUF入力) を 15 ピンの全線結線型 VGA ケーブルで接続する.

2.3.3 IBUF 入力コネクタ:JP2と CN2

CN2JP2

Page 16: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

16 第 2章 KR-CHIP 教育用ボードの仕様

IBUF (入力バッファ) 命令を用いて外部からの 8 ビットの値を入力する. 別の KR-CHIP 教育用ボードと通信を行う際には, 本ボードの CN2 (IBUF入力) と別ボードの CN1(OBUF入力) を 15 ピンの全線結線型 VGA

ケーブルで接続する.

2.3.4 RS232Cコネクタ:CN4

CN4

PC とのシリアル通信により、KUECHIP-3F CPU のプログラムの書き込み/命令実行の制御/ CPU の内部観測を行うときに利用する. 通信の方法は 9 章で説明する.

2.3.5 RS232Cコネクタ:CN5

CN5

KR-CHIP 教育用ボード上の R8C29マイコンの制御プログラムを書き換える際に, RS232Cケーブル (クロス)

で Windows PC と接続する.

Page 17: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

2.4 KR-CHIP 教育用ボードの LED 17

2.4 KR-CHIP 教育用ボードの LED

以下では, KR-CHIP 教育用ボード上の LED (発行ダイオード)について説明する.

ARTIX-735TLD2LD1

LD0

BTN1

BTN0

F 7 6 5 4 3 2 1 0

OBUF IBUF

F 7 6 5 4 3 2 1 0

2.4.1 IBUF 用 LED

IBUF

F 7 6 5 4 3 2 1 0

外部からの入力, もしくは SW DIP により入力された IBUF の値を点灯する. F は IBUF のフラグであり, 7

が最上位ビット (MSB), 0 が最下位ビット (LSB) である.

2.4.2 OBUF 用 LED

F 7 6 5 4 3 2 1 0

OBUF

OBUF の値を点灯する. F は OBUF のフラグであり, 7 が最上位ビット (MSB), 0 が最下位ビット (LSB) である.

Page 18: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

18 第 2章 KR-CHIP 教育用ボードの仕様

2.4.3 Cmod A7 上の LED

LD0 が青色に点灯しているときは通常の実行モードとなり, 緑または赤色に点灯しているときは PC との接続モードとなる.

ARTIX-735T

LD2 LD1

LD0

BTN1

BTN0 ARTIX-735T

LD2 LD1

LD0

BTN1

BTN0ARTIX-735T

LD2 LD1

LD0

BTN1

BTN0

LD1 と LD2 はクロック周波数に同期して交互に点滅する.

ARTIX-735TLD2 LD1

LD0

BTN1

BTN0 ARTIX-735TLD2 LD1

LD0

BTN1

BTN0

Page 19: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

19

第 3章

プログラムの入力と実行

この章では KUECHIP-3F CPU の制御/観測およびシミュレータを円滑に扱えるよう, あるプログラムを入力し実行に至るまでの操作方法を, 非常に小さなプログラムを例にとり具体的に示す.

下に示すプログラムは KUECHIP-3F が, ACC × IX → ACC を計算し, メモリにストアする非常に簡単なプログラムである.

ADDRS DATA OPECODE

0000:

0002:

0004:

0008:

000C:

0010:

0014:

0018:

00C0

00C9

00BA 0010

00B2 0003

00AA 0001

0031 0008

0074 0020

000F

# EOR ACC, ACC

# EOR IX, IX

# ADD IX, 10H

# ADD ACC, 03H

# SUB IX, 1

# BNZ 08H

# ST ACC, [20H]

# HLT

3.1 KR-CHIP 教育用ボードの操作手順3.1.1 例題の入力

前節で挙げた例題プログラムの入力方法を具体的に述べる.

1. 下表のように各スイッチを設定する. 表に無いスイッチは動かさなくて良い.

表 3.1 各スイッチとその設定

スイッチ 状態POWER OFF

SW CLK 0

MODE 左側SW SELECT 左側SELECT[5] 0(下側)

Page 20: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

20 第 3章 プログラムの入力と実行

2. 5V AC アダプタをボードの左上端の J1 に接続する.

J1

3. POWER スイッチをオンにする.

OFF

POWER

ON

4. SELECT の [3~0] を 0000 にする.

SELECT

5 4 3 2 1 0

5. ディスプレイの上から 3行目左のMARの値が 0であることを確認する.

6. 16進数キーボードの C と 0 を順に押す.

7. SET を押す.

SET

8. MEM の値が C0 に変化する (0000H 番地に 00C0H が書き込まれた).

9. INC を押す.

INC

10. 16進数キーボードの C と 9 を順に押す.

11. SET を押す.

SET

12. MEM の値が C9 に変化する (0002H 番地に 00C9H が書き込まれた).

13. INC を押す.

INC

14. 16進数キーボードの B と A を順に押す.

15. SET を押す.

SET

Page 21: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

3.1 KR-CHIP 教育用ボードの操作手順 21

16. MEM の値が BA に変化する (0004H 番地に 00BAH が書き込まれた).

17. INC を押す.

INC

18. 16進数キーボードの 1 と 0 を順に押す.

19. SET を押す.

SET

20. MEM の値が 10 に変化する (0006H 番地に 0010H が書き込まれた).

21. INC を押す.

INC

22. 16進数キーボードの B と 2 を順に押す.

23. SET を押す.

SET

24. MEM の値が B2 に変化する (0008H 番地に 00B2H が書き込まれた).

25. INC を押す.

INC

26. 16進数キーボードの 3 を押す.

27. SET を押す.

SET

28. MEM の値が 3 に変化する (000AH 番地に 0003H が書き込まれた).

29. INC を押す.

INC

30. 16進数キーボードの A と A を順に押す.

31. SET を押す.

SET

Page 22: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

22 第 3章 プログラムの入力と実行

32. MEM の値が AA に変化する (000CH 番地に 00AAH が書き込まれた).

33. INC を押す.

INC

34. 16進数キーボードの 1 を押す.

35. SET を押す.

SET

36. MEM の値が 1 に変化する (000EH 番地に 0001H が書き込まれた).

37. INC を押す.

INC

38. 16進数キーボードの 3 と 1 を順に押す.

39. SET を押す.

SET

40. MEM の値が 31 に変化する (0010H 番地に 0031H が書き込まれた).

41. INC を押す.

INC

42. 16進数キーボードの 8 を押す.

43. SET を押す.

SET

44. MEM の値が 8 に変化する (0012H 番地に 0008H が書き込まれた).

45. INC を押す.

INC

46. 16進数キーボードの 7 と 4 を順に押す.

47. SET を押す.

SET

Page 23: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

3.1 KR-CHIP 教育用ボードの操作手順 23

48. MEM の値が 74 に変化する (0014H 番地に 0074H が書き込まれた).

49. INC を押す.

INC

50. 16進数キーボードの 2 と 0 を順に押す.

51. SET を押す.

SET

52. MEM の値が 20 に変化する (0016H 番地に 0020H が書き込まれた).

53. INC を押す.

INC

54. 16進数キーボードの F を押す.

55. SET を押す.

SET

56. MEM の値が F に変化する (0018H 番地に 000FH が書き込まれた).

57. DEC を 12 回押して, MEM の値が F → 20 → 74 → 8 → 31 → 1 → AA → 3 → B2 → 10 → BA → C9 →C0 と順に変化することを確認する.

DEC

3.1.2 例題の実行

1. RESETボタンを押す.

RESET

2. SELECT の [3~0] を 0100 にする.

SELECT

5 4 3 2 1 0

3. 16進キーボードの 5を押す.

Page 24: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

24 第 3章 プログラムの入力と実行

4. SETボタンを押す.

SET

5. ディスプレイの上から 3行目右の ACCの値が 5となっていることを確認する.

6. SELECT の [3~0] を 0101 にする.

SELECT

5 4 3 2 1 0

7. 16進キーボードの 7を押す.

8. SETボタンを押す.

SET

9. ディスプレイの上から 3行目右の IXの値が 7となっていることを確認する.

10. SELECT の [3~0] を 0010 にする.

SELECT

5 4 3 2 1 0

11. ディスプレイの上から 3行目右の PCの値が 0となっていることを確認する.

12. SPボタンを押す.

SP

13. ディスプレイの上から 1行目中央のフェイズ表記が 0から 1に切り替わる.これに伴い命令の P0フェーズの「(PC+2)→ PC)」が実行され、PCの値が 2に変更される.

14. SELECT の [3~0] を 1001にする.

SELECT

5 4 3 2 1 0

15. ディスプレイの上から 3行目右の IRの値が 0となっていることを確認する.

16. SPボタンを押す.

SP

17. ディスプレイの上から 1行目中央のフェイズ表記が 1から 2に切り替わる.これに伴い命令の P1フェーズ

Page 25: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

3.1 KR-CHIP 教育用ボードの操作手順 25

の「(Mem)→ IR」が実行され、IRの値が C0に変更される.

18. SPボタンを押す.

SP

19. ディスプレイの上から 1行目中央のフェイズ表記が 2から 0に切り替わる (命令の P2フェイズのみが実行された). EOR命令の実行が終了し, ディスプレイの上から 4行目左の FLAGに Zと表示される (ACC同士の EOR演算結果がゼロとなるため).

20. SELECT の [3~0] を 0100にする.

SELECT

5 4 3 2 1 0

21. ディスプレイの上から 3行目右の ACCの値が 0となっていることを確認する.

22. SIボタンを押す.

Si

23. SELECT の [3~0] を 0101 にする.

SELECT

5 4 3 2 1 0

24. EOR IX IX 命令が実行された結果, ディスプレイの上から 3行目右の IXの値が 0となっていることを確認する.

25. SIボタンを押す.

Si

26. ADD IX 10H 命令が実行された結果, ディスプレイの上から 3行目右の IXの値が 10となっていることを確認する.

27. SIボタンを押す.

Si

Page 26: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

26 第 3章 プログラムの入力と実行

28. SELECT の [3~0]を 0100 にする.

SELECT

5 4 3 2 1 0

29. ADD ACC 03H 命令が実行された結果, ディスプレイの上から 3行目右の ACCの値が 03となっていることを確認する.

30. SW CLK を 10 にする.

CLK FRQ

31. SSボタンを押す.

SS

32. フェイズがゆっくり切り替わり, プログラムの実行が始まる.

33. フェイズ表示の切り替わりが停止するまで 60秒程度待機する.

34. P2のフェイズで停止する (プログラムの実行が停止した).

Page 27: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

3.2 命令シミュレータの使用方法 27

3.2 命令シミュレータの使用方法 本節では, 命令シミュレータの使用方法について述べる. 本シミュレータは Firefox での実行を推奨する.

3.2.1 例題の入力

前節で挙げた例題プログラムの入力方法を具体的に述べる.

1. [inst] の下のテキストボックスに例題を入力する. (図 3.1)

図 3.1 例題を入力した図

2. [setmemory] ボタンを押し, [memory] の下のテキストボックスにメモリがセットされたことを確認する.

(図 3.2)

図 3.2 例題をメモリにセットした図

Page 28: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

28 第 3章 プログラムの入力と実行

3.2.2 例題の実行

前節で入力した例題プログラムで 3 × 10 = 30 を計算してみる. KUECHIP-3F シミュレータでは, 1 フェイズ実行, 1 命令実行, 全命令実行の 3 種の実行モードがある.

1 フェイズ実行モード1 フェイズ実行モードでは, 命令フェイズを 1 つずつ実行する実行モードである. 本シミュレータでは [1 phase

] ボタンを押すことで実行する.

1. [1 phase] ボタンを押す. (図 3.3) このとき, 本シミュレータは 00C0 (EOR ACC, ACC) 命令の P0 (フェイズ 0) を実行した結果を出力する. Phase は実行し終えたフェイズを出力するため 0, MAR が 0x0000,

PC が 0x0002 となる.

図 3.3 [1 phase] ボタンを押した図

2. もう一度 [1 phase] ボタンを押す. (図 3.4) このとき, 本シミュレータは 00C0 (EOR ACC, ACC) 命令の P1 を実行した結果を出力するため, Phase に 1, IR にメモリの MAR 番地 (0x0000) を格納した結果(0x00c0) を出力する.

図 3.4 [1 phase] ボタンを二度押した図

3. 実行を繰り返し, 00AA (SUB IX, 1) 命令を終え IX = 0 になったとき, Phase が 3, ZF (ゼロフラグ) が 1

Page 29: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

3.2 命令シミュレータの使用方法 29

(True) と出力される. (図 3.5)

図 3.5 IX = 0 となったときの図

4. さらに実行を繰り返し, 0074 (ST ACC, [20H]) 命令を終えた時, メモリの 0x0020 番地に ACC の値がストアされる. (図 3.6)

図 3.6 データがメモリにストアされた図

5. さらに実行を繰り返し, 000F (HLT) 命令を実行したときシミュレーションを終了する.

Page 30: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

30 第 3章 プログラムの入力と実行

1 命令実行モード1 命令実行モードでは, 1 命令ごとに実行する実行モードである. 本シュミレータでは [1 inst] ボタンを押すこと

で実行する.

1. [1 inst] ボタンを押す. (図 3.7) このとき, 00C0 (EOR ACC, ACC) 命令を実行した結果を出力するため,

Phase, PC, IR, ACC, MAR, ZF の値がそれぞれ更新される.

図 3.7 [1 inst] ボタンを一回押した図

2. もう一度 [1 inst] ボタンを押す. (図 3.8) このとき, 00C9 (EOR IX, IX) 命令を実行した結果を出力するため, Phase, PC, IR, IX, MAR, ZF の値がそれぞれ更新される.

3. 実行を繰り返し, 000F (HLT) 命令を実行し終えたときシミュレーションを終了する.

Page 31: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

3.2 命令シミュレータの使用方法 31

図 3.8 [1 inst] ボタンを二回押した図

Page 32: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

32 第 3章 プログラムの入力と実行

全命令実行モード全命令実行モードでは, すべての命令を一度に実行するモードである. 本シュミレータでは [all] ボタンを押すこ

とで実行する.

1. [all] ボタンを押すと, すべての命令を実行し終えた結果を出力する. (図 3.9)

このとき, 極端に大きなプログラムや無限ループを持つプログラムを全命令実行モードで実行するとシミュレータが停止するおそれがある.

図 3.9 [all] ボタンを押した図

ここでは, 非常に簡単なプログラムで操作法を例示した. より複雑なプログラムを動かすのも同様の手順である.

Page 33: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

33

第 4章

サンプルプログラム

この章では, KUECHIP-3F のサンプルプログラムを示す. 各プログラムには, 簡単な説明と入出力の例をつけておいた.

4.1 1 から N までの和説明1 から N (80H 番地) までの和を求め, SUM (82H 番地) に格納する. なお, 和は符号無し 1 バイトの範囲で

ある.

入出力例入力 0080: 000A (1 から 10 までの和を求める)

出力 0082: 0037 (結果: 55)

Page 34: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

34 第 4章 サンプルプログラム

コードKUECHIP-3F シミュレータの上部に 4.1 を入力し, [set sample] ボタンを押すとコードが入力される. (図 4.1)

図 4.1 [set sample] ボタンを押してコードをセットした図

アセンブラによって生成された下記コードを直接入力することも可能である.

# N: EQU 80H

# SUM: EQU 82H

# LOC 80H

0080: 000A # DAT AH

0000: 006C 0080 # LD IX, [N]

0004: 0062 0000 # LD ACC, 0

0008: 00B1 # LOOP: ADD ACC, IX

000A: 00AA 0001 # SUB IX, 1

000E: 0033 0008 # BP LOOP

0012: 0074 0082 # ST ACC, [SUM]

0016: 000F # HLT

Page 35: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

4.2 多倍長の加算 35

4.2 多倍長の加算説明インデックス修飾と, キャリーフラグを使用することによって, DATA1 (80H 番地) と DATA2 (90H 番地) か

らの, N (C0H 番地) バイトの 2 つの数を小さい番地側を MSB として加算し, ANS (A0H 番地) に格納する.

入出力例入力 0080: 0000 0001 (データ 1)

0090: 1FFF FFFF (データ 2)

00C0: 0004 (語長)

出力 00A0: 2000 0000 (結果)

コード# N: EQU C0H

# DATA1: EQU 80H

# DATA2: EQU 90H

# ANS: EQU A0H

# LOC 80H

0080: 0000 # DAT 0H

0082: 0001 # DAT 1H

# LOC 90H

0090: 1FFF # DAT 1FFFH

0092: FFFF # DAT FFFFH

# LOC C0H

00C0: 0004 # DAT 4H

0000: 006C 00C0 # LD IX, [N]

0004: 0020 # RCF

0006: 0066 007E # LOOP: LD ACC, [IX+DATA1-2]

000A: 0096 008E # ADC ACC, [IX+DATA2-2]

000E: 0076 009E # ST ACC, [IX+ANS-2]

0012: 00AA 0002 # SUB IX, 2

0016: 0033 0006 # BP LOOP

001A: 000F # HLT

Page 36: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

36 第 4章 サンプルプログラム

4.3 ユークリッドの互除法による最大公約数説明ユークリッドの互除法で, A (80H 番地), B (82H 番地) の最大公約数を求め, GCD (84H 番地) に格納する. な

お, A, B とも, 127 以下の正数とする.

入出力例入力 0080: 0060 (A)

0082: 0040 (B)

出力 0084: 0020 (最大公約数)

コード# A: EQU 80H

# B: EQU 82H

# GCD: EQU 84H

# LOC 80H

0080: 0060 # DAT 60H

0082: 0040 # DAT 40H

0000: 0064 0080 # LD ACC, [A]

0004: 006C 0082 # LD IX, [B]

0008: 00A1 # LOOP: SUB ACC, IX

000A: 0032 0008 # BZP LOOP

000E: 00B1 # ADD ACC, IX

0010: 00C8 # EOR IX, ACC

0012: 00C1 # EOR ACC, IX

0014: 00C8 # EOR IX, ACC

0016: 0031 0008 # BNZ LOOP

001A: 0074 0084 # ST ACC, [GCD]

001E: 000F # HLT

Page 37: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

4.4 バブルソートによる整列 37

4.4 バブルソートによる整列説明バブルソートによって, DATA (0100H 番地) から始まる, N (0080H 番地) 個のデータを昇順に整列する. なお,

ソートの完了の判定に, キャリーフラグを利用している.

入出力例入力 0080: 0008 (ソートするデータの長さ)

0100: 1000 FFFF 0040 808E C0A0 D008 7FFF CD00 (ソートするデータ)

出力 0100: 808E C0A0 CD00 D008 FFFF 0040 1000 7FFF (結果)

コード# DATA: EQU 0100H

# N: EQU 80H

# WORK1: EQU 90H

# WORK2: EQU 92H

# LOC 80H

0080: 0008 # DAT 08H

# LOC 100H

0100: 1000 # DAT 1000H

0102: FFFF # DAT FFFFH

0104: 0040 # DAT 0040H

0106: 808E # DAT 808EH

0108: C0A0 # DAT C0A0H

010A: D008 # DAT D008H

010C: 7FFF # DAT 7FFFH

010E: CD00 # DAT CD00H

0000: 006C 0080 # LD IX, [N]

0004: 00B9 # ADD IX, IX

0006: 00AA 0002 # SUB IX, 2

000A: 007C 0090 # ST IX, [WORK1]

000E: 00C9 # LP1: EOR IX, IX

0010: 0020 # RCF

0012: 0066 0100 # LP2: LD ACC, [IX+DATA]

0016: 00F6 0102 # CMP ACC, [IX+DATA+2]

001A: 003F 0034 # BLE SKIP

001E: 0074 0092 # ST ACC, [WORK2]

0022: 0066 0102 # LD ACC, [IX+DATA+2]

0026: 0076 0100 # ST ACC, [IX+DATA]

002A: 0064 0092 # LD ACC, [WORK2]

Page 38: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

38 第 4章 サンプルプログラム

002E: 0076 0102 # ST ACC, [IX+DATA+2]

0032: 0028 # SCF

0034: 00BA 0002 # SKIP: ADD IX, 2

0038: 00FC 0090 # CMP IX, [WORK1]

003C: 0031 0012 # BNZ LP2

0040: 0035 0054 # BNC FIN

0044: 006C 0090 # LD IX, [WORK1]

0048: 00AA 0002 # SUB IX, 2

004C: 007C 0090 # ST IX, [WORK1]

0050: 0031 000E # BNZ LP1

0054: 000F # FIN: HLT

Page 39: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

4.5 CRC の計算 39

4.5 CRC の計算説明シフト/ローテート命令や,論理演算命令を使用して,メモリ上の DATA (100H番地)番地から始まる N (120番

地) バイトのデータの CRC コードを計算する. ただし, データの最大長は 256 バイト (未確認) である. データが256 バイトの場合は, バイト数を 0 とする. なお, 生成多項式として, CCITT X.25 規格の x16 + x12 + x5 + 1 を用いた.

入出力例入力 100: 62FF 75C0 75C1 C97D (DATA)

120: 0008 (N)

出力 80: B08A (結果)

コード# DATA: EQU 100H

# LOC 100H

0100: 0062 # DAT 62H

# LOC 102H

0102: 00FF # DAT FFH

# LOC 104H

0104: 0075 # DAT 75H

# LOC 106H

0106: 00C0 # DAT C0H

# LOC 108H

0108: 0075 # DAT 75H

# LOC 10AH

010A: 00C1 # DAT C1H

# LOC 10CH

010C: 00C9 # DAT C9H

# LOC 10EH

010E: 007D # DAT 7DH

# N: EQU 120H

# LOC 120H

0120: 0008 # DAT 08H

# CRC: EQU 80H

# WORK: EQU F0H

# TMP: EQU F2H

0000: 0062 FFFF # LD ACC, FFFFH

0004: 0074 0080 # ST ACC, [CRC]

0008: 00C9 # EOR IX, IX

Page 40: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

40 第 4章 サンプルプログラム

000A: 007C 00F0 # ST IX, [WORK]

000E: 007C 00F2 # LP1: ST IX, [TMP]

0012: 00B9 # ADD IX, IX

0014: 0066 0100 # LD ACC, [IX+DATA]

0018: 006C 00F2 # LD IX, [TMP]

001C: 0043 # SLL ACC

001E: 0043 # SLL ACC

0020: 0043 # SLL ACC

0022: 0043 # SLL ACC

0024: 0043 # SLL ACC

0026: 0043 # SLL ACC

0028: 0043 # SLL ACC

002A: 0043 # SLL ACC

002C: 00C4 0080 # EOR ACC, [CRC]

0030: 0074 0080 # ST ACC, [CRC]

0034: 006A 0010 # LD IX, 16

0038: 0064 0080 # LP2: LD ACC, [CRC]

003C: 0043 # SLL ACC

003E: 0074 0080 # ST ACC, [CRC]

0042: 0035 004E # BNC SKIP

0046: 00C4 0090 # EOR ACC, [POLY]

004A: 0074 0080 # ST ACC, [CRC]

004E: 00AA 0002 # SKIP: SUB IX, 2

0052: 0033 0038 # BP LP2

0056: 006C 00F0 # LD IX, [WORK]

005A: 00BA 0001 # ADD IX, 1

005E: 00FC 0120 # CMP IX [N]

0062: 007C 00F0 # ST IX, [WORK]

0066: 0031 000E # BNZ LP1

006A: 0064 0080 # LD ACC, [CRC]

006E: 00C2 FFFF # EOR ACC, FFFFH

0072: 0074 0080 # ST ACC, [CRC]

0076: 000F # HLT

# POLY: EQU 90H

# LOC 90H

0090: 1021 # DAT 1021H

Page 41: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

4.6 符号無し 1 バイトの乗算 41

4.6 符号無し 1 バイトの乗算説明DATA1 (80H 番地) と DATA2 (82H 番地) の積を求め, ANS (60H 番地) からの 4 バイトに格納する. なお, 乗

数, 被乗数, 積は, 全て符号無しの数とする.

入出力例入力 0080: 0555 (乗数)

0082: 0FFF (被乗数)

出力 0060: 0055 4AAB (結果)

Page 42: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

42 第 4章 サンプルプログラム

コード# DATA1: EQU 80H

# DATA2: EQU 82H

# ANS: EQU 60H

# WORK: EQU 90H

# LOC 80H

0080: 0555 # DAT 555H

# LOC 82H

0082: 0FFF # DAT FFFH

0000: 00C0 # EOR ACC, ACC

0002: 0074 0060 # ST ACC, [ANS]

0006: 0074 0062 # ST ACC, [ANS+2]

000A: 0074 0090 # ST ACC, [WORK]

000E: 0064 0082 # LD ACC, [DATA2]

0012: 0074 0092 # ST ACC, [WORK+2]

0016: 006C 0080 # LD IX, [DATA1]

001A: 004A # LOOP: SRL IX

001C: 0035 003A # BNC SKIP

0020: 0020 # RCF

0022: 0064 0062 # LD ACC, [ANS+2]

0026: 0094 0092 # ADC ACC, [WORK+2]

002A: 0074 0062 # ST ACC, [ANS+2]

002E: 0064 0060 # LD ACC, [ANS]

0032: 0094 0090 # ADC ACC, [WORK]

0036: 0074 0060 # ST ACC, [ANS]

003A: 00FA 0000 # SKIP: CMP IX, 0

003E: 0039 005A # BZ FIN

0042: 0064 0092 # LD ACC, [WORK+2]

0046: 0041 # SLA ACC

0048: 0074 0092 # ST ACC, [WORK+2]

004C: 0064 0090 # LD ACC, [WORK]

0050: 0045 # RLA ACC

0052: 0074 0090 # ST ACC, [WORK]

0056: 0030 001A # BA LOOP

005A: 000F # FIN: HLT

Page 43: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

4.7 符号無し 16 バイトの乗算 43

4.7 符号無し 16 バイトの乗算説明DATA1 (A0H 番地) からの 8 バイトと, DATA2 (B0H 番地) からの 8 バイトを小さい番地側を MSB として積

を求め, RESULT (E0H 番地) からの 16 バイトに格納する. なお, 乗数, 被乗数, 積は, 全て符号無しの数とする.

入出力例入力 00A0: 0000 0000 8888 8888 (乗数)

00B0: 0000 0000 2222 2222 (被乗数)

出力 00E0: 0000 0000 0000 0000 1234 5678 7654 3210 (結果)

Page 44: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

44 第 4章 サンプルプログラム

コード# DATA1: EQU A0H

# LOC A0H

00A0: 0000 # DAT 0000H

# LOC A2H

00A2: 0000 # DAT 0000H

# LOC A4H

00A4: 8888 # DAT 8888H

# LOC A6H

00A6: 8888 # DAT 8888H

# DATA2: EQU B0H

# LOC B0H

00B0: 0000 # DAT 0000H

# LOC B2H

00B2: 0000 # DAT 0000H

# LOC B4H

00B4: 2222 # DAT 2222H

# LOC B6H

00B6: 2222 # DAT 2222H

# COUNT: EQU C0H

# WORK: EQU D0H

# RESULT: EQU E0H

0000: 0062 0040 # LD ACC, 64

0004: 0074 00C0 # ST ACC, [COUNT]

0008: 006A 0008 # LD IX, 8

000C: 00C0 # LP1: EOR ACC, ACC

000E: 0076 00CE # ST ACC, [IX+WORK-2]

0012: 0076 00DE # ST ACC, [IX+RESULT-2]

0016: 0076 00E6 # ST ACC, [IX+RESULT+8-2]

001A: 0066 00AE # LD ACC, [IX+DATA2-2]

001E: 0076 00D6 # ST ACC, [IX+WORK+8-2]

0022: 00AA 0002 # SUB IX, 2

0026: 0031 000C # BNZ LP1

002A: 0064 00A6 # LP2: LD ACC, [DATA1+6]

002E: 0042 # SRL ACC

0030: 006A FFF8 # LD IX, FFF8H

0034: 0066 00A8 # LP3: LD ACC, [IX+DATA1+8]

0038: 0044 # RRA ACC

Page 45: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

4.7 符号無し 16 バイトの乗算 45

003A: 0076 00A8 # ST ACC, [IX+DATA1+8]

003E: 00BA 0002 # ADD IX, 2

0042: 0031 0034 # BNZ LP3

0046: 0035 0064 # BNC LP5

004A: 006A 0010 # LD IX, 16

004E: 0020 # RCF

0050: 0066 00DE # LP4: LD ACC, [IX+RESULT-2]

0054: 0096 00CE # ADC ACC, [IX+WORK-2]

0058: 0076 00DE # ST ACC, [IX+RESULT-2]

005C: 00AA 0002 # SUB IX, 2

0060: 0031 0050 # BNZ LP4

0064: 006A 0010 # LP5: LD IX, 16

0068: 0020 # RCF

006A: 0066 00CE # LP6: LD ACC, [IX+WORK-2]

006E: 0045 # RLA ACC

0070: 0076 00CE # ST ACC, [IX+WORK-2]

0074: 00AA 0002 # SUB IX, 2

0078: 0031 006A # BNZ LP6

007C: 0064 00C0 # LD ACC, [COUNT]

0080: 00A2 0002 # SUB ACC, 2

0084: 0074 00C0 # ST ACC, [COUNT]

0088: 0031 002A # BNZ LP2

008C: 000F # HLT

Page 46: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

46 第 4章 サンプルプログラム

4.8 符号無し 2 バイトの除算説明DVD (80H 番地) を, DVS (82H 番地) で割り, 商を QOT (84H 番地) に, 余りを RMD (86H 番地) に格納す

る. なお, 被除数, 除数, 商, 余りは, 全て符号無しの 1 バイトの数とする.

入出力例入力 0080: F0F0 (被除数)

0082: 3F3F (除数)

出力 0084: 0003 (結果: 商)

0086: 3333 (結果: 余り)

Page 47: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

4.8 符号無し 2 バイトの除算 47

コード# DVD: EQU 80H

# DVS: EQU 82H

# QOT: EQU 84H

# RMD: EQU 86H

# WORK: EQU 90H

# LOC 80H

0080: F0F0 # DAT F0F0H

# LOC 82H

0082: 3F3F # DAT 3F3FH

0000: 00C0 # EOR ACC, ACC

0002: 0074 0084 # ST ACC, [QOT]

0006: 0074 0086 # ST ACC, [RMD]

000A: 0064 0080 # LD ACC, [DVD]

000E: 0074 0090 # ST ACC, [WORK]

0012: 006A 0010 # LD IX, 10H

0016: 0064 0090 # LOOP: LD ACC, [WORK]

001A: 0041 # SLA ACC

001C: 0074 0090 # ST ACC, [WORK]

0020: 0064 0086 # LD ACC, [RMD]

0024: 0045 # RLA ACC

0026: 0020 # RCF

0028: 0084 0082 # SBC ACC, [DVS]

002C: 003D 0036 # BC SP1

0030: 0028 # SCF

0032: 0030 003C # BA SP2

0036: 00B4 0082 # SP1: ADD ACC, [DVS]

003A: 0020 # RCF

003C: 0074 0086 # SP2: ST ACC, [RMD]

0040: 0064 0084 # LD ACC, [QOT]

0044: 0045 # RLA ACC

0046: 0074 0084 # ST ACC, [QOT]

004A: 00AA 0001 # SUB IX, 1

004E: 0033 0016 # BP LOOP

0052: 000F # HLT

Page 48: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

48 第 4章 サンプルプログラム

4.9 マーチングによるメモリテスト説明KUECHIP-3F の内部メモリ, またはボード上の外部メモリが正常かどうかをテストする.

出力エラーが検出されない間, OBUF の LED が点滅を続ける. クロック周波数が 1 MHz のとき, 18 秒間隔で

OBUF LED が点灯と消灯を繰り返す.

コード# PROG: EQU 0

# CA: EQU PROG

0000: 00C0 # EOR ACC, ACC

0002: 006A 0056 # LD IX, TEST

0006: 0076 0000 # LP0: ST ACC, [IX]

000A: 00BA 0002 # ADD IX, 2

000E: 00FA 0000 # CMP IX, PROG

0012: 0031 0006 # BNZ LP0

0016: 00C9 # EOR IX, IX

0018: 006A 0056 # LP2: LD IX, TEST

001C: 00F6 0000 # LP3: CMP ACC, [IX]

0020: 0031 0054 # BNZ ERR

0024: 00C2 8000 # EOR ACC, 8000H

0028: 0047 # RLL ACC

002A: 0076 0000 # ST ACC, [IX]

002E: 0039 003A # BZ NX3

0032: 00F2 FFFF # CMP ACC, FFFFH

0036: 0031 001C # BNZ LP3

003A: 00C2 FFFF # NX3: EOR ACC, FFFFH

003E: 00BA 0002 # ADD IX, 2

0042: 00FA 0000 # CMP IX, PROG

0046: 0031 001C # BNZ LP3

004A: 00C2 FFFF # EOR ACC, FFFFH

004E: 0010 # OUT

0050: 0030 0018 # BA LP2

0054: 000F # ERR: HLT

# TEST: EQU CA

Page 49: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

4.10 サブルーチンコールを用いた階乗計算 49

4.10 サブルーチンコールを用いた階乗計算説明メモリ上の INPUT 番地のデータの階乗の値を計算する. 計算にはサブルーチンコールを利用する. FACT は再

帰呼出しにより階乗の値を求める関数であり, MUL は積の値を求める関数である.

入出力例出力 60: 13b0 (結果: 5040)

コード# INPUT: EQU 50H

# LOC 50H

0050: 0007 # DAT 7H

# RES: EQU 60H

0000: 0002 0100 # LD SP 100H

0004: 0062 0001 # LD ACC 1

0008: 006C 0050 # LD IX [INPUT]

000C: 000C 0016 # CAL FACT

0010: 0074 0060 # ST ACC [RES]

0014: 000F # HLT

0016: 000C 0028 # FACT: CAL MUL

001A: 00AA 0001 # SUB IX 1

001E: 003B 0026 # BZN FACT_END

0022: 000C 0016 # CAL FACT

0026: 000D # FACT_END: RET

0028: 0008 # MUL: PSH ACC

002A: 0009 # PSH IX

002C: 0062 0000 # LD ACC 0

0030: 00FA 0000 # MUL_BEGIN: CMP IX 0

0034: 003B 0044 # BZN MUL_END

0038: 00B3 0002 # ADD ACC [SP+2]

003C: 00AA 0001 # SUB IX 1

0040: 0030 0030 # BA MUL_BEGIN

0044: 000B # MUL_END: POP IX

0046: 0004 # INC SP

0048: 000D # RET

Page 50: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)
Page 51: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

51

第 5章

KUECHIP-3F CPU の命令セット

この章では, KUECHIP-3F CPU が実行出来る命令およびその説明を行う.

5.1 アセンブラ文法

表 5.1 KUECHIP-3F のアドレスモード

ACC アキュムレータIX インデックスレジスタSP スタックポインタレジスタd 即値アドレス[d] 絶対アドレス[IX+d] インデックス修飾アドレス[SP+d] スタックポインタ修飾アドレス

表 5.2 KUECHIP-3F 論理アドレスモード

ea 全てのアドレスモードreg レジスタアドレスモードimm 即値アドレスモードma メモリ参照アドレスモード

表 5.3 アドレスモード対応表

ACC IX d [d] [IX+d] [SP+d]

{ea} ○ ○ ○ ○ ○ ○{reg} ○ ○ × × × ×{imm} × × ○ × × ×{ma} × × × ○ ○ ○

Page 52: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

52 第 5章 KUECHIP-3F CPU の命令セット

表 5.4: KUECHIP-3F 命令表

略記号 アドレスモード 命令機能HLT Halt

NOP No Operation

IN INput

OUT OUTput

SCF Set Carry Flag

RCF Reset Carry Flag

LD {reg}, {ea} LoaD

IX, SP

SP, {imm}SP, IX

ST {reg}, {ma} STore

ADD {reg}, {ea} ADD

SP, {imm} ADD stack

ADC {reg}, {ea} ADd with Carry

SUB {reg}, {ea} SUBtract

SP, {imm} SUBtract stack

SBC {reg}, {ea} SuBtract with Carry

CMP {reg}, {ea} CoMPare

AND {reg}, {ea} AND

OR {reg}, {ea} OR

EOR {reg}, {ea} Exclusive OR

Ssm {reg} Shift

Rsm {reg} Rotate

RA Right Arithmetically

LA Left Arithmetically

RL Right Logically

LL Left Logically

Bcc {imm} Branch

A Always

VF on oVerFlow

NZ on Not Zero

Z on Zero

ZP on Zero or Positive

N on Negative

P on Positive

ZN on Zero or Negative

NI on No Input

次ページに続く

Page 53: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

5.1 アセンブラ文法 53

略記号 アドレスモード 命令機能Bcc {imm} Branch

NO on No Output

NC on No Carry

C on Carry

GE on Greater than or Equal

LT on Less Than

GT on Greater Than

LE on Less than or Equal

INC INCrement

DEC DECrement

PSH {reg} PuSH

POP {reg} POP

CAL CALl

RET RETurn

表 5.5 は, KUECHIP-3F アセンブリ記述プログラムのアセンブル時に使用する命令の一覧であり, KUECHIP-

3F CPU および KUECHIP-3F 命令シミュレータには対応していない.

表 5.5 擬似命令表

略記号 命令機能 詳細EQU EQUal 定数をラベル名で定義するLOC LOCation データをセットするアドレスを指定するDAT DATa LOC でセットしたアドレスにデータをセットする

Page 54: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

54 第 5章 KUECHIP-3F CPU の命令セット

5.2 命令セット

表 5.6 命令セット一覧

略記号 命令コード (1 語目) B’ (2 語目) 命令機能の概略

NOP 0 0 0 0 0 - - - × No Operation

HLT 0 0 0 0 1 - - - × HaLT 停止0 1 0 1 - - - - × 未使用 (HLT)

OUT 0 0 0 1 0 - - - × OUTput (ACC) → OBUF

IN 0 0 0 1 1 - - - × INput (IBUF) → ACC

RCF 0 0 1 0 0 - - - × Reset CF 0 → CF

SCF 0 0 1 0 1 - - - × Set CF 1 → CF

Bcc 0 0 1 1 cc ◎ STATUS CHECK 条件が成立すれば B’ → PC

Ssm 0 1 0 0 A 0 sm × Shift sm (A) → shift, rotate → A

Rsm 0 1 0 0 A 1 sm × Rotate sm はみ出したビット→ CF

LD 0 1 1 0 A B ○ LoaD (B) → A

0 0 0 0 0 0 0 1 × (SP) → IX

0 0 0 0 0 0 1 0 ◎ (d) → SP

0 0 0 0 0 0 1 1 × (IX) → SP

ST 0 1 1 1 A B ◎ STore (A) → B

SBC 1 0 0 0 A B ○ SuB with Carry (A) − (B) − CF → A

ADC 1 0 0 1 A B ○ ADd with Carry (A) + (B) + CF → A

SUB 1 0 1 0 A B ○ SUBtract (A) − (B) → A

0 0 0 0 0 1 1 1 ◎ (SP) − d → SP

ADD 1 0 1 1 A B ○ ADD (A) + (B) → A

0 0 0 0 0 1 1 0 ◎ (SP) + d → SP

EOR 1 1 0 0 A B ○ Exclusive OR (A) ⊕ (B) → A

OR 1 1 0 1 A B ○ OR (A) ∨ (B) → A

AND 1 1 1 0 A B ○ AND (A) ∧ (B) → A

CMP 1 1 1 1 A B ○ CoMPare (A) − (B)

INC 0 0 0 0 0 1 0 0 × INCrement (SP + 2) → SP

DEC 0 0 0 0 0 1 0 1 × DECrement (SP−2) → SP

PSH 0 0 0 0 1 B ◎ PuSH (B) → Mem

POP 0 0 0 0 1 0 1 A ◎ POP (Mem) → B’

CAL 0 0 0 0 1 1 0 0 ◎ CALl サブルーチンの先頭 (B’) を呼び出すRET 0 0 0 0 1 1 0 1 × RETurn 呼び出し元のルーチンへ戻る

Page 55: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

5.2 命令セット 55

表 5.7 cc: Condition Code

A 0 0 0 0 Always 常に成立VF 1 0 0 0 on oVerFlow 桁あふれ V F = 1

NZ 0 0 0 1 on Not Zero ̸= 0 ZF = 0

Z 1 0 0 1 on Zero = 0 ZF = 1

ZP 0 0 1 0 on Zero or Positive ≥ 0 NF = 0

N 1 0 1 0 on Negative < 0 NF = 1

P 0 0 1 1 on Positive > 0 (NF ∨ ZF ) = 0

ZN 1 0 1 1 on Zero or Negative ≤ 0 (NF ∨ ZF ) = 1

NI 0 1 0 0 on No Input IBUF FLG IN = 0

NO 1 1 0 0 on No Output OBUF FLG IN = 1

NC 0 1 0 1 on No Carry CF = 0

C 1 1 0 1 on Carry CF = 1

GE 0 1 1 0 on Greater than or Equal ≥ 0 (V F ⊕NF ) = 0

LT 1 1 1 0 on Less Than < 0 (V F ⊕NF ) = 1

GT 0 1 1 1 on Greater Than > 0 ((V F ⊕NF ) ∨ ZF ) = 0

LE 1 1 1 1 on Less than or Equal ≤ 0 ((V F ⊕NF ) ∨ ZF ) = 1

表 5.8 sm: Shift Mode

RA 0 0 Right Arithmetically

LA 0 1 Left Arithmetically

RL 1 0 Right Logically

LL 1 1 Left Logically

A = 0 : ACC B = 000: ACC

A = 1 : IX B = 001: IX

B = 01-: d (即値アドレス)

B’ (2 語目) B = 100: [d] (絶対アドレス)

×: 不要 B = 110: [IX+d] (インデックス修飾アドレス)

○: 不要  or 必要 B = 011: [SP+d] (スタックポインタ修飾アドレス)

◎: 必要

Page 56: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

56 第 5章 KUECHIP-3F CPU の命令セット

5.3 Shift / Rotate 命令の機能

略記号 MSB LSB

SRA CF

SLA

0

CF

SRL CF

0

SLL

0

CF

RRA CF

RLA CF

RRL CF

RLL CF

Page 57: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

5.4 LoaD / STore 命令の機能 57

5.4 LoaD / STore 命令の機能KUECHIP-3F CPU は 16 ビットアドレスであり, 偶数番地のメモリアクセスを行う. 奇数番地のメモリアクセ

スがあった場合, その番地から 1 を引いた番地へのアクセスを行う.

メモリアクセスを要求する番地 実際にアクセスする番地0x0000 0x0000

0x0001

0x0002 0x0002

0x0003

0x0004 0x0004

0x0005

0x0006 0x0006

0x0007

0x0008 0x0008

0x0009

0x000A 0x000A

0x000B

0x000C 0x000C

0x000D

0x000E 0x000E

0x000F

Page 58: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

58 第 5章 KUECHIP-3F CPU の命令セット

5.5 スタックに関連する機能本シュミレータ上では, スタックポインタ (SP) が指す先にはデータが格納されている. 図 5.2 のようにデータ

が格納されているとし, スタックは下 (0xFFFF) から上 (0x0000) 方向に伸びていく.

PSH 命令は, SP を移動してからデータの書き込みを行う. POP 命令では, データの読み込み後に SP を移動する.

CAL 命令は, CAL 命令の次命令の PC をメモリ (スタック) に記憶し, サブルーチンを呼び出す. RET 命令は,

SP が指す場所に格納されている戻り先アドレスを取得し, そのアドレスへ戻る.

0x0000

0xFFFF

.

.

.

var A

var B

var C SP

Memory

図 5.1 メモリのイメージ図

Page 59: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

5.6 フラグ機能 59

5.6 フラグ機能

表 5.9: KUECHIP-3F 命令表

CF : Carry Flag V F : oVerflow Flag NF : Negative Flag ZF : Zero Flag

略記号 命令機能の概略 実行への影響 † 実行後の影響 ‡CF V F NF ZF CF V F NF ZF

NOP No Operation - - - - - - - -

HLT Halt - - - - - - - -

OUT OUTput - - - - - - - -

IN INput - - - - - - - -

RCF Reset Carry Flag - - - - 0 - - -

SCF Set Carry Flag - - - - 1 - - -

SRA Shift Right Arithmetically - - - - b0 0 N Z

SLA Shift Left Arithmetically - - - - b15 V N Z

SRL Shift Right Logically - - - - b0 0 N Z

SLL Shift Left Logically - - - - b15 0 N Z

RRA Rotate Right Arithmetically b15 - - - b0 0 N Z

RLA Rotate Left Arithmetically b0 - - - b15 V N Z

RRL Rotate Right Logically - - - - b0 0 N Z

RLL Rotate Left Logically - - - - b15 0 N Z

LD LoaD - - - - - - - -

ST STore - - - - - - - -

SBC SuBtract with Carry c - - - C V N Z

ADC ADd with Carry c - - - C V N Z

SUB SUBtract - - - - - V N Z

ADD ADD - - - - - V N Z

EOR Exclusive OR - - - - - 0 N Z

OR OR - - - - - 0 N Z

AND AND - - - - - 0 N Z

CMP CoMPare - - - - - V N Z

BA Branch Always - - - - - - - -

BVF Branch on oVerFlow - V F - - - - - -

BNZ Branch on Not Zero - - - ZF - - - -

BZ Branch on Zero - - - ZF - - - -

BZP Branch on Zero or Positive - - NF - - - - -

BN Branch on Negative - - NF - - - - -

BP Branch on Positive - - NF ∨ ZF - - - -

BZN Branch on Zero or Negative - - NF ∨ ZF - - - -

次ページに続く

Page 60: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

60 第 5章 KUECHIP-3F CPU の命令セット

略記号 命令機能の概略 実行への影響 † 実行後の影響 ‡CF V F NF ZF CF V F NF ZF

BNI Branch on No Input - - - - - - - -

BNO Branch on No Output - - - - - - - -

BNC Branch on No Carry CF - - - - - - -

BC Branch on Carry CF - - - - - - -

BGE Branch on Greater than or Equal - V F ⊕NF - - - - -

BLT Branch on Less Than - V F ⊕NF - - - - -

BGT Branch on Greater Than - (V F ⊕NF )∨ ZF - - - -

BLE Branch on Less than or Equal - (V F ⊕NF )∨ ZF - - - -

INC INCrement - - - - - - - -

DEC DECrement - - - - - - - -

PSH PuSH - - - - - - - -

POP POP - - - - - - - -

CAL CALl - - - - - - - -

RET RETurn - - - - - - - -

† 実行への影響 ‡ 実行後の状態c : Referred to as carry/borrow input. C : Set to 1 iff carry/borrow occur.

b15 : Substituted into bit 15 of the operand A. V : Set to 1 iff overflow occur.

b0 : Substituted into bit 0 of the operand A. N : Set to 1 iff bit 15 of the result is 1.

Exp. : Condition which causes branch. Z : Set to 1 iff all bits of the result are 0.

- : No effect. b15 : Set to 1 iff bit 15 of the operand A was 1.

b0 : Set to 1 iff bit 0 of the operand A was 1.

0 : Set to 0.

1 : Set to 1.

- : Not modified.

Page 61: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

5.7 命令コード早見表 61

5.7 命令コード早見表

表 5.10 ACC に対する代入および算術命令

ACC IX d [SP+d] [d] [IX+d] 機能

LD ACC, 60 61 62 63 64 66 ACC にデータを格納. A → ACC

ST ACC, - - - 73 74 76 ACC のデータを格納. ACC → A

SBC ACC, 80 81 82 83 84 86 桁借りを考慮した減算. ACC - B - CF → ACC

ADC ACC, 90 91 92 93 94 96 桁上げを考慮した加算. ACC + B + CF → ACC

SUB ACC, A0 A1 A2 A3 A4 A6 減算. ACC - B → ACC

ADD ACC, B0 B1 B2 B3 B4 B6 加算. ACC + B → ACC

EOR ACC, C0 C1 C2 C3 C4 C6 排他的論理和. ACC ⊕ B → ACC

OR ACC, D0 D1 D2 D3 D4 D6 論理和. ACC ∨ B → ACC

AND ACC, E0 E1 E2 E3 E4 E6 論理積. ACC ∧ B → ACC

CMP ACC, F0 F1 F2 F3 F4 F6 ACC と比較. ACC - B

表 5.11 IX に対する代入および算術命令

ACC IX d [SP+d] [d] [IX+d] 機能

LD IX, 68 69 6A 6B 6C 6E IX にデータを格納. A → IX

ST IX, - - - 7B 7C 7E IX のデータを格納. IX → A

SBC IX, 88 89 8A 8B 8C 8E 桁借りを考慮した減算. IX - B - CF → IX

ADC IX, 98 99 9A 9B 9C 9E 桁上げを考慮した加算. IX + B + CF → IX

SUB IX, A8 A9 AA AB AC AE 減算. IX - B → IX

ADD IX, B8 B9 BA BB BC BE 加算. IX + B → IX

EOR IX, C8 C9 CA CB CC CE 排他的論理和. IX ⊕ B → IX

OR IX, D8 D9 DA DB DC DE 論理和. IX ∨ B → IX

AND IX, E8 E9 EA EB EC EE 論理積. IX ∧ B → IX

CMP IX, F8 F9 FA FB FC FE IX と比較. IX - B

Page 62: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

62 第 5章 KUECHIP-3F CPU の命令セット

表 5.12 スタックに関する代入および算術命令

LD IX, SP 01 IX にデータを格納. SP → IX

LD SP, d 02 SP にデータを格納. d → SP

LD SP, IX 03 SP にデータを格納. IX → SP

INC 04 SP をインクリメント. SP + 2 → SP

DEC 05 SP をデクリメント. SP - 2 → SP

ADD SP, d 06 加算. SP + d → SP

SUB SP, d 07 減算. SP - d → SP

PSH ACC 08 ACC をプッシュ. ACC → Mem

PSH IX 09 IX をプッシュ. IX → Mem

POP ACC 0A 取り出した値を ACC に格納 Mem → ACC

POP IX 0B 取り出した値を IX に格納 Mem → IX

CAL 0C サブルーチンの先頭を呼び出す.

RET 0D 呼び出し元のルーチンへ戻る.

表 5.13 分岐命令

名前 機械語 機能BA 30 必ず分岐BVF 38 桁あふれがあったら分岐BNZ 31 0 以外だったら分岐BZP 21 0 以上だったら分岐BP 33 1 以上だったら分岐BNI 34 Input が無かったら分岐BNC 35 桁上げが無かったら分岐BGE 36 A ≥ 0 または A = 0 なら分岐BGT 37 A > 0 または A = 0 なら分岐BZ 39 0 だったら分岐BN 3A 0 未満だったら分岐BZN 3B 0 以下だったら分岐BNO 3C Output が無かったら分岐BC 3D 桁上げがあったら分岐BLT 3E A < 0 か EOR の結果 1 なら分岐BLE 3F A ≤ 0 か EOR の結果 1 なら分岐

表 5.14 シフト命令

ACC IX 機能

SRA 40 48 Shift Right Arithmetically

SLA 41 49 Shift Left Arithmetically

SRL 42 4A Shift Right Logically

SLL 43 4B Shift Left Logically

RRA 44 4C Rotate Right Arithmetically

RLA 45 4D Rotate Left Arithmetically

RRL 46 4E Rotate Right Logically

RLL 47 4F Rotate Left Logically

表 5.15 制御命令

NOP 00 No Operation

HLT 0F 終了命令OUT 10 出力IN 1F 入力RCF 20 CF をリセットSCF 2F CF をセット

Page 63: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

5.8 命令実行フェーズ 63

5.8 命令実行フェーズPhase

P0

P1

P2

P3

P4

Instruction

HLT

HLT

LD

IX,SP

SP→

IX

LD

SP,d

(PC)→

MAR

(Mem

)→

SP

(PC+2)→

PC

INC

+2

!→

ALU→

SP

(SP)

DEC

−2

!→

ALU→

SP

(SP)

ADD

SP,d

(PC)→

MAR

(SP)

!→

ALU→

SP

SUB

SP,d

(PC+2)→

PC

(Mem

)

PSH

ACC

(IX)

(SP−2)→

MAR

(ACC(IX))→

Mem

(PC)→

MAR

(Mem

)→

IR(SP−2)→

SP

POP

ACC

(IX)

(PC+2)→

PC

(SP)→

MAR

Mem→

ACC(IX)

(SP+2)→

SP

CAL

(SP−2)→

MAR

(PC+2)→

Mem

(Mem

)→

PC

(SP−2)→

SP

(PC)→

MAR

RET

(SP)→

MAR

(Mem

)→

PC

(SP+2)→

SP

NOP

NoOperation

OUT

(ACC)→

OBUF

0→

OBUF

WE

IN(IBUF)→

ACC

0→

IBUF

FLG

CLR

0→

IBUF

RE

RCF

0→

CF

SCF

1→

CF

Page 64: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

64 第 5章 KUECHIP-3F CPU の命令セットPhase

P0

P1

P2

P3

P4

Instruction

Bcc

(PC)→

MAR

STATUSCHECK

(PC+2)→

PC

(Mem

)→

PC

(ifcondition)

Ssm

TCFSET

NF,ZF,VF,CFSet

Rsm

SHIF

TA

LD

ACC

(A)→

B

IX d(M

em)→

A

[d]

(PC)→

MAR

(Mem

)→

MAR

[IX+d]

(PC+2)→

PC

(IX(SP))

!→

ALU→

MAR

(Mem

)→

A

[SP+d]

(Mem

)

ST

[d]

(PC)→

MAR

(Mem

)→

MAR

[IX+d]

(PC)→

MAR

(Mem

)→

IR(P

C+2)→

PC

(IX(SP))

!→

ALU→

MAR

(A)→

(Mem

)

[SP+d]

(PC+2)→

PC

(Mem

)

SBC

(A)

"→

ALU→

AADC

ACC

(B)

SUB

IX[(CF)]

ADD

NF,ZF,VF[,CF]SET

EOR

(A)

"→

ALU→

AOR

d(B

)

AND

[(CF)]

CMP

(PC)→

MAR

NF,ZF,VF[,CF]SET

[d]

(PC+2)→

PC

(Mem

)→

MAR

(A)

"→

ALU→

A(B

)

[IX+d]

(IX(SP))

!→

ALU→

MAR

[(CF)]

[SP+d]

(Mem

)NF,ZF,VF[,CF]SET

Page 65: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

5.9 ブロック図 65

5.9 ブロック図

FLAG SP16b

ACC16b

IX16b

sel

ALU16b

Syncro. Clock Gen.

PANEL CLOCK

IR8b

IDC

Cont.

PC16b

Sel.

MAR16b

InterMem

PANEL OBUF8b

PANEL

IBUF8b

図 5.2 KUECHIP-3F のブロックダイヤグラム図

Page 66: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)
Page 67: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

67

第 6章

KUECHIP-3F CPU によるボード間通信

この章では、KR-CHIP 教育用ボードの外部インターフェースを用いて KUECHIP-3F CPU 間で通信を行う方法およびサンプルプログラムを紹介する。

6.1 KUECHIP-3F CPU 間での通信説明次ページに示すように、2台の KR-CHIP 教育用ボード (それぞれ A,Bとする)のボード Aの CN1とボード B

の CN2を 15ピンの全線結線型 VGAケーブルで接続し、ボード Aの ACCレジスタの内容をボード Bの ACC

レジスタへ送る。ボード A側の送信側ソースコードでは、送信の準備ができているか (=OBUFに値がセットされているか)を確認しており、またボード B側の受信側ソースコードでは、受信の準備ができているか (=IBUFに値がセットされているか)を確認している。このように適切にプログラムを記述すれば、ボード Aとボード Bの動作周波数が異なっていても正しく値を送信することができる。送信側ソースコード (ボードA)

0000: 003C 0000 # BNO 0

0004: 00B2 0001 # ADD ACC, 1

0008: 0010 # OUT

000A: 0030 0000 # BA 0

受信側ソースコード (ボードB)

0000: 0034 0000 # BNI 0

0004: 001F # IN

0006: 0010 # OUT

0008: 0030 0000 # BA 0

Page 68: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

68 第 6章 KUECHIP-3F CPU によるボード間通信

CN4 DC 5VCN1 JP1CN2 JP2

CN5

CN4DC 5V CN1JP1 CN2JP2

CN5

CN2JP2

図 6.1 VGAケーブル により 2台のボードを接続

Page 69: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

69

第 7章

演習課題

この章では、KUECHIP-3F CPU を用いたプログラミング演習の課題を列挙する。データの与え方、解の出力の方法など詳細な仕様は適当に設定されたい。

1. 2つの値を入力として受け取り、それぞれを符号付き整数と解釈し乗算を行うプログラムを作成せよ。2. 2つの値を入力として受け取り、それぞれを符号付き整数と解釈し除算を行うプログラムを作成せよ。3. 16 進または 10 進の 2つの値を入力として受け取り、加算結果を 16 進数で出力するプログラムを作成せよ。4. 2つの値を入力として受け取り、それぞれを X,Yとする。X円の商品に対して Y円を支払ったとき、おつりとして支払われる硬貨の最小枚数を求めるプログラムを作成せよ。なお硬貨は 500円玉・100円玉・50円玉・10円玉・5円玉・1円玉の 6種類であり、X <= Yと仮定して良い。

5. 1つの秒数を表す値を入力として受け取り、時:分:秒の形で表現したときの各値を求めるプログラムを作成せよ。

6. 2つの値を入力として受け取り、それぞれを X,Yとする。ある銀行にお金を預けると 1年につき 25%の利息がつく (複利かつ切り捨て)。X円を預けたとき、預金額が初めて Y円以上になるのは何年後かを求めるプログラムを作成せよ。なお、X < Y と仮定して良い。

7. 1つの値を入力として受け取り、それを 2進数と解釈したときに値が 1であるような桁の数を求めるプログラムを作成せよ。

Page 70: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)
Page 71: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

71

第 8章

アセンブラの使い方

8.1 アセンブラの使い方この章では, KUECHIP-3F アセンブラを扱えるよう, KUECHIP-3F アセンブリコードからバイナリコードを

生成する方法を示す.

8.2 入力ファイルKUECHIP-3F アセンブラの入力ファイルは KUECHIP-3F アセンブリコードである. 下に示すプログラムは

KUECHIP-3F において, ACC × IX → ACC を計算し, メモリにストアする非常に簡単なプログラムである. このプログラムを input asm.txt として保存する. [space] の部分はスペース/タブに変換, もしくは削除する.

[space] EOR ACC, ACC

[space] EOR IX, IX

[space] ADD IX, 10H

[space] ADD ACC, 03H

[space] SUB IX, 1

[space] BNZ 08H

[space] ST ACC, [20H]

[space] HLT

[space] END

図 8.1 input asm.txt

8.3 アセンブリの実行前節のアセンブリファイルからバイナリファイルを生成してみる.

1. $ perl kue3asm.pl input asm.txt を実行する.

assembler.pl が異なるディレクトリにある場合, 相対パスまたは絶対パスに変更する.

Page 72: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

72 第 8章 アセンブラの使い方

2. ディレクトリの中に, input asm.bin が生成されていることを確認する.

0000: 00C0 # EOR ACC, ACC

0002: 00C9 # EOR IX, IX

0004: 00BA 0010 # ADD IX, 10H

0008: 00B2 0003 # ADD ACC, 03H

000C: 00AA 0001 # SUB IX, 1

0010: 0031 0008 # BNZ 08H

0014: 0074 0020 # ST ACC, [20H]

0018: 000F # HLT

図 8.2 input asm.bin

ま た, $ perl assembler.pl input asm.txt output asm.txt と す る と, 出 力 フ ァ イ ル 名 がoutput asm.txt となる.

8.4 注意点KUECHIP-3F アセンブラ使用時にバイナリファイルが生成されないときの注意事項を下記にまとめる.

• 命令の前にスペース/タブが入っているか.

• 命令, オペランド間にスペース/タブ区切りがあるか.

• アセンブラの最後に END 命令があるか.

• 16 進数の後に H がついているか.

• [IX+WORK+4] といったコードを [IX + WORK + 4] というように間にスペースを入れていないか.

Page 73: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

73

第 9章

PC と KUECHIP-3F CPU 間の通信

KUECHIP-3F CPU を搭載する FPGA 基板: Cmod A7 モジュールは, KR-CHIP 教育用ボード上のキーボードとディスプレイに接続しているが, PC と Cmod A7 モジュールを接続し通信することも可能である. 本章では,

その手順について説明する.

9.1 接続方法基本的に, Cmod A7 は KR-CHIP ボードと接続している. この時, Cmod A7 上の LED LD0 は青色に点灯し

ている. ここから, PC との接続モードへと切り替えるためには, Cmod A7 上のボタン BTN1 を利用する.

PC と Cmod A7 はシリアル通信にて通信することができる. この通信は, 常に PC からコマンドを送信し,

FPGA はそのコマンドに対して応答する. 送受信するコマンドは ASCII 文字列でのみ構成される. FPGA ボードはコマンド以外の文字列を受信すると, 受信した文字列を送り返す.

通信方法には, RS232C コネクタを利用する方法と microUSB を利用する方法がある. これらのモードは BTN1

により切り替え, LD0 により判別できる. BTN1 を押すと, LD0 が青→緑→赤→青…と順に切り替わる (図 9.1,

9.2, 9.3). LD0 が緑色に点灯しているときは RS232C コネクタと接続し, 赤色に点灯しているときは Cmod A7

上の microUSB ポートを利用し PC と接続する. BTN1 の隣のボタン BTN0 は FPGA のリセットボタンのため注意が必要である.

ARTIX-735T

LD2LD1

LD0

BTN1

BTN0

図 9.1 KR-CHIP 教育用ボード接続時

ARTIX-735T

LD2LD1

LD0

BTN1

BTN0

図 9.2 RS232C コネクタ接続時

ARTIX-735T

LD2LD1

LD0

BTN1

BTN0

図 9.3 microUSB 接続時

Page 74: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

74 第 9章 PC と KUECHIP-3F CPU 間の通信

9.1.1 microUSB ポートを用いた接続

microUSB ポートを用いた接続では, PC と Cmod A7 モジュールの USB コネクタを直接接続する. Ubuntu

Linuxでは, 以下の手順により PC との通信を行う.

1. KR-CHIP 教育用ボードの電源コネクタに 5V ACアダプタを接続し, 電源スイッチ:SW POWERを ON

にする.

2. Cmod A7 モジュール上の LED : LD0 が青色で点灯していることを確認する.

3. PC と KR-CHIP 教育用ボード上の Cmod A7 を microUSB type-B ケーブルで接続する.

F 7 6 5 4 3 2 1 0F 7 6 5 4 3 2 1 0

IBUFF 7 6 5 4 3 2 1 0

F 7 6 5 4 3 2 1 0OBUF

ARTIX-735TLD2LD1

LD0

BTN1

BTN0 micro

USB

CN4DC 5V CN1JP1 CN2JP2

CN5

CN2JP2

ARTIX-735TLD2LD1

LD0

BTN1

BTN0

microUSB PC

図 9.4 microUSB により PC と FPGA を接続

4. Cmod A7 モジュール上の BTN1 ボタンを 2度押し, PCとの接続モードに変更する (LD0は青→緑→赤と変化).

5. ターミナルを起動する.

6. ”ls /dev/”コマンドを使用し, KUECHIP-3F CPU が何という名前のデバイスとして認識されているか確認する (例: /dev/ttyUSB1/).

7. gtktermを用いてプログラムの送信を行う場合, 以下の手順を実行する.

(a)”assembler.pl”と”writer.pl”とアセンブラファイル (ここではファイル名を”prog.asm”とする)のあるディレクトリに移動する.

(b)”perl assembler.pl prog.asm prog.bin”コマンドを実行する.

(c)”perl writer.pl prob.bin > prob.cmd”コマンドを実行する.

(d)”sudo gtkterm”コマンドを実行し, gtkterm を起動する. なお, gtkterm が導入されていない場合は”sudo apt-get install gtkterm”コマンドを用いて導入する.

(e)gtkterm上の”configuration”タブから”Port”を選択する.

(f)Portを”/dev/ttyUSB1”に変更し, Baud Rateが 9600, Parityが none, Bitsが 8, Stopbitsが 1, Flow

controlが noneであることを確認し, OKを選択する.

(g)実際に通信コマンドを入力し, FPGA との通信を図る. 以下のコマンドを順に入力し, 返答が得られれば通信できている. 通信に利用する通信コマンドは次節にて述べる.

i. “S2” を入力し, 画面上に “2” が出力される.

ii. “R” を入力し, “0000” が出力される.

iii. “SI” を入力する. 画面上に変化はない.

iv. “R” を入力し, “0002” が出力される.

Page 75: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

9.1 接続方法 75

(h)”File”タブから”Send raw file”を選択する.

(i)上記で作成した prob.cmdを選択し, OKを選択する.

(j)gtktermの処理が終了したことを確認する.

(k)Cmod A7 モジュール上の BTN1 ボタンを 1度押し, 実行モードに変更する (LD0は赤→青と変化).

(l)Resetボタンを押し, KR-CHIP 教育用ボード上のディスプレイの表示が図 9.5のようになっていることを確認する.

HALT P0---- KEY:0000@0000 NOPMAR :1234 MEM: CDEFFLAG:--N- kue3

図 9.5 起動完了後に表示される画面

8. コマンドライン上でプログラムの送信を行う場合, 以下の手順を実行する.

(a)”sudo stty -F /dev/ttyUSB1 9600 cs8 -parenb -cstopb raw” コマンドを実行する.

(b)”sudo chmod o+rw /dev/ttyUSB1”コマンドを実行する.

(c)”cat -v < /dev/ttyUSB1”コマンドを実行する.

(d)別のターミナルを起動する.

(e)”assembler.pl”と”writer.pl”とアセンブラファイル (ここではファイル名を”prog.asm”とする)のあるディレクトリに移動する.

(f)”perl assembler.pl prog.asm prog.bin”コマンドを実行する.

(g)”perl writer.pl prob.bin > /dev/ttyUSB1”コマンドを実行する.

(h)書き込み処理が終了したことを確認する.

(i)CmodA7上の BTN1 を 1度押し, 実行モードに変更する (LD0は赤→青と変化).

(j)Resetボタンを押し, KR-CHIP 教育用ボード上のディスプレイの表示が図 2.3のようになっていることを確認する.

9.1.2 RS232C ポートを用いた接続

RS232C ポートを用いた接続では, PC と CN4 を RS232C のクロスケーブルで接続する. Ubuntu Linuxでは,

gtkterm 等のターミナルソフトを利用し, 以下の手順により PC との通信を行う.

1. KR-CHIP 教育用ボードの電源コネクタに 5V ACアダプタを接続し, 電源スイッチ:SW POWERを ON

にする.

2. CmodA7上の LD0が青色で点灯していることを確認する.

3. PC と KUECHIP-3F ボードを CN4 を介して接続する. (図 9.6)

4. Cmod A7 モジュール上の BTN1 ボタンを 1 度押し, PC との接続モードに変更する (LD0 は青→緑と変化).

5. ターミナルを起動する.

6. ”ls /dev/”コマンドを使用し, KUECHIP-3F CPU が何という名前のデバイスとして認識されているか確認する (例: /dev/ttyUSB1/).

Page 76: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

76 第 9章 PC と KUECHIP-3F CPU 間の通信

CN4DC 5V CN1JP1 CN2JP2

CN5

CN2JP2

PC

RS232C

図 9.6 RS232C により PC と KUECHIP-3F ボードを接続

7. 前節の手順 7に従い操作を行う.

9.2 通信コマンドここでは, PC と Cmod A7 間で通信を行うためのコマンドについて記述する. コマンド表記の x は ’0’ から ’F’

までの 1 文字を表す.

表 9.1 通信コマンド一覧

コマンド 応答 機能

SP – CPU を 1 フェイズ動作させるSI – CPU を 1 命令実行させる. 動作中に実行した場合, 動作を停止させる.

SS – CPU をプログラムの終了まで動作させる. 動作中に実行した場合, 動作を停止させる.

AI – CPU の MAR レジスタの値をインクリメントする.

AD – CPU の MAR レジスタの値をデクリメントする.

Sx x OB コマンドで取得する対象, もしくは SET コマンドで設定する対象を選択する. (表 9.2)

R xxxx コマンド Sx で選択した対象の現在地を取得する. 応答は取得した値を 16 進表記に変換した文字列である.

P xxxx CPU の実行状態を取得する. 実行状態と実行フェーズを応答とする.

応答は, {OP (1 bit), 0 (10 bit), Phase (5bit)} のような形となる. 最上位ビットは CPU

の実行状態を示す. 下位 5 ビットは, P0 から P4 までの実行フェーズを示す. 実行フェーズは, P0 であれば 0001, P1 であれば 0002, P2 であれば 0004 というように, 5 ビットのワンホットコードとする.

Cx x CPU の実行速度を 16 段階で設定する. C0 が一番高速な実行速度であり, CF が一番低速になる.

Wxxxx – コマンド Sx で選択した対象に, コマンドの引数 xxxx の値を設定する.

Z Z KUECHIP-3F CPU のレジスタとフラグをリセットする.

Page 77: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

9.2 通信コマンド 77

表 9.2 Sx コマンドの x の値と対象

x (2進数) 対象

0 (0000) メモリ領域1 (0001) 未使用2 (0010) PC レジスタ3 (0011) FLAG レジスタ {0(12 bit), CF, VF, NF, ZF}4 (0100) ACC レジスタ5 (0101) IX レジスタ6 (0110) データ入力バス DBi

7 (0111) データ出力バス DBo

8 (1000) MAR レジスタ (Memory Address Register)

9 (1001) IR レジスタ (Instruction Register)

A (1010) SP レジスタ (Stack Pointer Register)

B (1011) EXPC レジスタ (Execution PC Recister, 実行中命令が格納されていたアドレスを示す)

C-F (1100-1111) 未定義

Page 78: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)
Page 79: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)

79

第 10章

本マニュアルの変更履歴

10.1 Ver.0.98 (2019年 4月 9日)

KUECHIP-3F に KUE-CHIP2, RUECHIP を加えた計 3 種類の CPU の制御/観測が可能になった (R8C29

マイコンのファームウェアは 20181027 以降) . KUE-CHIP3F CPU の制御/観測方法を中心に説明する, 本マニュアルの名称は「KUECHIP-3F 制御/観測リファレンスマニュアル」とした. また機能拡張が行われたボードの名称は「KR-CHIP 教育用ボード」とした.

Page 80: KUECHIP-3F CPU - ASTEM...KUECHIP-3F CPU 制御/観測リファレンスマニュアル 著者 東香実(関西学院大学大学院) 大迫裕樹(関西学院大学大学院) 柴田敦也(奈良先端科学技術大学院大学)