JPH0969046A - ループの制御装置 - Google Patents

ループの制御装置

Info

Publication number
JPH0969046A
JPH0969046A JP22386095A JP22386095A JPH0969046A JP H0969046 A JPH0969046 A JP H0969046A JP 22386095 A JP22386095 A JP 22386095A JP 22386095 A JP22386095 A JP 22386095A JP H0969046 A JPH0969046 A JP H0969046A
Authority
JP
Japan
Prior art keywords
loop
stack
end address
value
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP22386095A
Other languages
English (en)
Inventor
Masaichiro Maeda
雅一郎 前田
Hideki Miyasato
秀樹 宮里
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Toshiba AVE Co Ltd
Original Assignee
Toshiba Corp
Toshiba AVE Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp, Toshiba AVE Co Ltd filed Critical Toshiba Corp
Priority to JP22386095A priority Critical patent/JPH0969046A/ja
Publication of JPH0969046A publication Critical patent/JPH0969046A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】 【課題】 無処理等のプログラムを無くしつつ、それに
よる余分な時間をなくす。 【解決手段】 本発明の制御装置は、第1、2、3スタ
ックと、カウンタによるアドレス値と第2スタックのう
ちスタックポインタ(以下、SP)で指示されたエンド
アドレスとの一致によりループの実行回数(以下、回
数)を計数し、計数して得た回数が第3スタックのうち
SPで指示された回数になっている場合、SPで指示さ
れたエンドアドレスが第2スタックのうちSPの1少な
い値で指示された一段上位のループのエンドアドレスと
同じであるかを比較し、比較の結果同じである場合、回
数が、一段上位の回数、またはこれより上位の回数と等
しくなっているときに、SPの値を1または上位のルー
プまで減少させるとともに、新たなSPで示されるルー
プのスタートアドレスを前記プログラムカウンタの出力
としてプログラムの実行を行うプログラムカウンタの制
御手段とを有する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、CPUやDSPな
どの集積回路において、プログラムカウンタで指示され
たプログラムの実行を制御するのにあたり、ループを有
するプログラムの実行を制御するための技術に関する。
【0002】
【従来の技術】同じ内容のプログラムが繰り返される場
合、プログラムカウンタ(以下PC)が示すアドレスを
変更させて、プログラムをループにして繰り返し同一の
プログラムを実行させることが通常行われる。このルー
プの実行の態様の一つとして、ループの始まりを示す所
定の命令(マシン語)があるアドレスから命令を実行
し、上記所定の命令で設定されたループのエンドアドレ
ス(以下エンドアドレスとする)にアドレスを変更し、
エンドアドレスまでの間の内容を上記所定の命令で指定
された回数、n回(nは正の整数)処理を繰り返す、と
いうものがある。この方法は、例えば、C言語にあるよ
うなfor文、while文などに対応して用いること
が可能であり、ソフトウェア等のプログラムの容量(実
際にここではアッセンブラまたはコンパイラ等によって
生成されたマシン語)を減らそうとするものである。
【0003】図4は、上記従来のループの始まりの命令
について、CPUやDSPなどのハードウェアの動作を
フローチャートにして示したものである。
【0004】まず、ハードウェアは、PCによって示さ
れるプログラムの内容をフェッチし(図4符号40
1)、PCを更新(例えばPCの値を1加算する)する
(同図符号402)。そして、そのプログラムがループ
中であれば、PCがエンドアドレスかを判断する(同図
符号403)。エンドアドレスである場合、記憶されて
いるループの回数を更新し(同図符号404)、指定さ
れた回数分の処理を行ったか等を判断する(同図符号4
05)。指定された回数分の処理を行っていない場合、
ループを繰り返すようにループのスタートアドレスにP
Cの値を更新する。そして、同図符号401の部分に戻
ってPCの値に更新し次ステップのプログラムをフェッ
チする動作を繰り返す。
【0005】また、プログラムのループが入れ子状態に
なっている場合、ループのネストと呼ばれ、ループ処理
(以下、親のループ)の中でさらに別のループ(以下、
子のループ)処理が1または複数段多重になっている。
次には、ネストを1段とした最も簡明化したものを説明
する。このようなループのネストの場合、親のループが
始まり、親のループの実行中に子のループが始まる。子
のループが終了するとき、PCが示している子のエンド
アドレスのプログラムをフェッチし、このフェッチした
エンドアドレスをPCは更新する。更新したPCの値は
子のエンドアドレスに1を加えた値を示している。そし
て、子のエンドアドレスで指定回数分ループを終了した
ときに、子のループを終了し、PCが示しているアドレ
ス「子のエンドアドレス+1」のプログラムの内容をフ
ェッチして、親のループに戻る。
【0006】しかしながら、このとき、親と子のエンド
アドレスが同じである場合、子のループが正常に終了し
た後、PCは子のエンドアドレスに1を加えた値つまり
親のエンドアドレスに1を加えた値を示していて親のル
ープに戻ることなしに親のループから抜け出てしまう。
そのため、ループのネストとして矛盾が生じる。
【0007】そこで、従来、親と子のエンドアドレスは
同じにしない規制が設けられており、子のエンドアドレ
スに1を加えた値すなわち親のエンドアドレスに無処理
のプログラム(例えばNOP命令)等を配置することに
よって親のループに戻ることなしに親のループから抜け
出てしまうことを回避している。
【0008】
【発明が解決しようとする課題】上述の如く、親のエン
ドアドレスに無処理のプログラム(例えばNOP命令)
等を使用することによって矛盾を回避できるが、新たに
2つの問題点が生じてくる。その1つは、無処理のプロ
グラムを置くために、その分の容量が無駄となる点、も
う1つは、実行ステップに余分な時間がかかってしまう
点である。この余分な時間は、「(NOP等のマシンサ
イクル時間)×(ループの指定回数n)」であらわさ
れ、親のループ回数nが大きい場合には余分な時間によ
る処理速度の低下は顕著となる。このことは特にDSP
等で高速に処理を要求される場合には重大な問題となっ
てくる。
【0009】そこで、本発明は、このような問題に対
し、無処理等のプログラムを無くしつつ、それによって
生じていた余分な時間をなくす手段を提供することを目
的とする。
【0010】
【課題を解決するための手段】本願請求項1の発明にか
かるループの制御装置は、順次実行すべきプログラムの
アドレスを指示するためのプログラムカウンタを制御す
ることによってプログラムのループの制御を行うループ
の制御装置であって、プログラムのループのスタートア
ドレスを格納するための第1のスタックと、ループのエ
ンドアドレスを格納するための第2のスタックと、ルー
プの回数を格納するための第3のスタックと、カウンタ
によるアドレス値と第2のスタックのうちスタックポイ
ンタで指示されたエンドアドレスとの一致により前記ル
ープの実行回数を計数し、計数して得たループの実行回
数が第3のスタックのうちスタックポインタで指示され
たループの回数になっている場合、スタックポインタで
指示されたエンドアドレスが第2のスタックのうちスタ
ックポインタの1少ない値で指示された一段上位のルー
プのエンドアドレスと同じであるかを比較し、比較の結
果同じである場合、ループの実行回数が、一段上位のル
ープの実行回数、またはこれより上位のループの回数と
等しくなっているときに、前記スタックポインタの値を
1または上位のループまで減少させるとともに、新たな
スタックポインタで示されるループのスタートアドレス
を前記プログラムカウンタの出力として前記プログラム
の実行を行うプログラムカウンタの制御手段とを有す
る。
【0011】本願請求項2の発明にかかるループの制御
装置は、請求項1の構成に加えて、プログラムカウンタ
の制御手段は、計数することによって順次実行すべきプ
ログラムのアドレスを与えるためのカウンタと、カウン
タの計数値と、第1のスタックでスタックポインタで指
示された位置に格納されたスタートアドレスとを切り替
えてプログラムカウンタの出力とするスイッチと、第1
のスタックでスタックポインタにより指示された位置に
格納されたエンドアドレスとカウンタの計数値とからル
ープの最後のアドレスに等しいかどうかを判定するため
のエンドアドレス比較回路と、ループの実行回数を計数
し、計数して得たループの実行回数が、第1のスタック
でスタックポインタにより指示された位置に格納された
ループの回数に等しいかどうかを判定するためのループ
回数判定回路と、スタックポインタで指示されたエンド
アドレスが第2のスタックのうちスタックポインタが示
す値より1少ない値で指示された一段上位のループのエ
ンドアドレスに等しいかを判定するための親エンドアド
レス比較回路と、ループの実行回数が、一段上位のルー
プの実行回数と等しいかを判定するための親ループ回数
判定回路と、エンドアドレス比較回路、ループ回数判定
回路、親エンドアドレス比較回路及び親ループ回数判定
回路の判定の結果等しいとされた場合に、スタックポイ
ンタの値を1減少させるスタックポインタのコントロー
ラと、を含んで構成され、コントローラによって1減少
させた新たなスタックポインタで示されるループのスタ
ートアドレスをスイッチからプログラムカウンタの出力
としてプログラムの実行を行う。
【0012】本願請求項3の発明にかかるループの制御
装置は、請求項1の構成に加えて、プログラムカウンタ
の制御手段は、計数することによって順次実行すべきプ
ログラムのアドレスを与えるためのカウンタと、カウン
タの計数値と、第1のスタックでスタックポインタで指
示された位置に格納されたスタートアドレスとを切り替
えてプログラムカウンタの出力とするスイッチと、第1
のスタックでスタックポインタにより指示された位置に
格納されたエンドアドレスとカウンタの計数値とからル
ープの最後のアドレスに等しいかどうかを判定するため
のエンドアドレス比較回路と、ループの実行回数を計数
し、計数して得たループの実行回数が、第1のスタック
でスタックポインタにより指示された位置に格納された
ループの回数に等しいかどうかを判定するためのループ
回数判定回路と、スタックポインタで指示されたエンド
アドレスが第2のスタックのうちスタックポインタが示
す値より少ない値で指示された上位のループのエンドア
ドレスに等しいかを判定するための親エンドアドレス比
較回路と、ループの実行回数が、上位のループの実行回
数と等しいかを判定するための親ループ回数判定回路
と、エンドアドレス比較回路、ループ回数判定回路及び
親エンドアドレス比較回路が等しいとされた場合に、前
記親ループ回数判定回路の判定の結果が等しいとされる
上位のループまで、前記スタックポインタの値を1減少
させるスタックポインタのコントローラと、を含んで構
成され、コントローラによって減少させた新たなスタッ
クポインタで示されるループのスタートアドレスをスイ
ッチからプログラムカウンタの出力として前記プログラ
ムの実行を行う。
【0013】本願請求項4の発明にかかるループの制御
装置は、請求項1の構成に加えて、プログラムのループ
のスタートを示す命令は、当該ループのネストの段数を
示す情報ビットを有し、プログラムカウンタの制御手段
は、ループのスタートを示す命令があったときに情報ビ
ットからループのネストの判定をすることを特徴とす
る。
【0014】本願請求項5の発明にかかるループの制御
装置は、請求項1の構成に加えて、プログラムのループ
のスタートを示す命令は、当該ループのエンドアドレス
と該ループの一段上位のエンドアドレスとが同じか否か
を示す情報ビットを有し、前記プログラムカウンタの制
御手段は、前記ループのスタートを示す命令があったと
きに前記情報ビットから前記ループのネストの判定をす
ることを特徴とする請求項1記載のループの制御装置。
【0015】本願請求項1ないし3の発明にかかるルー
プの制御装置によれば、上述したように、新たなスタッ
クポインタで示されるループのスタートアドレスを前記
プログラムカウンタの出力として前記プログラムの実行
を行うことにより、プログラムのループがネストしてい
る状態において、そのループの終了アドレスを同じもの
にすることができる。
【0016】とくに、本願請求項3の発明にかかるルー
プの制御装置によれば、2以上の複数のループがネスト
している状態においても、そのループの終了アドレスを
同じものにすることができる。
【0017】本願請求項4の発明にかかるループの制御
装置は、情報ビットによりネストの段数を示すことによ
り、プログラムカウンタの制御手段は、ループのスター
トを示す命令があったときに情報ビットからループのネ
ストの判定をすることができる。
【0018】本願請求項5の発明にかかるループの制御
装置によれば、情報ビットにより一段上位のエンドアド
レスとが同じか否かを示すことにより、ループのスター
トを示す命令があったときに情報ビットからループのネ
ストの判定をすることができる。
【0019】
【発明の実施の形態】以下、この発明の実施の形態を図
面を参照して説明する。図1は、本発明の第1の実施の
態様のブロック図であり、CPUやDSPなどの集積回
路において実行すべきプログラムのアドレスを制御する
プログラムカウンタ(以下PC)の出力を得るための部
分を示したものであり、PCの出力はハードウェアで制
御されるようになっている。
【0020】図1の装置には、レジスタファイルで構成
されたスタックエリアがあり、ここでは、各スタック1
01,102,103は、0,1,…,nのn段積み得
るものとして説明する。スタックエリア101は、ルー
プ0〜nについてそれらのスタートアドレスを格納し、
スタックエリア102は各ループ0〜nのループのエン
ドアドレスA0〜Anを格納し、スタックエリア103
は各ループ0〜nのループの回数C0〜Cnを格納す
る。これらスタックには、あるループの実行中に、ルー
プの始まりを示す所定の命令(マシン語)が実行される
ごとに値が順に格納されるようになっている。なお、こ
の所定の命令は、アセンブラやコンパイラ等といったソ
フトウェア等によって記述された内容(プログラム)を
マシン語に変換する課程においてマシン語内にネストの
段数の情報ビットを持つようになっており、これによっ
てネストの判定ができるようになっている。これ以外の
部分がプログラムカウンタの制御手段をなす。
【0021】そして、これらスタック101,102,
103は、ループスタックポインタ(以下LSとする)
で指示された位置(0〜n)にあるものの値が取り出さ
れるようになっている。これらのスタック以外の部分が
プログラムカウンタの制御手段をなす。
【0022】ループスタックポインタのコントローラ1
06は、LSの値mを制御するためのものである。
【0023】ループのネスト判定回路124は、その入
力にコントローラ106の出力であるLSが与えられ、
ループのネスト状態を判定するものである。このLSの
値m(0〜n)は、その時点でのループのスタック10
1,102,103の段数を示すが、これは現在実行さ
れているループのネストの状態と等価なものである。例
えば、LSの値mが0のときはループ状態でなく且つネ
ストがなく、LSの値mが1のときループ状態であるが
ネストがなく、LSの値mが2以上のときはループ状態
であり且つネストを成しており、そのときLSの値mだ
けネストの深さがある。このループのネストの判定結果
は、ネスト判定回路124からスイッチ切り替え判定回
路107に与えられるようになっている。
【0024】PC用のカウンタ104は、実行すべきプ
ログラムのアドレスを生成するためのものであり、スイ
ッチ108を介してPCの値として出力されるようにな
っている。PC用カウンタ104の値は1ずつ増加する
ようになっているが、ループの実行の初めに、スタック
101に格納されたスタートアドレスのうち、LSの値
mが指し示すループのスタートアドレスが取り込まれる
ようになっている。
【0025】エンドアドレス比較回路105は、PC用
カウンタ104が生成したアドレスと、ループ・エンド
・アドレスを格納したスタックエリア102のうちLS
の値mが指し示す値A即ち現在のネストされているル
ープ・エンド・アドレスAとを比較するためのもので
ある。これによって、実行中のプログラムがそのループ
の最後であるかどうかが判定され、その結果はLSのコ
ントローラ106、スイッチ切り替え判定回路107及
びループ回数判定・更新回路123に与えられるように
なっている。
【0026】エンドアドレス比較回路105において、
PC用カウンタ104が生成したアドレスとLSの値m
が指し示すループ・エンド・アドレスとを比較した結
果、これらが違えば、PC用カウンタ104の値がPC
の値として出力され、次ステップの命令がフェッチされ
る。これは図4でいえば符号403に対応し「NO」の
場合の分岐になる。比較した結果、これらが同じであ
る、即ち、PC用カウンタ104の値がループエンドア
ドレスを示し、そのループの終了を示している事にな
る。このときの結果は、LSのコントローラ106、ス
イッチ切り替え判定回路107及びループ回数判定・更
新回路123に与えられ、ループの終了の処理が行われ
る。
【0027】親エンドアドレス比較回路121は、ルー
プが入れ子状態の場合に、ループのエンドアドレスがル
ープに対して一段上位のループのエンドアドレスと同じ
であるかを判定するものである。親エンドアドレス比較
回路121は、スタックエリア102のうちLSの値m
が指し示す現在のループ・エンド・アドレスAと、L
Sの値mよりも1小さいもの即ち親のループ・エンド・
アドレスAm−1とから、現在のループとその一段上位
である親のループとがともにループの最後であるかどう
かが判定され、その結果はLSのコントローラ106、
スイッチ切り替え判定回路107及びループ回数判定・
更新回路123に与えられるようになっている。
【0028】ループ回数判定・更新回路123は、エン
ドアドレス比較回路105の比較結果からPC用カウン
タ104の値がループ・エンド・アドレスになった回数
をカウントして求め、この求めた回数とLSの値mが指
し示すスタックエリア103の内容である現在のループ
の回数(Cm)とを比較する。そして、現在実行されて
いるプログラムのループの回数が最後であるかを判定し
て、その結果をLSのコントローラ106及びスイッチ
切り替え判定回路107に与える。ループの回数が最後
である場合、LSの値mを減少させてスタックの位置を
更新し、あらたなスタック101の位置のループスター
トアドレスをPCの値を出力させる。
【0029】親ループ回数判定回路122は、ループの
始まりを示す所定の命令があるとループ回数判定・更新
回路123でカウントしたループ回数を親のループ回数
として保存する。そして、その保存した値がLSの値m
より1小さい値で指し示すスタックエリア103の親の
ループ回数Cm−1と比較し、親のループが最後である
かどうかを判定する。その結果は、LSのコントローラ
106及びスイッチ切り替え判定回路107に与えら
れ、ループ回数判定・更新回路123の結果と共に用い
られるようになっている。
【0030】スイッチ切り替え判定回路107は、ネス
ト判定回路124、エンドアドレス比較回路105、エ
ンドアドレス比較回路105、親エンドアドレス比較回
路121、ループ回数判定・更新回路123、親ループ
回数判定回路122の判定結果からスイッチ(SW)1
08の切り替えを制御するものであり、SW108を介
して、PC用カウンタ104からのアドレスか、スタッ
ク101に格納されたスタートアドレスのうち、LSの
値mが指し示すループのスタートアドレスかのいずれか
PCとして出力されるようになっている。このPCの値
が実行すべきプログラムのアドレスを示し、それに従っ
た制御がそのCPUやDSPなどの集積回路において行
われるようになっている。
【0031】つぎに、この回路の動作を説明する。
【0032】プログラムがループ中でない場合、LSの
値mが0であり、PC用カウンタ104からのアドレス
がPCとして出力され、アドレスをインクリメントしな
がら順にプログラムが実行されて行く。これは、図4で
いえば符号401及び符号402の動作になり、符号4
03の「NO」の場合の分岐になる。
【0033】プログラム実行中に、ループの始まりを示
す所定の命令があると、LSの値mをインクリメント
し、そのループのスタートアドレス、エンドアドレス、
ループの回数C0〜Cnがスタック101,102,1
03のLSの値mが示す位置に格納される。そして、P
Cの値がそのループのエンドアドレスになるまで、アド
レスをインクリメントし次ステップの命令をフェッチし
ながら順にプログラムが実行されて行く。
【0034】PCの値がそのループのエンドアドレスに
なると、これが現在のループのエンド・アドレスA
一致するためエンドアドレス比較回路105で検出され
る。そして、ループ回数判定・更新回路123で、現在
実行されているプログラムのループの回数を判定する。
これは、図4でいえば符号403から符号404への分
岐と等価である。
【0035】現在実行中のプログラムのループの回数が
ループの回数Cmよりも小さい、すなわちループの回数
が最後でない場合、LSの値mの値はそのままであり、
LSの値mが指し示すスタックエリア101にあるその
ループのスタートアドレスをPCとして出力するととも
に、これをPC用カウンタ104に格納してそのループ
のスタートから次ステップの命令をフェッチしながら順
にプログラムの実行が繰り返される。こうしてPCをL
Sの値mが指し示すスタックエリア101にある現在の
ループスタートアドレスで更新させて実行される。これ
は、図4でいえば符号405の「NO」の場合の分岐と
等価である。
【0036】現在実行中のプログラムのループの回数が
ループの回数Cmと同じ、すなわちループの回数が最後
である場合、これは、図4でいえば符号405の「YE
S」の場合の分岐と等価である。しかし、この実施の態
様では、親エンドアドレス比較回路121及び親ループ
回数判定回路122で、そのときのPCの値が親ループ
のエンドアドレスAm−1及び親のループ回数Cm−1
の値の両方が最後であるかどうかが判定される。この点
が実施の態様の特徴である。
【0037】現在実行中のプログラムのループの回数が
ループの回数Cmと同じである場合、ループの回数が最
後であるので、ループ回数判定・更新回路123で最後
であると判定され、LSのコントローラ106はLSの
値mを1減少させる。そして、親エンドアドレス比較回
路121でPCの値が、そのループの親ループのエンド
アドレスかが判定される。
【0038】PCの値がそのループの親ループのエンド
アドレスでなかった場合、SW108によりPC用カウ
ンタ104の値がPCの値として出力される。そして、
PC用カウンタ104の値即ちPCの値が1増加しアド
レスがインクリメントすることによって、そのループを
抜け出し親ループにもどる。そして、この親ループにつ
いて引き続き次ステップの命令をフェッチしながら順に
プログラムを実行する。
【0039】PCの値がそのループの親ループのエンド
アドレスであった場合、実行していたループは最後であ
り、PCの値が示すそのアドレスが実行していたループ
の親のループの終了のアドレスであるが、親のループは
終了しているものとは限らない。そのため、LSの値m
が2以上すなわちネスト状態が2以上であれば、親ルー
プ回数判定回路122で、親のループ回数Cm−1が最
後になっているかどうか判定される。
【0040】親のループ回数Cm−1が最後になってい
ない場合、LSの値mが1、即ちネスト状態が1の場合
と同じであり、当該プロセスは実行中であり、親のルー
プは終了していないため、スタック101のうち、LS
の値mを1減少させた値(m−1)で指示される位置に
格納された親のループのスタートアドレスが選択され、
SW108によりPCの値として出力される。そして、
このスタートアドレスはPC用カウンタ104の初期値
として取り込まれ、SW108によりPC用カウンタ1
04の値がPCの値として出力される。そして、PC用
カウンタ104の値即ちPCの値が1増加しアドレスが
インクリメントすることによって、親ループの初めから
動作が繰り返される。
【0041】親のループ回数Cm−1が最後になってい
る場合、親のループは終了であるため、スタック101
のうち、LSの値mを2減少させた値(m−2)で指示
される位置に格納された親のループのさらに親のループ
のスタートアドレスが選択され、SW108によりPC
の値として出力される。そして、同様に、このスタート
アドレスはPC用カウンタ104の初期値として取り込
まれ、SW108によりPC用カウンタ104の値がP
Cの値として出力される。PC用カウンタ104の値即
ちPCの値が1増加しアドレスがインクリメントするこ
とによって、親のループのさらに親ループの初めから動
作が繰り返される。
【0042】この実施の態様の場合は、ループが終了し
たアドレスにおいて、更新されるPCの値が3種類であ
り3分岐であることになるが、ループおよびその親ルー
プが終了したアドレスが同じであっても、ループの実行
の状態を判定してPCの値セットし、それぞれの分岐に
応じた正しい処理を実行することができる。
【0043】このように、連続してネスト状態になって
いるループのエンドアドレスが同じになっていても、ル
ープが終了したアドレスから正しい分岐先のアドレスに
することができる。
【0044】なお、この実施の態様では、ネスト状態に
なっているループのエンドアドレスが連続して同じにな
っているものが2つの場合に利用可能になっているが、
同じになっているものが2つよりも大きい場合には、コ
ンパイル時に何等かの使用上の制限をつけるか、また
は、エンドアドレス比較回路と親ループ回数判定回路と
をさらに複数設けるようにして利用可能になる。
【0045】図2は、第2の実施の態様のブロック図を
示したものである。
【0046】上記第1の実施の態様では、ループのエン
ドアドレスが連続して2つまでであったが、本実施の態
様では、ネストの状態を総括的に判断して多分岐するよ
うに改良した一例である。なお、上記第1の実施の態様
と同一もしくは同等の構成要素については同一の符号を
用いると共にその説明を省略するものとする。
【0047】この第2の実施の態様においても、ループ
のスタートアドレス,エンドアドレス,回数を格納する
スタックエリア101,102,103があり、これら
はループスタックポインタ(LS)のコントローラ10
6にて制御されている。これらのスタックには、上記第
1の実施の態様同様、0,1,…,nの順に積まれ、ル
ープスタックポインタ(以下LSとする)で指示された
位置(0〜n)にあるものの値が取り出されるようにな
っている。これらの値は、上記第1の実施の態様同様、
エンドアドレス比較回路105と、ループ回数・更新回
路131とに与えられるようになっている。そして、ス
タック102,103に格納されたループのエンドアド
レス及びループの回数は、すべてLSのベクトル判定回
路132に与えられるようになっている。
【0048】ループ回数・更新回路131は、上記第1
の実施の態様同様、エンドアドレス比較回路105の比
較結果からPC用カウンタ104の値がループ・エンド
・アドレスになった回数をカウントして求め、この求め
た回数とLSの値mが指し示すスタックエリア103の
内容である現在のループの回数(Cm)とを比較する。
そして、現在実行されているプログラムのループの回数
が最後であるかを判定して、その結果をLSのコントロ
ーラ106及びスイッチ切り替え判定回路107に与え
る。ループの回数が最後である場合、LSのベクトル判
定回路132に対し、LSの値mを減少させてスタック
の位置を更新し、新たなスタック101の位置のループ
スタートアドレスをPCの値を出力させる。
【0049】LSのベクトル判定回路132は、スタッ
ク102,103に格納されたループのエンドアドレス
及びループの回数と、エンドアドレス比較回路105の
比較結果及びループ回数・更新回路131の結果とか
ら、スイッチ(SW)108の切り替えを制御するもの
であり、また、ループスタックポインタをどれだけ変化
させるかをLSのコントローラ106に与える。この様
に、LSのベクトル判定回路には、現在のループでのエ
ンドアドレス比較結果と指定回数終了判定結果とループ
のスタックに積まれているエンドアドレス,回数の全て
のデータが入力されるようになっていて、後述するよう
なスイッチ108の切り替え制御が行われる。
【0050】つぎに、この回路の動作を説明する。
【0051】プログラムがループ中でない場合、LSの
値mが0であり、PC用カウンタ104からのアドレス
がPCとして出力され、アドレスをインクリメントしな
がら順にプログラムが実行されて行く。そして、プログ
ラム実行中に、ループの始まりを示す所定の命令がある
と、LSの値mをインクリメントし、そのループのスタ
ートアドレス、エンドアドレス、ループの回数C0〜C
nがスタック101,102,103のLSの値mが示
す位置に格納される。図4でいえば符号401及び符号
403までの動作になる。
【0052】PCの値がそのループのエンドアドレスに
なると、現在のループのエンド・アドレスAとの一致
がエンドアドレス比較回路105で検出される。そし
て、ループ回数・更新回路131で、現在実行されてい
るプログラムのループの回数を判定する。図4でいえば
符号403から符号404への分岐と等価である。
【0053】現在実行中のプログラムのループの回数が
ループの回数Cmよりも小さい、すなわちループの回数
が最後でない場合、LSの値mの値はそのままであり、
LSの値mが指し示すスタックエリア101にあるその
ループのスタートアドレスをPCとして出力するととも
に、これをPC用カウンタ104に格納してそのループ
のスタートから次ステップの命令をフェッチしながら順
にプログラムの実行が繰り返される。こうしてPCをL
Sの値mが指し示すスタックエリア101にある現在の
ループスタートアドレスで更新させて実行される。これ
は、図4でいえば符号405の「NO」の場合の分岐と
等価である。ここまでは、第1の実施の態様と同じであ
る。
【0054】現在実行中のプログラムのループの回数が
ループの回数Cmと同じ、すなわちループの回数が最後
である場合、この点に付いては、図4でいえば符号40
5の「YES」の場合の分岐と等価である。しかし、こ
の実施の態様では、LSのベクトル判定回路132での
判定が異なっている。
【0055】まず、LSのベクトル判定回路132で、
そのときのPCの値が親ループのエンドアドレスA
m−1及び親のループ回数Cm−1の値の両方が最後で
あるかどうかが判定される。
【0056】そして、現在実行中のプログラムのループ
の回数がループの回数Cmと同じである場合、ループの
回数が最後であるので、LSのベクトル判定回路132
で最後であると判定され、LSのコントローラ106は
LSの値mを1減少させる。PCの値がそのループの親
ループのエンドアドレスAm−1でなかった場合、SW
108によりPC用カウンタ104の値がPCの値とし
て出力される。そして、PC用カウンタ104の値即ち
PCの値が1増加しアドレスがインクリメントすること
によって、そのループを抜け出し親ループにもどる。そ
して、この親ループについて引き続き次ステップの命令
をフェッチしながら順にプログラムを実行する。
【0057】PCの値がそのループの親ループのエンド
アドレスAm−1であった場合、実行していたループは
最後であり、PCの値が示すそのアドレスが実行してい
たループの親のループの終了のアドレスである。この場
合、LSの値mよりも2小さいさらに親のループについ
て同様の判定が行われる。即ち、LSのベクトル判定回
路132で、さらに親のループ回数Cm−2が最後にな
っているかどうか判定され、PCの値がさらに親のルー
プのエンドアドレスAm−2になっているかどうか判定
される。
【0058】ループ回数Cm−2が最後でない、或いは
エンドアドレスAm−2になっていない場合、LSの値
mを2小さく即ちm−2にして、さらに親のループの処
理が実行される。そうでない場合は、LSの値mよりも
3小さいさらに親のループについて同様の判定が行われ
る。
【0059】このようにループ回数が最後でかつエンド
アドレスであれば、ループ回数が最後でない或いはエン
ドアドレスではなくなるまでLSの値を小さくし、その
LSの値で示されるスタックに格納されたループのスタ
ートアドレスで或いはPCの値をインクリメントしたア
ドレスで処理が行なわれる。
【0060】図3は、このベクトル判定回路132の一
動作例を示す図である。図の左側に示すようにアドレス
データA0,A1,…,Am−1,Amはループエンド
アドレスのスタック102に積まれ(スタックはA0→
Anの順に積まれる)、図の中央付近に示すようにルー
プ回数のデータをC0,C1,…,Cm−1,Cm,
…,Cnはループ回数のスタックに積まれ、現在のルー
プの基準を示しているポインタLSの値mを示している
ようすである。
【0061】まず、ベクトル判定回路132は、エンド
アドレス比較回路105の比較結果とループ回数・更新
回路131の指定回数終了の判定結果とから、現在のル
ープが終了したときにおいて、エンドアドレスに対して
のベクトル量(Va)とループ回数に対してのベクトル
量(Vc)を求める。
【0062】ベクトル量Vaは、現在のループのエンド
アドレスAmを基準としてネストの浅い方向(Am−
1,Am−2,…,A0の順)にエンドアドレスAmと
異なるエンドアドレスまでのネストの段数を示したもの
である。これは、エンドアドレスAmが親のループのエ
ンドアドレスと同じ場合におけるネストの段数となって
いる。
【0063】ベクトル量Vcは、ループの指定回数Cm
が最後を示す値となっている場合にLSの値mを基準と
してネストの浅い方向(Cm−1,Cm−2,…,C0
の順)にループの指定回数が最後を示す値が連続してい
るネストの段数で示す。
【0064】ネストの段数(ベクトル量)が2の場合に
おいて、ループのエンドアドレスAmにおいてLSの値
mを変化させるベクトル量は、図の右側に示すように、
次の通りである。
【0065】Va>Vcのとき Vc Va=Vcのとき Va又はVc Va<Vcのとき Va その他の状態についても、エンドアドレスの比較結果と
指定回数終了の判定結果から、上記と同様にしてLSの
値mを変化させて更新する。
【0066】その後、ベクトル判定回路132から出力
されるSW制御信号にてPC用カウンタ104またはL
Sコントローラ106からのLSの値mで示されている
ループスタートアドレスとを切り替えPCの値になって
いる。この実施の態様の場合はPCに更新される種類が
多種類であり、多分岐であることになる。
【0067】この実施の態様の場合でも、ループが終了
したアドレスにおいて、そのループおよびその親ループ
やさらにその親のループのエンドアドレスが同じであっ
ても、ループの実行の状態を判定してPCの値をセット
し、それぞれの分岐に応じた正しい処理を実行すること
ができる。
【0068】このように、連続してネスト状態になって
いるループのエンドアドレスが同じになっていても、ル
ープが終了したアドレスから正しい分岐先のアドレスに
することができる。
【0069】以上、述べてきたように本発明によれば、
ハードウェアを用いたループの制御においてPCに設定
するアドレスを複数設定することで処理の状態に合わせ
て多分岐することが可能となる。このため従来の技術に
て使用されていたようなNOP命令などの無処理のプロ
グラム等をなくしつつ余分な時間をなくすことが可能と
なる。
【0070】
【発明の効果】以上の通り、本願請求項1乃至3の発明
にかかるループの制御装置によれば、上述したように、
新たなスタックポインタで示されるループのスタートア
ドレスを前記プログラムカウンタの出力として前記プロ
グラムの実行を行うことにより、プログラムのループが
ネストしている状態において、そのループの終了アドレ
スを同じものにすることができる。
【0071】とくに、本願請求項3の発明にかかるルー
プの制御装置によれば、2以上の複数のループがネスト
している状態においても、そのループの終了アドレスを
同じものにすることができる。
【0072】本願請求項4の発明にかかるループの制御
装置は、情報ビットによりネストの段数を示すことによ
り、プログラムカウンタの制御手段は、ループのスター
トを示す命令があったときに情報ビットからループのネ
ストの判定をすることができる。
【0073】本願請求項5の発明にかかるループの制御
装置によれば、情報ビットにより一段上位のエンドアド
レスとが同じか否かを示すことにより、ループのスター
トを示す命令があったときに情報ビットからループのネ
ストの判定をすることができる。
【図面の簡単な説明】
【図1】本発明の第1の実施の態様のブロック図。
【図2】本発明の第2の実施の態様のブロック図。
【図3】ベクトル判定回路132の一動作例を示す図。
【図4】CPUやDSPなどのハードウェアの動作をフ
ローチャートにして示した図。
【符号の説明】
101,102,103 スタック、 104 カウン
タ、105 エンドアドレス比較回路、106 ループ
スタックポインタのコントローラ、107 スイッチ切
り替え判定回路、121 親エンドアドレス比較回路、
122 親ループ回数判定回路、 123 ループ回数
判定・更新回路、124 ネスト判定回路

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】 順次実行すべきプログラムのアドレスを
    指示するためのプログラムカウンタを制御することによ
    って前記プログラムのループの制御を行うループの制御
    装置であって、 前記プログラムのループのスタートアドレスを格納する
    ための第1のスタックと、 前記ループのエンドアドレスを格納するための第2のス
    タックと、 前記ループの回数を格納するための第3のスタックと、 前記カウンタによるアドレス値と前記第2のスタックの
    うちスタックポインタで指示されたエンドアドレスとの
    一致により前記ループの実行回数を計数し、 計数して得た前記ループの実行回数が前記第3のスタッ
    クのうちスタックポインタで指示された前記ループの回
    数になっている場合、前記スタックポインタで指示され
    たエンドアドレスが前記第2のスタックのうち前記スタ
    ックポインタの1少ない値で指示された一段上位のルー
    プのエンドアドレスと同じであるかを比較し、 比較の結果同じである場合、前記ループの実行回数が、
    前記一段上位のループの実行回数、またはこれより上位
    のループの回数と等しくなっているときに、前記スタッ
    クポインタの値を1または上位のループまで減少させる
    とともに、新たなスタックポインタで示されるループの
    スタートアドレスを前記プログラムカウンタの出力とし
    て前記プログラムの実行を行うプログラムカウンタの制
    御手段とを有するループの制御装置。
  2. 【請求項2】 プログラムカウンタの制御手段は、 計数することによって順次実行すべきプログラムのアド
    レスを与えるためのカウンタと、 前記カウンタの計数値と、前記第1のスタックで前記ス
    タックポインタで指示された位置に格納されたスタート
    アドレスとを切り替えて前記プログラムカウンタの出力
    とするスイッチと、 前記第1のスタックで前記スタックポインタにより指示
    された位置に格納されたエンドアドレスと前記カウンタ
    の計数値とから前記ループの最後のアドレスに等しいか
    どうかを判定するためのエンドアドレス比較回路と、 前記ループの実行回数を計数し、計数して得た前記ルー
    プの実行回数が、前記第1のスタックで前記スタックポ
    インタにより指示された位置に格納されたループの回数
    に等しいかどうかを判定するためのループ回数判定回路
    と、 前記スタックポインタで指示されたエンドアドレスが前
    記第2のスタックのうち前記スタックポインタが示す値
    より1少ない値で指示された一段上位のループのエンド
    アドレスに等しいかを判定するための親エンドアドレス
    比較回路と、 前記ループの実行回数が、前記一段上位のループの実行
    回数と等しいかを判定するための親ループ回数判定回路
    と、 前記エンドアドレス比較回路、前記ループ回数判定回
    路、前記親エンドアドレス比較回路及び前記親ループ回
    数判定回路の判定の結果等しいとされた場合に、前記ス
    タックポインタの値を1減少させるスタックポインタの
    コントローラと、 を含んで構成され、 前記コントローラによって1減少させた新たなスタック
    ポインタで示されるループのスタートアドレスを前記ス
    イッチから前記プログラムカウンタの出力として前記プ
    ログラムの実行を行う請求項1記載のループの制御装
    置。
  3. 【請求項3】 プログラムカウンタの制御手段は、 計数することによって順次実行すべきプログラムのアド
    レスを与えるためのカウンタと、 前記カウンタの計数値と、前記第1のスタックで前記ス
    タックポインタで指示された位置に格納されたスタート
    アドレスとを切り替えて前記プログラムカウンタの出力
    とするスイッチと、 前記第1のスタックで前記スタックポインタにより指示
    された位置に格納されたエンドアドレスと前記カウンタ
    の計数値とから前記ループの最後のアドレスに等しいか
    どうかを判定するためのエンドアドレス比較回路と、 前記ループの実行回数を計数し、計数して得た前記ルー
    プの実行回数が、前記第1のスタックで前記スタックポ
    インタにより指示された位置に格納されたループの回数
    に等しいかどうかを判定するためのループ回数判定回路
    と、 前記スタックポインタで指示されたエンドアドレスが前
    記第2のスタックのうち前記スタックポインタが示す値
    より少ない値で指示された上位のループのエンドアドレ
    スに等しいかを判定するための親エンドアドレス比較回
    路と、 前記ループの実行回数が、前記上位のループの実行回数
    と等しいかを判定するための親ループ回数判定回路と、 前記エンドアドレス比較回路、前記ループ回数判定回路
    及び前記親エンドアドレス比較回路が等しいとされた場
    合に、前記親ループ回数判定回路の判定の結果が等しい
    とされる前記上位のループまで、前記スタックポインタ
    の値を1減少させるスタックポインタのコントローラ
    と、 を含んで構成され、 前記コントローラによって減少させた新たなスタックポ
    インタで示されるループのスタートアドレスを前記スイ
    ッチから前記プログラムカウンタの出力として前記プロ
    グラムの実行を行う請求項1記載のループの制御装置。
  4. 【請求項4】 前記プログラムのループのスタートを示
    す命令は、当該ループのネストの段数を示す情報ビット
    を有し、 前記プログラムカウンタの制御手段は、前記ループのス
    タートを示す命令があったときに前記情報ビットから前
    記ループのネストの判定をすることを特徴とする請求項
    1記載のループの制御装置。
  5. 【請求項5】 前記プログラムのループのスタートを示
    す命令は、当該ループのエンドアドレスと該ループの一
    段上位のエンドアドレスとが同じか否かを示す情報ビッ
    トを有し、 前記プログラムカウンタの制御手段は、前記ループのス
    タートを示す命令があったときに前記情報ビットから前
    記ループのネストの判定をすることを特徴とする請求項
    1記載のループの制御装置。
