2475341 ランダム
 HOME | DIARY | PROFILE 【お気に入りブログ登録】 【ログイン】

CPUを作ろう ~計算機教材とマイコンと電子工作~

K-COMを用いた演習

第4章 K-COMを用いた演習



4.1 K-COMのインストールと起動

 これまで説明してきたK-COMについて,パーソナルコンピュータ(DOS/V機)上における動作シミュレータをで演習を行う.K-COMの作成及び動作環境は表4.1に示すとおりである.
 インストールは配布メディアからK-comフォルダをPC本体のハードディスク上にコピーすればよい.ディレクトリ構成及びファイルの内容は図4.1の通りである.プログラム本体,説明のテキストファイルとHTMLファイル,サンプルプログラム,パーツ,I/Oパーツ,専用アセンブラ,オンラインマニュアルを収納したサブディレクトリがある.

 

表4.1 K-COM作成及び動作環境
Image 863


manual18

図4.1 K-COMのディレクトリ構成とファイルの内容

 

 起動は,KNCTCOM.exeを実行すればよい.すると、図4.2のK-COMのウインドウが開く。
 以下の基本操作は,ウィンドウ上のボタンにより行える.
・右下のSTEPまたはAUTOのボタンで、ステップ動作または自動動作を切り替える.
・F/Eは、ステップ動作の時、命令読み込み(フェッチ)と実行(エグゼキュート)を交互に行う。
・リセットボタンで、各レジスタをリセットする。(停止状態からの復帰)
・外部入力は左下のチェックボックスが入力ポートより行う.右側が出力ポートである.
・プログラムの入力は、メモリのボタンを押す。すると、メモリマップのウインドウが開くので、機械語を入力す る。による機械語ファイルの入出力も行える.

 また,メニューより以下の操作を行うことができる.
・K-COMで使われる各種パーツの動作確認にために作成したアプリケーションをPartsメニューから呼び出すことが できる.
・クロックスピードは、メニューのOptionーClock speedでウエイト無しから最高速までを選択できる。
・外部装置との入出力はOption-External I/O でEnableを選択する。すると、クリップボードを介した外部アプリケーションとのデータのやりとりが可能となる 。
・専用アセンブラはファイルメニューのAssemblerから起動できる。

 

manual19

図4.2 K-COMウィンドウ

 4.2 K-COMの動作


 適当なプログラムを入力後,ステップ動作または自動動作を行うと,動作内容をテキストボックスに示すととも に、動作中のデータの流れをラインの色を変えて表示するようになっている.
 動作の一例として,サンプルとして収納されているプログラムをファイルよりメモリに読み込み,実行する手順 を示す.
(1)ウインドウ上のMAIN MEMORTYをクリックする.すると,図4.3の様にメモリ内容が表示される.起動して すぐのメモリ内容は全て”00”になっている.ここで,メモリマップ上に直接機械語プログラムを入力すること ができる.また,機械語プログラムについて1行コメントをつけることができる.

 

manual20

 

図4.3 メモリマップ

 

manual21

図4.4 HEXファイル読み込み

 

(2)Fileボタンをクリックすると,図4.4のHEXファイル(16進ファイル)操作ウィンドウが表示される .これにより,直接入力した機械語プログラムを保存するか,もしくは以前作成した機械語プログラムを入力する ことができる.また,アセンブラにより別個に作成したプログラムも読み込むことができる.ここで,knctcomフォ ルダの中のSampleフォルダを選択し,”keyin_out.hex”ファイルを選択する.これは,入力ポートからアキューム レータにデータを取り込み,出力ポートに出力するプログラムである. 
(3)Loadボタンでファイルが開き,メモリマップ上へプログラムが転送される.ファイルにコメントがついてい れば表示される.
(4)メモリマップを閉じ,K-COMウインドウの”F/E”ボタンを押す.すると命令のフェッチ動作が行われる.

