(57)【特許請求の範囲】
【請求項１】
１つづつ増加する数列以外の数列である非１インクリメント数列を、シフトクロックに応じて、発生する疑似乱数発生手段と；
上記疑似乱数発生手段が発生する値をアドレスとし、このアドレスに応じて、メモリからプログラムを読み出すプログラム読出手段と；
上記疑似乱数発生回路にシフトクロックを供給するシフトクロック供給手段と；
上記メモリから読み出したプログラムが相対ジャンプ命令で記載されている場合、上記相対ジャンプ命令によってジャンプする相対アドレスに対応する数を、上記シフトクロック供給手段のシフト回数としてセットするシフト回数セット手段と；
を有することを特徴とするマイクロプロセッサ。
【請求項２】
請求項１において、
上記シフトクロック供給手段は、
上記シフト回数に対応するクロック数を発生するクロック逓倍回路を有する手段であることを特徴とするマイクロプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＩＣカード等に用いられるマイクロプロセッサに関する。
【０００２】
【従来の技術】
図１１は、従来のマイクロプロセッサＭＰＵの構成例を示す図である。
【０００３】
従来のマイクロプロセッサＭＰＵは、電子情報通信学会編「ＵＬＳＩ設計技術」の第１１５頁の図５．２に示されている例であり、通常、データパス部１０と、制御部２０とによって構成されている。
【０００４】
データパス部１０は、算術論理ユニット（ＡＬＵ）１１と、汎用レジスタ１２と、プログラムカウンタ１３と、命令レジスタ１４と、バスインタフェース１５とを有する。制御部２０は、命令デコーダ２１と、マイクロプログラム制御回路２２とを有する。また、マイクロプロセッサＭＰＵは、バスインタフェース１５、外部のアドレスバス、データバスを介して、外部のＲＡＭ、ＲＯＭ等のメモリ３０に接続されている。
【０００５】
図１２は、上記従来例において、メモリ３０に格納されているプログラムの一例を示す図である。
【０００６】
このメモリ３０において、アドレス００００〜０１１１のそれぞれに、プログラムの命令コードｏｐ１〜ｏｐ８が格納されている。ここでは、アドレスとして０１１１までを例示してあるが、それ以後の番地にも、上記と同様にプログラムの命令コードが格納されている。つまり、所定のアドレスに対応して所定の命令コードが格納され、上記所定のアドレスに１が加算されたアドレスに対応して、上記所定の命令コードの次に実行されるべき命令コードが格納されている。
【０００７】
従来のマイクロプロセッサＭＰＵにおいて、まず、プログラムカウンタ１３に設定された値が、バスインタフェース１５を介して外部のアドレスバスに出力されると、アドレスバスに出力されたアドレスの内容を、メモリ３０がデータバスに出力する。メモリ３０から出力されたデータは、再度、バスインタフェース１５を介してマイクロプロセッサＭＰＵの内部バスに送られ、命令レジスタ１４にラッチされる。命令レジスタ１４にラッチされた命令コードは、制御部２０の命令デコーダ２１によってデコードされ、マイクロプログラム制御回路２２に渡され、マイクロプログラムから各種制御信号が生成され、命令を実行する。
【０００８】
そして、プログラムカウンタ１３に設定されているアドレスに対応する命令が実行されると、通常の命令においては、次に、プログラムカウンタ１３に１が加算され、これによって、次のアドレスの内容がメモリ３０から読み出され、上記一連の動作が繰り返される。
【０００９】
図１３は、上記従来例におけるプログラムカウンタ１３の構成の一例を示す図である。
【００１０】
このプログラムカウンタ１３は、レジスタ１３１と、レジスタ１３１の出力値を１づつ増加させるインクリメンタ１３２とによって構成されている。所定のクロックにおいて、レジスタ１３１に所定の値が設定され、上記所定のクロックの次のクロックで、レジスタ１３１に設定されている値に１が加算された値をインクリメンタ１３２が出力し、このインクリメンタ１３２が出力した値がレジスタ１３１に設定される。そして、上記所定のクロックから２つ先のクロック以降において、上記一連の動作が順次繰り返される。すなわち、レジスタ１３１に初期値として０が設定されると、通常の命令では、クロックが発生される度に、設定されている値に１が加算され、この加算値がレジスタ１３１に再設定される。
【００１１】
つまり、上記例において、メモリ３０とプログラムカウンタ１３とによって、最初に、プログラムカウンタ１３に０が設定されるので、００００番地の内容（プログラムの命令コードｏｐ１）がメモリ３０から読み出され、実行される。次に、プログラムカウンタ１３の値に１が加算された値をプログラムカウンタ１３が出力し、メモリ３０の０００１番地に格納されている命令コードｏｐ２が読み出され、実行される。以後、プログラムの命令コードｏｐ３、ｏｐ４、ｏｐ５、ｏｐ６、ｏｐ７、ｏｐ８が順番に読み出され、実行される。それ以後も、上記と同様である。
【００１２】
図１４は、上記従来例におけるマイクロプログラム制御回路２２の構成例を示すブロック図である。
【００１３】
マイクロプログラム制御回路２２は、μプログラムカウンタ２２１と、μプログラムメモリ２２２と、μ命令デコーダ２２３とを有するものである。
【００１４】
命令レジスタ１４に設定された内容が、制御部２０の命令デコーダ２１によってデコードされ、このデコードされた値が、μプログラムカウンタ２２１に設定される。この設定された値をアドレスとし、μプログラムメモリ２２２に格納されているμ命令が読み出され、μ命令デコーダ２２３によってデコードされ、制御信号が生成される。
【００１５】
次に、プログラムカウンタ１３の動作と同様に、μプログラムカウンタ２２１の内容に１が加算され、この加算された値をアドレスとし、μプログラムメモリ２２２からμ命令を読み出し、実行する。
【００１６】
上記のように、従来のマイクロプロセッサＭＰＵでは、プログラムカウンタ１３の内容は１づつ増加する。プログラムカウンタ１３が出力した値をアドレスとして、プログラムの内容が順次読み出されるので、プログラムはメモリ３０上に順番に格納されている。
【００１７】
図１５は、上記従来例においてジャンプ命令に対応できるプログラムカウンタ１３ａの構成を示す図である。
【００１８】
このプログラムカウンタ１３ａは、レジスタ１３１と、レジスタ１３１の出力値を１づつ増加させるインクリメンタ１３２と、セレクタ１３３とによって構成されている。セレクタ１３３は、インクリメンタ１３２の出力信号と、制御部２０が出力するジャンプアドレスのうちの一方を選択するセレクタである。
【００１９】
ここで、マイクロプロセッサＭＰＵが動作を開始した後、通常の命令においては、所定のクロックによって、プログラムカウンタ１３ａにおけるレジスタ１３１に００００が設定され、そして次のクロックで、レジスタ１３１に設定されている値に１が加算された値をインクリメンタ１３２が出力し、セレクタ１３３が、インクリメンタ１３２の出力信号を選択し、この選択された出力信号がレジスタ１３１に設定される。そして、上記インクリメント動作が繰り返される。
【００２０】
ところで、命令コードの実行順序を変更する命令としてジャンプ命令が使用され、このジャンプ命令について説明する。
【００２１】
まず、「ＪＰ命令」は、ジャンプ先のアドレスを、オペランドによって、直接指定する命令であると定義する。つまり、ＪＰ命令は絶対ジャンプ命令であり、ＪＰ命令としてたとえばＪＰ１０００を想定した場合、ＪＰ１０００は、プログラムカウンタ１３ａの値を１０００番地にセットし、１０００番地の内容をメモリから読み出して実行するものである。また、メモリ上では、ＪＰ命令のオペコードである「ＪＰ」が格納されているメモリ上の番地の次の番地に、ジャンプ先のアドレスが格納されている。
【００２２】
ただし、ここで定義したジャンプ命令は、特定のマイクロプロセッサの命令として直接使用できるわけではないが、基本的には、現在用いられている種々のマイクロプロセッサでも同様な命令が定義され、ここで例示するのと同様の動作を行う。
【００２３】
図１６は、上記従来例において、メモリ３０に格納され、上記絶対ジャンプ命令が含まれているプログラムの一例を示す図である。
【００２４】
次に、図１６に示す絶対ジャンプ命令が含まれているプログラムを、プログラムカウンタ１３ａを有するマイクロプロセッサＭＰＵによって実行する場合の動作について説明する。
【００２５】
まず、プログラムカウンタ１３ａに００００が設定され、メモリ３０の００００番地の内容ｏｐ１が読み出され、実行され、プログラムカウンタ１３ａの内容が１づつ増加されたアドレスに応じて、メモリ３０の内容が読み出され、順次実行される。この過程で、プログラムカウンタ１３ａ内のレジスタ１３１に００１１が設定されると、マイクロプロセッサＭＰＵは、メモリ３０の００１１番地に書き込まれた命令コードであるジャンプ命令ＪＰを取り込む。ここで、ジャンプ命令ＪＰを取り込んだので、マイクロプロセッサＭＰＵは、メモリ３０の次の番地である０１００をアドレスバスに出力し、０１００番地の内容である１０００を読み出す。この内容１０００は、ジャンプ命令におけるジャンプアドレスである。したがって、セレクタ１３３は、ジャンプアドレス１０００番地を選択し、レジスタ１３１に設定する。
【００２６】
マイクロプロセッサＭＰＵは、このレジスタ１３１に設定された値をアドレスバスに出力し、メモリ３０の内容であるｏｐ９を読み出し、この読み出された命令を実行する。同時に、インクリメンタ１３２は、レジスタ１３１の内容に１を加えた値を計算し、実行している命令がジャンプ命令でなければ、セレクタ１３３によってインクリメンタ１３２の出力が選択され、レジスタ１３１に設定される。以後、実行する命令がジャンプ命令でなければ、インクリメンタ１３２の出力がレジスタ１３１に設定される。
【００２７】
すなわち、プログラムカウンタ１３ａが出力するメモリ３０のアドレスは、図１５に示すように、００００、０００１、００１０、００１１、１０００、１００１、１０１０、１０１１、１１００、１１０１、１１１０の順になり、００１１の次には、ジャンプ先のアドレスである１０００が出力される。
【００２８】
次に、相対ジャンプ命令（ＪＲ命令）について説明する。
【００２９】
「相対ジャンプ命令（ＪＲ命令）」は、プログラムカウンタの現在の値に所定の値を加算した値をジャンプ先のアドレスとして設定する命令であると定義する。つまり、ＪＲ命令は、たとえばＪＲ００１１のように、ＪＲ命令のオペコードと、ＪＲ命令の最初の命令と、ジャンプ先の命令の番地差であるオペランドとによって、定義されているものとする。この場合、ジャンプ先のアドレスは、ＪＲ命令のオペコードのアドレス＋オペランド＋１であるとする。また、メモリ上では、ＪＲ命令のオペコードであるＪＲが格納されているメモリ上の番地の次の番地に、ＪＲ命令のオペランド（ジャンプ先のアドレスとの差分の値）が格納されている。
【００３０】
ただし、ここで定義した相対ジャンプ命令は、特定のマイクロプロセッサの命令として直接使用できるわけではないが、基本的には、現在用いられている種々のマイクロプロセッサでも同様な命令が定義され、ここで例示するのと同様の動作をする。
【００３１】
図１７は、上記従来例において、メモリ３０に格納され、相対ジャンプ命令（ＪＲ命令）が含まれているプログラムの一例を示す図である。
【００３２】
通常、００００番地から順番に、メモリ３０の内容がマイクロプロセッサＭＰＵにロードされ、このロードされた内容に対応する命令が実行される。ここで、１０１１番地の内容であるＪＲがメモリからロードされると、マイクロプロセッサＭＰＵはその命令を解読し、ＪＲ命令が格納されているアドレスの次のアドレス１１００の内容である００１０を読み出し、ＪＲ命令が格納されているアドレスである１０１１と、次のアドレス１１００の内容である００１０と、１とを加算し、アドレス１１１０が求められ、この求められた１１１０がジャンプ先のアドレスであり、セレクタ１３３を介して、プログラムカウンタ１３０内のレジスタ１３１に、ジャンプ先のアドレスとして１１１０を設定する。
【００３３】
次に、マイクロプロセッサＭＰＵは、レジスタ１３１に設定されたアドレス１１１０をアドレスバスに出力し、アドレス１１１０に対応するメモリの内容ｏｐ１５を読み出し、実行する。すなわち、プログラムカウンタが出力するメモリのアドレスは、００００、０００１、００１０、００１１、０１００、０１０１、０１１０、０１１１、１０００、１００１、１０１０、１０１１、１１１０の順であり、アドレス１０１１の次には、ジャンプ先であるアドレス１１１０が出力される。
【００３４】
上記従来のマイクロプロセッサにおいて、実行すべき命令がジャンプ命令ではない場合、プログラムカウンタの内容が１づつ増加し、メモリ内の命令コードが順番に実行される。一方、実行すべき命令がジャンプ命令である場合、ジャンプ命令のオペランドを、新たなアドレスとしてメモリの内容を読み出し、実行したり、オペランドで与えられる値を現在のアドレスに加算したアドレスをジャンプ先のアドレスとし、メモリに内容を読み出して実行する。
【００３５】
【発明が解決しようとする課題】
ところで、ＩＣカードの応用分野が近年拡大されつつあり、これにつれてＩＣカードのセキュリティが重視されるようになってきている。ＩＣカード内に納められている機密情報を解読しようとする場合、マイクロプロセッサの論理回路、プログラムが容易に解読できる状態にあれば、この情報に基づいて、マイクロプロセッサの内部を解析することができ、これによって、機密情報を解読される可能性がある。
【００３６】
つまり、従来のマイクロプロセッサＭＰＵのように、プログラムがメモリ３０上に順番に格納されていると、メモリ３０のメモリセルに格納されているデータを順番に読み取れば、メモリ３０に格納されているプログラムを解読することができる。
【００３７】
本発明は、所定のプログラムが格納されているメモリから、その所定のプログラムが読み取られたとしても、その読み取られたプログラムを解析することが困難であるマイクロプロセッサ、メモリ、メモリ装置を提供することを目的とするものである。
【００３８】
また、本発明は、マイクロプロセッサにおいて、ＬＦＳＲ等の疑似乱数発生回路（非１インクリメント数列を発生する疑似乱数発生手段）によってプログラムカウンタを構成した場合、プログラムカウンタとしての疑似乱数発生回路が単調増加するアドレスを出力するのではないので、従来例と同じようにジャンプ先のアドレスを指示した場合、指示されたアドレスが正しいジャンプ先ではないという問題がある。
【００３９】
本発明は、ＬＦＳＲ等の疑似乱数発生回路によってプログラムカウンタを構成した場合に、正しいジャンプ先アドレスを出力することができるマイクロプロセッサを提供することを目的とするものである。
【００４０】
【課題を解決するための手段】
本発明は、１つづつ増加する数列以外の数列である非１インクリメント数列を、シフトクロックに応じて、発生する疑似乱数発生手段と、上記疑似乱数発生手段が発生する値をアドレスとし、このアドレスに応じて、メモリからプログラムを読み出すプログラム読出手段と、上記疑似乱数発生回路にシフトクロックを供給するシフトクロック供給手段と、上記メモリから読み出したプログラムが相対ジャンプ命令で記載されている場合、上記相対ジャンプ命令によってジャンプする相対アドレスに対応する数を、上記シフトクロック供給手段のシフト回数としてセットするシフト回数セット手段とを有するマイクロプロセッサである。
【００４１】
【発明の実施の形態および実施例】
図１は、本発明の第１の実施例であるマイクロプロセッサＭＰＵ１  を示すブロック図である。
【００４２】
マイクロプロセッサＭＰＵ１  は、図１１に示す従来のマイクロプロセッサＭＰＵにおいて、プログラムカウンタ１３の代わりに疑似乱数発生器４０を使用し、また、ジャンプアドレスメモリ５０を追加したものである。
【００４３】
疑似乱数発生器４０は、１つづつ増加する数列以外の数列を「非１インクリメント数列」と呼んだ場合、非１インクリメント数列を発生する疑似乱数発生手段の例である。
【００４４】
ジャンプアドレスメモリ５０は、ジャンプ先のアドレスを記憶するメモリであり、ＲＯＭで構成されているが、ＲＡＭで構成し、ジャンプアドレスデータを起動時に読み込むようにしてもよく、ＥＥＰＲＯＭ、ＦＲＡＭ等の不揮発性メモリで構成するようにしてもよい。
【００４５】
つまり、マイクロプロセッサＭＰＵ１  は、データパス部１０１  と、制御部２０とによって構成されている。
【００４６】
データパス部１０１  は、算術論理ユニット（ＡＬＵ）１１と、汎用レジスタ１２と、疑似乱数発生器４０と、ジャンプアドレスメモリ５０と、命令レジスタ１４と、バスインタフェース１５とを有する。制御部２０は、命令デコーダ２１と、マイクロプログラム制御回路２３とを有する。また、マイクロプロセッサＭＰＵ１  は、バスインタフェース１５、外部のアドレスバス、データバスを介して、外部のＲＡＭ、ＲＯＭ等のメモリ３０１  と接続されている。
【００４７】
図２は、上記実施例における疑似乱数発生器４０の構成例と、疑似乱数発生器４０が出力する値の例とを示す図である。
【００４８】
疑似乱数発生器４０は、図２（１）に示すように、Ｄ−ＦＦ４０１、４０２、４０３、４０４と、Ｅｘ．ＮＯＲ回路４０５とを有する。Ｄ−ＦＦ４０１、４０２、４０３、４０４が直列に接続され、Ｄ−ＦＦ４０１、４０２、４０３、４０４が出力する値をＱ１  、Ｑ２  、Ｑ３  、Ｑ４  とし、値Ｑ１  とＱ４  とがＥｘ．ＮＯＲ回路４０５に入力され、Ｅｘ．ＮＯＲ回路４０５の出力端子がＤ−ＦＦのＤ入力端子に接続されている。また、値Ｑ１  、Ｑ２  、Ｑ３  、Ｑ４  が疑似乱数発生器４０が出力する値（疑似乱数）である。
【００４９】
次に、疑似乱数発生器４０の動作について説明する。
【００５０】
まず、１つ目のクロックＣＬ１によって、Ｄ−ＦＦ４０１、４０２、４０３、４０４の全てに０がセットされていたとする。この場合、Ｅｘ．ＮＯＲ回路４０５が１を出力する。
【００５１】
２つ目のクロックＣＬ２によって、Ｅｘ．ＮＯＲ回路４０５の出力値「１」をＤ−ＦＦ４０１が出力し、Ｄ−ＦＦ４０１、４０２、４０３がそれぞれ出力していた値０、０、０と同じ値を、Ｄ−ＦＦ４０２、４０３、４０４が出力する。つまり、クロックＣＬ２によって、疑似乱数発生器４０の出力値（Ｑ１  、Ｑ２  、Ｑ３  、Ｑ４  ）は、図２（２）に示すように、「１０００」になる。この場合、Ｅｘ．ＮＯＲ回路４０５が「０」を出力する。
【００５２】
３つ目のクロックＣＬ３によって、Ｅｘ．ＮＯＲ回路４０５の出力値「０」をＤ−ＦＦ４０１が出力し、Ｄ−ＦＦ４０１、４０２、４０３がそれぞれ出力していた値１、０、０と同じ値を、Ｄ−ＦＦ４０２、４０３、４０４が出力する。つまり、クロックＣＬ３によって、疑似乱数発生器４０の出力値（Ｑ１  、Ｑ２  、Ｑ３  、Ｑ４  ）は、図２（２）に示すように、「０１００」になる。この場合、Ｅｘ．ＮＯＲ回路４０５が「１」を出力する。
【００５３】
４つ目のクロックＣＬ４によって、Ｅｘ．ＮＯＲ回路４０５の出力値「１」をＤ−ＦＦ４０１が出力し、Ｄ−ＦＦ４０１、４０２、４０３がそれぞれ出力していた値０、１、０と同じ値を、Ｄ−ＦＦ４０２、４０３、４０４が出力する。つまり、クロックＣＬ４によって、疑似乱数発生器４０の出力値（Ｑ１  、Ｑ２  、Ｑ３  、Ｑ４  ）は、図２（２）に示すように、「１０１０」になる。この場合、Ｅｘ．ＮＯＲ回路４０５が「０」を出力する。
【００５４】
５つ目のクロックＣＬ５以降においても、上記と同様にして、図２（２）に示すように、疑似乱数（Ｑ１  、Ｑ２  、Ｑ３  、Ｑ４  ）が発生する。
【００５５】
つまり、疑似乱数発生器４０は、常に、所定の乱数を同じ順序で発生するものであり、疑似乱数発生器４０によって順次発生される乱数の系列は、再現性のある系列である。
【００５６】
図３は、上記実施例におけるメモリ３０１  に格納されているプログラムの例を示す図である。
【００５７】
疑似乱数発生器４０は、図２（２）に示すように、００００、１０００、０１００、１０１０、０１０１、００１０、１００１、１１００、０１１０、１０１１、１１０１、１１１０、０１１１、００１１、０００１の順番で値を発生するので、似乱数発生器４０をプログラムカウンタとして使用することによって、発生されるこれらの値をアドレスとして使用することができる。
【００５８】
そして、プログラムの命令コードｏｐ１からｏｐ１５が、上記アドレスの順番でメモリ３０１  内に内蔵されている。すなわち、最初に発生するアドレス００００番地には命令コードｏｐ１が格納され、２番目に発生するアドレス１０００番地には命令コードｏｐ２が格納され、３番目の値に対応するアドレス０１００番地には命令コードｏｐ３が格納されている。４番目以降に発生するアドレス１０１０には、ジャンプ命令ＪＰのオペコードが格納され、５番目に発生するアドレス０１０１には、ジャンプ命令のオペランドであり、ジャンプアドレスを指定する１０００が格納されている。また、６番目に発生するアドレス００１０には、命令コードｏｐ６が格納され、以後７番目に発生するアドレス１００１以降に命令コードｏｐ７以降が格納されている。
【００５９】
ところで、従来例において、図１６に示すように、上記アドレス１０００に格納されている命令ｏｐ９は、疑似乱数発生器４０において初期値から９番目に発生された値である０１１０がアドレスとして格納されているので、ＪＰ命令が実行された場合、プログラムカウンタの値を０１１０とし、この番地の内容を読み出し、実行する必要がある。
【００６０】
つまり、上記実施例において、マイクロプロセッサＭＰＵ１  を設計する段階で、疑似乱数発生回路４０を用いる場合に、ジャンプ命令によるジャンプ先のアドレスが何番地になるかを予め計算し、この計算された番地をジャンプアドレスメモリ５０に格納しておく。上記実施例では、ジャンプ先のアドレス１０００は９番目であるので、疑似乱数発生回路４０が９番目に生成する値０１１０を、ジャンプアドレスメモリ５０に格納しておく。
【００６１】
図４は、上記実施例におけるジャンプアドレスメモリ５０に格納されているプログラムの例を示す図である。
【００６２】
次に、上記実施例の動作について説明する。
【００６３】
まず、疑似乱数発生器４０に、初期値として００００が設定される。そして、この値をアドレスとして、対応するメモリ００００番地の内容ｏｐ１を読み出し、実行する。この実行が終わると、疑似乱数発生器４０は、次の値１０００を発生する。上記と同様に、この値をアドレスとしてｏｐ２がメモリ３０１  から読み出される。次に、０１００が発生され、メモリの０１００番地の内容ｏｐ３が読み出され、実行される。次に、１０１０が発生され、メモリの１０１０番地の内容であるＪＰ命令のオペコードＪＰが読み出される。マイクロプロセッサＭＰＵ１  は、制御部２０において、ＪＰがジャンプ命令であると解釈すると、疑似乱数発生器４０による次の出力０１０１が、ジャンプ命令のオペランドであるジャンプアドレスであると判断し、メモリ３０１  の０１０１番地の内容（１０００）を読み出す。
【００６４】
ただし、この場合、メモリ３０１  から読み出されたジャンプ命令のオペランドであるジャンプアドレスは、メモリ上に命令コードが順番に並んでいるという仮定の元で指定されていることに注意すべきである。
【００６５】
ＪＰ命令が実行されると、上記従来例では、図１６に示すように、１０００番地にジャンプし、予定通りの命令（ｏｐ９）を実行することができる。
【００６６】
ところが、疑似乱数発生器４０が出力するアドレスの順に応じて、図３に示すプログラムを実行する場合、クロックＣＬ４によって発生するアドレス１０１０にＪＰが格納され、ＪＰ命令が実行されると、クロックＣＬ５によって発生する次のアドレスは０１０１であり、この内容は１０００であり、アドレス１０００にジャンプすることになる。そして、メモリ３０１  の１０００番地にジャンプすると、ｏｐ２を実行することになり、予定の命令ｏｐ９を実行することができない。つまり、疑似乱数発生器４０が出力するアドレスの順に応じて、ジャンプ命令が含まれているプログラムを実行すると、予定通りの命令を実行することができないという問題が生じる。
【００６７】
そこで、上記実施例では、ジャンプ命令（ＪＰ命令）を読み出した場合、ＪＰ命令のオペランド（１０００）をアドレスとし、メモリから読み出すが、この場合、メモリ３０１  から読み出すのではなく、図４に示すように、ジャンプアドレスメモリ５０から読出し、つまり、内容０１１０を読み出し、この読み出された値０１１０を疑似乱数発生回路４０に設定する。マイクロプロセッサＭＰＵ１  は、上記値０１１０をアドレスとしてメモリ３０１  の内容ｏｐ９を読み出し、命令を実行する。
【００６８】
つまり、ジャンプアドレスメモリ５０の１０００番地を読み出すと、その値は０１１０であるので、その値０１１０を疑似乱数発生器４０に設定し、その値０１１０をアドレスバスに出力し、アドレス０１１０に対応する内容ｏｐ９を読み込むことができ、これを実行する。
【００６９】
このようにすれば、疑似乱数発生器４０が出力するアドレスの順に応じて、ジャンプ命令が含まれているプログラムを実行した場合、予定通りの命令を実行することができる。つまり、ジャンプアドレスメモリ５０を用いることによって、命令コードにジャンプ命令が含まれている場合でも、所望の動作を行うことができる。
【００７０】
次に、本発明の第２の実施例について説明する。
【００７１】
図５は、本発明の第２の実施例であるプログラムの格納方法を示すフローチャートである。
【００７２】
この第２の実施例は、マイクロプロセッサＭＰＵ１  からジャンプアドレスメモリ５０が削除されたマイクロプロセッサを使用した場合に、ジャンプ命令を確実に実行することができる実施例であり、プログラムをメモリに格納する際にジャンプアドレスを所定の方法で変換するものである。
【００７３】
まず、マイクロプロセッサＭＰＵ１  に実行させるべきプログラムを入力し（Ｓ１）、このプログラムを順番に調べ、命令コードがジャンプ命令でない場合（Ｓ２）、上記プログラムにおける当該命令の順番と同じ順番で、疑似乱数発生回路４０が値を発生し、この発生された値をアドレスとし（Ｓ３）、命令コードをメモリ３０１  に保存する（Ｓ４）。
【００７４】
一方、入力されたプログラム中の命令コードがジャンプ命令である場合（Ｓ２）、ジャンプ命令におけるオペコードの次の値が、ジャンプ命令のオペランドであり、このオペランドが、ジャンプ先のアドレスであるので、ジャンプ命令におけるオペコードの次の値（オペランド）を読み出し、ジャンプ先のアドレスを特定する（Ｓ１１）。
【００７５】
次に、このジャンプ先のアドレスが、通常はプログラム中のジャンプ先の命令の順番になるので、この順番と同じ順番で、疑似乱数発生回路４０が発生する値をジャンプ先のアドレスとし、プログラム中のジャンプ命令のオペランドであるジャンプアドレスを変換する（Ｓ１２）。
【００７６】
そして、ジャンプアドレスを格納すべきアドレスを計算し（疑似乱数発生器４０において次のアドレスを出力させ）、ジャンプ命令に対応する命令コードを格納し、その次に疑似乱数発生回路４０が発生する値を、ジャンプ命令のオペランドを格納するアドレスとして格納する（Ｓ１３）。
【００７７】
なお、図５に示すフローチャートの動作を、一般的にはソフトウェアで実現するが、組合わせ論理回路でハードウェアとして実現したり、汎用のマイクロプロセッサを用いて実現するようにしてもよい。
【００７８】
次に、上記実施例の動作について説明する。
【００７９】
図６は、上記第２の実施例において、メモリ３０１  に格納されているプログラムの例を示す図である。
【００８０】
まず、初期値として００００が、疑似乱数発生器４０に設定される。次に、この設定された値００００をアドレスとし、メモリ３０１  から命令ｏｐ１を読み出し実行する。この命令が実行されると、疑似乱数発生器４０は、次の値として、図２（２）に示すように、１０００を発生する。上記と同様に、この値１０００をアドレスとして、命令ｏｐ２がメモリ３０１  から読み出される。次に、図２（２）に示すように、０１００が発生され、メモリ３０１  の０１００番地の命令ｏｐ３が読み出され、実行される。次に、１０１０が発生され、メモリ３０１  の１０１０番地の内容であるＪＰ命令のオペコードＪＰが読み出される。
【００８１】
オペコードＪＰがジャンプ命令であることを制御部２０が解釈すると、マイクロプロセッサＭＰＵ１  は、疑似乱数発生器４０の次の出力０１０１が、ジャンプ命令のオペランドであり、このオペランドが、ジャンプアドレスであると解釈し、メモリ３０１  の０１０１番地の内容を読み出す。
【００８２】
ただし、この場合、メモリ３０１  から読み出されたジャンプ命令のオペランドであるジャンプアドレスは、疑似乱数発生回路４０をプログラムカウンタとして使用することを前提とし、既に変換されたアドレスであるので、この値を疑似乱数発生回路４０に設定し、この値をアドレスとしてメモリ３０１  の内容を読み出し、命令を実行することによって、所定の機能を実現することができる点に注意すべきである。
【００８３】
上記実施例では、読み出された０１０１番地の内容は、図６に示すように、０１１０であるので、この値０１１０を疑似乱数発生回路４０に直接セットし、この値０１１０をアドレスとし、メモリ３０１  の内容であるｏｐ９を読み出し、実行することによって、所望のジャンプ動作を確実に実行することができる。
【００８４】
次に、本発明の第３の実施例について説明する。この第３の実施例は、プログラムカウンタの現在の値から計算される相対番地へジャンプする例である。
【００８５】
図７は、本発明の第３の実施例であるプログラムカウンタ６０を示す回路図である。
【００８６】
プログラムカウンタ６０は、シフトクロック制御回路６１と疑似乱数発生回路４１とを有し、相対ジャンプが可能であるプログラムカウンタである。また、シフトクロック制御回路６１は、１加算回路６１１と、ダウンカウンタ６１２と、０検出回路６１３とによって構成されている。
【００８７】
図８は、上記実施例における疑似乱数発生器４１と、疑似乱数発生器４１の動作を示すタイミングチャートとを示す図である。
【００８８】
疑似乱数発生器４１は、疑似乱数発生器４０と同様の回路であり、疑似乱数発生器４０の代わりに使用することができ、しかも、疑似乱数発生器の初期値を設定可能にしたものである。
【００８９】
疑似乱数発生器４１は、Ｄ−ＦＦ４１１、４１２、４１３、４１４と、セレクタＳ１、Ｓ２、Ｓ３、Ｓ４と、Ｅｘ．ＮＯＲ回路４１５とを有するものである。また、セレクタＳ１、Ｄ−ＦＦ４１１、セレクタＳ２、Ｄ−ＦＦ４１２、セレクタＳ３、Ｄ−ＦＦ４１３、セレクタＳ４、Ｄ−ＦＦ４１３が直列に接続され、Ｄ−ＦＦ４１１、４１２、４１３、４１４が出力する値をＱ１  、Ｑ２  、Ｑ３  、Ｑ４  とし、値Ｑ１  とＱ４  とがＥｘ．ＮＯＲ回路４１５に入力され、Ｅｘ．ＮＯＲ回路４１５の出力端子がセレクタＳ１のＢ入力端子に接続されている。また、セレクタＳ１、Ｓ２、Ｓ３、Ｓ４の各Ａ入力端子に、それぞれ、初期値入力端子Ｉ１、Ｉ２、Ｉ３、Ｉ４が接続されている。なお、セレクタ信号Ｓが０であるときに、セレクタＳ１〜Ｓ４はＡ入力端子の信号を選択し、セレクタ信号Ｓが１であるときに、セレクタＳ１〜Ｓ４はＢ入力端子の信号を選択する。また、値Ｑ１  、Ｑ２  、Ｑ３  、Ｑ４  が疑似乱数発生器４０が出力する値（疑似乱数）である。
【００９０】
次に、疑似乱数発生器４１に初期値設定する動作について説明する。
【００９１】
疑似乱数発生器４１に所望の初期値を設定する場合、初期値入力端子Ｉ１〜Ｉ４のそれぞれに所望の初期値を入力し、セレクタＳ１〜Ｓ４に供給するセレクト信号を０にし、シフトクロックを入力すると、セレクタＳ１〜Ｓ４のそれぞれは、初期値入力端子Ｉ１〜Ｉ４における初期値を出力し、これら各初期値がＤ−ＦＦ４１１、４１２、４１３、４１４のそれぞれに入力される。そして、セレクト信号を１に切り換える。これによって、疑似乱数発生器４１における初期値設定動作が終了する。
【００９２】
セレクト信号を１にすることによって、セレクタＳ１がＥｘ．ＮＯＲ回路４１５の出力信号を出力し、セレクタＳ２〜Ｓ４のそれぞれが、前段のセレクタＳ１〜Ｓ３の出力信号を出力する。その後は、セレクト信号を１に維持し、クロックを入力する度に、セレクタＳ１がＥｘ．ＮＯＲ回路４１５の出力信号を出力し、セレクタＳ２〜Ｓ４のそれぞれが、前段のセレクタＳ１〜Ｓ３の出力信号を出力する。
【００９３】
図９は、本発明の第３の実施例において、メモリ３０１  に格納されているプログラムの例を示す図である。
【００９４】
疑似乱数発生回路４１の発生する値、００００、１０００、０１００、１０１０、０１０１、００１０、１００１、１１００、０１１０、１０１１、１１０１、１１１０、０１１１、００１１、０００１の順に、命令コードｏｐ１、ｏｐ２、ＯＰ３、……が、メモリ３０１  に格納されている。
【００９５】
ここでは、図１７に示す場合を考える。従来例の場合、メモリ３０１  の１０１１番地に相対ジャンプ命令ＪＲのオペコードが格納され、次の１１００番地にオペランドであるジャンプアドレスとの差分が格納されている。したがって、それぞれメモリの最初から１２番目、１３番目のアドレスであるので、疑似乱数発生回路４１が発生する数列の１２番目である１１１０番地に相対ジャンプ命令ＪＲのオペコードＪＲを格納し、疑似乱数発生回路４１が発生する数列の１３番目である０１１１番地にＪＲのオペランド００１０を格納する。
【００９６】
次に、上記第３の実施例の動作について説明する。
【００９７】
まず、図７に示す疑似乱数発生回路４１に初期値００００が設定され、その値をアドレスとしてプロセッサＭＰＵ１  がメモリ３０１  の内容ｏｐ１を読み出し、実行する。次に、疑似乱数発生回路４１にシフトクロックが入力されると、その内容が一回シフトし、１０００を出力する。再び、この値をアドレスとしてメモリ３０１  の内容ｏｐ２を読み出し、実行する。同様に、疑似乱数発生回路４１の値をアドレスとしてメモリ３０１  の内容を順次、読み出し、命令を実行する。
【００９８】
そして、疑似乱数発生回路４１が出力する値が１１１０になると、メモリ３０１  内の内容であるＪＲ命令が読み出される。ＪＲ命令は、相対ジャンプ命令であるので、制御部２０は、ＪＲ命令が格納されていたアドレスの次に、疑似乱数発生回路４１が出力する値０１１１の内容００１０を読み出し、この値がジャンプ先のアドレスとの差分であると解釈する。
【００９９】
そして、このアドレスの差分００１０を、疑似乱数発生器４１で必要なシフト回数であると見なし、１加算回路６１１によって１加算した値００１１を、シフトクロック制御回路６１のダウンカウンタ６１２に初期値として設定する。この場合、シフトが完了していない状態に、シフト完了信号を設定する。そして、マイクロプロセッサＭＰＵ１  は、通常の動作を停止する。
【０１００】
シフトクロックが１回入力されると、疑似乱数発生回路４１は０１１１を出力し、また、ダウンカウンタ６１２は、００１１から値を１減じて、００１０になる。次のシフトロックでは、疑似乱数発生回路４１の出力は００１１になり、ダウンカウンタ６１２の値は０００１になる。次のシフトクロックで、疑似乱数発生回路の値は０００１になり、ダウンカウンタ６１２の値は００００になる。このときに、ダウンカウンタ６１２の値が０になったことを、０検出回路６１３が検出し、制御部２０に対して、相対ジャンプのためのシフト動作が完了したことを通知する。
【０１０１】
制御部２０は、マイクロプロセッサＭＰＵ１  の動作を再開させ、そのときの疑似乱数発生回路４１の内容０００１をアドレスとし、メモリの内容ｏｐ１５を読み出し、実行する。
【０１０２】
第３の実施例は、上記のように、疑似乱数発生回路４１を用いた場合でも、従来例と同様に、相対ジャンプ命令を実現することができる。なお、第１、２の実施例においても、第３の実施例と同様に、ジャンプアドレスメモリ５０を設けたり、メモリ３０１  にプログラムを格納する時点で、ジャンプ先アドレスを変換することによって、上記従来例と同様に、絶対ジャンプ命令ＪＰを実行することも可能である。
【０１０３】
なお、上記実施例において、相対ジャンプ命令のジャンプアドレスは、相対ジャンプ命令のオペコードが格納されているアドレスと、相対ジャンプ命令のオペランドと、１との和のアドレスであると定義したので、シフトクロック制御回路に１加算回路を設ける必要があるが、相対ジャンプ命令の定義によっては、１加算回路を必要としない場合もある。
【０１０４】
上記実施例では、相対ジャンプのジャンプアドレスを求める際にも、通常の動作時と同様なクロックを用い、疑似乱数発生回路のシフト動作を行い、また、その期間はマイクロプロセッサの動きが停止しているので、相対ジャンプ命令が実行されると、マイクロプロセッサの処理能力が低下するという問題がある。
【０１０５】
図１０は、本発明の第４の実施例であるプログラムカウンタ７０を示すブロック図である。
【０１０６】
プログラムカウンタ７０は、処理能力の低下の程度を少なくすることができるプログラムカウンタである。プログラムカウンタ７０は、疑似乱数発生回路４１と、シフトクロック制御回路７１とによって構成されている。シフトクロック制御回路７１は、１加算回路７１１と、ダウンカウンタ７１２と、０検出回路７１３と、クロック逓倍回路７１４と、セレクタ７１５とを有する。
【０１０７】
次に、プログラムカウンタ７０の動作について説明する。
【０１０８】
まず、ｏｐ１から命令が実行され、通常の動作時には、シフトクロック制御回路７１のセレクタ７１５は、シフトクロック制御回路７１に入力されるシフトクロックを選択し、疑似乱数発生回路４１に出力する。
【０１０９】
命令が順次実行され、疑似乱数発生回路４１の出力が１１１０になり、ＪＲ命令が読み込まれると、制御部２０は１１１０の次に疑似乱数発生回路４１の出力するアドレス０１１１の内容を、ジャンプアドレスの差分であると解釈する。シフトクロック制御回路７１は、このジャンプアドレスの差分に１を加えた００１１をダウンカウンタに初期値として設定する。そして、セレクタ７１５は、クロック逓倍回路７１４の出力を選択し、疑似乱数発生回路４１に出力するようにする。
【０１１０】
クロック逓倍回路７１４は、入力された１つのクロックサイクルの間に、設定された複数のクロックを発生する回路である。ここでは、８逓倍、すなわち入力された１つのクロックサイクルの間に、８サイクルのクロックを出力するクロック逓倍回路７１４を考えるが、クロック逓倍回路７１４の逓倍数は任意の逓倍数でもよい。
【０１１１】
クロック逓倍回路７１４から出力される最初のクロックによって、ダウンカウンタ７１２の内容００１１は１を減じられ、００１０になり、疑似乱数発生回路４１の出力が０１１１になる。次のクロックによって、ダウンカウンタ７１２の内容は０００１になり、疑似乱数発生回路４１の出力が００１１になる。３番目のクロックによって、ダウンカウンタ７１２の内容は００００になり、疑似乱数発生回路４１の出力が０００１になるので、０検出回路７１３が０を検知し、シフト完了を通知するとともに、セレクタ７１５が、疑似乱数発生回路４１にシフトクロックを出力するようになる。そして、疑似乱数発生回路４１の出力０００１をアドレスとしてメモリ３０１  をアクセスし、動作を再開する。
【０１１２】
もし、８逓倍のクロック逓倍回路７１４を用いれば、上記３回のシフトを、１クロックサイクル内で実行することができる。上記実施例において、３回のシフトを行うために３クロックサイクル要し、しかも、その間はマイクロプロセッサＭＰＵ１  を動作させることができない場合と比較すると、上記第４の実施例は効率的に相対ジャンプ命令を実行することができる。
【０１１３】
【発明の効果】
本発明によれば、ＬＦＳＲ等の疑似乱数発生回路によってプログラムカウンタを構成した場合に、マイクロプロセッサが正しいジャンプ先アドレスを出力することができるという効果を奏する。
【図面の簡単な説明】
【図１】本発明の第１の実施例であるマイクロプロセッサＭＰＵ１  を示すブロック図である。
【図２】上記実施例における疑似乱数発生器４０の構成例と、疑似乱数発生器４０が出力する値の例とを示す図である。
【図３】上記実施例におけるメモリ３０１  に格納されているプログラムの例を示す図である。
【図４】上記実施例におけるジャンプアドレスメモリ５０に格納されているプログラムの例を示す図である。
【図５】本発明の第２の実施例であるプログラムの格納方法を示すフローチャートである。
【図６】上記第２の実施例において、メモリ３０１  に格納されているプログラムの例を示す図である。
【図７】本発明の実施例であるプログラムカウンタ６０を示す回路図である。
【図８】上記実施例における疑似乱数発生器４１と、疑似乱数発生器４１の動作を示すタイミングチャートとを示す図である。
【図９】本発明の第３の実施例において、メモリ３０１  に格納されているプログラムの例を示す図である。
【図１０】本発明の第４の実施例であるプログラムカウンタ７０を示すブロック図である。
【図１１】従来のマイクロプロセッサＭＰＵの構成例を示す図である。
【図１２】上記従来例において、メモリ３０に格納されているプログラムの一例を示す図である。
【図１３】上記従来例におけるプログラムカウンタ１３の構成の一例を示す図である。
【図１４】上記従来例におけるマイクロプログラム制御回路２２の構成例を示すブロック図である。
【図１５】上記従来例においてジャンプ命令に対応できるプログラムカウンタ１３ａの構成を示す図である。
【図１６】上記従来例において、メモリ３０に格納され、上記絶対ジャンプ命令が含まれているプログラムの一例を示す図である。
【図１７】上記従来例において、メモリ３０に格納され、相対ジャンプ命令が含まれているプログラムの一例を示す図である。
【符号の説明】
ＭＰＵ１  〜ＭＰＵ３  …マイクロプロセッサ、
１０１  〜１０３  …データパス部、
２０〜２０２  …制御部、
３０１  …メモリ、
４０、４１…疑似乱数発生器、
４２…ＬＦＳＲ（Ｌｉｎｅａｒ  Ｆｅｅｄｂａｃｋ  Ｓｈｉｆｔ  Ｒｅｇｉｓｔｅｒ）、
５０…ジャンプアドレスメモリ、
６０、７０…プログラムカウンタ、
６１、７１…シフトクロック制御回路、
７１４…クロック逓倍回路。
【図１】
0003549724.tif 000002
【図２】
0003549724.tif 000003
【図３】
0003549724.tif 000004
【図４】
0003549724.tif 000005
【図５】
0003549724.tif 000006
【図６】
0003549724.tif 000007
【図７】
0003549724.tif 000008
【図８】
0003549724.tif 000009
【図９】
0003549724.tif 000010
【図１０】
0003549724.tif 000011
【図１１】
0003549724.tif 000012
【図１２】
0003549724.tif 000013
【図１３】
0003549724.tif 000014
【図１４】
0003549724.tif 000015
【図１５】
0003549724.tif 000016
【図１６】
0003549724.tif 000017
【図１７】
0003549724.tif 000018