(57)【特許請求の範囲】
【請求項１】
命令キューを備えたＣＰＵ、バスを介して前記ＣＰＵに接続するメモリ、及び前記メモリとバスに接続する判定回路を有する半導体集積回路の前記メモリをテストする方法であって、
前記命令キューにテストプログラムを格納し、ＣＰＵでテストプログラムを実行してメモリライトアクセス及びメモリリードアクセスを行ない、メモリリードアクセスデータを判定回路で期待値と比較判定し、一旦テストプログラムが命令キューに格納された後のテストプログラムのフェッチは前記バスに代えて命令キューから繰り返し行なうことを特徴とするメモリテスト方法。
【請求項２】
ＣＰＵ、メモリ、及び前記ＣＰＵとメモリを接続するバスを半導体チップに有する半導体集積回路であって、
前記ＣＰＵは、命令キュー、命令キュー又は前記バスを介して供給される命令を解読する命令デコーダ、及び制御部を含み、
前記命令デコーダは、所定のリピート命令をデコードして前記制御部に、リピートすべきプログラムが一旦命令キューに格納された後の当該リピートすべきプログラムのフェッチを前記命令キューから繰返し可能とする動作モードを設定可能であり、
前記動作モードにおいて、前記ＣＰＵが前記プログラムを実行することにより、前記メモリからリードしたデータを入力し、入力したデータの論理値を期待値と比較判定する判定回路を更に有し、判定結果を半導体チップの外部に出力可能にされて成るものであること特徴とする半導体集積回路。
【請求項３】
前記判定回路にメモリからのリードデータを供給する経路として前記バスとは分離された専用バスが設けられて成るものであることを特徴とする請求の範囲第２項記載の半導体集積回路。
【請求項４】
前記メモリは複数個のメモリブロックを有し、前記メモリブロックは前記動作モードの設定に応答して、同一アドレスにマッピングされて並列動作可能にされ、
前記判定回路は複数個のメモリブロックから並列的に出力されるメモリリードデータを並列的に期待値と比較判定可能であることを特徴とする請求の範囲第３項記載の半導体集積回路。
【発明の詳細な説明】
技術分野
本発明は、半導体集積回路におけるオンチップメモリのテスト技術に関し、例えばメモリを内蔵するデータ処理装置、マイクロプロセッサ、シングルチップマイクロコンピュータのようなシステムＬＳＩ等のテスト方法に適用して有効な技術に関する。
背景技術
微細加工技術の発展により半導体集積回路（ＬＳＩ）には非常に大規模な回路を搭載できるようになってきている。そのためシングルチップマイクロコンピュータなどのシステムＬＳＩに搭載されるＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、フラッシュメモリなどのメモリ回路の容量は飛躍的に増大している。これらのメモリ回路はＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などの論理回路に比べ高密度に実装されており、またメモリセルやセンスアンプなどの回路はアナログ回路であるため、論理回路とは違ったテスト手法が必要となる。そのためテスト時のみＬＳＩをあたかも単体のメモリＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔｓ）であるかのように動作若しくは制御可能にするテストモードを設けて、外部のテスタから単体のメモリＩＣと同じようなテストを行うなどの方法が用いられてきた。しかしながら、システムＬＳＩの動作速度が上がるに従って、ロジックＩＣ及びメモリＩＣ双方に対応するより高機能で高価なテスタが必要になったり、テストを２パスに分けるためテスト時間が延びるなどの問題があった。そのためチップ内部でテストパターンを発生してテストを支援するメモリＢＩＳＴ（Ｂｕｉｌｔ−Ｉｎ  Ｓｅｌｆ  Ｔｅｓｔ）回路が提供されるに至った。
メモリＢＩＳＴ技術としては、特開２０００−３０４８３公報に記載のように、テストパターンを発生するシーケンサやリード・ライトするデータの発生装置をチップ内にハードウェアとして固定的に埋め込んだものや、特開平１１−１５７４０号公報に記載のように、簡易的なメモリテスト用のプロセッサを内蔵し、そのプロセッサにテスト時に外部からテストプログラムを供給し、そのプログラムを実行させてソフトウェアによりテストパターンを発生させるものなどが考案されている。しかし、前者の方法はテスト方法を設計時に決定する必要があり、メモリの様々な不良事象に対応することが難しい。昨今ＣＰＵコアはＩＰ（Ｉｎｔｅｌｌｅｃｔｕａｌ  Ｐｒｏｐｅｒｔｙ）モジュールデータとして流通され、様々なメーカーのプロセスにより作成され得るので、メモリの不良事象もいろいろな態様が想定されるので、テストパターンが固定されているのは得策でない。また後者の方法はテストパターンを設計時でなく、実テスト時に決定できるため柔軟性が高く、ＣＰＵコアのＩＰ化に適しているといえるが、本来のＣＰＵ以外にテスト用の簡易的なプロセッサを必要とするため、必要なハードウェアリソースが大きくなり、チップ面積を増大させてしまうためコスト的に問題がある。またテスト設計者が特殊な言語でテストプログラムを記述する必要があり、様々なユーザが利用するモジュールデータを想定すると、好ましくない。
テストプログラムを実行させるプロセッサとしてはテスト専用のもの以外に、通常動作時に使用するＣＰＵを流用する場合も考えられ、例えば特表平１０−５１１７９０号公報に記載のように、テストプログラムを内蔵メモリの一種であるキャッシュメモリの一部に配置し、ＣＰＵにそのテストプログラムを実行させ、キャッシュメモリの残りをテストする方法がある。この方法を用いるとテスト用に追加するハードウェアの量を抑えられるため、チップの製造コストを下げられるというメリットがある。またテストプログラムも専用のプロセッサでなく、通常時に使用されるＣＰＵ用のものを与えればよいため、ユーザが慣れ親しんだアセンブリ言語などでテストプログラムを作成できるというメリットもある。
しかし、ＣＰＵにプログラムを実行させてテストを行うという上記従来技術は、キャッシュメモリなどの内蔵メモリの一部にテストプログラムを配置した状態で、残りの内蔵メモリのテストを行うため、以下の問題点のあることが本発明者により見出された。
先ず、命令フェッチとテストのためのメモリアクセスがＣＰＵと内蔵メモリを接続するバスで競合した場合、ＣＰＵの命令実行に対してストールが発生する可能性があり、テスト効率が低下するという問題があった。また、キャッシュメモリの良否判定をＣＰＵが行うため、ＣＰＵがキャッシュメモリからリードされたデータと期待値との一致判定を行う命令を実行する必要があり、テストプログラムに占めるキャッシュメモリのリード・ライトを行う命令の比率が低下し、専用のテストシーケンサを用いたＢＩＳＴ技術に比べてテスト時間が長くなるという問題があった。要するに、メモリテストのためのメモリリードアクセスやライトアクセスのための命令実行の他に比較などのための命令実行が増え、相対的にメモリテスト時間が増大してしまう。またメモリテストプログラムはメモリリード・ライトなどの一定の操作をアドレスのみ変えてメモリ全領域に亘って実行するものになるため、ループ型のプログラムにする必要があるが、ループを構成するための分岐命令が必要となり、この点でもリード・ライト命令の比率が低下してしまう。分岐予測機能のないＣＰＵでは分岐命令自体が複数実行サイクルを必要とするため、命令数の増加以上にテストに必要なサイクル数が増加してしまう。さらにＣＰＵはアドレスマッピングの異なる通常複数のメモリを同時アクセスすることは通常できないので、テスト対象のメモリが複数存在する場合、或はメモリが複数ページ（複数メモリブロック）に分割されているような場合、それらメモリを並列アクセスしてテストを行なうことはできず、順次テストを行なわざるを得ず、テスト時間が長くなってしまうという問題があった。
メモリテスト用シーケンスとして例えば１３Ｎテストと呼ばれる手法がある。１３Ｎテストとはアイ・イー・イー・イー  デザイン  アンド  テスト  オブ  コンピューターズ  フェブラリー（１９８９年）第２６頁から第３４頁（ＩＥＥＥ  ＤＥＳＩＧＮ  ＆  ＴＥＳＴ  ＯＦ  ＣＯＭＰＵＴＥＲＳ，ＦＥＢＲＵＡＲＹ  １９８９，ｐｐ．２６−３４）において論じられているＳＲＡＭ向けのテスト手法で、システムＬＳＩの内蔵メモリ用テストとして一般的に知られているものである。１３Ｎテストでは、例えばメモリ全領域に対してパターン０をアドレス昇順にライトし、ライトしたパターン０のリード、パターン１のライト、パターン１のリードという処理を各アドレスに対して昇順に実行しながら、リードデータを期待値と比較判定していく。そのような処理をＣＰＵのプログラム実行で行なうには、パターン０の読み出し命令、パターン１の書き込み命令、パターン１の読み出し及びアドレスのインクリメント命令、パターン０データの一致判定命令、パターン０が不一致だった場合にエラー処理を行うための分岐命令、パターン１データの一致判定命令、パターン１が不一致だった場合にエラー処理を行うための分岐命令、ループカウンタのデクリメント及びループ終了判定命令、ループが未終了の場合のループ先頭への分岐命令等を含むプログラムを用いなければならない。このプログラム例からも明らかなように、メモリリード命令やライト命令より、一致判定や分岐並びにループカウンタのデクリメント命令等の命令実行サイクル数が多くなってしまう。
本発明の目的はテストシーケンスをチップ設計時でなく、テスト実行時に決定でき、かつＣＰＵをシーケンサとして用いることでテストに必要なハードウェアリソースが少なて済むというＢＩＳＴ手法を用いて、効率良く内蔵メモリをテストすることができる方法を提供することにある。
本発明の別の目的は、上記内蔵メモリのテスト方法を容易に実現可能にする半導体集積回路を提供することにある。
本発明の更に別の目的は、上記内蔵メモリのテスト方法を容易に実現可能にする半導体集積回路の開発期間短縮に寄与することができるＣＰＵ等のＩＰモジュールデータを格納した情報記録媒体を提供することにある。
本発明のその他の目的は、ＣＰＵの開発並びにＣＰＵによりアクセスされるオンチップメモリのテスト手法という点において、半導体集積回路の開発効率向上に寄与することができるテストプログラム及び回路設計データを記録した情報記録媒体を提供することにある。
本発明の上記並びにその他の目的と新規な特徴は本明細書の以下の記述と添付図面から明らかにされるであろう。
発明の開示
〔１〕《メモリテスト方法》命令キューを備えたＣＰＵ、メモリ、及び前記ＣＰＵとメモリを接続するバスを有する半導体集積回路の前記メモリをテストするメモリテスト方法は、前記命令キューにテストプログラムを格納し、ＣＰＵでテストプログラムを実行してバス経由のメモリアクセスを行ない、一旦テストプログラムが命令キューに格納された後のテストプログラムのフェッチは前記バスに代えて前記命令キューから繰返し行なうことを特徴とするものである。
また、同様に、命令キューを備えたＣＰＵ、バスを介して前記ＣＰＵに接続するメモリ、及び前記メモリとバスに接続する判定回路を有する半導体集積回路の前記メモリをテストするメモリテスト方法は、前記命令キューにテストプログラムを格納し、ＣＰＵでテストプログラムを実行してメモリライトアクセス及びメモリリードアクセスを行ない、メモリリードアクセスデータを判定回路で期待値と比較判定し、一旦テストプログラムが命令キューに格納された後のテストプログラムのフェッチは前記バスに代えて命令キューから繰り返し行なうことを特徴とするものである。
上記メモリテスト方法は、第１に、ＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ）形式の命令キューのリードポインタをサイクリックにループさせて同じ記憶情報を複数回利用するリピート動作を採用するから、同じテストプログラムを繰り返し実行可能にするために分岐命令を利用しなくても済む。第２に、繰り返し実行するテストプログラムを命令キューから繰り返しフェッチすればよく、メモリテストのためのメモリリード・ライトアクセスと命令フェッチのためのメモリアクセスがバス上で競合しない。したがって、テストプログラムから分岐命令を排除することができ、さらにＣＰＵに接続されたバスから同じ命令を繰返しフェッチする必要がないので、真にメモリテストをするためのムーブ命令などのメモリアクセス命令を実行する割合が増え、これにより半導体集積回路のオンチップメモリに対するテスト効率を向上させることが可能になる。
上記テスト手法は、ＣＰＵのテストプログラムによってその内容が決り、テストシーケンスをチップ設計時でなく、テスト実行時に決定でき、結果として、テスト対象の半導体集積回路には、オンチップＣＰＵをテストシーケンサとして流用することでテストに必要なハードウェアリソースが少なくて済むというＢＩＳＴ手法の採用も極めて容易になる。
〔２〕《ＩＰモジュールデータ》ＣＰＵのＩＰモジュールデータに着目する。コンピュータが読み取ってＣＰＵのＩＰモジュールデータのような設計データは記録媒体に記録されて提供される。前記設計データは、命令キュー、バス、命令キュー又はバスを介して供給される命令を解読する命令デコーダ、及び制御部の夫々の回路データを含む。前記命令デコーダは、所定のリピート命令をデコードして前記制御部に、リピートすべきプログラムが一旦命令キューに格納された後の当該リピートすべきプログラムのフェッチを前記命令キューから繰返し可能とする動作モードを設定する機能を有する。この記録媒体に格納された回路データを用いてＣＰＵの設計を行なえば、上記内蔵メモリのテスト方法を実現可能にする半導体集積回路の開発期間を短縮させることができる。
ＣＰＵなどのＩＰモジュールデータとテストプログラムに着目すると、ＣＰＵの設計データと、その設計データで実現されるＣＰＵにより実行可能なテストプログラムとは、コンピュータ読み取り可能に情報記録媒体に記録されて提供される。前記設計データは、命令キュー、バス、命令デコーダ、及び制御部の回路データを含み、前記命令デコーダは、所定のリピート命令をデコードして前記制御部に、リピートすべきプログラムが一旦命令キューに格納された後の当該リピートすべきプログラムのフェッチを前記命令キューから繰返し可能とする動作モードを設定する機能を有する。そして、前記テストプログラムは、前記動作モードにおいて命令キューに格納され、ＣＰＵに、バス経由のメモリアクセス処理及びメモリアクセスアドレス更新処理を繰り返し実行させる、メモリテストのためのプログラムである。
このコンピュータ読み取り可能な情報記録媒体によれば、ＩＰモジュールデータとしての設計データはＣＰＵを用いる半導体集積回路の設計開発を容易化する。そのような半導体集積回路のオンチップメモリに対するメモリテストではオンチップＣＰＵに前記テストプログラムを実行させればよい。オンチップＣＰＵはメモリテスト機能として命令キューの前記リピート作用をサポートし、テストプログラムから分岐命令の排除を可能にしているから、ＣＰＵのハードウェアに対して最適化されたメモリテストプログラムを最初から開発しなくても済む。したがって、ＣＰＵ等のＩＰモジュールデータを用いて半導体集積回路の開発を行なうユーザはＣＰＵの回路設計やオンチップメモリに対するテスト設計を効率化でき、半導体集積回路の開発を効率化することができる。
メモリテスト用のテストプログラムは、オンチップのＣＰＵにより実行されるため、ＣＰＵのプログラム開発に用いるアセンブリ言語等で記述可能であり、半導体集積回路の用途や不良事象に合わせて簡単に変更可能となる。したがって、上記ＣＰＵのＩＰモジュールデータを提供する際に、メモリテスト用のテストプログラムとしてサンプルプログラムを提供するだけで、ＩＰモジュールデータのユーザは様々なメモリテストに容易に対応することが可能となる。
〔３〕《ＬＳＩ》上記オンチップメモリのテスト方法を適用可能な半導体集積回路に着目する。半導体集積回路は、ＣＰＵ、メモリ、及び前記ＣＰＵとメモリを接続するバスを半導体チップに有する。前記ＣＰＵは、命令キュー、命令キュー又はバスを介して供給される命令を解読する命令デコーダ、及び制御部を含む。前記命令デコーダは、所定のリピート命令をデコードすることにより、リピートすべきプログラムが一旦命令キューに格納された後の当該リピートすべきプログラムのフェッチを前記命令キューから繰返し可能とする動作モードを前記制御部に設定可能である。
上記半導体集積回路によれば、オンチップＣＰＵはメモリテスト機能として前記命令キューのリピート作用をサポートし、テストプログラムから分岐命令の排除を可能にしている。
前記動作モードにおいて、前記ＣＰＵが前記プログラムを実行することにより、前記メモリからリードしたデータを入力し、入力したデータの論理値を期待値と比較判定する判定回路を設け、それによる判定結果を半導体チップの外部に出力可能に構成してよい。ＣＰＵが実行するテストプログラムから比較判定のための比較命令も除去することが可能になり、さらにメモリテスト効率を上げることができる。
このとき、前記判定回路にメモリからのリードデータを供給する経路として前記バスとは分離された専用バスを設けることにより、リードデータとライトデータがバス上で競合する事態を回避でき、メモリテスト効率を更に向上させることができる。
テスト効率を更に向上させるという観点より、前記メモリが複数個のメモリブロックを有するとき、各メモリブロックは前記動作モードの設定に応答して、同一アドレスにマッピングされて並列動作可能にされるとよく、このとき、前記判定回路は複数個のメモリブロックから並列的に出力されるメモリリードデータを並列的に期待値と比較判定可能であるればよい。これにより、並列テストが可能になり、さらにメモリテストを効率化することができる。
発明を実施するための最良の形態
第１図には本発明に係る半導体集積回路の一例であるマイクロコンピュータのようなシステムＬＳＩが示される。同図に示されるシステムＬＳＩ１００はＣＰＵコア１０１、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）コントローラ１１９、バスコントローラ１２０、周辺モジュール１２１、及びヒューズ回路１１５が、単結晶シリコンのような１個の半導体基板（半導体チップ）にＣＭＯＳなどの半導体集積回路製造技術によって形成される。
前記ＣＰＵコア１０１は、ＣＰＵ１０２、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）１０４、キャッシュメモリ１０６、汎用メモリ１０７、ＸＹメモリ１０８、ＢＩＳＴ１１０を有する。ＣＰＵ１０２は命令制御部及び演算部など有し、命令制御部がプログラムを構成する命令をフェッチして解読し、演算部がその解読結果に従って演算処理やメモリアクセス処理などを行なって、その命令を実行する。ＤＳＰ１０４はディジタル信号処理の高速化に特化したコプロセッサのような演算ユニットである。ＤＳＰ１０４は積和演算などを多様するディジタル信号処理演算ではＸＹバス１０９で接続されたＸＹメモリ１０８を利用する。キャッシュメモリ１０６はチップ外部のＲＯＭ１３１やＲＡＭ１３２等に格納されたプログラムやデータのうち、比較的頻繁に利用されるプログラムやデータを一時的に貯えておく。汎用メモリ１０７はＣＰＵ１０２のワーク領域若しくはデータの一時記憶領域として利用される。ＢＩＳＴモジュール１１０はオンチップメモリのテスト等に利用されるテスト用の回路である。
ＣＰＵ１０２、ＤＳＰ１０４、キャッシュメモリ１０６、汎用メモリ１０７、ＸＹメモリ１０８、及びＢＩＳＴモジュール１１０は高速なＣＰＵバス１０５で接続されている。またキャッシュメモリ１０６、汎用メモリ１０７、ＸＹメモリ１０８、ＢＩＳＴモジュール１１０はＣＰＵコア１０１の外部と接続するためのシステムバス１１８にも接続される。キャッシュメモリ１０６は非キャッシュアクセス時にはＣＰＵバス１０５とシステムバス１１８のブリッジ回路として動作するように構成されている。即ち、ＣＰＵ１０２によるメモリアクセス対象がキャッシュメモリ１０６によるキャッシュの非対象領域である場合、キャッシュメモリ１０６はバス１０５とバス１１８を接続可能にするブリッジ回路として機能される。前記汎用メモリ１０７とＸＹメモリ１０８はそれぞれ内部で４ページ（４個のメモリブロック）に分割されている。
ＣＰＵ１０２には命令キュー１０３が内蔵されている。命令キュー１０３にはバス１０５，１１８の空きタイミングを利用して命令がプリフェッチされる。特に本発明では、命令キュー１０３は汎用メモリ１０７とＸＹメモリ１０８のテスト時に、テストプログラムが格納され、格納されたテストプログラムを繰り返し利用可能なリピートキュー若しくはループキューとして動作されることになる。要するに、繰り返し実行されるテストプログラムを毎回キャッシュメモリ１０６を通してバス１０５からフェッチしなくても済む。したがって、メモリテストのメモリリード・ライトデータがバス１０５上でテストプログラムと競合する状態の発生を抑制若しくは低減することが可能になり、メモリテストの効率化を実現する。尚、命令キュー１０３の詳細については後述する。
ＢＩＳＴモジュール１１０はメモリテストモードかどうかを示すビストイネーブル信号（ＢＩＳＴＥＮ）１４０を汎用メモリ１０７とＸＹメモリ１０８に出力する。メモリテスト動作で汎用メモリ１０７から読み出されるリードデータは専用データバス１４１を介してＢＩＳＴモジュール１１０に、メモリテスト動作でＸＹメモリ１０８から読み出されるリードデータは専用データバス１４２を介してＢＩＳＴモジュール１１０に供給される。ＢＩＳＴモジュール１１０は、バス１４１，１４２からのリードデータを期待値データと比較判定し、それによるテスト結果信号１１１を外部端子１１２からチップ外部に出力する。これにより、メモリテストのリードデータとライトデータがバス１０５で競合することはない。この点においてもメモリテストを効率化することができる。
また、ＢＩＳＴモジュール１１０は汎用メモリ１０７に対して、メモリの一部が不良であった場合に不良部分を冗長メモリ領域に置き換えて救済するための救済すべきアドレス情報（救済アドレス情報）のような救済情報を信号１１３を介して汎用メモリ１０７に出力するようになっている。また、メモリテストで得られた救済情報を不揮発的に記憶するヒューズ回路１１５が設けられ、このヒューズ回路１１５とＢＩＳＴモジュール１１０との間では前記救済情報はデータ信号１１４を介して入出力される。ヒューズ回路１１５はＢＩＳＴモジュール１１０からの救済情報を、ヒューズ回路制御用の外部端子１１７を介して入力されるヒューズ回路制御信号１１６に従って書き込み制御される。
ＤＭＡＣ１１９はＣＰＵの初期設定に従ってメモリ間のデータ転送制御、メモリと入出力回路間のデータ転送制御を行なう。バスコントローラ１２０は外部バス１３０を介する情報伝送のバス幅や転送速度に関するインタフェース制御を行なう。周辺モジュール１２１はタイマやシリアルインタフェースなどの周辺機能を有する。外部バス１３０には、特に制限されないが、マスクＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリなどのＲＯＭ１３１、ＳＲＡＭ，ＳＤＲＡＭなどのＲＡＭ１３２、並びにＡＳＩＣモジュール１３３等と接続される。
上記システムＬＳＩ１００の通常動作モードにおいて、ＣＰＵ１０２がＣＰＵバス１０５を介して汎用メモリ１０７やＸＹメモリ１０８をアクセスすると、アドレスで指示された各メモリ１０７，１０８内のただ一つのページだけがアクセス対象とされ、リードアクセスの場合にはリードデータがＣＰＵバス１０５を介してＣＰＵ１０２に読み込まれ、ライトアクセスの場合にはＣＰＵバス１０５上のライトデータがアクセス対象ページのメモリセルに書き込まれる。
メモリテストのためのテストプログラムを実行するとき、前記ＢＩＳＴモジュール１１０内の特定のレジスタに対して書き込みが行なわれ、メモリテストモード（ＢＩＳＴＥＮが“１”の状態）が設定される。このメモリテストモードにおいて、ＣＰＵ１０２によるリードアクセスがあると、汎用メモリ１０７及びＸＹメモリ１０８からのリードデータはＣＰＵバス１０５には出力されず、専用バス１４１，１４２を介してＢＩＳＴモジュール１１０に供給される。このメモリテストモードにおいて、汎用メモリ１０７，ＸＹメモリ１０８の夫々のページは並列にリード動作され、ＢＩＳＴモジュール１１０には３２ビット×４（ページ数）×２（メモリ数）＝２５６ビットのデータが出力される。ライト時には各ページに同一のデータが同時にライトされる。ＢＩＳＴモジュール１１０はメモリ１０７，１０８の各ページから送られてきたリードデータと、あらかじめモジュール内部のレジスタに書かれた期待値データとを比較し、不一致が発生した場合には外部端子１１２に対して不一致が発生したことを通知する。前記不一致に係るメモリアドレスはＢＩＳＴモジュール１１０に救済情報として保持される。この救済情報は、電源を切っても消失しないように不揮発性の記憶素子で構成されるヒューズ回路１１５に蓄積されることになる。
ここで、オンチップメモリのテストシーケンスの一つである１３Ｎテストの手法を第１６図に基づいて予め説明しておく。このテストはＬ０からＬ４の五つのフェーズに分けられ、あるパターン０（全ビット０やチェッカパタンなど）とその反転パタンであるパターン１（全ビット１や反転チェッカパタンなど）をリード・ライトするようになっている。Ｌ０フェーズ（８５０）ではメモリ全領域に対してパターン０をアドレス昇順にライトしていく。Ｌ１フェーズ（８５１）ではＬ１フェーズでライトしたパターン０のリード、パターン１のライト、パターン０のリードという処理を各アドレスに対して昇順に実行する。Ｌ２フェーズ（８５２）ではＬ１フェーズでライトしたパターン１のリード、パターン０のライト、パターン０のリードという処理を各アドレスに対して昇順に実行する。Ｌ３フェーズ（８５３）及びＬ４フェーズ（８５４）はＬ１及びＬ２フェーズのアドレス順序を降順に変えたものになっている。その詳細に衝いては後述するが、ＣＰＵ１０２が実行するテストプログラムは、前記１３Ｎテストを行うためのプログラムとされる。
尚、第１６図においてＲ０はパターン０リード、Ｗ０はパターン０ライト、Ｒ１はパターン１リード、Ｗ１はパターン１ライトを夫々意味する。
第２図にはメモリテストに関係する回路ブロックの接続状態が詳細に例示される。メモリテスト時に、ＣＰＵ１０２はリピート機能を使ってテストプログラムを繰り返し実行するが、その際のテストプログラムの繰り返し実行（リピートループ）のループ１回目のみ、ＣＰＵ１０２はＣＰＵバス１０５に命令フェッチを発行する。命令フェッチはキャッシュメモリ１０６に対して発行され、キャッシュヒットした場合にはキャッシュメモリ１０６から、キャッシュミスあるいはキャッシュを使わない場合にはシステムバス１１８、バスコントローラ１２０を介してチップ外部からから読み込まれることになる。ループ２回目以降はＣＰＵ１０２内の命令キュー１０３から命令が読み出されるようになっており、ＣＰＵバス１０５に命令フェッチは発行されない。要するに、一旦テストプログラムが命令キュー１０３に格納された後のテストプログラムのフェッチは前記バス１０５に代えて前記命令キュー１０３から繰返し行なう。
テストプログラムを実行するＣＰＵ１０２がテスト対象のメモリに対するライトアクセスを実行すると、ＣＰＵバス１０５のバスコマンドバス（ＣＰＵバスコマンドバス）２０１、アドレスバス（ＣＰＵアドレスバス）２０３、データバス（ＣＰＵデータバス）２０３に必要な値が出力される。ＢＩＳＴモジュール１１０から出力されている制御信号ＢＩＳＴＥＮ１４０が“Ｌ”の場合、アドレスで指示された唯一のページのみにライトが行われるが、ＢＩＳＴＥＮが“Ｈ”の場合、全てのページに並列的にライトされる。ＣＰＵ１０２がリードアクセスを実行すると、ＣＰＵバス１０５のバスコマンドバス２０１、アドレスバス２０２に必要な値が出力される。制御信号ＢＩＳＴＥＮが“Ｌ”の場合、アドレスで指示された唯一のページのみがＣＰＵデータバス２０３にデータを出力するが、制御信号ＢＩＳＴＥＮが“Ｈ”の場合、全てのページが並列にリード動作され、汎用メモリ１０７及びＸＹメモリ１０８はＢＩＳＴモジュール１１０に接続された専用データバス１４１、１４２にリードデータを出力する。この専用データバス１４１，１４２はページの数（８ページ）に応じて、ここでは３２ビット×８、すなわち２５６ビット分用意されている。このときＣＰＵデータバス２０３にはリードデータは供給されない。ＢＩＳＴモジュール１１０はＣＰＵバスコマンドバス２０１とＣＰＵアドレスバス２０２の値をデコードし、制御信号ＢＩＳＴＥＮが“Ｈ”かつリードサイクルであれば、各メモリ１０７，１０８からの専用データバス１４１，１４２に出力されたデータと予めＢＩＳＴモジュール１１０内のレジスタに設定されている期待値とを比較し、不一致が発生した場合には信号（ＦＡＩＬ）２０４をアサートして外部端子（ＦＡＩＬ）２０５を介してチップ外部に不一致を通知する。また不一致の発生をＢＩＳＴモジュール１１０内のステータスレジスタに記録し、不一致の発生を後でＣＰＵ１０２から読み出して知ることが出来るように動作する。不一致が発生した場合には、そのビットが救済可能かどうかが判定され、救済不可能ならば救済不可信号２０６を救済不可端子２０７からチップ外部に出力して、その旨が外部に通知される。またＢＩＳＴモジュール１１０は不一致の発生したアドレスも内部のレジスタに記憶できるようになっている。汎用メモリ１０７の救済ビット（冗長ビット）を使用する場合には、救済すべきビットのアドレスをヒューズ回路１１５に書き込めるように、ＢＩＳＴモジュール１１０はヒューズ回路１１５にヒューズデータ１１４を出力する。また、ＢＩＳＴモジュール１１０は、ヒューズ回路１１５から読み出されたデータ又は内部のレジスタの値に基づいて、汎用メモリ１０７に対して救済すべきアドレスを示す救済情報信号１１３を出力できるようになっている。ヒューズ回路１１５に対するデータの書き込み動作は、ＢＩＳＴモジュール１１０からの書き込みデータを、チップのヒューズ制御端子１１７からの指示（一般的には出荷前テスト時のテスタから）で行う。ヒューズ回路１１５は不揮発性のメモリであり、本実施例では小容量のフラッシュメモリによって構成される。
第３図にはＢＩＳＴモジュール１１０の詳細が例示される。ＢＩＳＴモジュール１１０は、比較器２５１、アドレスデコーダ２５２、レジスタ部２５３、救済判定部２５４、ヒューズ制御部２５５から成る。ここでは、汎用メモリ１０７、ＸＹメモリ１０８の各々４ページ、計８ページに対して同時並列テストを行うため、３２ビットの比較器２５１は８個設けられている。
比較器２５１は８ページそれぞれの比較結果で不一致があったかどうかの８ビットの比較結果信号２６３をアドレスデコーダ２５２、救済判定部２５４、レジスタ部２５３に通知する。アドレスデコーダ２５２はＣＰＵバスコマンドバス２０１とＣＰＵアドレスバス２０２の値をデコードし、リードサイクルかどうかの判定を行う。リードサイクルであった場合、各比較器２５１に対して比較イネーブル信号２５６をアサートし、比較器２５１を活性化する。またアドレスによって比較器２５１が使用する期待値を２種類の中から選択できるようになっており、期待値選択信号２５７を比較器２５１に通知する。これは例えば１３Ｎテストにおいて、パターン０とパターン１をダイナミックに切り替えられるようにするためのものである。またアドレスデコーダ２５２は比較器２５１からの比較結果が不一致であった場合、該当するエラーアドレス２５８を救済判定部２５４及びレジスタ部２５３に出力するようになっている。救済判定部２５４はエラーアドレスに基づいて救済可能かどうかを判定し、救済不可信号２０６を救済不可端子２０７から出力する。また比較器２５１で不一致が発生した場合、ＦＡＩＬ信号２０４をＦＡＩＬ端子２０５から出力する。ＦＡＩＬ信号２０４及び救済不可信号２０６のアサートはレジスタ部２５３の設定内容にしたがってマスク可能になっている。また、救済判定部２５４は、エラーアドレス情報を元にヒューズ回路１１５に書き込むべき救済データを生成し、これを救済データ信号２６４としてレジスタ部２５３に出力する。ヒューズ制御部２５５はヒューズ回路１１５との間でヒューズデータ信号１１４を入出力し、また汎用メモリ１０７に救済データとしての救済情報信号１１３を出力する。レジスタ部２５３の詳細は後述するが、比較器２５１に対して２種類の期待値信号２６０、２６１とメモリのページ毎に比較器のオン／オフを指定するためのＭＳ信号２６２を出力している。また救済判定部２５４に対して、レジスタ設定に基づいてＦＡＩＬ端子２０５及び救済不可端子２０７のアサートをマスクする信号２６５を出力している。またアドレスデコーダ２５２に対して、レジスタ部２５３の設定に基づいて汎用メモリ１０７、ＸＹメモリ１０８それぞれのアドレスの上限を決めるアドレスリミット信号２６６を出力している。またレジスタ部２５３はヒューズ制御部２５５に対して、救済データとしてのＦＤ信号２６７を入出力可能にされる。
第４図にはレジスタ部２５３が保有する複数のレジスタが示される。レジスタ部２５３は３０１〜３０７で示されるレジスタを有し、夫々はＣＰＵ１０２の非キャッシュアクセスによりＣＰＵバス１０５、キャッシュメモリ１０６、システムバス１１８を介してアクセス可能にされる。
期待値レジスタ（ＢＩＳＴＤＲ０及びＢＩＳＴＤＲ１）３０１は比較用の２種類の期待値を保持する。アドレスレジスタ（ＢＩＳＴＦＡＲ０、ＢＩＳＴＦＡＲ１、ＢＩＳＴＦＡＲ２、ＢＩＳＴＦＡＲ３）３０２は不一致が発生したエラーアドレスを記憶する。ヒューズデータレジスタ（ＢＩＳＴＦＤＲ）３０３はエラーアドレスから生成される救済アドレス情報をヒューズ回路に書き込むためのデータを記憶する。ステータスレジスタ（ＢＩＳＴＳＲ）３０４は各ページ毎に不一致があったことを記録する。モジュールセレクトレジスタ（ＢＩＳＴＭＳ）３０５は各ページ毎にテストするか否かを制御する制御情報を保持する。コントロールレジスタ（ＢＩＳＴＣＲ１）３０６はメモリテストモードのオン・オフ、フェイルストップモード及び救済情報の制御を行う制御情報を保持する。アドレスリミット制御レジスタ（ＢＩＳＴＣＲ２）３０７はサイズの違うメモリを同時にテストする際に、各ページのテスト範囲を決める制御情報を保持する。
前記期待値レジスタ（ＢＩＳＴＤＲ０、ＢＩＳＴＤＲ１）３０１は各々３２ビットのレジスタであり、それぞれ比較のための期待値を保持しており、ＣＰＵアドレスバス２０２のビット１８が“０”であれば一方のレジスタ（ＢＩＳＴＤＲ０）が、“１”であれば他方のレジスタ（ＢＩＳＴＤＲ１）が使用される。これらは１３Ｎテストでのパターン０とパターン１の切り替えなどに使用される。アドレスレジスタ（ＢＩＳＴＦＡＲ０，ＢＩＳＴＦＡＲ１，ＢＩＳＴＦＡＲ２）３０２は各々３２ビットのレジスタで、汎用メモリが各ページ毎に救済可能であり、エラーアドレスを４つまで保持する必要があるため、４つ用意されている。ヒューズデータレジスタ（ＢＩＳＴＦＤＲ）３０３はヒューズ回路１１５に書き込むデータを保持するための３２ビットのレジスタで、エラーアドレスを元に救済判定部２５４によってデータが自動生成され、レジスタに書き込まれる。ステータスレジスタ（ＢＩＳＴＳＲ）３０４は８ビットのレジスタで、初期値は全ビット“０”であるが、テストによって不一致が発生すると、各ページに対応するビットに“１”が書き込まれる。Ｓ１３〜Ｓ１０がＸＹメモリ１０８の各ページに対応し、Ｓ０３〜Ｓ００が汎用メモリ１０７の各ページに対応する。
モジュールセレクトレジスタ（ＢＩＳＴＭＳ）３０５は８ビットのレジスタで、各ページ毎にテストを行うかどうかを制御し、各ビットが“１”だとテストオン、“０”だとテストオフである。ただしテストオフに設定してもメモリのリード・ライト自体を止めるわけではなく、比較器２５１での比較を行わないように動作する。Ｍ１３〜Ｍ１０がＸＹメモリ１０８の各ページに対応し、Ｍ０３〜Ｍ００が汎用メモリ１０７の各ページに対応する。
コントロールレジスタ（ＢＩＳＴＣＲ１）３０６は８ビットのレジスタで、メモリテスト機能全体をオン／オフするためのイネーブルビットＥＮが存在し、このビットに“１”を書き込むと、メモリテスト機能を有効にするためのＢＩＳＴＥＮ信号１４０が“Ｈ”になり、各メモリの動作がメモリテストモードに切り替わる。またＣ０ビットはＦＡＩＬ信号２０４のマスクを制御し、“１”に設定すると不一致が発生してもＦＡＩＬ信号２０４をアサートしなくなる。同様にＣ１ビットは救済不可信号２０６のマスクを制御し、“１”に設定すると救済不能なエラーが発生しても救済不可信号をアサートしなくなる。Ｃ２ビットは汎用メモリに対する救済情報をヒューズ回路１１５からのデータから生成するか、ヒューズデータレジスタ（ＢＩＳＴＦＤＲ）３０３のデータから生成するかを制御するビットで、“０”だとヒューズ回路、“１”だとヒューズデータレジスタ（ＢＩＳＴＦＤＲ）３０３が選択される。初期値は“０”である。
コントロールレジスタ（ＢＩＳＴＣＲ２）３０７は８ビットのレジスタで、ＸＹメモリ１０８、汎用メモリ１０８の１ページのサイズを指定する。ＳＺ１２〜ＳＺ１０がＸＹメモリ１０７に対応し、ＳＺ０２〜ＳＺ００が汎用メモリ１０７に対応する。それぞれの設定値と記憶容量は、０００：４ｋ、００１：８ｋ、０１０：１６ｋ、０１１：３２ｋ、１００：６４ｋ、１０１：１２８ｋ、１１０：２５６ｋ、１１１：５１２ｋバイトの組合せとなる。
第５図にはメモリテストの対象とされる汎用メモリ１０７及びＸＹメモリ１０８のうち代表としてＸＹメモリ１０８の１ページの構成が例示される。
第５図の例では１ページのサイズが４ｋバイトとされ、４ｋバイトのメモリマット３５７を有し、メモリマット３５７に対する３２ビット単位のメモリセルの選択はアドレスデコーダ３６０で行なう。
ＸＹメモリ１０８はＣＰＵバス１０５、ＸＹバス１０９、システムバス１１８の３つのバスに接続されており、調停回路３５１がＣＰＵバスのバスコマンドバス２０１、ＣＰＵバスのアドレスバス２０２、ＸＹバスのバスコマンドバス２１１、ＸＹバスのアドレスバス２１２、システムバスのバスコマンドバス２２１、システムバスのアドレスバス２２２をデコードし、どのバスからのアクセスを処理するかを決定する。優先順位はシステムバス＞ＸＹバス＞ＣＰＵバスであるが、メモリテスト時にはＣＰＵバス１０５からのみアクセスするようにテストプログラムを構成する。調停回路３５１からのアドレス選択信号３５２に従って、アドレスセレクタ３５３でアドレスが選択される。アドレスセレクタ３５３で選択されたアドレス信号の上位複数ビットはイネーブル制御回路３５６に供給されてメモリマットの選択に利用され、残りの下位アドレスビットはアドレスデコーダ３６０に供給されてメモリセルの選択に利用される。
ライトアクセス時にメモリマット３５７へのライトデータはデータ選択信号３５４に従ってライトデータセレクタ３５５で選択される。リード時にメモリマット３５７からのリードデータをどのデータバスに値を出力するかは、出力バッファ２０３Ｂ、２１３Ｂ、２２３Ｂで選択される。
前記イネーブル制御回路３５６は、調停回路３５１によって選択されたコマンド、アドレス及び制御信号（ＢＩＳＴＥＮ）１４０をデコードして、メモリマット３５７、ライト制御回路３５８、センスアンプ３５９を起動するか否かを決定する。即ち、ＢＩＳＴＥＮ１４０が“Ｌ”の時には、それぞれのページが別々のアドレスに対して反応するように上位アドレスビットをデコードするが、ＢＩＳＴＥＮ１４０が“Ｈ”の時には全てのページが同一のアドレスに対して反応するようにデコードする。
尚、図示はしないが、汎用メモリ１０７の１ページの構成もＸＹバス１０９が接続されていないこと及びメモリサイズが違うことを除いて第５図と同様であるから、その詳細な説明は省略する。
第６図には汎用メモリ１０７のアドレスマップが例示される。この図は汎用メモリ１０７が１ページ３２ｋバイトで４ページ存在し、計１２８ｋバイトの場合の例である。特に制限されないが、拡張性を考慮して汎用メモリには４Ｍバイトの空間が割り当てられており、本実施例ではそのうち１２８ｋバイトに実際のメモリが存在する構成になっている。この構成の場合、ＢＩＳＴＥＮ１４０が“Ｌ（＝０）”の時のアドレスマップは第６図の（ａ）のようになる。４ページはそれぞれ、“Ｕ０Ｌ：０ｘＡ５５Ｆ００００〜０ｘＡ５５Ｆ７ＦＦＦ”、“Ｕ０Ｈ：０ｘＡ５５Ｆ８０００〜０ｘＡ５５ＦＦＦＦＦ”、“Ｕ１Ｌ：０ｘＡ５６０００００〜０ｘＡ５６０７ＦＦＦ”、“Ｕ１Ｈ：０ｘＡ５６０８０００〜０ｘＡ５６０８ＦＦＦ”に割り付けられる。記号０ｘは後続の値が１６進数であることを意味する。第６図の（ａ）において網かけされた領域４０１はシャドウとなり、各ページのイネーブル信号ＵＰＡＧＥ０ＬＥＮ、ＵＰＡＧＥ０ＨＥＮ、ＵＰＡＧＥ１ＬＥＮ、ＵＰＡＧＥ１ＨＥＮは第６図の（ａ）の右側に示すような値になる。一方ＢＩＳＴＥＮ１４０が“Ｈ（＝１）”の時のアドレスマップは第６図の（ｂ）のようになる。この場合、全てのページが、０ｘＡ５００００００〜０ｘＡ５００７ＦＦＦ、の３２ｋバイトに割り付けられ、各ページのイネーブル信号も同一のアドレスでアサートされるようになる。この場合、第６図の（ｂ）で“×”で示す領域４０２に対するアクセスはどのページも反応せず無効となる。
第７図には第６図のアドレスマップを実現するためのイネーブル制御回路３５６の構成を例示する。第７図には４ページ分の論理がをまとめて示される。上位アドレスデコーダ４５１はコマンド４５２がリードまたはライトであり、かつＢＩＳＴＥＮ１４０が“Ｌ”の時にはアドレスの上位３１ビット〜２０ビット（Ａ３１〜Ａ２０）が０ｘＡ５４０〜０ｘＡ５７Ｆの場合、ＢＩＳＴＥＮ１４０が“Ｈ”の時には０ｘＡ５００〜０ｘＡ５３Ｆの場合に、イネーブル信号（ＵＭＥＭＥＮ）４５３をアサートするように動作する。各ページのイネーブル信号（ＵＰＡＧＥ０ＬＥＮ，ＵＰＡＧＥ０ＨＥＮ，ＵＰＡＧＲ１ＬＥＮ，ＵＰＡＧＥ１ＨＥＮ）４７０〜４７３は、ＵＭＥＭＥＮ４５３と、ＢＩＳＴＥＮ１４０と、アドレスビットＡ２１及びＡ１５をデコード回路（Ｕ０ＬＤＥＣ）４６０、（Ｕ０ＨＤＥＣ）４６１、（Ｕ１ＬＤＥＣ）４６２、（Ｕ１ＨＤＥＣ）４６３でデコードして生成される。アドレスビットＡ２１は０ｘＡ５４０００００〜０ｘＡ５５ＦＦＦＦＦ又は０ｘＡ５６０００００〜０ｘＡ５７ＦＦＦＦＦを決定するアドレスビットとされ、アドレスビットＡ１５は、０ｘＡ５４０００００〜０ｘＡ５５ＦＦＦＦＦの領域に対して上位半分か下位半分かを、０ｘＡ５６０００００〜０ｘＡ５７ＦＦＦＦＦの領域に対して上位半分か下位半分かを決めるアドレスビットとされる。ＢＩＳＴＥＮ１４０が“Ｌ”の時にはＥＮＯＲ（排他的負論理和ゲート）４８０がインバータとして働き、各ページのイネーブル信号（ＵＰＡＧＥ０ＬＥＮ）４７０、（ＵＰＡＧＥ０ＨＥＮ）４７１、（ＵＰＡＧＥ１ＬＥＮ）４７２、（ＵＰＡＧＥ１ＨＥＮ）４７３が排他的にアサートされる。一方、ＢＩＳＴＥＮ１４０が“Ｈ”の時には、ＥＮＯＲ４８０がバッファとして働き、アドレスのビットＡ２１とＡ１５が共に“０”かつＵＭＥＭＥＮが“１”であるときのみ各ページのイネーブル信号４７０〜４７３を並列にアサートし、アドレスがそれ以外の条件の時にはＵＭＥＭＥＮに関わらず全てのイネーブル信号４７０〜４７３がネゲートされるように動作する。
第８図にはＸＹメモリ１０８のアドレスマップが例示される。この図はＸＹメモリ１０８は１ページ４ｋバイトで４ページ存在し、計１６ｋバイトの場合を例とする。拡張性を考慮してＸＹメモリ１０８には０ｘＡ５００００００〜０ｘＡ５０１ＦＦＦＦまでの１２８ｋバイトの空間が割り当てられており、本実施例ではそのうち１６ｋバイトに実際のメモリが存在する構成になっている。また図には示していないが０ｘＡ５０２００００〜０ｘＡ５０ＦＦＦＦＦの空間は０ｘＡ５００００００〜０ｘＡ５０１ＦＦＦＦの空間のシャドウとして扱われる。この構成の場合、ＢＩＳＴＥＮ１４０が“Ｌ”の時のアドレスマップは第８図の（ａ）のようになる。４ページはそれぞれ、“Ｘ０：０ｘＡ５００７０００〜０ｘＡ５００７ＦＦＦ”、“Ｘ１：０ｘＡ５００８０００〜０ｘＡ５００８ＦＦＦ”、“Ｙ０：０ｘＡ５０１７０００〜０ｘＡ５０１７ＦＦＦ”、“Ｙ１：０ｘＡ５０１８０００〜０ｘＡ５０１８ＦＦＦ”に割り付けられる。この場合、第８図において網かけされた領域５０１はシャドウとなり、各ページのイネーブル信号（ＸＰＡＧＥ０ＥＮ、ＸＰＡＧＥ１ＥＮ、ＹＰＡＧＥ０ＥＮ、ＹＰＡＧＥ１ＥＮ）は、第８図の（ａ）の右側に示すような値になる。一方ＢＩＳＴＥＮ１４０が“Ｈ”の時のアドレスマップは第８図の（ｂ）のようになる。この場合、全てのページが、“０ｘＡ５００００００〜０ｘＡ５０００ＦＦＦ”に割り付けられ、各ページのイネーブル信号（ＸＰＡＧＥ０ＥＮ、ＸＰＡＧＥ１ＥＮ、ＹＰＡＧＥ０ＥＮ、ＹＰＡＧＥ１ＥＮ）も同一のアドレスでアサートされるようになる。第８図の（ｂ）で“×”で示す領域５０２に対するアクセスはどのページも反応せず無効となる。第６図で示した汎用メモリ１０７の場合と違うのは、ＢＩＳＴＥＮ１４０が“Ｈ”の時、シャドウ領域５０１がなくなることである。これは本実施例ではメモリのサイズが汎用メモリ１０７より小さいため、同時テストをする際にシャドウを残したままだと、例えば１３ＮテストのＬ１フェーズにおいて、汎用メモリのＬ１フェーズを実行中にＸＹメモリ１０７に対するＬ１フェーズのテストを複数回行ってしまい、次のＬ２フェーズの開始時に期待される状態を壊してしまうためである。
第９図には上記アドレスマップを実現するためのイネーブル制御回路３５６の構成を説明する。上位アドレスデコーダ５５１はコマンド５５２がリードまたはライトであり、アドレスの上位ビット３１〜ビット２０が０ｘＡ５０の場合にＸＭＥＭＥＮＢ５５３をアサートするように動作する。ＡＭＡＳＫ回路５５４はアドレスのビットＡ１４、Ａ１３，Ａ１２と、ＸＭＥＭＥＮＢ５５３と、ＢＩＳＴＥＮ１４０をデコードしてＸＭＥＭＥＮ５５５を生成する。ＢＩＳＴＥＮが“０”の時は、アドレスのビットＡ１４，Ａ１３，Ａ１２に関わらずＸＭＥＭＥＮ＝ＸＭＥＭＥＮＢとなるが、ＢＩＳＴＥＮ１４０が“１”の時は、アドレスのビットＡ１４、Ａ１３，Ａ１２が“０００”の時のみ、ＸＭＥＭＥＮ＝ＸＭＥＭＥＮＢとなり、それ以外はＸＭＥＭＥＮは“０”となる。各ページのイネーブル信号は、ＸＭＥＭＥＮ５５５と、ＢＩＳＴＥＮ１４０と、アドレスビットＡ１６及びＡ１５をデコード回路（Ｘ０ＤＥＣ）５６０、（Ｘ１ＤＥＣ）５６１、（Ｙ０ＤＥＣ）５６２、（Ｙ１ＤＥＣ）５６３でデコードして生成される。ＢＩＳＴＥＮ１４０が“Ｌ”の時にはＥＮＯＲ５８０がインバータとして働き、各ページのイネーブル信号（ＸＰＡＧＥ０ＥＮ）５７０、（ＸＰＡＧＥ１ＥＮ）５７１、（ＹＰＡＧＥ０ＥＮ）５７２、（ＹＰＡＧＥ１ＥＮ）５７３が排他的にアサートされる。一方、ＢＩＳＴＥＮ１４０が“Ｈ”の時には、ＥＮＯＲ５８０がバッファとして働き、アドレスビットＡ１６、Ａ１５が共に“０”かつＸＹＭＥＭＥＮ５５５が“１”ときのみ各ページのイネーブル信号５７０〜５７３が同時にアサートされ、アドレスがそれ以外の条件の時にはＸＹＭＥＭＥＮ５５５に関わらず全てのイネーブル信号５７０〜５７３がネゲートされるように動作する。
第１０図には命令フェッチの構成を主体としてＣＰＵ１０２の詳細が例示される。６１０は演算部であり、特に図示はしないが、内部バスに接続された汎用レジスタ、算術論理演算器、アドレスレジスタ、データバッファレジスタ、テンポラリレジスタ、及びコントロールレジスタ等を有する。ＣＰＵアドレスバス２０２はアドレスレジスタに接続され、ＣＰＵデータバス２０３はデータバッファレジスタに接続される。
命令キュー１０３は例えば１２段のバッファエリアを備えた命令バッファ１０３ＢＦと、命令バッファ１０３ＢＦをＦＩＦＯ動作させるためのリードポインタ１０３ＲＰ及びライトポインタ１０３ＷＰを有する。リードポインタ１０３ＲＰはリード動作を行なうバッファエリアを指定するループカウンタであり、カウント値ＣＮＴＲは＃０〜＃１１とされる。ライトポインタ１０３ＷＰはライト動作を行なうバッファエリアを指定するためのループカウンタであり、カウント値ＣＮＴＷは＃０〜＃１１とされる。リードポインタ１０３ＲＰ及びライトポインタ１０３ＷＰは初期値を基点に、ライト動作が行なわれる毎にライトポインタ１０３ＷＰがインクリメントされ、リード動作が行なわれる毎にリードポインタ１０３ＲＰがインクリメントされる。ライトポインタ１０３ＷＰのカウント値ＣＮＴＷにリードポインタ１０３ＲＰのカウント値ＣＮＴＲが追いついた状態は、１２段のバッファエリアの全てに有意の記憶情報が保持されていない状態、換言すれば、バッファエリアに一旦記憶された記憶情報は全て読み出し完了されているエンプティ（空）状態を意味する。リードポインタ１０３ＲＰのカウント値ＣＮＴＲにライトポインタ１０３ＷＰのカウント値ＣＮＴＷが追いついた状態は、１２段のバッファエリアの全てに有意の記憶情報が保持されている状態、換言すれば、全てのバッファエリアは未だ読み出されていない記憶情報で満たされているフル（満）状態を意味する。
命令バッファ１０３ＢはＣＰＵデータバス２０３から命令を取り込む。バッファ１０３Ｂから読み出された命令又はＣＰＵデータバス２０３上の命令はセレクタ６０３で選択されて命令レジスタ（ＩＲ）６０１に供給される。ＩＲ６０１にラッチされた命令は命令デコーダ６０２で解読され、その解読結果に従って演算部６１０による演算動作を制御し、命令制御部６０７を制御する。
前記命令制御部６０７は、ＩＲ６０１への命令フェッチの経路を選択信号ＳＥＬによりセレクタ６０３に選択させ、リードポインタ１０３ＲＰのインクリメント信号ＩＮＣＲ、ライトポインタ１０３ＷＰのインクリメント信号ＩＮＣＷを生成する。この命令制御部６０７は、命令フェッチ又は命令プリフェッチのために演算部６１０を介するメモリアクセスサイクルの生成を制御し、また、命令キュー１０３に対する命令の書き込み（プッシュ）と読み出し（プル）の操作を制御し、更に、命令キュー１０３をリピートキュー若しくはループキューとして動作させる制御等を行なう。
命令制御部６０７による命令プリフェッチ制御機能を説明する。命令制御部６０７は、前記リードポインタ１０３ＲＰのカウント値ＣＮＴＲとライトポインタ１０３ＷＰのカウント値ＣＮＴＷを入力し、命令バッファ１０３のフル・エンプティー状態を検出している。命令制御部６０７は、命令バッファ１０３Ｂがフル状態でなければ、データバス２０３の空きタイミングを利用して、キャッシュメモリ１０６又は外部のＲＯＭ１３１或はＲＡＭ１３２から命令バッファ１０３Ｂに命令をプリフェッチするためのメモリサイクルを演算部６１０に生成させる。この時の命令アドレスはプログラムカウンタなどを利用して生成される。このメモリサイクルでデータバス２０３に供給される命令は命令バッファ１０３Ｂに保持され、インクリメント信号ＩＮＣＷによりライトポインタ１０３ＷＰの値がインクリメントされる。
命令制御部６０７による命令フェッチ制御機能を説明する。ＩＲ６０１への命令フェッチタイミングにおいて、命令バッファ１０３Ｂがエンプティー状態でなければ、命令バッファ１０３Ｂから読み出した命令をセレクタ６０３を介してＩＲ６０１にラッチさせる。命令バッファ１０３Ｂから読み出しの後、リードポインタ１０３ＲＰがインクリメントされる。ＩＲ６０１への命令フェッチタイミングにおいて、命令バッファ１０３Ｂがエンプティー状態であれば、キャッシュメモリ１０６又は外部のＲＯＭ１３１或はＲＡＭ１３２から命令をフェッチするためのメモリサイクルを演算部６１０に生成させ、このメモリサイクルでデータバス上２０３に得られた命令をセレクタ６０３を介してＩＲ６０１にラッチさせる。
命令制御部６０７によるリピートキュー制御機能を説明する。ＣＰＵ１０２の命令セットはリピート命令を含む。このリピート命令は、繰り返し実行する先頭の命令アドレス、最終の命令アドレス、繰り返し回数を指定する。命令デコーダ６０２はリピート命令をデコードすると、先頭命令アドレスから最終命令アドレスに至る命令を指定された回数だけ繰り返し実行するように、演算部６１０による命令アドレス生成や命令制御部６０７に対する命令フェッチ等を制御して、リピートループを形成する。このとき、命令デコーダ６０２は、命令制御部６０７に命令キュー１０３をリピートキューとして動作せる指示を与える。即ち、命令デコーダ６０２はリピート命令のデコードにより、命令制御部６０７内のリピートキューモードフラグ６０７Ｆをセットし、リピートループの繰り返し回数と個々のリピートループで実行する命令数をレジスタ６０７Ｒにセットする。この操作が行なわれた後、命令制御部６０７は、リピート命令で指定される先頭命令の実行に移る前に、リードポインタ１０３ＲＰとライトポインタ１０３ＷＰの値を初期値にリセットし、最初のリピートループでは、キャッシュメモリ１０６又は外部のＲＯＭ１３１或はＲＡＭ１３２から命令をＩＲ６０３にフェッチし、フェッチした命令を実行していく。これに並行して、最初のリピートループの命令を順次命令キュー１０３に蓄積していく操作を行なう。第２回目のリピートループからは、命令バッファ１０３Ｂに格納された命令を順次読み出して実行していく。このとき、命令制御部６０７は、リードポインタ１０３ＲＰのカウント値がレジスタ６０７Ｒの設定値（命令数）に到達する毎にリセット信号ＲＥＳでそのカウント値ＣＮＴＲを初期値に戻し、リングカウンタ動作させる。リピートループの実行回数がレジスタ６０７Ｒの設定値（リピートループの繰り返し回数）を終了すると、リピートキューモードフラグ６０７Ｆがリセットされ、これにより、命令制御部６０７は命令キュー１０３に対するリピートキュー動作の制御を終了する。
このように、リピートループを使用する場合には、命令制御部６０７がリピートループの長さを判定し、命令キューに収まる長さ（この例においては１２命令以下）の場合には命令キュー１０３に一旦格納してリードした命令をすぐに吐き出さず、２回目以降のリピートループのためにとっておくという制御を行う。その結果、リピートループの１回目だけは命令フェッチを必要とするが、リピートループの２回目以降を実行する際には命令フェッチが不要となるため、ＣＰＵバス１０５を効率的に使用できるようになる。またリピートループにおいて先頭に戻る処理は分岐命令を必要としないため、ループを構成するプログラム自体が短くなる。そのようなリピート命令をメモリテストのためのテストプログラムに用いることにより、メモリテストを高速化することができる。
第１１図には汎用メモリ１０７に対する救済を実施しない場合のテストフローが例示される。まずステップ６５１においてＢＩＳＴモジュール１１０の初期設定が行なわれる。具体的にはコントロールレジスタＢＩＳＴＣＲ１のＣ２ビットを“０”に設定し、救済情報信号１１３をＢＩＳＴＦＤＲ（３０３）から生成するようにする。またＢＩＳＴＦＤＲに“救済ビットを使用しない”設定である全ビット“０”を書き込む。以上の設定により救済ビットは使用されなくなる。またＢＩＳＴＣＲ１のＣ０ビットに“０”を設定し、不一致が発生した場合にはＦＡＩＬ端子２０５がアサートされるようにする。さらにパターン０及びパターン１用の期待値をＢＩＳＴＤＲ０及びＢＩＳＴＤＲ１（３０１）に設定する。次にステップ６５２においてＢＩＳＴＣＲ１のＥＮビットに“１”を書き込み、メモリテストモードに移行する。この結果ＢＩＳＴＥＮ１４０が“１”となる。
次にステップ６５３において、ＣＰＵ１０２にメモリテストのためのリピート命令を実行させ、リピートループのテストプログラムに従ってメモリテストのためのメモリアクセス及びアクセスアドレスの更新等を行わせる。次にステップ６４５においてメモリから読み出されたデータとレジスタに書かれた期待値の比較を行う。この比較はＢＩＳＴモジュール１１０において各ページに対して並列に行われる。次にステップ６５５において比較結果の判定が行われ、どれか一つのページにおいて不一致が発生していた場合、ステップ６５６において外部端子であるＦＡＩＬ端子がアサートされ、不良品と判定されてテストは終了する。
比較結果で不一致が発生していなかった場合、ステップ６５７でループカウンタのデクリメントが行われる。次にステップ６５８においてループカウンタが０になったかどうかの判定が行われ、０でなければステップ６５３に戻る。この動作がループカウンタが０になるまで繰り返され、それまでの間に一度も不一致が発生しなければＰＡＳＳと判定される。ステップ６５４〜６５８の処理は全てハードウェアで行われる。１３Ｎテストなどのようにテスト全体が複数のフェーズ毎に構成される場合、フェーズの数だけ上記の一連の動作が繰り返され、最終フェーズが終わった段階でＰＡＳＳと判定されたものが良品である。
尚、第１１図においてステップ６５６、６５７はハードウェアによる処理であり、その他のステップはソフトウェアによる処理である。
第１２図には汎用メモリ１０７に対する救済を実施する場合のテストフローが例示される。先ず、ステップ７０１においてＢＩＳＴモジュール１１０の初期設定が行なわれる。具体的にはコントロールレジスタＢＩＳＴＣＲ１（３０６）のＣ２ビットを“０”に設定し救済情報信号１１３をＢＩＳＴＦＤＲ（３０３）から生成するようにする。またＢＩＳＴＦＤＲに“救済ビットを使用しない”設定であるＡＬＬ０を書き込む。以上の設定により救済ビットは使用されなくなる。またＢＩＳＴＣＲ１のＣ０ビットに“１”に設定し、不一致が発生した場合でもＦＡＩＬ端子２０５がアサートされないようにする。さらにパターン０及びパターン１用の期待値をＢＩＳＴＤＲ０及びＢＩＳＴＤＲ１（３０１）に設定する。次にステップ７０２においてＢＩＳＴＣＲ１のＥＮビットに“１”を書き込み、メモリテストモードに移行する。この結果ＢＩＳＴＥＮ１４０が“１”となる。
次にステップ７０３においてＣＰＵ１０２にメモリテストのためのリピート命令を実行させ、リピートループのテストプログラムにしたがってメモリテストのためのメモリアクセス及びアクセスアドレス更新等を行わせる。ステップ７０４においてメモリから読み出されたデータとレジスタに書かれた期待値の比較を行う。この比較はＢＩＳＴモジュール１１０において各ページに対して並列に行われる。次にステップ７０５において比較結果の判定が行われ、どれか一つのページにおいて不一致が発生していた場合、ステップ７０６において不一致の発生したアドレスが救済可能かどうか判定する。ここでは、汎用メモリ１０６の各ページ毎に１アドレスまで救済可能とする。したがって、同一ページにおいて複数箇所の不一致が発生した場合や、救済ビットを持たないＸＹメモリ１０８において不一致が発生した場合は、救済不能と判定する。救済可能と判定された場合、ＢＩＳＴＦＤＲに救済情報信号１１３を生成するための情報が書き込まれる。救済不能と判定された場合、ステップ７０７で救済不可端子２０７がアサートされ、不良品と判定されてテストは終了する。比較結果で不一致が発生していなかった場合、又は不一致が発生したが救済可能と判定された場合、ステップ７０８でループカウンタのデクリメントが行われる。次にステップ７０９においてループカウンタが０になったかどうかの判定が行われ、０でなければステップ７０３に戻る。この動作がループカウンタが０になるまで繰り返される。ステップ７０４〜７０９の処理は全てハードウェアで行われる。
ループカウンタが０になるとステップ７１０に進み、それまでの間に一度も不一致が発生していなければ正常（ＰＡＳＳ）と判定される。不一致が発生していた場合、救済が可能なのでステップ７１１に進む。上述のテストの段階で救済可能な不一致が発生していた場合、救済情報信号１１３を生成するために必要なデータがレジスタ（ＢＩＳＴＦＤＲ）にＢＩＳＴモジュール１１０の制御により自動的に書き込まれている。したがって、次はこの救済情報を使用して救済ビットのテストを行うことになる。テスト動作自体は上述のものと同一であるが、ステップ７１２のＢＩＳＴモジュールの初期設定において、今度はＢＩＳＴＣＲ１のＣ０ビットに“０”に設定し、不一致が発生した場合にＦＡＩＬ端子（２０５）がアサートされるようにする。既に救済を使用しているため、更に不一致が発生したということは救済ビットも不良であったということであり、その場合ステップ７１７においてＦＡＩＬ端子をアサートし不良と判定される。ステップ７１３〜７１９の動作はそれぞれステップ７０２〜７０９と同一である。テストが終了した段階で不一致が発生していなければ救済成功であり、ステップ７２０でＢＩＳＴＦＤＲのデータをヒューズ回路１１５に書き込んでテストを終了する。
尚、第１３図においてステップ７０４、７０７、７０８、７１１、７１５、７１７、７１８はハードウェアにより処理であり、ステップ７２０はテスタによる処理であり、その他のステップはソフトウェアによる処理である。
第１３図には第１図のシステムＬＳＩに対して１３Ｎテストを行うための命令列をアセンブリ言語により示す。リピート命令（ＲＥＰＥＡＴ）はリピートループの開始アドレス、終了アドレス、ループ回数を指定するための命令であり、“ＲＥＰＥＡＴ  開始アドレス，終了アドレス，ループ回数指定レジスタ”という構文となっている。開始アドレス、終了アドレスはそれぞれアセンブリ言語プログラムのラベルで指定可能である。第１６図に示したように１３ＮテストはＬ０〜Ｌ４の５つのフェーズで構成されており、それぞれＬ０は１命令のリピートループ（７５０）、Ｌ１〜Ｌ４はそれぞれ３命令のリピートループ（７５１、７５２、７５３、７５４）で実行される。リードに使用するアドレスポインタ用レジスタをＲ２とＲ３の２種類用意しているのは、アドレスのビットＡ１８によりパターン０とパターン１の期待値を切り替えるためである。第６図の（ｂ）及び第８図の（ｂ）に示したように、この例ではＢＩＳＴＥＮ１４０が“１”の時、汎用メモリ１０７及びＸＹメモリ１０８は０ｘＡ５００００００〜０ｘＡ５００７ＦＦＦにマッピングされるため、アドレスポインタの初期値は０ｘＡ５００００００に設定される。またメモリの各ページを３２ビット幅でアクセスするため、ループカウンタの初期値は０ｘ２０００に設定される。
第１４図には第１３図で示した命令列のフェーズＬ１を実行中のＣＰＵバス１０５及びＢＩＳＴ専用データバス１４１、１４２のタイミングチャートを示す。Ｒ．Ｌはロングワード（３２ビット）のリードコマンド、Ｗ．Ｌはロングワードのライトコマンド、ＲＤ０は１３Ｎテストのパターン０のリードデータ、ＲＤ１はパターン１のリードデータ、ＷＤ１はパターン１のライトデータを示している。これによれば、例えば１３ＮテストのフェーズＬ１を実行するのに３サイクル／ループとなる。更に汎用メモリ１０７及びＸＹメモリ１０８の併せて８ページに対して並列テストが可能である。
ここで、比較例として、本発明によるリピートループ機能を持たず比較判定のための専用回路も持たない場合にＣＰＵでオンチップメモリをテストする場合について説明する。１３Ｎテストを行う比較例に係るプログラムとして、Ｌ１フェーズを実行するためのテストプログラムを例えば第１７図のように記述する事ができる。Ｒ０〜Ｒ７はＣＰＵのレジスタであり、それぞれＲ０がメモリアドレス、Ｒ１がパターン０用期待値データ、Ｒ２がパターン１用ライトデータ兼期待値データ、Ｒ３がパターン０読み出しデータの格納先、Ｒ４がパターン１読み出しデータの格納先、Ｒ７がループカウンタになっている。このプログラムは９命令で構成されており、それぞれ命令９０１でパターン０を読み出し、命令９０２でパターン１の書き込み、命令９０３でパターン１の読み出し及びアドレスのインクリメント、命令９０４でパターン０データの一致判定、命令９０５でパターン０が不一致だった場合にエラー処理を行うための分岐、命令９０６でパターン１データの一致判定、命令９０７でパターン１が不一致だった場合にエラー処理を行うための分岐、命令９０８でループカウンタのデクリメント及びループ終了判定、命令９０９でループが未終了の場合のループ先頭への分岐を、夫々行っている。
上記比較例に係るテストプログラムをキャッシュメモリに配置し、１サイクルアクセスできる内蔵メモリのテストを実行した場合のＣＰＵと内蔵メモリを接続するバスのタイミングチャートを第１８図に示す。テスト対象のメモリが０ｘＡ５００００００から配置されているとした場合のループ４回目を示したものである。１ループあたり１１サイクル必要となり、その内、実際にメモリのテストを行っているのはパターン０のリードコマンド９５１、パターン１のライトコマンド９５２、パターン１のリードコマンド９５３だけであり、その実行には３サイクルしか費やされていない。残りの８サイクルは、プログラム自体の命令フェッチサイクル９５４及び比較命令によるサイクル９５５になっている。またＣＰＵが受け取って比較できるデータは１サイクルあたり１データであるため、テスト対象のメモリが複数存在する場合でも同時並列テストはできず、シーケンシャルにテストする必要がある。
尚、第１８図においてＪＩＦは分岐命令フェッチ、ＮＩＦは通常命令フェッチ、Ｒ．Ｌはロングワードリード、Ｗ．Ｌはロングワードライト、ＮＯＰはノンオペレーション、ＲＤ０はリードデータ０、ＲＤ１はリードデータ１、ＷＤ１はライトデータ１を夫々示す。
第１３図及び第１４図の本発明の場合と、第１６図及び第１７図の比較例の場合とを比べれば、後者は１３ＮテストのフェーズＬ１を実行するのに１１サイクル／ループであり、本発明の場合には、３サイクル／ループとなる。さらに比較例の場合には同時にテスト可能なメモリのページはただ一つであるのに対し、本発明によれば８ページの同時並列テストを行なうことができ、メモリテストを更に高速化することができる。即ち、１３ＮテストのＬ１フェーズに着目すれば、比較例では汎用メモリのテストに“１１サイクル×８ｋループ×４ページ＝３５２ｋ”ステップ必要であり、ＸＹメモリのテストに“１１サイクル×１ｋループ×４ページ＝４４ｋ”ステップ必要であり、合計で、３９６ｋステップになる。これに対し、本発明では全メモリが“３サイクル×８ｋループ＝２４ｋ”ステップで済み、３９６／２４＝１６．５倍高速化されることがわかる。
第１５図には本発明に係る半導体集積回路の別の例が示される。第１図の例ではキャッシュメモリ１０６をテスト対象とはしていなかったが、第１５図の例ではキャッシュメモリ１０６もテスト対象とするように構成される。具体的にはＢＩＳＴＥＮ１４０をキャッシュメモリ１０６にも出力し、またキャッシュメモリ１０６からＢＩＳＴモジュール１１０に対してＢＩＳＴ専用データバス１４３を設け、ＢＩＳＴモジュール１１０は汎用メモリ１０７、ＸＹメモリ１０８、及びキャッシュメモリ１０６からのリードデータを並列比較判定処理できるようになっている。キャッシュメモリ１０６が持つＣＰＵバス１０５とシステムバス１１８とのブリッジ機能はメモリテストモード時においても使用可能な構成としておくことで、キャッシュメモリ１０６をも含めた並列テストを行うことが出来る。要するに、メモリテストモードにおいてキャッシュメモリ１０６はＣＰＵ１０２のメモリ空間に配置され、アドレスを指定してリード・ライト可能にされる。
また、第１５図に示す例ではＸＹメモリ１０８とキャッシュメモリ１０６も救済可能な構成とし、それぞれに対してＢＩＳＴモジュール１１０から救済情報信号１４４、１４５を出力するようになっている。
第１９図には第１図で代表されるようなセルフテスト機能を有する半導体集積回路の開発及び製造手順が例示される。第１９図によれば、所望の半導体集積回路が企画され、その仕様が決定され、これに基づいて、論理設計（Ｓ１）、レイアウト設計（Ｓ２）、フォトマスク作成（Ｓ３）、製造（Ｓ４）、機能テスト（Ｓ５）メモリテスト（Ｓ６）、及び出荷処理（Ｓ７）が行なわれる。半導体集積回路の開発及び製造は一つの半導体集積回路製造メーカで行なうことができる。今日では、半導体集積回路の製造だけを担う所謂ファウンダリと、専ら半導体集積回路の設計を専門とし、製造部門を持たない所謂ファブレスとによって分業化される場合がある。ファブレスは、例えば、論理設計、そして必要な場合にはレイアウト設計まで行ない、その後の工程はファウンダリに外注し、最終製品を受け取って出荷するという事業形態を採る。例えば第１９図では、ＦＢをファブレスによる処理、ＦＤをファウンダリによる処理として位置付けている。
前記論理設計（Ｓ１）やレイアウト設計（Ｓ２）等の開発設計工程では、過去の設計資産を利用し、更に今日では、ＩＰモジュールデータと称して流通される回路設計データを用いることが可能である。ＩＰモジュールデータは、前記ＣＰＵ１０２やＤＳＰ１０４等の回路モジュールを、ＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）などの論理記述言語で特定した設計データ（ソフトＩＰモジュールデータとも称する）、或はマスクパターンデータによって特定した設計データ（ハードＩＰモジュールデータとも称する）とされる。通常、ＩＰモジュールデータは回路設計データの他に、デバッグ用情報もパッケージされる。
第１図などで説明したオンチップメモリテストの効率化の手段を他の半導体集積回路の開発に容易に適用できるようにするには、そのための回路構成を特定する回路設計データをＩＰモジュールのような設計データとして提供できるようにすればよい。
例えばＣＰＵに着目すると、第１０図で説明したループキュー機能を持つＣＰＵ１０２の回路データを前記ソフトＩＰモジュールデータ又はハードＩＰモジュールデータとして提供すればよい。要するに、そのような回路データは、命令キュー１０３、バス１０５、命令キュー１０３又はバス１０５を介して供給される命令を解読する命令デコーダ６０２、及び制御部６０７の夫々の回路データを含めばよい。前記命令デコーダ６０２は、所定のリピート命令をデコードして前記制御部６０７に、リピートすべきプログラムが一旦命令キュー１０３に格納された後の当該リピートすべきプログラムのフェッチを前記命令キューから繰返し可能とする動作モードを設定する機能を実現できればよい。この機能はＨＤＬによって記述されても、或は具体的な回路のマスクパターンによって特定されてもよい。
前記ＣＰＵ１０２の設計データは、その設計データで実現されるＣＰＵ１０２により実行可能なテストプログラムと一緒に提供されてもよい。そのテストプログラムは、前記ループキューモードのような動作モードにおいて命令キュー１０３に格納され、ＣＰＵ１０２に、バス１０５経由のメモリアクセス処理及びメモリアクセスアドレス更新処理を繰り返し実行させる、メモリテストのためのプログラムであればよい。
前記設計データやテストプログラムはコンピュータ読み取り可能な情報記録媒体（単に記録媒体とも記す）に格納されて提供されればよい。例えば前記記録媒体は、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−Ｒ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ−Ｒｅｃｏｒｄａｂｌｅ）、ＣＲ−ＲＷ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ−Ｒｅｗｒｉｔａｂｌｅ）、ＤＶＤ−ＲＯＭ（Ｄｉｇｉｔａｌ  Ｖｉｄｅｏ  Ｄｉｓｋ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ−ＲＡＭ（Ｄｉｇｉｔａｌ  Ｖｉｄｅｏ  Ｄｉｓｋ−Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＦＤ（Ｆｌｏｐｐｙ  Ｄｉｓｋ）等、コンピュータ読み取り可能な記録媒体であればよい。
第２０図には半導体集積回路の開発システムの一例が示させる。同図において１、２，３で示されるものはエンジニアリングワークステーションのようなコンピュータ装置であり、情報処理ネットワークに接続されている。情報処理ネットワークはＬＡＮ（ローカル・エリア・ネットワーク）、インターネットなどのＷＡＮ（ワイド・エリア・ネットワーク）、無線通信ネットワークなどのシステムであり、４で示されるものがそのシステムにおける光ファイバ、ＩＳＤＮ回線、又は無線回線などの伝送媒体を意味している。伝送媒体４には、特に制限されないが、ホストコンピュータ装置５、ルータやターミナルアダプタ等の通信アダプタ６，７，８を介して代表的に示された前記コンピュータ装置１，２，３が接続されている。
コンピュータ装置１は、特に制限されないが、プロセッサ（ＭＰＵ）９を有し、表示コントローラ（ＤＩＳＰＣ）１３、ネットワークコントローラ（ＮＥＴＣ）１４、及びメインメモリ（ＤＲＡＭ）１５が接続され、また、プロセッサ９の周辺回路に接続されたフロッピーディスクコントローラ（ＦＤＣ）２０、キーボードコントローラ（ＫＥＹＣ）２１、及びインテグレーテッド・デバイス・エレクトロニクス・コントローラ（ＩＤＥＣ）２２が設けられている。ＤＩＳＰＣ１３はビデオＲＡＭ（ＶＲＡＭ）２４に描画制御を行い、描画した表示データをディスプレイ（ＤＩＳＰ）２３に表示制御する。ＮＥＴＣ１４は通信アダプタ６に接続され、送受信情報のバッファリング及び通信プロトコル制御等を行う。ＤＲＡＭ１５はＭＰＵ９のプログラム領域及びワーク領域などに利用される。前記ＦＤＣ２０にはフロッピーディスクドライブ装置１６が接続され、記録媒体の一例であるフロッピーディスク２５から情報を読み取り、また、情報を書込む。ＫＥＹＣ２１にはキーボード１７が接続される。ＩＤＥＣ２２にはハードディスクドライブ装置（ＨＤＤ）１８、ＣＤ−ＲＯＭドライブ装置（ＣＤＲＤ）１９が接続される。ＨＤＤ１８は記録媒体の別の例である磁気ディスクを有する。ＣＤＲＤ１９は記録媒体の更に別の例であるＣＤ−ＲＯＭ２６を有する。その他のコンピュータ装置２，３も上記同様に構成される。
前記コンピュータ装置１を用いて半導体集積回路の開発設計を行なう場合、例えばフロッピーディスク２５やＣＤ−ＲＯＭ２６で提供されるＣＰＵなどの回路設計データを読取ってハードディスクドライブ装置１８に一時的に格納する。このとき、フロッピーディスク２５やＣＤ−ＲＯＭ２６には第１０図で説明した前記ＣＰＵの回路データが格納され、また、前記テストプログラムが格納されている。前記テストプログラムは、ＣＤ−ＲＯＭ２６等の記録媒体のみならず、情報処理ネットワークを介して、提供されるものであってもよい。コンピュータ装置１を用いて半導体集積回路を設計するとき、フロッピーディスク２５やＣＤ−ＲＯＭ２６で提供されたＣＰＵ１０２の回路データを用いることにより、その半導体集積回路にオンチップするメモリを前述のように効率的にテストすることができる半導体集積回路の開発期間を短縮させることが可能になる。即ち、フロッピーディスク２５やＣＤ−ＲＯＭ２６で提供されたＩＰモジュールデータのようなＣＰＵ１０２の回路データを用いる半導体集積回路の設計開発を容易化することができる。そして、そのようにして開発されて製造された半導体集積回路のオンチップメモリに対するメモリテストでは、フロッピーディスク２５やＣＤ−ＲＯＭ２６で提供されたテストプログラムを、その半導体集積回路にロードして、オンチップＣＰＵに前記テストプログラムを実行させればよい。オンチップＣＰＵは、メモリテスト機能として命令キュー１０３の前記リピートキュー機能をサポートし、テストプログラムから分岐命令の排除を可能にしているから、ＣＰＵのハードウェアに対して最適化されたメモリテストプログラムを最初から開発しなくても済む。このように、ＣＰＵ等のＩＰモジュールデータを用いて半導体集積回路の開発を行なうユーザはＣＰＵの回路設計やオンチップメモリに対するテスト設計を効率化でき、半導体集積回路の開発製造を効率化することができる。
メモリテスト用のテストプログラムは、オンチップのＣＰＵにより実行されるため、ＣＰＵのプログラム開発に用いるアセンブリ言語等で記述可能であり、半導体集積回路の用途や不良事象に合わせて、予めコンピュータ装置１上で簡単に変更可能となる。したがって、上記ＣＰＵのＩＰモジュールデータを提供する際に、メモリテスト用のテストプログラムとしてサンプルプログラム等を提供するだけで、ＩＰモジュールデータのユーザは様々なメモリテストに容易に対応することが可能となる。
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
例えば、ループキューモードを有する命令キュー、メモリテストモードに対応するメモリ、ＢＩＳＴモジュールの夫々の構成は上記の例に限定されず適宜変更可能である。例えばデータバスが３２ビットで、命令が１６ビット固定長である場合、命令キューは１６ビット単位で命令をプリフェッチしてもよいが、ＩＲが３２ビットで２命令をまとめてラッチする構成であるなら、これに合わせて命令キューも３２ビット単位で命令をプリフェッチするようにしてよい。また、命令キューのループキューモードにおける動作制御内容も上記に限定されない。更に、半導体集積回路のオンチップモジュールは上記の例に限定されず適宜変更可能である。また、半導体集積回路の開発システムを構成するコンピュータ装置はネットワークに接続可能にされていることに限定されず、スタンドアロンで利用されるようになっていてもよい。
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
すなわち、命令キューをループキュー動作させるから、同じテストプログラムを繰り返し実行可能にするために分岐命令を利用しなくても済む。そして、繰り返し実行するテストプログラムを命令キューから繰り返しフェッチすればよく、メモリテストのためのメモリリード・ライトアクセスと命令フェッチのためのメモリアクセスがバス上で競合しない。したがって、テストプログラムから分岐命令を排除することができ、さらにＣＰＵに接続されたバスから同じ命令を繰返しフェッチする必要がないので、半導体集積回路のオンチップメモリに対するテスト効率を向上させることが可能になる。
リピートキューモードの設定が可能なＣＰＵの設計データを記録媒体に記録して提供すれば、そのような設計データを用いてＣＰＵの設計を行うことにより、オンチップメモリを能率的にテスト可能とする半導体集積回路の開発期間を短縮させることができる。
上記設計データと共に当該設計データで開発されるＣＰＵを用いたメモリテストのプログラムを一緒に記録媒体に記録して提供することにより、ＣＰＵを用いる半導体集積回路の設計開発を容易化でき、そのような半導体集積回路のオンチップメモリに対するメモリテストではオンチップＣＰＵに前記テストプログラムを実行させればよく、ＣＰＵの回路設計やオンチップメモリに対するテスト設計を効率化でき、半導体集積回路の開発を効率化することができる。
メモリテストのための比較判定回路をＣＰＵとは別の専用ハードウェアとして持つことにより、ＣＰＵが実行するテストプログラムから比較判定のための比較命令も除去することが可能になり、更にオンチップメモリのテスト効率を向上させることができる。比較判定対象のリードデータを専用バスで比較判定回路に導けばメモリテストのためのライトデータがリードデータとバス上で競合する事態も回避できる。
産業上の利用可能性
本発明は、メモリを内蔵するデータプロセッサ、マイクロコンピュータ、或はシングルチップマイクロコンピュータなどの半導体集積回路、更にはそのテスト技術に広く適用することができる。
【図面の簡単な説明】
第１図は本発明に係る半導体集積回路の一例であるマイクロコンピュータのようなシステムＬＳＩを例示するブロック図である。
第２図はメモリテストに関係する回路ブロックの接続状態を詳細に例示するブロック図である。
第３図はＢＩＳＴモジュールの詳細を例示するブロック図である。
第４図はＢＩＳＴモジュールのレジスタ部が保有するレジスタの説明図である。
第５図はＸＹメモリの１ページの構成を例示するブロック図である。
第６図は汎用メモリのアドレスマップを例示する説明図である。
第７図は第６図のアドレスマップを実現するためイネーブル制御回路の構成を例示する論理回路図である。
第８図はＸＹメモリのアドレスマップを例示する説明図である。
第９図は第８図のアドレスマップを実現するイネーブル制御回路の構成を例示する論理回路図である。
第１０図はＣＰＵの一例を示すブロック図である。
第１１図は汎用メモリに対する救済を実施しない場合のメモリテストの手順を例示するフローチャートである。
第１２図は汎用メモリに対する救済を実施する場合のメモリテストの手順を例示するフローチャートである。
第１３図は１３Ｎテストを行うための命令列をアセンブリ言語で示す説明図である。
第１４図は第１３図で示した命令列のフェーズＬ１を実行中におけるＣＰＵバス及びＢＩＳＴ専用データバスのタイミングチャートである。
第１５図は本発明に係る半導体集積回路の別の例であるシステムＬＳＩを例示するブロック図である。
第１６図はオンチップメモリのテストシーケンスの一つである１３Ｎテストの手法を示す説明図である。
第１７図は１３Ｎテストを行う比較例に係るプログラムとしてＬ１フェーズを実行するためのテストプログラムを例示する説明図である。
第１８図は第１７図の比較例に係るテストプログラムをキャッシュメモリに配置し１サイクルアクセスできる内蔵メモリのテストを実行した場合のＣＰＵと内蔵メモリを接続するバスのタイミングチャートである。
第１９図は第１図で代表されるようなセルフテスト機能を有する半導体集積回路の開発及び製造手順を例示するフローチャートである。
第２０図は半導体集積回路の開発システムの一例を示すブロック図である。
【図１】
0004015025.tif 000002
【図２】
0004015025.tif 000003
【図３】
0004015025.tif 000004
【図４】
0004015025.tif 000005
【図５】
0004015025.tif 000006
【図６】
0004015025.tif 000007
【図７】
0004015025.tif 000008
【図８】
0004015025.tif 000009
【図９】
0004015025.tif 000010
【図１０】
0004015025.tif 000011
【図１１】
0004015025.tif 000012
【図１２】
0004015025.tif 000013
【図１３】
0004015025.tif 000014
【図１４】
0004015025.tif 000015
【図１５】
0004015025.tif 000016
【図１６】
0004015025.tif 000017
【図１７】
0004015025.tif 000018
【図１８】
0004015025.tif 000019
【図１９】
0004015025.tif 000020
【図２０】
0004015025.tif 000021