(5)続けて”F/E”ボタンを押すと,次は取り込んだ命令の実行が行われる.最初の命令はロード命令である ので,コントローラ中の命令デコード結果"LOAD"が点灯し,ロード動作が行われる.
(6)”AUTO”ボタンを押すと,フェッチ,実行サイクルが自動で繰り返される.実行スピードはメニューの OptionーClock speedで設定できる.
(7)入力ポートのチェックボタンをクリックすると入力信号をHigh又はLowに変化できるので,入力され た信号がアキュームレータに取り込まれ,その内容が再び出力ポートに転送される過程が確認できる.(それ以外 の動作は,条件ジャンプ命令を用いた繰り返しのための命令実行が行われている.)



 4.3 基本パーツと動作

 K-COMを構成している,ALU,レジスタ等の各種パーツを動作確認できるように個別にアプリケーションを作成 してある.これらはPartsメニューから開けるようになっている.

---------------------------------------
RESISTER(図4.5)
D-FF8個からなるレジスタであり,入出力をスイッチ(SW)とLEDにより入力及び
表示する事ができる.
---------------------------------------

manual23

図4.5 レジスタ

---------------------------------------
ALU(図4.6)
 論理・算術演算ユニットである.IRの値により行う演算が決まり、000
   のADD命令から011のSHIFT命令までが入力されたとき演算動作を行い,
その他の入力の時は,ALUは動作しない.この演算動作は,クロックに同期
   して行われる.
    演算結果は,ALUに備えられているラッチ(一時記憶レジスタ)と,フラグ
   に出力される.
---------------------------------------

manual24

図4.6 論理・算術演算ユニット



---------------------------------------
MEMORY(図4.7)
 メモリ(記憶装置)である.アドレス信号を受け,00Hから1DHまでの
   アドレスが選択されたとき,メモリの読み出し,書き込みを行う.
    読み出し時は,メモリ内容がデータバスにセットされる.
    書き込み時は,データバスにセットされた内容が所定のアドレスに書き込ま
    れる.
---------------------------------------

manual25

図4.7 メモリ

---------------------------------------
CONTROLLER(図4.8)
 マイクロプログラム制御方式の制御構造である.制御論理回路には,命令レジスタ上位3ビットの命令コード, フラグ,及びマイクロコードROMが入力され,クロックに同期して次の状態がステータスレジスタに出力される .ステータスレジスタの値はデコードされ,マイクロコードROM内に記憶された制御信号が各回路の入出力ゲー トに送られる.
---------------------------------------

manual26

図4.8 制御構造


---------------------------------------
PC,IR(図4.9)
 命令レジスタとプログラムカウンタの動作を示している.通常は制御構造の信号によりプログラムカウンタの値 が1ずつ増加し,命令を順に読み込んで行くが,条件ジャンプ命令の実行により,ジャンプが行われると,プログ ラムカウンタにはオペランドのアドレス値がロードされる.
---------------------------------------

manual27

図4.9 プログラムカウンタと命令レジスタ

---------------------------------------
I/O PORT(図4.10)
 アドレスデコーダにより1EHまたは1FHのアドレスが選択されると,入力または出力
 ポートがそれぞれ選択され,外部装置との入出力が行われる.
 外部入力はチェックボックスにより設定でき,アドレスデコードを受けるとデータを
 バスに出力する.出力は,アドレスデコードを受けてデータバスの信号を出力ポートの
 D-FFの入力に受けた状態で,クロック信号によりデータをラッチし,出力をポート
 に保持する.
---------------------------------------

manual28

