【PICの内部構成】
プログラムは命令が規則正しく実行されることで正常動作をします。
では、PICの中で命令はどの様に実行されるのでしょうか?
それを理解するには、PICの中身を知るのが早道です。PICの中は
どんな構造になっているのでしょうか?
下図が簡単化したPICの中身の構造です。
プログラムメモリ
プログラムの命令
の格納庫
レジスタファイル
データレジスタの
格納庫
プログラムカウンタ
実行番地の指定
STATUSレジスタ
命令実行後の
状態の格納庫
タイマー
時間を作る周辺
ハードウェア
入出力ポート
入出力ピンとつな
がるデータレジスタ
ALU
演算を行う回路
Wreg
作業レジスタ
データバス
データの通り道
【命令実行動作概要】
上図の内部の構造で命令が実行される手順を説明します。
(1)命令の取りだし
まず、プログラムの命令は、プログラムメモリに格納されています。
そしてプログラムカウンタが指しているアドレス(番地)の命令が呼び
出されて命令レジスタに行き、そこで実行されます。
このプログラムカウンタは電源がONとなった時や、リセットされた時に
は必ず0となります。従って、プログラムは最初は必ず0番地から
開始されることになります。
(2)命令の内容解読
命令の種別や実行内容は命令そのものの中にありますから、それを
まず命令レジスタの中で解読します。
(3)命令の実行
その結果、命令の種別によってその後の動作は変わりますが、例えば
加減算などの演算に関する命令の実行は、Mux(選択切替ユニット)、
ALU(演算ユニット)、Wreg(作業レジスタ)の部分で行われます。
(4)データの取り出し
その演算に関連するデータは、レジスタファイルからデータの通り道
であるデータバスを経由して、読み出したり書きこんだりされます。
ここでレジスタとは一時的な記憶回路のことで、このレジスタが命令
実行の中心的な働きをします。
命令に使われるデータはレジスタファイルの指定レジスタに記憶され
ていますし、実行結果の状態はSTATUSレジスタに記憶され、正負や
ゼロかなど色々な判定に使われます。
またPICの場合には、タイマーや入出力ピンを動作させるのにもレジス
タが使われます。
(5)データの格納
命令実行により演算された結果は、指定されたレジスタに再格納され
ます。この時もやはり、ALUからデータバスを通ってレジスタファイルや
Wregに格納されることになります。
(6)次ぎの命令へ
この命令実行が完了すると、プログラムカウンタが自動的に+1され、
最初に戻って、次ぎの命令が実行されることになります。
このようにして順次命令が実行されることでプログラムが動作をします。
但し、命令によっては、このプログラムカウンタ自身にデータを上書き
するものがあります。これによって、プログラムカウンタが変更されると
別のアドレスの命令が次ぎに取り出されて実行されることになります。
これがジャンプ命令の働きになります。