(57)【要約】【課題】ポップ動作時のスタック処理速度を向上させる。【解決手段】スタック回路に、スタックポインタ（ＳＰ）１３からの値（ｎ）を２つ戻してスタック用メモリ２３のアドレス値（ｎ−２）とするデクリメント回路１６と、プッシュ動作時、メモリ２３のアドレスとしてＳＰ１３からの値を選択し、ポップ動作時、デクリメント回路１６からの値を選択する回路１９と、プッシュ動作時、入力データ２１を選択し、ポップ動作時、メモリ２３の出力データを選択する回路２５と、選択回路２５から出力されるデータをラッチするＴＯＳレジスタを設けた。ポップ前にデクリメント回路１６からのアドレス値（ｎ−２）で次にポップされるメモリ２３のデータをＴＯＳレジスタ２７にセットしておくことができるので、ポップ時の実行と、メモリ２３のアクセスを同一ステージで行うことが可能となり、ポップ動作時のスタック処理速度が向上する。【選択図】  図１
2004280631.tif 000002
【特許請求の範囲】
【請求項１】
スタックポインタの値をアドレスとして入力データの書込み、読出しをするスタック用メモリとを有するコンピュータのスタック回路において、
前記スタック用メモリのアドレスとしてポインタが２ずれた値を用意する回路を設け、スタック回路の出力部にＴＯＳレジスタを設け、ポップ前に次にポップされるデータをセットしておくことを特徴とするコンピュータのスタック回路。
【請求項２】
スタックポインタの値をアドレスとして入力データの書込み読出しをするスタック用メモリとを有するコンピュータのスタック回路において、
前記スタックポインタからの値を２つ戻して前記スタック用メモリのアドレス値とするデクリメント回路と、
プッシュ動作時、前記スタック用メモリのアドレスとして前記スタックポインタからの値を選択し、ポップ動作時、前記デクリメント回路からの値を選択するアドレス選択回路と、
プッシュ動作時、入力データを選択し、ポップ動作時、前記スタック用メモリの出力データを選択するデータ選択回路と、
前記データ選択回路から出力されるデータをラッチするＴＯＳレジスタと
を有することを特徴とするコンピュータのスタック回路。
【請求項３】
スタックポインタの値をアドレスとして入力データの書込み読出しをするスタック用メモリとを有するコンピュータのスタック回路において、
前記スタックポインタからの値を進めて前記スタック用メモリのアドレス値とするインクリメント回路と、
前記スタックポインタからの値を戻して前記スタック用メモリのアドレス値とするデクリメント回路と、
プッシュ動作時、前記インクリメント回路からの値を選択し、ポップ動作時、前記デクリメント回路からの値を選択するアドレス選択回路と、
プッシュ動作時、前記入力データを選択し、ポップ動作時、前記スタック用メモリの出力データを選択するデータ選択回路と、
前記データ選択回路から出力されるデータをラッチするＴＯＳレジスタと
を有することを特徴とするコンピュータのスタック回路。
【請求項４】
スタックポインタの値をアドレスとして入力データの書込み読出しをするスタック用メモリとを有するコンピュータのスタック回路において、
前記スタックポインタの値から２つ少ない値を持つダミーのスタックポインタと、
プッシュ動作時、前記スタックポインタからの値を選択し、ポップ動作時、前記ダミーのスタックポインタからの値を選択するアドレス選択回路と、
プッシュ動作時、前記入力データを選択し、ポップ動作時、前記スタック用メモリの出力データを選択するデータ切換回路と、
前記データ選択回路から出力されるデータをラッチするＴＯＳレジスタと
を有することを特徴とするコンピュータのスタック回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータのスタック回路に関する。
【０００２】
【従来の技術】
従来コンピュータのスタック回路は図４に示すように、コマンドデコーダからのコントロール信号が入力するスタックポインタ（ＳＰ）と言われるレジスタ１３からのアドレス値と、アキュムレータ等のレジスタ（ＲＥＧ）からの入力データ２１が入力するリードライトアクセス可能なスタック用メモリ２３によって構成されている。スタックポインタ１３はスタック用メモリ２３のアドレスを示すアップカウント、ダウンカウント可能なポインタレジスタで、その値をアドレス値としてスタック用メモリ２３に提供するように構成されている（例えば、非特許文献１参照）。
【０００３】
【非特許文献１】
ＰｅｔｅｒＤ．Ｌａｗｒｅｎｃｅ，ＫｏｎｒａｄＭａｕｃｈ著「リアルタイム・マイクロコンピュータ・システムの設計」日経ＢＰ社発行、（ｐ１７０〜１７４）。
【０００４】
スタック操作は、マシン語レベルでは、プッシュ（ＰＵＳＨ）、ポップ（ＰＯＰ）と言った専用の命令で、アキュムレータ等のレジスタ（ＲＥＧ）とスタック用メモリ２３との間でデータ交換を行う。このプッシュ、ポップのマシン語は、オペランドを含まないのが特徴で、スタックポインタと呼ばれるアップカウント、ダウンカウント可能なレジスタ１３からの値をアドレスとしてスタック用メモリ２３に対して後入れ先出し（Ｌａｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）と呼ばれるスタック特有の操作を行う。
【０００５】
図８（ａ）にプッシュ動作を、同図（ｂ）にポップ動作を示す。プッシュ動作では、レジスタ内のＡＡＡＡなるデータがｎ番地にライトされ、ＳＰがｎからｎ＋１にインクリメントされる。ポップ動作では、ＳＰがｎ＋１からｎにデクリメントされ、ｎ番地からリードされたＡＡＡＡなるデータがレジスタへロードされる。
【０００６】
図５において、プッシュ動作は、
（１）スタックポインタ１３の値が示すスタック用メモリ２３のアドレスに、レジスタ（ＲＥＧ）からの入力データ２１の値を書き込む。
（２）スタックポインタ１３を進める。
と言う動作を行う。
【０００７】
ポップ動作は、
（１）スタックポインタ１３を戻す。
（２）スタックポインタ１３の値が示すスタック用メモリ２３のアドレスから、データを読み出し、アキュムレータ等のレジスタに書き込む。
と言う動作を行う。
【０００８】
なお、プッシュ動作で先にスタックポインタ１３を進め、進めたアドレスにデータを書き込み、ポップ動作で現在のスタックポインタ１３が示すアドレスからデータを読み出した後、スタックポインタ１３を戻す方法もある。
【０００９】
【発明が解決しようとする課題】
上記スタック回路のプッシュ、ポップの動作は、上記のように何れもスタック用メモリ２３ヘのアクセス及びスタックポインタ１３の増加、減少の２段階の操作が必要である。図６に従来スタック操作のプッシュ１回、ポップ１回の実行シーケンス例を示す。簡略化のためプリフェッチキュー等を省略してある。例えば、プッシュ命令Ａと、ポップ命令Ｂの動作をステージ毎に分解したシーケンスで、インストラクションフェッチ（ＩＦ）からデコード（ＤＥＣ）、実行（ＥＸＥ）、メモリアクセス（ＭＡ）等のステージが時系列的に並んでいる。ここでプッシュ命令Ａは実行（ＥＸＥ）ステージとメモリアクセス（ＭＡ）のステージを同時に行っているが、ポップ命令Ｂではスタックポインタ（ＳＰ）を（ｎ＋１）から（ｎ）に戻す実行ステージ（ＥＸＥ）後にメモリアクセス（ＭＡ）を行うため、プッシュに比べ余分なステージを必要としている。これは、スタックポインタを始めコンピュータのレジスタ類が各ステージの末尾で更新されることに起因する。
【００１０】
図７に従来スタック操作の実行シーケンスのプッシュ２回、ポップ２回の例を示す。なお、図中、０００１は１回目のプッシュデータを、０００２は２回目プッシュデータを示す。
【００１１】
本発明は、上記課題に鑑みてなされたもので、プッシュ動作でもポップ動作でもスタックポインタの操作と、スタック用メモリのアクセスを同一ステージで行うことができるコンピュータのスタック回路を提供することを目的とする。
【００１２】
【課題を解決するための手段】
本発明は、スタックポインタの値をアドレスとして入力データの書込み読出しをするスタック用メモリとを有するコンピュータのスタック回路において、
前記スタック用メモリのアドレスとしてポインタが２ずれた値を用意する回路を設け、スタック回路の出力部にＴＯＳレジスタを設け、ポップ前に次にポップされるデータをセットしておくことを特徴とする。
【００１３】
または、前記スタックポインタからの値を２つ戻して前記スタック用メモリのアドレス値とするデクリメント回路と、プッシュ動作時、前記スタックポインタからの値を選択し、ポップ動作時、前記デクリメント回路からの値を選択するアドレス選択回路と、プッシュ動作時、前記入力データを選択し、ポップ動作時、前記スタック用メモリの出力データを選択するデータ選択回路と、前記データ選択回路から出力されるデータをラッチするＴＯＳレジスタとを有することを特徴とする。
【００１４】
または、前記スタックポインタからの値を進めて前記スタック用メモリのアドレス値とするインクリメント回路と、前記スタックポインタからの値を戻して前記スタック用メモリのアドレス値とするデクリメント回路と、プッシュ動作時、前記インクリメント回路からの値を選択し、ポップ動作時、前記デクリメント回路からの値を選択するアドレス選択回路と、プッシュ動作時、前記入力データを選択し、ポップ動作時、前記スタック用メモリの出力データを選択するデータ選択回路と、前記データ選択回路から出力されるデータをラッチするＴＯＳレジスタとを有することを特徴とする。
【００１５】
あるいは、前記スタックポインタの値から２つ少ない値を持つダミーのスタックポインタと、プッシュ動作時、前記スタックポインタからの値を選択し、ポップ動作時、前記ダミーのスタックポインタからの値を選択するアドレス選択回路と、プッシュ動作時、入力データを選択し、ポップ動作時、前記スタック用メモリの出力データを選択するデータ選択回路と、前記データ選択回路から出力されるデータをラッチするＴＯＳレジスタとを有することを特徴とする。
【００１６】
【発明の実施の形態】
実施形態１
図１に本発明の実施形態１に係るＴＯＳ（Ｔｏｐ  Ｏｆ  Ｓｔａｃｋ）レジスタ付きスタック回路を示す。図中、１３はコマンドデコーダからのコントロール信号１１により制御されるスタックポインタ、１６はスタックポインタ１３からのアドレス値を２つ戻すデクリメント回路、１９はプッシュ動作時スタックポインタ１３からのアドレス値を選択し、ポップ動作時デクリメント回路１６からのアドレス値を選択するアドレス選択回路、２３はアドレス選択回路１９からのアドレス値とアキュムレータ等のレジスタからの入力データ２１及びリード信号（ＲＥＡＤ）、ライト信号（ＷＲＩＴＥ）が入力するスタック用メモリ、２５は入力データ２１又はスタック用メモリ２３からのデータを選択するデータ選択回路、２７はデータ選択回路２５からのデータをラッチするＴＯＳレジスタスである。
【００１７】
即ち、上記スタック回路は、スタックポインタ１３からスタック用メモリ２３へのアドレス経路として２つの経路１４、１８を設け、一方経路１４はスタックポインタ１３からのアドレス値をそのままスタック用メモリ２３のアドレス値とし、他方の経路１８はデクリメント回路１６によりスタックポインタ１２からのアドレス値を戻してスタック用メモリ２３のアドレス値となるように、アドレス選択回路１９により選択されてスタック用メモリ２３に入力するようにしてある。
【００１８】
また、スタック回路出力部にはＴＯＳレジスタ２７を設け、その入力経路２２、２４をデータ選択回路２５によりアキュムレータ等のレジスタ（プッシュされるソース）からの入力データ２１又はスタック用メモリ２３の出力データを選択するようにしてある。このスタック回路は以下のように動作する。
【００１９】
プッシュ時の動作
（１）スタックポインタ１３の値（ｎ）はインクリメント（＋１）される。
（２）スタック用メモリ２３のアドレスとしてアドレス選択回路１９でスタックポインタ１３の値（ｎ＋１）が選択され、
（３）スタック用メモリ２３のアドレス（ｎ＋１）に入力データ２１が書き込まれる。
（４）ＴＯＳレジスタ２７はデータ選択回路２５を介してアキュムレータ等レジスタからの入力データ２１をラッチする。
【００２０】
ポップ時の動作
（１）スタックポインタ１３の値（ｎ）はデクリメント（−１）される。
（２）スタック用メモリ２３のアドレス値としてアドレス選択回路１９でデクリメント回路１６の出力（ｎ−２）が選択され、
（３）スタック用メモリ２３からアドレス（ｎ−２）に書き込まれているデータが読み出される。
（４）ＴＯＳレジスタ２７はデータ選択回路２５を介してスタック用メモリ２３の出力データをラッチする。
【００２１】
不動作時の動作
（１）スタックポインタ１３は現状値を維持する。
（２）スタック用メモリ２３はアクセス無し。
（３）ＴＯＳレジスタ２７は現状値を維持する。
【００２２】
上記スタック回路の動作を表１に示す。
【００２３】
【表１】
2004280631.tif 000003
【００２４】
表１の動作に従った場合のスタックシーケンスを図２に示す。ここでポップ時のステートは、ＥＸＥとＭＡを同時に行うことができるので、同時のシーケンスとなっている。このように常にＴＯＳＲＥＧにスタックの先頭データが現れる。
【００２５】
上記実施形態１によれば、ポップ前にスタックポインタ１３からのアドレス値（ｎ）と値が２つ異なるデクリメント回路１６からのアドレス値（ｎ−２）で次にポップされるスタック用メモリ２３のデータをＴＯＳレジスタ２７にセットしておくことができる。したがって、ポップ動作でもスタックポインタ１３の操作とスタック用メモリ２３のアクセスを同一ステージで行うことができるので、スタック回路の処理速度が向上する。
【００２６】
実施形態２
図３に本発明の実施形態２に係るＴＯＳレジスタ付きスタック回路を示す。図中、１３はコマンドデコーダからのコントロール信号１１により制御されるスタックポインタ、１５はスタックポインタ１３からのアドレス値を進めるインクリメント回路、１６はスタックポインタ１３からのアドレス値を戻すデクリメント回路、１９はプッシュ動作時インクリメント回路１５からのアドレス値を選択し、ポップ動作時デクリメント回路１６からのアドレス値を選択するアドレス選択回路、２３はアドレス選択回路１９で選択したアドレス値とアキュムレータ等のレジスタからの入力データ２１及びリード信号（ＲＥＡＤ）、ライト信号（ＷＲＩＴＥ）が入力するスタック用メモリ、２５は入力データ２１又はスタック用メモリ２３からの出力データを選択するデータ選択回路、２７はデータ選択回路２５からのデータをラッチするＴＯＳレジスタスである。
【００２７】
即ち、上記スタック回路は、スタックポインタ１３から、スタック用メモリ２３へのアドレス経路として２つのアドレス経路１７、１８を設けて、一方の経路１７はスタックポインタ１３の値をインクリメント回路１５を通してスタックポインタ１３からの値を進め（＋１）てあり、他方の経路１８はデクリメント回路１６によりスタックポインタ１３からの値を戻して（−１）スタック用メモリ２３のアドレスとしている。このインクリメント回路１５とデクリメント回路１６からのアドレス値はアドレス選択回路１９により選択されてスタック用メモリ２３に入力する。
【００２８】
また、スタック回路出力部にＴＯＳレジスタ２７を設け、その入力経路をデータ選択回路２５によりアキュムレータ等のレジスタ（プッシュされるソース）からの入力データ２１とスタック用メモリ２３の出力データとを切り換えるようにしてある。このスタック回路の動作を以下に示す。
【００２９】
プッシュ時の動作
（１）スタックポインタ１３の値はインクリメント（＋１）される。
（２）スタック用メモリ２３のアドレス値としてアドレス選択回路１９によりインクリメント回路１５からの値（ｎ＋１）を選択し、
（３）スタック用メモリ２３ヘ入力データ２１を書込む。
（４）ＴＯＳレジスタ２７はデータ選択回路２５を介してアキュムレータ等レジスタからの入力データ２１をラッチする。
【００３０】
ポップ時の動作
（１）スタックポインタ（ＳＰ）１３の値はデクリメント（−１）される。
（２）スタック用メモリ２３のアドレスとしてアドレス選択回路１９によりデクリメント回路１６からの値（ｎ−１）を選択し、
（３）スタック用メモリ２３のデータを読み出す。
（４）ＴＯＳレジスタ２７はデータ選択回路２５を介してスタック用メモリ２３出力データをラッチする。
【００３１】
不動作時の動作
（１）スタックポインタ１３は現状値を維持する。
（２）スタック用メモリ２３はアクセス無し。
（３）ＴＯＳレジスタ２７は現状値を維持する。
【００３２】
上記スタック回路の動作を表２に示す。
【００３３】
【表２】
2004280631.tif 000004
【００３４】
図３を表２で、実行シーケンスを追えば、上記実施形態１の場合と同様に、常にＴＯＳＵＲＥＧにスタックの先頭データが現れる。
【００３５】
上記実施形態２によれば、ポップ前にインクリメント回路１５からのアドレス値（ｎ＋１）と値が２つ異なるデクリメント回路１６からのアドレス値（ｎ−１）で次にポップされるスタック用メモリ２３のデータをＴＯＳレジスタ２７にセットしておくことができる。したがって、ポップ動作でもスタックポインタ１３の操作とスタック用メモリ２３のアクセスを同一ステージで行うことができるので、スタック回路の処理速度が向上する。
【００３６】
実施形態３
図４に本発明の実施形態２に係るＴＯＳレジスタ付きスタック回路を示す。図中、１３ａ、１３ｂはコマンドデコーダからのコントロール信号１１により制御される第１、第２のスタックポインタ（ＳＰ、ＳＰ２）で、２つのアドレス経路１４ａ、１４ｂに設けられている。１９はプッシュ動作時スタックポインタ１３ａからの値を選択しポップ動作時スタックポインタ１３ｂからの値を選択するするアドレス選択回路、２３はアドレス選択回路１９で選択したアドレス値とアキュムレータ等のレジスタ（ＲＥＧ）からの入力データ２１及びリード信号（ＲＥＡＤ）、ライト信号（ＷＲＩＴＥ）が入力するスタック用メモリ、２５は入力データ２１とスタック用メモリ２３からの出力データを選択するデータ選択回路、２７はデータ選択回路２５からのデータをラッチするＴＯＳレジスタスである。
【００３７】
上記第１、第２のスタックポインタ１３ａ、１３ｂの一方のスタックポインタ１３ａは正規のスタックポインタ（ＳＰ）そのものである。また他方のスタックポインタ１３ｂはダミーで、正規のスタックポインタ１３ａの値から２つ少ない値（−２）を持つスタックポインタ（ＳＰ２）である。正規のスタックポインタ１３ａの値はそのままであり、ダミースタックポインタ１３ｂの値はスタック用メモリ２３のアドレスとなるようにしてある。また、スタック回路出力部にＴＯＳレジスタ２７を設け、その入力経路２２，２４をアキュムレータ等のレジスタ２１（プッシュされるソース）とスタック用メモリ２３の出力とを切換回路２５切替えるようにしてある。このスタック回路の動作を以下に示す。
【００３８】
プッシュ時の動作
（１）第１、第２のスタックポインタ（ＳＰ、ＳＰ２）１３ａ、１３ｂは共にインクリメントされる。
（２）スタック用メモリ２３のアドレスとしてスタックポインタ（ＳＰ）１３ａの値（ｎ）をアドレス選択回路１９で選択し、
（３）スタック用メモリ２３ヘ入力データ２１を書き込む。
（４）ＴＯＳレジスタ２７はデータ選択回路２５を介して入力データ２１をラッチする。
【００３９】
ポップ時の動作
（１）第１、第２のスタックポインタ１３ａ、１３ｂは共にデクリメントされる。
（２）スタック用メモリ２３のアドレスとして第２のスタックポインタ１３ｂのの値（ｎ−２）をアドレス選択回路１９で選択し、
（３）スタック用メモリ２３からデータを読み出す。
（４）Ｔ０Ｓレジスタ２７はデータ選択回路２５を介してスタック用メモリ２２の出力データをラッチする。
【００４０】
不動作時の動作
（１）第１、第２のスタックポインタ１３ａ、１３ｂは現状値を維持する。
（２）スタック用メモリ２３はアクセス無し。
（３）ＴＯＳレジスタ２７は現状値を維持する。
【００４１】
上記スタック回路の動作を表３に示す。
【００４２】
【表３】
2004280631.tif 000005
【００４３】
図４を表２で、実行シーケンスを追えば、上記実施形態１の場合と同様に、常にＴＯＳＵＲＥＧにスタックの先頭データが現れる。
【００４４】
上記実施形態３によれば、ポップ前にスタックポインタ１３ａからのアドレス値（ｎ）と値が２つ異なるスタックポインタ１３ｂからのアドレス値（ｎ−２）で次にポップされるスタック用メモリ２３のデータをＴＯＳレジスタ２７にセットしておくことができる。したがって、ポップ動作でもスタックポインタ１３の操作とスタック用メモリ２３のアクセスを同一ステージで行うことができるので、スタック回路の処理速度が向上する。
【００４５】
【発明の効果】
本発明は、上述の通り構成されているので、以下に記載する効果を奏する。
（１）プッシュ動作でもポップ動作もスタックポインタの操作と、スタック用メモリのアクセスを同一ステージで行うことが出来、処理速度を向上できる。
（２）通常ポップ動作時は、スタック用メモリの出力をアキュムレータ等のレジスタに格納するだけだが、ＴＯＳレジスタを設けたことにより、同じステージでＴＯＳレジスタをオペランドにした演算も可能である。
【図面の簡単な説明】
【図１】本発明の実施形態１に係るコンピュータのスタック回路を示す構成図。
【図２】スタック操作シーケンス説明図。
【図３】本発明の実施形態２に係るコンピュータのスタック回路を示す構成図。
【図４】本発明の実施形態３に係るコンピュータのスタック回路を示す構成図。
【図５】従来例に係るコンピュータのスタック回路を示す構成図。
【図６】従来例に係るプッシュ１回ポップ１回の場合のスタック操作シーケンス説明図。
【図７】従来例に係るプッシュ２回ポップ２回の場合のスタック操作シーケンス説明図。
【図８】プッシュ／ポップ動作説明図。
【符号の説明】
１１…コントロール信号
１３…スタックポインタ
１３ａ…正規のスタックポインタ
１３ｂ…ダミーのスタックポインタ
１９…アドレス選択回路
２１…入力データ
２３…スタック用メモリ
２５…データ選択回路
２７…ＴＯＳレジスタ
【図１】
2004280631.tif 000006
【図２】
2004280631.tif 000007
【図３】
2004280631.tif 000008
【図４】
2004280631.tif 000009
【図５】
2004280631.tif 000010
【図６】
2004280631.tif 000011
【図７】
2004280631.tif 000012
【図８】
2004280631.tif 000013