図4.10 入出力ポート





 4.4 アセンブラ 

 K-COMには専用のアセンブラが用意されている.直接機械語を書かなくとも,アセンブリ言語で記述されたファイルをアセンブラにより機械語に変換できる.
 K-COMウインドウからAssemblerメニューより,図4.11の専用のアセンブラが立ち上がる.あらかじめ用意したアセンブラプログラムファイル(拡張子".asm")を選択し,”OK”をクリックすると、アセンブルが実行される.エラーがなければ機械語のHEXファイル(16進ファイル:拡張子".hex")を出力し,メッセージを表示して終了する.エラー時は,エラーメッセージを表示した後,アセンブラプログラムと同名で拡張子".log"のエラーログファイルを出力する。
 アセンブラプログラムの記述について,例を図4.12に示す.これは先にK-COMの動作説明に用いたプログラム のアセンブラプログラムである.
 プログラムについて以下に解説する.
 ”;”はコメント行を示し、アセンブル時にその行は無視される。”;”は行の最初のみ有効である.また,1行目のコメントは出力ファイルの先頭にコメントとして付加される。もし,コメントがない場合も,機械語ファイルの1行目には”;”が必要である.
 6行目は改行のみであるが,プログラムを見やすくするために入れる改行はアセンブル時は無視するようになっている.
 7行目の”LOOP:”はラベルと呼ばれ,ジャンプ命令の飛び先など,プログラム中の特定の行を指し示すために用いられる.適当な英文字名の後にスペースを入れずに”:”をつける.その後,1つ以上のスペースまたはタブの後,オペコードとオペランドを記述する.

manual29

図4.11 専用アセンブラ

 ”LD”はロード命令であり,指定された番地のメモリ内容をアキュームレータ(ACC)に転送する命令で ある.オペランドは”&h1E”である.この”&h”は16進数を記述するとき数値の前につける識別記号である.1E番地はメモリでなく入力ポートに割り当てられているので,入力ポートよりアキュームレータに値を取り込みむ動作を行う.オペコードとオペランドの間は,ラベルの後と同様に1つ以上のスペースまたはタブが必要である.
 8行目のST命令は,アキュームレータの内容を指定された番地のメモリに転送する命令である.今の場合オペランドの1F番地はメモリでなく出力ポートに割り当てられているので,アキュームレータの値を出力ポートに出力する動作を行う.
 9行目の”NAND”命令は,アキュームレータの値と指定されたアドレスの内容との論理演算NANDを行い,結果をアキュームレータに代入する命令である.オペランドには11行目のラベル”D0”が記述されている.
 11行目の命令”DB”は補助命令と呼ばれるものである.アセンブラはこの命令のかかれている番地にオペラ ンドの数値を置く.よって,9行目のNAND命令はアキュームレータの値と0とのNANDをとり,アキューム レータの値に関わらず,0が結果として与えられる.
 10行目のJPNZ命令は直前の演算結果が0か否かで条件ジャンプを行う命令である.直前のNAND演算で は,結果が0なのでジャンプを行う.K-COMでは命令数の都合で無条件ジャンプ命令を用意できなかった.無条件ジ ャンプが必要なときにはこの例の様に,必ず条件が一致するような演算を直前に行ったのち条件ジャンプを実行す ることで,無条件ジャンプとすることができる.JPNZ命令の飛び先は,先に示したラベル”LOOP”の行で あり,本プログラム例は”LD”から始まる以上の動作を繰り返すプログラムである.

Image 692

図4.12 プログラム例

 同プログラムのアセンブル結果を図4.13に示す.
 1行目はプログラム例の1行目の”;”を除いたものである.このように,機械語ファイルの先頭には必ずコメ ント行が1行はいる.直接機械語ファイルを記述する際は,最初の行に必ずコメントまたは空白行を入れなければ ならない.
 2行目の”9E”はLD命令のアセンブル結果である.3行目以降,同様にアセンブル結果が入る.6行目の” 0”は補助命令”DB”により置かれた定数データである.
 ”9E”はメモリの0番地に,以降同様に”0”はメモリの4番地に置かれる.5行目
の”E0”はラベルに従い,0番地にジャンプする命令である.

 

Image 691