JP22386095A 1995-08-31 1995-08-31 ループの制御装置 Pending JPH0969046A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP22386095A JPH0969046A (ja) 1995-08-31 1995-08-31 ループの制御装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP22386095A JPH0969046A (ja) 1995-08-31 1995-08-31 ループの制御装置

Publications (1)

Publication Number Publication Date
JPH0969046A true JPH0969046A (ja) 1997-03-11

Family

ID=16804846

Family Applications (1)

Application Number Title Priority Date Filing Date
JP22386095A Pending JPH0969046A (ja) 1995-08-31 1995-08-31 ループの制御装置

Country Status (1)

Country Link
JP (1) JPH0969046A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7080239B2 (en) 2002-06-26 2006-07-18 Oki Electric Industry, Co., Ltd. Loop control circuit and loop control method
CN116051359A (zh) * 2023-01-11 2023-05-02 平头哥(上海)半导体技术有限公司 存储管理装置和方法、处理器以及计算装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7080239B2 (en) 2002-06-26 2006-07-18 Oki Electric Industry, Co., Ltd. Loop control circuit and loop control method
CN116051359A (zh) * 2023-01-11 2023-05-02 平头哥(上海)半导体技术有限公司 存储管理装置和方法、处理器以及计算装置

Similar Documents

Publication Publication Date Title
KR0138468B1 (ko) 마이크로 컴퓨터
US5507027A (en) Pipeline processor with hardware loop function using instruction address stack for holding content of program counter and returning the content back to program counter
JP2001512596A (ja) ブランチ予測の方法およびシステム
JP4412905B2 (ja) 低電力動作制御装置、およびプログラム最適化装置
EP1462931B1 (en) Method for referring to address of vector data and vector processor
JPH0969046A (ja) ループの制御装置
JPH1063508A (ja) 言語処理装置および言語処理方法
EP0270125B1 (en) Pipeline controlling system
US6718459B1 (en) Device and method for arithmetic processing
JP2526703B2 (ja) プログラマブルコントロ―ラ
JPH0256636A (ja) 分岐制御装置
JPH04239338A (ja) マイクロプログラム網羅率測定方式
JPH05165640A (ja) マイクロプロセッサ
JPH0679271B2 (ja) ル−プ制御回路
JP3164690B2 (ja) アドレス制御装置
JPH10247107A (ja) シーケンス処理時間の短縮方法
JPH08328879A (ja) タスク管理方式
JPH04251332A (ja) 演算処理装置
JPH05334083A (ja) 多分岐命令の処理方式
JPH05289867A (ja) 多枝分岐制御方式
JP3541498B2 (ja) データ処理装置
JPH08129487A (ja) プログラムシーケンス制御回路
JP2001134437A (ja) プログラム制御装置
JP2001075831A (ja) プログラム処理装置、ic試験システム、プログラム処理方法及び記憶媒体
JPH06119263A (ja) 処理関数呼出方式