図4.13 アセンブル例

 4.5 入出力パーツを用いた演習

 K-COMの様な小規模なワンチップのマイクロコンピュータは,我々の身の回りでは,さまざまな電気・電子機 器の制御用の組込みマイコンとして用いられることが多い.そこで,K-COMでも入出力ポートを使った機器の制御等 の演習を行うことができるようにI/Oパーツを準備した.外部パーツとのデータ受け渡しは,OSで準備されて いるクリップボードを使用している.K-COMの演習のみを行う場合には問題ないが,他のアプリケーションと並列し て演習を行うときには注意が必要である.
 K-COMウィンドウのPartsメニューから,I/OPartsを選択すると,I/Oパーツ選択のウィンドウが表示される. 図4.14は入力ポートおよび出力ポートに接続して用いることができるI/Oパッドである.パッドに対するキ ー入力操作は,パッドの動作から見ればキーに対する16進数値の出力に相当する.逆にパッドによるLED表示 動作はパッドに対する入力の表示である.キー出力値とLED入力はそれぞれパッド内のテキストボックス内に表 示される.キー入力はK-COMの入力ポートに,LED出力は,K-COMの出力ポートに仮想的に接続されることになる .

manual30

図4.14 I/Oパッド

 

 K-COMのOptionメニューよりExternal I/O でEnableを選択する。すると、クリップボードを介した外部アプリケーションとのデータのやりとりが可能となる 。その後,I/Oパッドを開いた後,K-COM上で入出力を含むプログラムを実行させれば,I/Oパッド上入力値が K-COMの入力ポートより取り込まれ,K-COMの出力ポートの信号がLEDに表示される.
 先ののプログラム例,”keyin-out.hex”を実行すれば,パッドより入力した値がLEDに出力される.
 その他,制御の演習用パーツとして,図4.14に示す油温コントロールのシミュレータを用意した.容器に油 が入れられ,容器下面にヒータがセットされている.ヒータに電力を供給するとヒータが加熱され,油の温度が上 昇する.ヒータ電力はボタンにより直接加減できる.油の温度は周囲温度とヒータ電力,及び時間経過により決ま る.周囲温度,油の温度,ヒータ電力はウィンドウ内のテキストボックスに表示されている.
 この油温制御系において,外部に接続されたコンピュータにより温度制御を行うには,コンピュータは温度セン サから入力を得て,ヒータの出力制御を行えなければならない.
チェックボックスの選択により外部入出力を”使用する”にする.すると,油温制御系とK-COMが仮想的に接続され る.K-COMの出力ポートの信号がヒータへの入力電力となり,油温がK-COMの入力ポートの信号となる.
 油温を目標値に一定となるような制御を行うプログラムをサンプルとして用意した.Sampleフォルダか ら"oilcontrol.hex”という機械語プログラムをメモリにロードし,外部入出力をK-COM,油温コントロールともに 可能にしてプログラムを実行すると,油温が100℃一定になるように温度制御が行われる.クロックスピードを 変えると,目標値に対する温度のふれ幅が変化することが分かる.

 

manual31

図4.14 油温コントロール





 4.6 プログラミング演習

 K-COMを用いて,様々なプログラミング演習を行うことができる.演習を通して,コンピュータの構造について基 礎的な知識が習得できれば幸いである.以下に簡単な演習課題を用意したので各自演習を行ってほしい.

課題1 用意された2値の足し算を行うプログラムを作成せよ.また,桁上がりが生じた際,どのような結果にな るか確かめよ.

課題2 用意された2値の引き算を行うプログラムを作成せよ.結果が負の数になる時の結果について調べよ.

課題3 用意された2値のかけ算を行うプログラムを作成せよ.

課題4 用意された2値のわり算を行うプログラムを作成せよ.ただし,結果は整数値とし,余りは無視してよい .

課題5 I/Oパッドを用いて,キー入力値の2倍の値をLEDに出力するプログラムを作成せよ.

課題6 I/Oパッドより値を2個入力して,結果をLEDに出力するプログラムを作成せよ.

課題7 油温コントロールにおいて,油温が目標値に出来るだけ近い値になるように,制御方法を工夫せよ.



Copyright (c) 1997-2018 Rakuten, Inc. All Rights Reserved.