(57)【要約】【課題】判定用データをシリアルメモリに書き込むことなく、シリアルメモリのアドレスバイト数の判定を可能にする。【解決手段】アドレスバイト数判定装置１０は、最大バイト数を仮定し、仮定する最大バイト数を有する第１アドレスと、その後に第１アドレスの特定ビットを反転した第２アドレスとをメモリ入出力部１１へ送るアドレス生成部１２と、最初に取得する第１先頭データ値から、第１先頭データ値と異なる第１末尾データ値が検出されるまでの第１データ列を取得する第１データ列取得部１３と、最初に取得する第２先頭データ値から、第２先頭データ値と異なる第２末尾データ値が検出されるまでの第２データ列を取得する第２データ列取得部１４と、第１データ列と第２データ列の一致・不一致を出力する比較部１５と、不一致である場合、特定ビットを含むアドレス部位に基づいてアドレスバイト数を出力する制御部１６と、を備える。【選択図】図１
2013175014.tif 000002
【特許請求の範囲】
【請求項１】
シリアルメモリへアドレスを出力し、前記アドレスに応じて前記シリアルメモリから連続するデータ列を受け取るメモリ入出力部と、
前記シリアルメモリのアドレスの最大バイト数を仮定し、前記最大バイト数を有する第１アドレスを前記メモリ入出力部へ送り、その後、前記第１アドレスの特定ビットを反転した第２アドレスを前記メモリ入出力部へ送るアドレス生成部と、
前記シリアルメモリへの前記第１アドレスの出力に応じて、前記メモリ入出力部を介して最初に取得する第１先頭データ値から、前記第１先頭データ値と異なる第１末尾データ値が検出されるまでの第１データ列を取得する第１データ列取得部と、
前記シリアルメモリへの前記第２アドレスの出力に応じて、前記メモリ入出力部を介して最初に取得する第２先頭データ値から、前記第２先頭データ値と異なる第２末尾データ値が検出されるまでの第２データ列を取得する第２データ列取得部と、
前記第１データ列と前記第２データ列とが一致するか、不一致であるかを示す比較結果を出力する比較部と、
前記比較結果が不一致であることを検出すると、前記特定ビットを含むアドレス部位に基づいて前記シリアルメモリのアドレスバイト数を出力する制御部と、
を備えるアドレスバイト数判定装置。
【請求項２】
前記制御部は、前記比較結果が一致を示す場合、前記特定ビットを異なる位置に変更した前記第２アドレスを前記メモリ入出力部へ送るように、前記アドレス生成部を制御し、
前記第２データ列取得部は、前記シリアルメモリへの前記第２アドレスの新たな出力に応じて、前記第２データ列を取得し、
前記比較部は、前記第２データ列取得部が前記第２データ列を新たに取得すると、前記比較結果を更新するように構成されていることを特徴とする請求項１記載のアドレスバイト数判定装置。
【請求項３】
前記第１アドレスが１番目から最大バイト数までのアドレス部位からなるとすると、
前記アドレス生成部は、前記第２アドレスの最初の特定ビットを最大バイト数のアドレス部位の最下位ビットとし、その後に生成する第２アドレスの特定ビットを、一つ前に生成した第２アドレスの特定ビットを含むアドレス部位より一つ上位のアドレス部位の最下位ビットとすることを特徴とする請求項２記載のアドレスバイト数判定装置。
【請求項４】
前記アドレス生成部は、前記第１アドレスの１番目から最大バイト数までのいずれかのアドレス部位の最下位ビットを前記特定ビットとすることを特徴とする請求項２記載のアドレスバイト数判定装置。
【請求項５】
前記制御部は、前記比較結果が不一致である場合には、前記アドレスバイト数が、１番目から前記特定ビットを含むアドレス部位までのバイト数であると判定することを特徴とする請求項３記載のアドレスバイト数判定装置。
【請求項６】
前記制御部は、前記比較結果が一致であり、かつ、前記特定ビットが２番目のアドレス部位である場合には、前記アドレスバイト数が、１バイトであると判定することを特徴とする請求項３記載のアドレスバイト数判定装置。
【請求項７】
前記制御部は、前記アドレスバイト数が判定可能となるまで、前記特定ビットを異なる位置に変更した前記第２アドレスを前記メモリ入出力部へ送ることを繰り返すように、前記アドレス生成部を制御することを特徴とする請求項２乃至６のいずれか一項に記載のアドレスバイト数判定装置。
【請求項８】
前記第１データ列取得部は、前記第１データ列として、前記第１先頭データ値、前記第１末尾データ値、及び、前記第１データ列の長さを示す第１データ長を含む第１データ列情報を保持し、
前記第２データ列取得部は、前記第２データ列として、前記第２先頭データ値、前記第２末尾データ値、及び、前記第２データ列の長さを示す第２データ長を含む第２データ列情報を保持し、
前記比較部は、前記第１データ列情報及び前記第２データ列情報の各要素のすべてが一致する場合には、前記比較結果を一致とし、いずれかの要素が不一致である場合には、前記比較結果を不一致とすることを特徴とする請求項１記載のアドレスバイト数判定装置。
【請求項９】
前記第１データ列取得部は、前記第１先頭データ値を保持する第１レジスタ、前記第１末尾データ値を保持する第２レジスタ、前記第１レジスタが保持する値と前記第２レジスタが保持する値とを比較する第１比較器、及び、前記第１データ長をカウントする第１カウンタを備え、
前記第２データ列取得部は、前記第２先頭データ値を保持する第３レジスタ、前記第２末尾データ値を保持する第４レジスタ、前記第３レジスタが保持する値と前記第４レジスタが保持する値とを比較する第２比較器、及び、前記第２データ長をカウントする第２カウンタを備え、
前記制御部は、前記第１レジスタに前記第１先頭データ値を保持させ、前記第１比較器の出力が不一致を示すまで、前記第１データ列の２番目に取得する値から順番に前記第２レジスタに取り込むことによって前記第１末尾データ値を前記第２レジスタに保持させ、前記第３レジスタに前記第２先頭データ値を保持させ、前記第２比較器の出力が不一致を示すまで、前記第２データ列の２番目に取得する値から順番に前記第４レジスタに取り込むことによって前記第２末尾データ値を前記第４レジスタに保持させるように制御することを特徴とする請求項８記載のアドレスバイト数判定装置。
【請求項１０】
シリアルメモリのアドレスの最大バイト数を仮定し、前記最大バイト数を有する第１アドレスをシリアルメモリへ出力し、
前記第１アドレスの出力に応じて、第１データ列として、最初に取得する第１先頭データ値から、前記第１先頭データ値と異なる第１末尾データ値が検出されるまでのデータ列を前記シリアルメモリから読み出し、
前記第１アドレスの特定ビットを反転した第２アドレスを前記シリアルメモリへ出力し、
前記第２アドレスの出力に応じて、第２データ列として、最初に取得する第２先頭データ値から、前記第２先頭データ値と異なる第２末尾データ値が検出されるまでのデータ列を前記シリアルメモリから読み出し、
前記第１データ列と前記第２データ列とを比較し、
前記第１データ列と前記第２データ列とが不一致であることを検出すると、前記特定ビットを含むアドレス部位に基づいて前記シリアルメモリのアドレスバイト数を判定するアドレスバイト数判定方法。
【請求項１１】
前記第１データ列と前記第２データ列とが一致する場合、前記特定ビットを異なる位置に変更した前記第２アドレスを前記シリアルメモリへ出力し、
前記第２アドレスの新たな出力に応じて、前記第２データ列を取得し、
前記第１データ列と、新たに取得した前記第２データ列とを比較し、
前記アドレスバイト数を判定するまで、前記シリアルメモリへ前記変更した前記第２アドレスの出力を繰り返すことを特徴とする請求項１０記載のアドレスバイト数判定方法。
【請求項１２】
前記第１アドレスが１番目から最大バイト数までのアドレス部位からなるとすると、
前記第２アドレスの最初の特定ビットは、最大バイト数のアドレス部位の最下位ビットであり、
その後に生成する第２アドレスの特定ビットは、一つ前に生成した第２アドレスの特定ビットを含むアドレス部位より一つ上位のアドレス部位の最下位ビットであることを特徴とする請求項１１記載のアドレスバイト数判定方法。
【請求項１３】
前記アドレスバイト数は、前記第１データ列と前記第２データ列とが不一致であることを検出した場合には、前記アドレスバイト数が、１番目から前記特定ビットを含むアドレス部位までのバイト数であると判定することを特徴とする請求項１２記載のアドレスバイト数判定方法。
【請求項１４】
前記アドレスバイト数は、前記第１データ列と前記第２データ列とが一致し、かつ、前記特定ビットが２番目のアドレス部位である場合には、前記アドレスバイト数が、１バイトであると判定することを特徴とする請求項１２または１３記載のアドレスバイト数判定方法。
【請求項１５】
コンピュータに、
シリアルメモリのアドレスの最大バイト数を仮定し、前記最大バイト数を有する第１アドレスをシリアルメモリへ出力する処理と、
前記第１アドレスの出力に応じて、第１データ列として、最初に取得する第１先頭データ値から、前記第１先頭データ値と異なる第１末尾データ値が検出されるまでのデータ列を前記シリアルメモリから読み出す処理と、
前記第１アドレスの特定ビットを反転した第２アドレスを前記シリアルメモリへ出力する処理と、
前記第２アドレスの出力に応じて、第２データ列として、最初に取得する第２先頭データ値から、前記第２先頭データ値と異なる第２末尾データ値が検出されるまでのデータ列を前記シリアルメモリから読み出す処理と、
前記第１データ列と前記第２データ列とを比較する処理と、
前記第１データ列と前記第２データ列とが不一致であることを検出すると、前記特定ビットを含むアドレス部位に基づいて前記シリアルメモリのアドレスバイト数を判定する処理と、
を実行させるプログラム。
【請求項１６】
シリアルメモリとのデータの入出力を制御するシリアルインタフェース部と、
請求項１乃至６、８、９のいずれか一項に記載のアドレスバイト数判定装置と、
前記シリアルインタフェース部と前記アドレスバイト数判定装置とを切り替えて、シリアルメモリと接続するスイッチ部と、を備える半導体集積装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部接続するＳＰＩ（Serial Peripheral Interface）規格のシリアルメモリのアドレスバイト数を判定するアドレスバイト数判定方法とその判定装置に関し、例えば、不揮発性シリアルメモリのアドレスバイト数判定方法とその判定装置に関する。
【背景技術】
【０００２】
近年、コスト削減は、ＡＳＩＣ（Application Specific Integrated Circuit）搭載製品の重要課題となっている。例えば、ＡＳＩＣとＲＯＭ（Read Only Memory）デバイスの端子数や実装面積に関わるコスト削減のために、端子数の少ない不揮発性シリアルメモリがブートＲＯＭとして搭載されるケースが増えている。シリアルメモリは、幅広い容量バリエーションと端子位置互換を特徴としており、ＡＳＩＣや実装基板が完成した後からでも製品別に最適容量のシリアルメモリ・デバイスを選択することが可能である。これは、ＡＳＩＣの流用による開発コストや、製品コストの削減に貢献する。例えば、製品開発の過程では、ソフトウェアの完成度が向上するまでの期間において、ブートＲＯＭとして、容量に余裕を持たせたＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）やＦＬＡＳＨ等の書き換え可能な不揮発性シリアルメモリが用いられる。そして、ソフトウェアが完成した後に、不揮発性シリアルメモリが備えるプロテクト機能によってソフトウェア破壊防止が図られる。さらに、必要最小限の小容量不揮発性シリアルメモリや安価なマスクＲＯＭ型のシリアルメモリへの切り替えによるコスト削減が図られる。
【０００３】
しかしながら、不揮発性シリアルメモリのアドレスバイト数には１／２／３等の種類がある。このため、ＡＳＩＣ側から接続されたシリアルメモリに合わせた幅のアドレスを出力しなければ、シリアルメモリから正しい内容を読み出すことが出来ない。また、アドレスバイト数を外部端子入力で選択すると、端子コストの増加を招く。さらに、従来、アドレスバイト数３であったシリアルＦＬＡＳＨにおいても、近年、アドレスバイト数４のデバイスが出現してきている。このため、同一のＡＳＩＣを搭載する製品であっても、製品毎に最適なアドレスバイト数が異なるという状況の増加が予想される。
そこで、利用者が製品毎に最適な（安価な）不揮発性シリアルメモリを選択可能とすることが望まれる。具体的には、アドレスバイト数を選択するための端子コストが発生しないように、不揮発性シリアルメモリのアドレスバイト数を判定する手段が必要とされている。
【０００４】
シリアルメモリのアドレスバイト数を判定する手段として、例えば、特許文献１には、
ＳＰＩに準拠したシリアルメモリにアクセスして、該シリアルメモリのメモリサイズを自
動的に判別する方法が開示されている。
また、特許文献２には、ＥＥＰＲＯＭの記憶容量が事前に分からない場合にも、入手したＥＥＰＲＯＭの記憶容量を自動的に判別でき、その判別結果を利用することにより、アクセスシーケンスを決定することのできるＥＥＰＲＯＭの記憶容量判別装置およびＥＥＰＲＯＭの記憶容量判別方法が開示されている。特許文献２では、起動時処理において、第１のタイミングを開始タイミングとしてシリアルインタフェースがシリアルに受信するデータが所定のデータに一致するか否かを判断し、データ不一致の場合には、第２のタイミングを開始タイミングとしてシリアルインタフェースがシリアルに受信するデータが所定のデータに一致するか否かを判断する手法を用いる。
さらに、特許文献３には、スレーブデバイスのアドレスビット長に依存せずにブートアップ処理を行うことができる情報処理装置が開示されている。特許文献３では、ＥＥＰＲＯＭにアドレスデータを入力して、ＥＥＰＲＯＭの出力レベルが所定の値となるときまでにＥＥＰＲＯＭに入力したアドレスデータのビット数をカウントする手法を用いる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許０４３７４４１６号公報
【特許文献２】特開２００２−０７３４１１号公報
【特許文献３】特開２０１０−０４４６３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
例えば、特許文献１は、シリアルメモリ、特にＳＰＩ準拠のシリアルメモリにおいて、アクセスモード、すなわちメモリが必要とするアドレスバイト数を自動的に判別することができる判別方法の提供を目的としている。
図２２Ａは、特許文献１のシリアルメモリのアクセスモード自動判別装置が、ＳＰＩに準拠したインタフェースをもつシリアルメモリへアクセスする接続配線図であり、図２２Ｂは、そのアクセスモード判定処理フローチャートである。
【０００７】
図２２Ａに示すように、本判別装置は、ＣＰＵ２とプルアップ抵抗３で構成され、図２２Ａの点線で囲まれたメモリサイズが未知のシリアルメモリ１のＤＯ、ＤＩ、ＳＫ、ＣＳポートは、ＣＰＵ２のそれぞれ対応するＩ／Ｏピンに接続される。そして、ＤＯポートは、プルアップ抵抗３で電源回路に接続されて、常時電位がハイ・レベルになっている。この回路構成において、ＣＰＵ２がメモリ１のメモリサイズを判定する手順は、図２２Ｂのフローチャートに示されるように、初期データ書き込み処理（ｆ１）、判定データ読み出し処理（ｆ２）、及び判定処理（ｆ３）の手順を順に行うことで実現される。
初期データ書き込み処理（ｆ１）においては、ＣＳポートをハイ・レベルからロウ・レベルに設定した後、ＣＰＵ２からＤＩポートに、書き込みコマンドに続いて４バイトのゼロ（００ｈ）が出力される。
【０００８】
図２３Ａは、判定データ読み出し処理（ｆ２）におけるアクセスモードごとの読み出しデータの一覧表であり、図２３Ｂは、判定処理の詳細フローチャートである。
判定データ読み出し処理（ｆ２）において、読み出しコマンドに続いて１番目、２番目のゼロがメモリ１に入力されると、２番目のゼロと引き換えにメモリがアクセスモード１の場合には、メモリの０番地からデータゼロ（００ｈ）がＤＯポートに読み出される。
一方、メモリがアクセスモード２の場合には、１番目と２番目のゼロは、アドレスの上位と下位を指定し、また、メモリがアクセスモード３の場合には、１番目と２番目のゼロは、アドレスの上位及び中位を指定することになる。
アクセスモード２、３の場合においては、必要なバイト数のアドレス（アクセスモード２では２バイト、アクセスモード３では３バイト）がメモリに入力されないうちは、図２２Ａに示すＤＯポートに接続されたプルアップ抵抗３よって、ＤＯポートの電位がハイに吊り上げられ、１６進表現でＦＦｈの状態のデータが出力される。
このように、２番目のゼロと引き換えにＤＯポートから得られるデータを第１の判定データとする。
【０００９】
同様にして、３番目のゼロ及び４番目のゼロと引き換えにＤＯポートより読み出されるデータを、それぞれ第２、第３判定データとする。
図２３Ｂは、判定処理の詳細フローチャートである。該判定処理は、第１〜第３判定データをもとに実施され、同図に示されるように、第１の判定データがゼロ（００ｈ）であれば、アクセスモード１のメモリと判定される。そして、第１の判定データがゼロ以外で第２の判定データがゼロ（００ｈ）であれば、アクセスモード２、第２の判定データもゼロ以外で第３の判定データがゼロ（００ｈ）であれば、アクセスモード３と判定される。第３の判定データもゼロでなければメモリの故障と判定される。
【００１０】
しかしながら、特許文献１では、初期データ書き込み処理（ステップｆ１）によって不揮発性シリアルメモリの一部（０番地）に特定の値（０）を書き込む必要がある。このため、マスクＲＯＭタイプやプロテクト処置が施された書き換え不能な不揮発性シリアルメモリに対しては、アドレスバイト数の自動判定ができないという問題がある。加えて、上述した特許文献２、３の判別方法においても、シリアルメモリから受信する値が、所定の値となることを用いている判別方法であるため、同様の問題が生じる。
このように、シリアルメモリのアドレスバイト数を判定するには、判定用データをシリアルメモリに書き込む必要があった。
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１１】
一実施態様のアドレスバイト数判定装置、その方法及びプログラムは、例えば、次のような手順によりアドレスバイト数を判定する。まず、シリアルメモリのアドレスの最大バイト数を仮定する。前記最大バイト数を有する第１アドレスをシリアルメモリへ出力し、前記第１アドレスの出力に応じて、第１データ列として、最初に取得する第１先頭データ値から、前記第１先頭データ値と異なる第１末尾データ値が検出されるまでのデータ列を前記シリアルメモリから読み出す。続いて、前記第１アドレスの特定ビットを反転した第２アドレスを前記シリアルメモリへ出力し、前記第２アドレスの出力に応じて、第２データ列として、最初に取得する第２先頭データ値から、前記第２先頭データ値と異なる第２末尾データ値が検出されるまでのデータ列を前記シリアルメモリから読み出す。そして、前記第１データ列と前記第２データ列とを比較し、前記第１データ列と前記第２データ列とが不一致であることを検出すると、前記特定ビットを含むアドレス部位に基づいて前記シリアルメモリのアドレスバイト数を判定する。
【発明の効果】
【００１２】
前記一実施態様によれば、判定用データをシリアルメモリに書き込むことなく、シリアルメモリのアドレスバイト数の判定を可能にする手段を提供することが可能となる。
【図面の簡単な説明】
【００１３】
【図１】一実施形態のアドレスバイト数判定装置の構成例を示すブロック図である。
【図２】シリアルメモリのアドレスの一例を示す図である。
【図３】一実施形態のアドレスバイト数判定装置の動作例を示すフローチャートである。
【図４】一実施形態のアドレスバイト数判定装置を用いる半導体装置のシステム例（実施形態１）を示す構成図である。
【図５】実施形態１のアドレスバイト数検出モジュールの一例を示す詳細構成図である。
【図６】ＳＰＩ信号切り替えモジュールの一例を示す詳細構成図である。
【図７】図４の半導体装置における、ＣＰＵの動作例を示すフローチャートである。
【図８Ａ】実施形態１のアドレスバイト数検出モジュールにおける、シリアルメモリのアドレスバイト数判定の動作例を示すフローチャート（前半）である。
【図８Ｂ】実施形態１のアドレスバイト数検出モジュールにおける、シリアルメモリのアドレスバイト数判定の動作例を示すフローチャート（後半）である。
【図９Ａ】実施形態１のアドレスバイト数検出モジュールにおける、シリアルメモリの第１データ列情報取得の詳細動作例を示すフローチャート（前半）である。
【図９Ｂ】実施形態１のアドレスバイト数検出モジュールにおける、シリアルメモリの第１データ列情報取得の詳細動作例を示すフローチャート（後半）である。
【図１０Ａ】実施形態１のアドレスバイト数検出モジュールにおける、シリアルメモリの第２データ列情報取得の詳細動作例を示すフローチャート（前半）である。
【図１０Ｂ】実施形態１のアドレスバイト数検出モジュールにおける、シリアルメモリの第２データ列情報取得の詳細動作例を示すフローチャート（後半）である。
【図１１】実施形態１の半導体装置に接続する、アドレスバイト数４のシリアルメモリのデータ内容例を示す図である。
【図１２】実施形態１の半導体装置に接続する、アドレスバイト数３のシリアルメモリのデータ内容例を示す図である。
【図１３】実施形態１の半導体装置に接続する、アドレスバイト数２のシリアルメモリのデータ内容例を示す図である。
【図１４】実施形態１の半導体装置に接続する、アドレスバイト数１のシリアルメモリのデータ内容例を示す図である。
【図１５Ａ】実施形態１の半導体装置へアドレスバイト数４のシリアルメモリを接続した場合の動作例を示すタイミングチャート（Ｔ５１１）である。
【図１５Ｂ】実施形態１の半導体装置へアドレスバイト数４のシリアルメモリを接続した場合の動作例を示すタイミングチャート（Ｔ５１２）である。
【図１６Ａ】実施形態１の半導体装置へアドレスバイト数３のシリアルメモリを接続した場合の動作例を示すタイミングチャート（Ｔ５２１）である。
【図１６Ｂ】実施形態１の半導体装置へアドレスバイト数３のシリアルメモリを接続した場合の動作例を示すタイミングチャート（Ｔ５２２）である。
【図１６Ｃ】実施形態１の半導体装置へアドレスバイト数３のシリアルメモリを接続した場合の動作例を示すタイミングチャート（Ｔ５２３）である。
【図１７Ａ】実施形態１の半導体装置へアドレスバイト数２のシリアルメモリを接続した場合の動作例を示すタイミングチャート（Ｔ５３１）である。
【図１７Ｂ】実施形態１の半導体装置へアドレスバイト数２のシリアルメモリを接続した場合の動作例を示すタイミングチャート（Ｔ５３２）である。
【図１７Ｃ】実施形態１の半導体装置へアドレスバイト数２のシリアルメモリを接続した場合の動作例を示すタイミングチャート（Ｔ５３３）である。
【図１７Ｄ】実施形態１の半導体装置へアドレスバイト数２のシリアルメモリを接続した場合の動作例を示すタイミングチャート（Ｔ５３４）である。
【図１８Ａ】実施形態１の半導体装置へアドレスバイト数１のシリアルメモリを接続した場合の動作例を示すタイミングチャート（Ｔ５４１）である。
【図１８Ｂ】実施形態１の半導体装置へアドレスバイト数１のシリアルメモリを接続した場合の動作例を示すタイミングチャート（Ｔ５４２）である。
【図１８Ｃ】実施形態１の半導体装置へアドレスバイト数１のシリアルメモリを接続した場合の動作例を示すタイミングチャート（Ｔ５４３）である。
【図１８Ｄ】実施形態１の半導体装置へアドレスバイト数１のシリアルメモリを接続した場合の動作例を示すタイミングチャート（Ｔ５４４）である。
【図１９】一実施形態のアドレスバイト数判定装置を用いる半導体装置の他のシステム例（実施形態２）を示す構成図である。
【図２０】図１９の半導体装置の動作例を示すフローチャートである。
【図２１】プログラムを実行させる半導体装置のシステム例を示す構成図である。
【図２２Ａ】特許文献１のＳＰＩに準拠したインタフェースを持つシリアルメモリへアクセスするための接続配線図である。
【図２２Ｂ】特許文献１のアクセスモード判定処理フローチャートである。
【図２３Ａ】特許文献１の判定データ読み出し処理におけるアクセスモードごとの読み出しデータの一覧表である。
【図２３Ｂ】特許文献１の判定処理の詳細フローチャートである。
【発明を実施するための形態】
【００１４】
以下、実施形態について、図面を参照しながら説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。各図面において同一の構成または機能を有する構成要素および相当部分には、同一の符号を付し、その説明は省略する。
【００１５】
図１に一実施形態のアドレスバイト数判定装置の構成例を示す。アドレスバイト数判定装置１０は、メモリ入出力部１１、アドレス生成部１２、第１データ列取得部１３、第２データ列取得部１４、比較部１５、及び、制御部１６を備える。図１には示していないが、アドレスバイト数判定装置１０は、例えば半導体装置に搭載され、半導体装置に接続可能なシリアルメモリとデータを送受信する。
メモリ入出力部１１は、シリアルメモリとのインタフェースを担う。具体的には、シリアルメモリへアドレスを出力し、アドレスに応じてシリアルメモリから連続するデータ列を受け取る。
【００１６】
アドレス生成部１２は、シリアルメモリのアドレスの最大バイト数を仮定し、まず、最大バイト数を有する第１アドレスをメモリ入出力部１１へ送る。次に、メモリ入出力部１１が第１アドレスに応じたデータを取得した後、第１アドレスの特定ビットを反転した第２アドレスをメモリ入出力部１１へ送る。
ここで、特定ビットについての説明を容易にするため、第１及び第２アドレスが、１バイトの大きさのアドレス部位を最大バイト数有する構成であることを用いる。加えて、各アドレス部位を特定する場合、Ｘ番目（Ｘは１から最大バイト数までの整数）のアドレス部位、と表すことにする。例えば、最大バイト数が３バイトである場合、第１及び第２アドレスは、１番目から３番目までの３つのアドレス部位からなる。
図２を用いてアドレスバイト数とアドレス部位との関係を具体的に説明する。図２では、アドレスバイト数１〜４それぞれの場合を一例として示す。アドレスバイト数１〜４のアドレスが、１番目から各アドレスバイト数までのアドレス部位を有する構成であることを示している。
【００１７】
さらに、シリアルメモリのアドレスは、アドレスバイト数１〜４それぞれのすべての領域（ビット）を用いる場合もあるが、その一部分の領域を用いる場合もある。例えば、シリアルメモリのアドレスとして、最上位のアドレス部位（１番目のアドレス部位）の最下位ビットを除く、上位ビットを用いていないことがある。図２に、アドレスバイト数のアドレス領域のうち、一部分の領域を用いない場合の一例を示す。図２では、アドレスバイト数１〜４のアドレス領域が、１つ以上のアドレス部位から構成される様子を示す。加えて、アドレス領域のうち、アドレスを特定するビットとして使用する領域を斜線の矩形領域で示している。黒塗りの丸印は、各アドレスの最下位ビットである。
アドレスバイト数１〜４の各アドレスにおいて、最下位バイトのアドレス部位（アドレスバイト数のアドレス部位）の最下位ビット（図２で黒塗りの丸印の領域）はアドレスを特定するビットとして常に用いられる。このため、特定ビットに各アドレス部位の最下位ビット（図２において矢印で示すビット）を用いると、各アドレス部位の有効・無効を確実に検出することができる。例えば、図２において、最右の矢印のビットが有効であればアドレスバイト数４と判断できる。
【００１８】
従って、アドレス生成部１２は、第１アドレスの各アドレス部位の最下位ビットを特定ビットとすることが好ましい。さらに、アドレス生成部１２は、まず、特定ビットとして、最大バイト数のアドレス部位の最下位ビットを反転させ、順次上位のアドレス部位の最下位ビットを反転させることが好ましい。これにより、下位のアドレス部位（大きいアドレスバイト数の場合）から順番に有効・無効を判別することになるため、効率良くアドレスバイト数を判定することができる。なお、１番目のアドレス部位については、他のアドレス部位が無効であることが検出されると、アドレスバイト数１であると判定できる。従って、１番目のアドレス部位については、特定ビットを反転させて有効・無効を判別しなくても、アドレスバイト数を判定することができる。
【００１９】
第１データ列取得部１３は、メモリ入出力部１１がシリアルメモリへ第１アドレスを出力し、第１アドレスに応じたデータを読み出すと、第１データ列を取得する。第１データ列取得部１３は、第１データ列として、メモリ入出力部１１が読み出したデータ列のうち、最初に取得する第１先頭データ値から、第１先頭データ値と異なる第１末尾データ値が検出されるまでのデータ列を取得する。
第２データ列取得部１４は、メモリ入出力部１１がシリアルメモリへ第２アドレスを出力し、第２アドレスに応じたデータを読み出すと、第２データ列を取得する。第２データ列取得部１４は、第２データ列として、メモリ入出力部１１が読み出したデータ列のうち、最初に取得する第２先頭データ値から、第２先頭データ値と異なる第２末尾データ値が検出されるまでのデータ列を取得する。
比較部１５は、第１データ列と第２データ列とが一致するか、不一致であるかを示す比較結果を出力する。
【００２０】
制御部１６は、外部からクロック信号やリセット信号を受け、アドレスバイト数の判定処理の開始・完了を制御する。さらに、制御部１６は、比較部１５から比較結果を受け、比較結果が不一致であることを検出すると、特定ビットを含むアドレス部位に基づいてシリアルメモリのアドレスバイト数を判定し、判定したアドレスバイト数を出力する。一方、比較結果が一致を示す場合、制御部１６は、特定ビットを異なる位置に変更した第２アドレスをメモリ入出力部１１へ送るように、アドレス生成部１２を制御する。制御部１６は、アドレスバイト数を判定するまで、第２データ列取得部１４が特定ビットを変更した第２アドレスに応じた第２データ列の取得を繰り返すように制御する。
制御部１６は、アドレスバイト数を次のようにして判定する。
比較結果が不一致であり、かつ、特定ビットを含むアドレス部位より下位のアドレス部位が無効である場合には、制御部１６は、アドレスバイト数を１番目から特定ビットを含むアドレス部位までのバイト数であると判定する。これは、特定ビットを含むアドレス部位及びそれより上位のアドレス部位が有効である場合である。
さらに、比較結果が一致であり、かつ、２番目から最大バイト数までのアドレス部位が無効（１番目のアドレス部位を除いて無効）である場合には、制御部１６は、アドレスバイト数が、１バイトであると判定する。
【００２１】
例えば、アドレス生成部１２が、特定ビットを、最大バイト数から順番に上位のアドレス部位に設定している場合には、制御部１６は、比較結果が不一致であることを検出すると、アドレスバイト数が、１番目から特定ビットを含むアドレス部位までのバイト数であると判定する。さらに、比較結果が一致である場合であっても、２番目から最大バイト数までのアドレス部位が無効である場合には、制御部１６は、アドレスバイト数が、１バイトであると判定する。
【００２２】
次に、図３を参照して動作を説明する。図３に一実施形態のアドレスバイト数判定装置の動作例を示す。
ここで、アドレスバイト数判定装置１０のいずれかの構成要素、例えば、制御部１６やアドレス生成部１２が、仮定したシリアルメモリのアドレスの最大バイト数を保持していることを前提とする。この処理は、アドレスバイト数判定装置１０に予め設定されていてもよいし、処理開始時に外部から入力する場合であってもよい。少なくともアドレス生成部１２が最大バイト数の第１アドレスを生成できる状態になっていればよい。例えば、アドレス生成部１２が、第１アドレスとして、予め設定された値を保持していてもよい。
アドレスバイト数判定処理の開始の指示（例えば、リセット信号の解除）を制御部１６が受けると（Ｓ１１）、アドレス生成部１２は、最大バイト数を有する第１アドレスを生成し、メモリ入出力部１１へ送る。メモリ入出力部１１は、第１アドレスをシリアルメモリへ出力する（Ｓ１２）。
メモリ入出力部１１は、第１アドレスの出力に応じて、シリアルメモリからデータ列を読み出し、第１データ列取得部１３は、第１データ列を取得する（Ｓ１３）。
【００２３】
制御部１６は、第１データ列が取得されたことを検出すると、アドレス生成部１２へ第２アドレスの生成を指示する。アドレス生成部１２は、制御部１６からの指示に従って、第１アドレスの特定ビットを反転した第２アドレスを生成し、メモリ入出力部１１へ送る。メモリ入出力部１１は、第２アドレスをシリアルメモリへ出力する（Ｓ１４）。
メモリ入出力部１１は、第２アドレスの出力に応じて、シリアルメモリからデータ列を読み出し、第２データ列取得部１４は、第２データ列を取得する（Ｓ１５）。
第１及び第２データ列が保持されると、比較部１５は、第１データ列と第２データ列とを比較し、比較結果を制御部１６へ出力する（Ｓ１６）。
制御部１６は、比較結果から、第１データ列と第２データ列とが不一致であり、特定ビットを含むアドレス部位が有効であることを検出すると（Ｓ１７、ＹＥＳ）、特定ビットを含むアドレス部位に基づいてシリアルメモリのアドレスバイト数を判定し、判定結果を出力して処理を終了する（Ｓ１８）。一方、比較結果が一致する場合（Ｓ１７、ＮＯ）、制御部１６は、２番目から最大バイト数までのアドレス部位の有効・無効を確認する（Ｓ１９）。２番目から最大バイト数までのアドレス部位がすべて無効である場合には（Ｓ１９、ＹＥＳ）、アドレスバイト数は１バイトとなることから、制御部１６は、アドレスバイト数を判定し、判定結果を出力して処理を終了する（Ｓ１８）。
【００２４】
一方、２番目から最大バイト数までのアドレス部位に有効・無効を判別していないアドレス部位がある場合）には（Ｓ１９、ＮＯ）、制御部１６は、アドレス生成部１２へ特定ビットを異なる位置に変更した第２アドレスをメモリ入出力部１１へ送るように制御する。アドレス生成部１２は、制御部１６から新たな第２アドレスの生成を指示されると、特定ビットの位置を変更した第２アドレスを生成し、アドレスバイト数判定装置１０は、上述したステップＳ１４以降の処理を繰り返す。このとき、アドレス生成部１２は、制御部１６から特定ビットの位置を指示される。制御部１６は、アドレスバイト数が判定可能となるまで、特定ビットを異なる部位に変更した第２アドレスをメモリ入出力部１１へ送ることを繰り返すように、アドレス生成部１２を制御する。
【００２５】
例えば、制御部１６は、第２アドレスの最初の特定ビットを最大バイト数のアドレス部位の最下位ビットとし、その後に生成する第２アドレスの特定ビットを、一つ前に生成した第２アドレスの特定ビットを含むアドレス部位より一つ上位のアドレス部位の最下位ビットとするように、アドレス生成部１２を制御する。
シリアルメモリへの第２アドレスの新たな出力に応じて、メモリ入出力部１１がデータ列を読み出すと、第２データ列取得部１４は、新たな第２データ列を取得するように構成される（Ｓ１６）。比較部１５は、第２データ列取得部１４が第２データ列を新たに取得すると、比較結果を更新するように構成される（Ｓ１７）。
【００２６】
一実施形態では、シリアルメモリは、複数の値（異なる値）が格納されていることを前提とする。これは、データの取得を開始する先頭データに対して、異なる値である末尾データを検出するためである。
以上、図１から図３を用いて、アドレスバイト数判定装置１０を説明した。以下に、アドレスバイト数判定装置１０のより具体的な実施形態、及び、一実施形態のアドレスバイト数判定装置１０を半導体装置に搭載する場合の構成例について説明する。
【００２７】
実施形態１．
＊  実施形態１の構成
図４は、実施形態１における、アドレスバイト数判定装置を用いる半導体装置のシステム構成例を示す図である。実施形態１のシステム構成例は、シリアルメモリ１０１と、一実施形態のアドレスバイト数判定装置を搭載する半導体装置１０２とで構成される。半導体装置１０２は、シリアルメモリ１０１と外部接続する。
半導体装置１０２は、クロック生成モジュール（ＣＬＫＧＥＮ）１０３、ＣＰＵ１０４、ＲＯＭ１０５、ＲＡＭ（Random Access Memory）１０６、汎用入出力ポート（ＧＰＩＯ）１０７、アドレスバイト数検出モジュール（ＡＤＤＲＥＳＳ  ＢＹＴＥ  ＤＥＴＥＣＴＯＲ）１０８、クロックド・シリアル・インタフェース・モジュール（ＣＬＯＣＫＥＤ  ＳＥＲＩＡＬ  ＩＮＴＥＲＦＡＣＥ）１０９、及び、ＳＰＩ信号切り替えモジュール（ＳＥＬ）１１０で構成される。アドレスバイト数検出モジュール１０８は、アドレスバイト数判定装置の一態様である。実施形態１では、半導体装置１０２に搭載する一例を示す。
【００２８】
クロック生成モジュール１０３は、クロック信号Ｎ１１６と、リセット信号Ｎ１１７とをシステムバスＮ１１５に出力する。
ＣＰＵ１０４は、システムバスＮ１１５に接続されたバスマスタであり、システムバスＮ１１５を経由して、ＲＯＭ１０５やＲＡＭ１０６や汎用入出力ポート１０７やクロックド・シリアル・インタフェース・モジュール１０９へのアクセスを行う。
ＲＯＭ１０５は、システムバスＮ１１５に接続されたバススレーブであり、システムバスＮ１１５からのリードアクセス要求に対して、ＲＯＭに格納されたデータをシステムバスＮ１１５のリードデータとして出力する。
ＲＡＭ１０６は、システムバスＮ１１５に接続されたバススレーブである。ＲＡＭ１０６は、システムバスＮ１１５からのライトアクセス要求に対して、システムバスＮ１１５から入力されたライトデータをＲＡＭに格納し、システムバスＮ１１５からのリードアクセス要求に対して、ＲＡＭに格納されたデータをシステムバスＮ１１５のリードデータとして出力する。
【００２９】
汎用入出力ポート１０７は、システムバスＮ１１５に接続されたバススレーブであり、アドレスバイト数検出完了信号Ｎ１１３と、アドレスバイト数検出結果信号Ｎ１１４とを受け、システムバスＮ１１５からのリードアクセス要求に対して、アドレスバイト数検出完了信号Ｎ１１３とアドレスバイト数検出結果信号Ｎ１１４の状態を、システムバスＮ１１５のリードデータとして出力する。
アドレスバイト数検出モジュール１０８は、クロック信号Ｎ１１６、リセット信号Ｎ１１７、及び、アドレスバイト数検出用データ出力信号Ｎ１０８を受け、アドレスバイト数検出完了信号Ｎ１１３、アドレスバイト数検出結果信号Ｎ１１４、アドレスバイト数検出用デバイス選択信号Ｎ１０５、アドレスバイト数検出用クロック信号Ｎ１０６、及び、アドレスバイト数検出用データ入力信号Ｎ１０７を出力する。
【００３０】
クロックド・シリアル・インタフェース・モジュール１０９は、システムバスＮ１１５に接続されたバススレーブであり、ＳＰＩ入出力用データ出力信号Ｎ１１２を受け、ＳＰＩ入出力用デバイス選択信号Ｎ１０９と、ＳＰＩ入出力用クロック信号Ｎ１１０と、ＳＰＩ入出力用データ入力信号Ｎ１１１とを出力する。
ＳＰＩ信号切り替えモジュール１１０は、アドレスバイト数検出用デバイス選択信号Ｎ１０５、アドレスバイト数検出用クロック信号Ｎ１０６、アドレスバイト数検出用データ入力信号Ｎ１０７、ＳＰＩ入出力用デバイス選択信号Ｎ１０９、ＳＰＩ入出力用クロック信号Ｎ１１０、ＳＰＩ入出力用データ入力信号Ｎ１１１、シリアルメモリ用データ出力信号Ｎ１０４、及び、アドレスバイト数検出完了信号Ｎ１１３を受け、アドレスバイト数検出用データ出力信号Ｎ１０８、ＳＰＩ入出力用データ出力信号Ｎ１１２、シリアルメモリ用デバイス選択信号Ｎ１０１、シリアルメモリ用クロック信号Ｎ１０２、及び、シリアルメモリ用データ入力信号Ｎ１０３を出力する。
シリアルメモリ１０１は、シリアルメモリ用デバイス選択信号Ｎ１０１と、シリアルメモリ用クロック信号Ｎ１０２と、シリアルメモリ用データ入力信号Ｎ１０３とが受けとり、シリアルメモリ用データ出力信号Ｎ１０４を出力する。
【００３１】
一般に、半導体装置は、クロックド・シリアル・インタフェース・モジュール１０９がシリアルメモリ１０１と接続し、データの入出力を制御する構成をとる。しかし、本実施形態では、汎用入出力ポート１０７、アドレスバイト数検出モジュール１０８、クロックド・シリアル・インタフェース・モジュール１０９、及び、ＳＰＩ信号切り替えモジュール１１０が、シリアルメモリ１０１とインタフェースを担う。言い換えると、本実施形態の半導体装置１０２は、一本実施形態のアドレスバイト数判定装置であるアドレスバイト数検出モジュール１０８を搭載するため、汎用入出力ポート１０７と、ＳＰＩ信号切り替えモジュール１１０とをさらに備える。これらの構成要素は、上述した入出力により、少なくとも次のような機能を実現するともいえる。
【００３２】
クロックド・シリアル・インタフェース・モジュール１０９は、通常動作において、シリアルメモリ１０１とのデータの入出力を制御するシリアルインタフェース部として働く。
アドレスバイト数検出モジュール１０８は、アドレスバイト数が決定される前に起動され、半導体装置１０２と接続するシリアルメモリ１０１のアドレスバイト数を判定する。
汎用入出力ポート１０７は、ＳＰＩ信号切り替えモジュール１１０の切り替えを制御する制御信号の内容をアクセス要求に応じてシステムバスＮ１１５に出力する。制御信号は、アドレスバイト数検出モジュール１０８がアドレスバイト数を検出するか否かを示す信号（図４のアドレスバイト数検出完了信号Ｎ１１３）を用いる。
ＳＰＩ信号切り替えモジュール１１０は、制御信号に応じて、クロックド・シリアル・インタフェース・モジュール１０９とアドレスバイト数検出モジュール１０８とを切り替えて、シリアルメモリと接続するスイッチ部として働く。具体的には、ＳＰＩ信号切り替えモジュール１１０は、シリアルメモリ１０１のアドレスバイト数が検出される前は、アドレスバイト数検出モジュール１０８とシリアルメモリ１０１とを接続させ、アドレスバイト信号が検出された後は、クロックド・シリアル・インタフェース・モジュール１０９とシリアルメモリ１０１とを接続させるように制御される。
【００３３】
図５は、アドレスバイト数検出モジュール１０８の詳細構成図である。
アドレスバイト数検出モジュール１０８は、シリアル転送クロック生成モジュール（ＳＫＧＥＮ）２０１、シーケンス制御モジュール（ＳＥＱ）２０２、バイト選択モジュール２０３、ビット反転制御モジュール２０４、パラレル／シリアル変換モジュール２０５、ＡＮＤゲート２０６、シリアル／パラレル変換モジュール２０７、１バイト・レジスタ（ＲＥＧ）２０８〜２１１、カウンタ（ＣＯＮＴＥＲ）２１２、２１３、比較器（ＥＱ）２１４〜２１８、及び、ＡＮＤゲート２１９で構成される。
【００３４】
シリアル転送クロック生成モジュール２０１は、バスのクロック信号Ｎ１１６を入力し、シリアル転送クロック信号Ｎ２０１を出力する。これにより、シリアル転送クロック生成モジュール２０１は、バスのクロック信号に基づいて、アドレスバイト数検出モジュール１０８内の内部クロックを生成する。
シーケンス制御モジュール２０２は、バスのクロック信号Ｎ１１６と、バスのリセット信号Ｎ１１７、シリアル転送クロック信号Ｎ２０１、比較結果出力信号Ｎ２２５、比較結果出力信号Ｎ２２６、及び、比較結果出力信号Ｎ２３０を受け、出力バイトデータ選択信号Ｎ２０４、ビット反転制御信号Ｎ２０６、データ更新制御信号Ｎ２０８、クロック出力許可信号Ｎ２０９、アドレスバイト数検出用デバイス選択信号Ｎ１０５、受信データキャプチャ制御信号Ｎ２１１、受信データキャプチャ制御信号Ｎ２１２、受信データキャプチャ制御信号Ｎ２１３、受信データキャプチャ制御信号Ｎ２１４、カウンタ初期化信号Ｎ２１９、カウントクロックＮ２２０、カウンタ初期化信号Ｎ２２１、及び、カウントクロックＮ２２２を出力する。これにより、シーケンス制御モジュール２０２は、アドレスバイト数の検出処理の開始・完了、及び、アドレスバイト数検出モジュール１０８の各構成要素を制御する。
【００３５】
ビット反転制御モジュール２０４は、アドレスバイト数検出用アドレス信号Ｎ２０２と、ビット反転制御信号Ｎ２０６とを受け、ビット反転制御済みアドレスＮ２０７を出力する。これにより、ビット反転制御モジュール２０４は、最大バイト数を有する第１アドレスと、第１アドレスの特定ビットを反転させた第２アドレスを生成する。
バイト選択モジュール２０３は、１バイトのアドレスバイト数検出用命令コードＮ２０３と、４バイトのビット反転制御済みアドレスＮ２０７と、出力バイトデータ選択信号Ｎ２０４とを受け、出力バイトデータＮ２０５を出力する。これにより、バイト選択モジュール２０３は、アドレスのうち、シリアルメモリ１０１へ送るバイトの位置を選択する。
パラレル／シリアル変換モジュール２０５は、出力バイトデータＮ２０５と、データ更新制御信号Ｎ２０８と、シリアル転送クロック信号Ｎ２０１とを受け、アドレスバイト数検出用データ入力信号Ｎ１０７を出力する。
ＡＮＤゲート２０６は、シリアル転送クロック信号Ｎ２０１と、クロック出力許可信号Ｎ２０９とを受け、アドレスバイト数検出用クロック信号Ｎ１０６を出力する。
シリアル／パラレル変換モジュール２０７は、シリアル転送クロック信号Ｎ２０１と、アドレスバイト数検出用データ出力信号Ｎ１０８とを受け、受信データＮ２１０を出力する。
【００３６】
１バイト・レジスタ２０８は、受信データＮ２１０と、受信データキャプチャ制御信号Ｎ２１１とを受け、キャプチャ済み受信データＮ２１５を出力する。
１バイト・レジスタ２０９は、受信データＮ２１０と、受信データキャプチャ制御信号Ｎ２１２とを受け、キャプチャ済み受信データＮ２１６を出力する。
１バイト・レジスタ２１０は、受信データＮ２１０と、受信データキャプチャ制御信号Ｎ２１３とを受け、キャプチャ済み受信データＮ２１７を出力する。
１バイト・レジスタ２１１は、受信データＮ２１０と、受信データキャプチャ制御信号Ｎ２１４とを受け、キャプチャ済み受信データＮ２１８を出力する。
カウンタ２１２は、カウンタ初期化信号Ｎ２１９と、カウントクロックＮ２２０とを受け、カウント結果Ｎ２２３を出力する。
カウンタ２１３は、カウンタ初期化信号Ｎ２２１と、カウントクロックＮ２２２とを受け、カウント結果Ｎ２２４を出力する。
【００３７】
比較器２１４は、キャプチャ済み受信データＮ２１５と、キャプチャ済み受信データＮ２１６とを受け、比較結果出力信号Ｎ２２５を出力する。
比較器２１５は、キャプチャ済み受信データＮ２１７と、キャプチャ済み受信データＮ２１８とを受け、比較結果出力信号Ｎ２２６を出力する。
比較器２１６は、キャプチャ済み受信データＮ２１５と、キャプチャ済み受信データＮ２１７とを受け、比較結果出力信号Ｎ２２７を出力する。
比較器２１７は、キャプチャ済み受信データＮ２１６と、キャプチャ済み受信データＮ２１８とを受け、比較結果出力信号Ｎ２２８を出力する。
比較器２１８は、カウント結果Ｎ２２３と、カウント結果Ｎ２２４とを受け、比較結果出力信号Ｎ２２９を出力する。
ＡＮＤゲート２１９は、比較結果出力信号Ｎ２２７と、比較結果出力信号Ｎ２２８と、比較結果出力信号Ｎ２２９とを受け、比較結果出力信号Ｎ２３０を出力する。
【００３８】
ここで、図１の構成と、図４の構成とを対応づけると次のようになる。
バイト選択モジュール２０３、パラレル／シリアル変換モジュール２０５、ＡＮＤゲート２０６、及び、シリアル／パラレル変換モジュール２０７は、メモリ入出力部１１を構成し、シリアルメモリ１０１とのデータの入出力を制御するように働く。
ビット反転制御モジュール２０４は、アドレス生成部１２を構成し、シリアルメモリ１０１へ出力するアドレス（第１アドレス、第２アドレス）を生成するように働く。
１バイト・レジスタ２０８、２０９と、カウンタ２１２と、比較器２１４とは、第１データ列取得部１３を構成し、第１データ列を取得するように働く。
１バイト・レジスタ２１０、２１１と、カウンタ２１３と、比較器２１５とは、第２データ列取得部１４を構成し、第２データ列を取得するように働く。
比較器２１６〜２１８と、ＡＮＤゲート２１９とは、比較部１５を構成し、第１データ列と第２データ列とが一致するか、不一致であるかを示す比較結果を出力する。
シリアル転送クロック生成モジュール２０１と、シーケンス制御モジュール２０２とは、制御部１６を構成し、アドレスバイト数を判定する。加えて、アドレスバイト数を検出できるように、各構成要素が機能するように制御する。
【００３９】
ここで、実施形態１では、第１データ列は、第１先頭データ値、第１末尾データ値、及び、第１データ列の長さ（第１データ長）からなる第１データ列情報として保持する。同様に、第２データ列は、第２先頭データ値、第２末尾データ値、及び、第２データ列の長さ（第２データ長）からなる第２データ列情報として保持する。具体的には次の構成要素で保持する。
１バイト・レジスタ２０８は、第１データ列の第１先頭データ値を保持する。１バイト・レジスタ２０９は、第１データ列の第１末尾データ値を保持する。カウンタ２１２は、第１データ長を保持する。ここで、第１データ長は、第１データ列の総バイト数である。半導体装置１０２は、シリアルメモリ１０１から１バイトずつデータを読み出す。従って、カウンタ２１２が保持する値は、半導体装置１０２が、第１先頭データ値から第１末尾データ値を取得するまでの第１データ列の各データを取得した回数（取得回数）を保持しているということもできる。
第２データ列情報についても同様に、１バイト・レジスタ２１０は、第２データ列の第２先頭データ値を保持する。１バイト・レジスタ２１１は、第２データ列の第２末尾データ値を保持する。カウンタ２１３は、第２データ長を保持する。
加えて、ＡＮＤゲート２１９は、比較器２１６〜２１８の比較結果に基づいて、第１データ列情報及び第２データ列情報の各要素のすべてが一致する場合には、一致を示す比較結果を出力し、いずれかの要素が不一致である場合には、不一致を示す比較結果を出力する。
【００４０】
図６は、ＳＰＩ信号切り替えモジュール１１０の一例を示す詳細構成図である。
ＳＰＩ信号切り替えモジュール１１０は、セレクタ（ＳＥＬ）３０１〜３０３と、バッファ３０４と、バッファ３０５とで構成される。
セレクタ３０１は、アドレスバイト数検出用デバイス選択信号Ｎ１０５と、ＳＰＩ入出力用デバイス選択信号Ｎ１０９と、アドレスバイト数検出完了信号Ｎ１１３とを受け、シリアルメモリ用デバイス選択信号Ｎ１０１を出力する。
セレクタ３０２は、アドレスバイト数検出用クロック信号Ｎ１０６と、ＳＰＩ入出力用クロック信号Ｎ１１０と、アドレスバイト数検出完了信号Ｎ１１３とを受け、シリアルメモリ用クロック信号Ｎ１０２を出力する。
セレクタ３０３は、アドレスバイト数検出用データ入力信号Ｎ１０７と、ＳＰＩ入出力用データ入力信号Ｎ１１１と、アドレスバイト数検出完了信号Ｎ１１３とを受け、シリアルメモリ用データ入力信号Ｎ１０３を出力する。
バッファ３０４は、シリアルメモリ用データ出力信号Ｎ１０４を受け、アドレスバイト数検出用データ出力信号Ｎ１０８を出力する。
バッファ３０５は、シリアルメモリ用データ出力信号Ｎ１０４を受け、ＳＰＩ入出力用データ出力信号Ｎ１１２を出力する。
【００４１】
＊実施形態１の動作
図４、図５、及び図６で説明した半導体装置１０２の動作を、図７、図８Ａ、８Ｂ、図９Ａ、９Ｂ、図１０Ａ、１０Ｂのフローチャートと、図１１〜図１４のデータ内容例、図１５Ａ〜１５Ｂ、図１６Ａ〜１６Ｃ、図１７Ａ〜１７Ｄ、図１８Ａ〜１８Ｄのタイミングチャートを用いて説明する。
図４のシステムに電源が投入されると、半導体装置１０２において、クロック生成モジュール１０３は、リセット信号Ｎ１１７をアサートするとともに、クロック信号Ｎ１１６にクロックの出力を開始する。そして、クロック生成モジュール１０３は、所定時間経過後に、リセット信号Ｎ１１７をデアサートする。
【００４２】
図７は、本実施形態の半導体装置１０２における、ＣＰＵ１０４の動作を示すフローチャートである。
ＣＰＵ１０４は、汎用入出力ポート１０７からアドレスバイト数検出完了信号Ｎ１１３の状態を読み出す（ステップＳ１０１）。
アドレスバイト数検出が完了している場合には（Ｓ１０２、ＹＥＳ）、次のステップＳ１０３へ進み、アドレスバイト数検出が完了していない場合には（Ｓ１０２、ＮＯ）、ステップＳ１０１に戻って、アドレスバイト数検出完了となるまで、アドレスバイト数検出完了信号Ｎ１１３の状態を読み出す処理を繰り返す（ステップＳ１０２）。
アドレスバイト数検出が完了していると、ＣＰＵ１０４は、汎用入出力ポート１０７からアドレスバイト数検出結果信号Ｎ１１４の状態を読み出し、接続されたシリアルメモリのアドレスバイト数を取得する（ステップＳ１０３）。
以降、ＣＰＵ１０４は、クロックド・シリアル・インタフェース・モジュール１０９を操作し、取得したシリアルメモリのアドレスバイト数に従ってＳＰＩバス・サイクルを組み立てる。これにより、ＣＰＵ１０４は、シリアルメモリ１０１へのアクセスを行う（ステップＳ１０４）。
【００４３】
図８Ａ、８Ｂは、本実施形態の半導体装置１０２における、アドレスバイト数検出モジュール１０８の動作を示すフローチャートである。
初期状態において、アドレスバイト数検出完了信号Ｎ１１３は、ロウ・レベルに初期化されており、またアドレスバイト数検出時に用いるシリアルメモリ読み出し用の命令コード（０３ｈ）が固定値として与えられている。ここでは、シリアルメモリ１０１の最大バイト数が４バイトであることを前提とする。例えば、シーケンス制御モジュール２０２は、リセット信号Ｎ１１７がアサートされると、アドレスバイト数検出完了信号Ｎ１１３を、ロウ・レベルに初期化し、リセット信号Ｎ１１７がデアサートされると、アドレスを生成する処理を開始するように、ビット反転制御モジュール２０４を制御する。これにより、アドレスバイト数を判定する処理が開始される。
先ず、ビット反転制御モジュール２０４は、任意の４バイトの値を第１アドレスとして選択し、ビット反転制御済みアドレスＮ２０７に供給する（ステップＳ２０１）。この時、ビット反転制御信号Ｎ２０６は、デアサートされており、ビット反転制御済みアドレスＮ２０７には、アドレスバイト数検出用アドレス信号Ｎ２０２の値がそのまま出力される。ここで、第１アドレスとなる、任意の４バイトの値は、予めアドレスバイト数検出モジュール１０８内に保持した値であってもよいし、外部から入力される値を用いるように構成されていてもよい。最大バイト数についても、任意の４バイトの値と同様である。
次に、第１アドレスを用いてシリアルメモリ１０１から第１データ列を読み出し、第１データ列情報を取得する（ステップＳ２０２）。シリアルメモリのデータ列取得の詳細フローは、別途説明する。
ステップＳ２０２で取得した第１データ列情報は、最初に読み出された第１の値（第１先頭データ値）が１バイト・レジスタ２０８に格納され、２バイト目以降で最初に読み出された１バイト・レジスタ２０８に格納された値と異なる第２の値（第１末尾データ値）が１バイト・レジスタ２０９に格納される。さらに、第１の値から第２の値が格納されるまでに読み出された総バイト数（第１データ長）がカウンタ２１２に格納される。
次に、ビット反転制御モジュール２０４は、第１アドレスのビット０を反転した値を第２アドレスとして選択する（Ｓ２０３）。ここでは、第１アドレスのビット０は、最大バイト数のアドレス部位（最下位のアドレス部位）の最下位ビットである。このとき、シーケンス制御モジュール２０２は、ビット反転制御信号Ｎ２０６を制御する。これにより、ビット反転制御済みアドレスＮ２０７には、アドレスバイト数検出用アドレス信号Ｎ２０２のビット０が反転された値が出力される。
【００４４】
第２アドレスがシリアルメモリ１０１へ出力されると、シリアルメモリ１０１からデータ列情報を取得する（ステップＳ２０４）。シリアルメモリのデータ列取得の詳細フローは、別途説明する。
ステップＳ２０４で取得した第２データ列情報は、最初に読み出された第１の値（第２先頭データ値）が１バイト・レジスタ２１０に格納され、２バイト目以降で最初に読み出された１バイト・レジスタ２１０と異なる第２の値（第２末尾データ値）が１バイト・レジスタ２１１に格納される。さらに、第２の値が格納されるまでに読み出された総バイト数（第２データ長）がカウンタ２１３に格納される。
次に、比較器２１６〜２１８は、ステップＳ２０２で得られた第１データ列情報とステップＳ２０４で得られた第２データ列情報との一致確認を行う（ステップＳ２０５）。データ列情報の一致確認は、各要素どうしが全て一致することで確認する。比較器２１６は、第１及び第２データ列情報の第１の値（第１先頭データ値と第２先頭データ値）の比較を行う。比較器２１７は、第１及び第２データ列情報の第２の値（第１末尾データ値と第２末尾データ値）の比較を行う。比較器２１８で第１及び第２データ列情報の総バイト数のカウント値（第１データ長と第２データ長）を比較する。ＡＮＤゲート２１９は、各要素が一致したことを検出し、第１及び第２データ列情報の一致確認結果を比較結果出力信号Ｎ２３０に出力する。比較結果出力信号Ｎ２３０は、シーケンス制御モジュール２０２に入力される。
【００４５】
第１データ列情報と第２データ列情報とが一致しない場合には、ステップＳ２０３で反転したアドレスのビット０がシリアルメモリ１０１に有効なアドレスビットであったことになる。従って、シーケンス制御モジュール２０２は、接続されたシリアルメモリ１０１のアドレスバイト数が、４であると判定（ステップＳ２０６）し、最終ステップＳ２１６に進む。
データ列情報が一致している場合には、ステップＳ２０３で反転したアドレスのビット０がシリアルメモリ１０１に無効なアドレスビットであったことになる。従って、シーケンス制御モジュール２０２は、新たな第２アドレスを用いてシリアルメモリ１０１のアドレスバイト数の判定を更に進めるために、次のステップＳ２０７に進むように制御する。
【００４６】
ビット反転制御モジュール２０４は、第１アドレスのビット８を反転した値を新たな第２アドレスとして選択する（ステップＳ２０７）。ここでは、第１アドレスのビット８は、第１アドレスにおける３番目のアドレス部位の最下位ビットであり、特定ビットが一つ前の４番目（最大バイト数）のアドレス部位より一つ上位のアドレス部位に設定されることになる。このとき、シーケンス制御モジュール２０２は、ビット反転制御モジュール２０４が第１アドレスのビット８を反転するように、ビット反転制御信号Ｎ２０６を制御する。これにより、ビット反転制御済みアドレスＮ２０７には、アドレスバイト数検出用アドレス信号Ｎ２０２のビット８が反転された値が出力される。
【００４７】
新たな第２アドレスがシリアルメモリ１０１へ出力されると、シリアルメモリ１０１から新たな第２アドレスに応じた第２データ列情報を取得する（ステップＳ２０８）。シリアルメモリ１０１のデータ列取得の詳細フローは、別途説明する。
ステップＳ２０８で取得した第２データ列情報は、ステップＳ２０４と同様に格納される。
次に、比較器２１６〜２１８は、ステップＳ２０２で得られた第１データ列情報とステップＳ２０８で得られた第２データ列情報との一致確認を行う（ステップＳ２０９）。データ列情報の一致確認は、各要素どうしが全て一致することで確認する。比較器２１６〜２１８の具体的な動作は、ステップＳ２０５と同様であるため説明を省略する。
【００４８】
データ列情報が一致しない場合には、ステップＳ２０７で反転したアドレスのビット８がシリアルメモリ１０１に有効なアドレスビットであったことになる。従って、シーケンス制御モジュール２０２は、接続されたシリアルメモリ１０１のアドレスバイト数は、３であると判定（ステップＳ２１０）し、最終ステップＳ２１６に進む。
データ列情報が一致している場合には、ステップＳ２０７で反転したアドレスのビット８がシリアルメモリ１０１に無効なアドレスビットであったことになる。従って、シーケンス制御モジュール２０２は、さらに新たな第２アドレスを用いてシリアルメモリ１０１のアドレスバイト数の判定を更に進めるために、次のステップＳ２１１に進むように制御する。
ビット反転制御モジュール２０４は、第１アドレスのビット１６を反転した値を第２アドレスとして選択する（ステップＳ２１１）。ここでは、第１アドレスのビット１６は、第１アドレスにおける２番目のアドレス部位の最下位ビットであり、特定ビットが一つ前の３番目アドレス部位より一つ上位のアドレス部位に設定されることになる。このとき、シーケンス制御モジュール２０２は、ビット反転制御信号Ｎ２０６を制御する。これにより、ビット反転制御済みアドレスＮ２０７には、アドレスバイト数検出用アドレス信号Ｎ２０２のビット１６が反転された値が出力される。
【００４９】
さらに新たな第２アドレスがシリアルメモリ１０１へ出力されると、シリアルメモリ１０１からさらに新たなデータ列情報を取得する（ステップＳ２１２）。シリアルメモリ１０１のデータ列取得の詳細フローは、別途説明する。
ステップＳ２１２で取得した第２データ列情報は、ステップＳ２０４、Ｓ２０８と同様に格納される。
次に、比較器２１６〜２１８は、ステップＳ２０２で得られた第１データ列情報とステップＳ２１２で得られた第２データ列情報との一致確認を行う（ステップＳ２１３）。データ列情報の一致確認は、各要素どうしが全て一致することで確認する。比較器２１６〜２１８の具体的な動作は、ステップＳ２０５、Ｓ２０９と同様であるため説明を省略する。
【００５０】
データ列情報が一致しない場合には、ステップＳ２１１で反転したアドレスのビット１６がシリアルメモリ１０１に有効なアドレスビットであったことになる。従って、シーケンス制御モジュール２０２は、接続されたシリアルメモリ１０１のアドレスバイト数は、２であると判定（ステップＳ２１４）し、最終ステップＳ２１６に進む。
データ列情報が一致している場合には、ステップＳ２１１で反転したアドレスのビット１６がシリアルメモリ１０１に無効なアドレスビットであったことになる。従って、シーケンス制御モジュール２０２は、接続されたシリアルメモリ１０１のアドレスバイト数は、１であると判定（ステップＳ２１５）し、最終ステップＳ２１６に進む。
最終ステップＳ２１６では、シーケンス制御モジュール２０２は、アドレスバイト数検出完了信号Ｎ１１３にハイ・レベルを出力し、アドレスバイト数検出の完了を外部に通知する。加えて、シーケンス制御モジュール２０２は、アドレスバイト数検出結果信号Ｎ１１４へ検出したアドレスバイト数を出力する。
【００５１】
続いて、アドレスバイト数検出モジュール１０８が第１データ列情報と第２データ列情報とを取得する動作について説明する。
図９Ａ、９Ｂは、本実施形態のアドレスバイト数検出モジュール１０８における、シリアルメモリ１０１の第１データ列情報取得（図８ＡのステップＳ２０２）の詳細フローチャートである。
先ず、シーケンス制御モジュール２０２は、カウンタ初期化信号Ｎ２１９を出力し、総バイト数のカウンタ２１２をクリアする（ステップＳ３０１）。
次に、シーケンス制御モジュール２０２は、アドレスバイト数検出用デバイス選択信号Ｎ１０５にロウ・レベルを出力し、ＳＰＩバス・サイクルを開始させる（ステップＳ３０２）。
次に、シーケンス制御モジュール２０２は、アドレスバイト数検出用命令コードＮ２０３の送信を行う（ステップＳ３０３）。
シーケンス制御モジュール２０２から出力される出力バイトデータ選択信号Ｎ２０４に従い、バイト選択モジュール２０３は、出力バイトデータＮ２０５にアドレスバイト数検出用命令コードＮ２０３の値を出力する。
続いて、シーケンス制御モジュール２０２によってデータ更新制御信号Ｎ２０８がアサートされると、出力バイトデータＮ２０５の値が、パラレル／シリアル変換モジュール２０５に格納され、シリアル転送クロック信号Ｎ２０１に同期して、アドレスバイト数検出用データ入力信号Ｎ１０７にＭＳＢから順にシリアル出力される。
【００５２】
次に、アドレスのビット３１〜２４の送信を行う（ステップＳ３０４）。シーケンス制御モジュール２０２から出力される出力バイトデータ選択信号Ｎ２０４に従い、バイト選択モジュール２０３は、出力バイトデータＮ２０５にビット反転制御済みアドレスＮ２０７のビット３１〜２４の値を出力する。
続いて、データ更新制御信号Ｎ２０８がアサートされると、出力バイトデータＮ２０５の値が、パラレル／シリアル変換モジュール２０５に格納される。パラレル／シリアル変換モジュール２０５は、シリアル転送クロック信号Ｎ２０１に同期して、アドレスバイト数検出用データ入力信号Ｎ１０７に格納した値をＭＳＢから順にシリアル出力する。
【００５３】
次に、アドレスのビット２３〜１６の送信を行う（ステップＳ３０５）。シーケンス制御モジュール２０２から出力される出力バイトデータ選択信号Ｎ２０４に従い、バイト選択モジュール２０３は、出力バイトデータＮ２０５にビット反転制御済みアドレスＮ２０７のビット２３〜１６の値を出力する。
続いて、データ更新制御信号Ｎ２０８がアサートされると、出力バイトデータＮ２０５の値が、パラレル／シリアル変換モジュール２０５に格納される。パラレル／シリアル変換モジュール２０５は、シリアル転送クロック信号Ｎ２０１に同期して、アドレスバイト数検出用データ入力信号Ｎ１０７に格納した値をＭＳＢから順にシリアル出力する。
【００５４】
次に、アドレスのビット１５〜８の送信を行う（ステップＳ３０６）。シーケンス制御モジュール２０２から出力される出力バイトデータ選択信号Ｎ２０４に従い、バイト選択モジュール２０３は、出力バイトデータＮ２０５にビット反転制御済みアドレスＮ２０７のビット１５〜８の値を出力する。
続いて、データ更新制御信号Ｎ２０８がアサートされると、出力バイトデータＮ２０５の値が、パラレル／シリアル変換モジュール２０５に格納される。パラレル／シリアル変換モジュール２０５は、シリアル転送クロック信号Ｎ２０１に同期して、アドレスバイト数検出用データ入力信号Ｎ１０７に格納した値をＭＳＢから順にシリアル出力する。
次に、アドレスのビット７〜０の送信を行う（ステップＳ３０７）。シーケンス制御モジュール２０２から出力される出力バイトデータ選択信号Ｎ２０４に従い、バイト選択モジュール２０３は、出力バイトデータＮ２０５にビット反転制御済みアドレスＮ２０７のビット７〜０の値を出力する。
続いて、データ更新制御信号Ｎ２０８がアサートされると、出力バイトデータＮ２０５の値が、パラレル／シリアル変換モジュール２０５に格納される。パラレル／シリアル変換モジュール２０５は、シリアル転送クロック信号Ｎ２０１に同期して、アドレスバイト数検出用データ入力信号Ｎ１０７に格納した値をＭＳＢから順にシリアル出力する。
【００５５】
次に、シリアル／パラレル変換モジュール２０７は、１バイトのデータを取得する（ステップＳ３０８）。
具体的には、シリアル／パラレル変換モジュール２０７は、アドレスバイト数検出用クロック信号Ｎ１０６に同期して入力されるアドレスバイト数検出用データ出力信号Ｎ１０８を、８ビット分受信し、１バイトの受信データＮ２１０を得る。受信データＮ２１０は、受信データキャプチャ制御信号Ｎ２１１の制御により、第１の値（第１先頭データ値）として１バイト・レジスタ２０８に格納される。
【００５６】
次に、カウントクロックＮ２２０の制御により、カウンタ２１２をインクリメントする（ステップＳ３０９）。
次に、シリアル／パラレル変換モジュール２０７は、後続する１バイトのデータを取得する（ステップＳ３１０）。
具体的には、シリアル／パラレル変換モジュール２０７は、アドレスバイト数検出用クロック信号Ｎ１０６に同期して入力されるアドレスバイト数検出用データ出力信号Ｎ１０８を、８ビット分受信し、１バイトの受信データＮ２１０を得る。受信データＮ２１０は、受信データキャプチャ制御信号Ｎ２１２の制御により、第２の値として１バイト・レジスタ２０９に格納する。
次に、カウントクロックＮ２２０の制御により、カウンタ２１２をインクリメントする。（ステップＳ３１１）。
【００５７】
次に、比較器２１４は、第１の値と第２の値との比較を行う（ステップＳ３１２）。比較器２１４は、キャプチャ済み受信データＮ２１５とキャプチャ済み受信データＮ２１６とを比較した結果を比較結果出力信号Ｎ２２５として出力する。シーケンス制御モジュール２０２は、比較結果出力信号Ｎ２２５を参照し、一致していれば（ステップＳ３１２、ＹＥＳ）、ステップＳ３１０に戻り処理を繰り返し、一致していなければ（ステップＳ３１２、ＮＯ）、次のステップＳ３１３に進むように制御する。比較結果出力信号Ｎ２２５が一致を示す場合、１バイト・レジスタ２０９に格納された第２の値は、第１末尾データとなる。
最後に、シーケンス制御モジュール２０２は、アドレスバイト数検出用デバイス選択信号Ｎ１０５にハイ・レベルを出力し、ＳＰＩバス・サイクルを終了する（ステップＳ３１３）。
ステップＳ３０８〜Ｓ３１２で説明したように、シーケンス制御モジュール２０２は、１バイト・レジスタ２０８に第１先頭データ値を保持させ、比較器２１４の出力が不一致を示すまで、第１データ列の２番目に取得する値から順番に１バイト・レジスタ２０９に取り込むことによって、第１末尾データ値を１バイト・レジスタ２０９に保持させるように制御する。
【００５８】
図１０Ａ、１０Ｂは、本実施形態のアドレスバイト数検出モジュール１０８における、シリアルメモリ１０１の第２データ列情報取得（図８ＢのステップＳ２０４、ステップＳ２０８，ステップＳ２１２）の詳細フローチャートである。
先ず、シーケンス制御モジュール２０２は、カウンタ初期化信号Ｎ２２１を出力し、総バイト数のカウンタ２１３をクリアする（ステップＳ４０１）。
次に、シーケンス制御モジュール２０２は、アドレスバイト数検出用デバイス選択信号Ｎ１０５にロウ・レベルを出力し、ＳＰＩバス・サイクルを開始させる（ステップＳ４０２）。
次に、シーケンス制御モジュール２０２は、アドレスバイト数検出用命令コードＮ２０３の送信を行う（ステップＳ４０３）。
シーケンス制御モジュール２０２から出力される出力バイトデータ選択信号Ｎ２０４に従い、バイト選択モジュール２０３は、出力バイトデータＮ２０５にアドレスバイト数検出用命令コードＮ２０３の値を出力する。
続いて、シーケンス制御モジュール２０２によってデータ更新制御信号Ｎ２０８がアサートされ、出力バイトデータＮ２０５の値が、パラレル／シリアル変換モジュール２０５に格納され、シリアル転送クロック信号Ｎ２０１に同期して、アドレスバイト数検出用データ入力信号Ｎ１０７にＭＳＢから順にシリアル出力される。
【００５９】
次に、アドレスのビット３１〜２４の送信を行う（ステップＳ４０４）。シーケンス制御モジュール２０２から出力される出力バイトデータ選択信号Ｎ２０４に従い、バイト選択モジュール２０３は、出力バイトデータＮ２０５にビット反転制御済みアドレスＮ２０７のビット３１〜２４の値を出力する。
続いて、データ更新制御信号Ｎ２０８がアサートされ、出力バイトデータＮ２０５の値が、パラレル／シリアル変換モジュール２０５に格納される。パラレル／シリアル変換モジュール２０５は、シリアル転送クロック信号Ｎ２０１に同期して、アドレスバイト数検出用データ入力信号Ｎ１０７に格納した値をＭＳＢから順にシリアル出力する。
【００６０】
次に、アドレスのビット２３〜１６の送信を行う（ステップＳ４０５）。シーケンス制御モジュール２０２から出力される出力バイトデータ選択信号Ｎ２０４に従い、バイト選択モジュール２０３は、出力バイトデータＮ２０５にビット反転制御済みアドレスＮ２０７のビット２３〜１６の値を出力する。
続いて、データ更新制御信号Ｎ２０８がアサートされると、出力バイトデータＮ２０５の値が、パラレル／シリアル変換モジュール２０５に格納される。パラレル／シリアル変換モジュール２０５、シリアル転送クロック信号Ｎ２０１に同期して、アドレスバイト数検出用データ入力信号Ｎ１０７に格納した値をＭＳＢから順にシリアル出力する。
次に、アドレスのビット１５〜８の送信を行う（ステップＳ４０６）。シーケンス制御モジュール２０２から出力される出力バイトデータ選択信号Ｎ２０４に従い、バイト選択モジュール２０３は、出力バイトデータＮ２０５にビット反転制御済みアドレスＮ２０７のビット１５〜８の値を出力する。
続いて、データ更新制御信号Ｎ２０８がアサートされると、出力バイトデータＮ２０５の値が、パラレル／シリアル変換モジュール２０５に格納される。パラレル／シリアル変換モジュール２０５、シリアル転送クロック信号Ｎ２０１に同期して、アドレスバイト数検出用データ入力信号Ｎ１０７に格納した値をＭＳＢから順にシリアル出力する。
【００６１】
次に、アドレスのビット７〜０の送信を行う（ステップＳ４０７）。
シーケンス制御モジュール２０２から出力される出力バイトデータ選択信号Ｎ２０４に従い、バイト選択モジュール２０３は、出力バイトデータＮ２０５にビット反転制御済みアドレスＮ２０７のビット７〜０の値を出力する。
続いて、データ更新制御信号Ｎ２０８がアサートされると、出力バイトデータＮ２０５の値が、パラレル／シリアル変換モジュール２０５に格納される。パラレル／シリアル変換モジュール２０５、シリアル転送クロック信号Ｎ２０１に同期して、アドレスバイト数検出用データ入力信号Ｎ１０７に格納した値をＭＳＢから順にシリアル出力する。
次に、シリアル／パラレル変換モジュール２０７は、１バイトのデータを取得する（ステップＳ４０８）。
具体的には、シリアル／パラレル変換モジュール２０７は、アドレスバイト数検出用クロック信号Ｎ１０６に同期して入力されるアドレスバイト数検出用データ出力信号Ｎ１０８を、８ビット分受信し、１バイトの受信データＮ２１０を得る。受信データＮ２１０は、受信データキャプチャ制御信号Ｎ２１３の制御により、第１の値（第１先頭データ値）として１バイト・レジスタ２１０に格納される。
次に、カウントクロックＮ２２２の制御により、カウンタ２１３をインクリメントする。（ステップＳ４０９）。
【００６２】
次に、シリアル／パラレル変換モジュール２０７は、後続する１バイトのデータを取得する（ステップＳ４１０）。
具体的には、シリアル／パラレル変換モジュール２０７は、アドレスバイト数検出用クロック信号Ｎ１０６に同期して入力されるアドレスバイト数検出用データ出力信号Ｎ１０８を、８ビット分受信し、１バイトの受信データＮ２１０を得る。受信データＮ２１０は、受信データキャプチャ制御信号Ｎ２１４の制御により、第２の値として１バイト・レジスタ２１１に格納する。
【００６３】
次に、カウントクロックＮ２２２の制御により、カウンタ２１３をインクリメントする。（ステップＳ４１１）。
次に、比較器２１５は、第１の値と第２の値との比較を行う（ステップＳ４１２）。比較器２１５は、キャプチャ済み受信データＮ２１７とキャプチャ済み受信データＮ２１８とを比較した結果を比較結果出力信号Ｎ２２６として出力する。シーケンス制御モジュール２０２は、比較結果出力信号Ｎ２２６を参照し、一致していれば（ステップＳ４１２、ＹＥＳ）、ステップＳ４１０に戻り処理を繰り返し、一致していなければ（ステップＳ４１２、ＮＯ）、次のステップＳ４１３に進むように制御する。比較結果出力信号Ｎ２２６が一致を示す場合、１バイト・レジスタ２１１に格納された第２の値は、第２末尾データとなる。
最後に、シーケンス制御モジュール２０２は、アドレスバイト数検出用デバイス選択信号Ｎ１０５にハイ・レベルを出力し、ＳＰＩバス・サイクルを終了する（ステップＳ４１３）。
ステップＳ４０８〜Ｓ４１２で説明したように、シーケンス制御モジュール２０２は、１バイト・レジスタ２１０に第２先頭データ値を保持させ、比較器２１５の出力が不一致を示すまで、第２データ列の２番目に取得する値から順番に１バイト・レジスタ２１１に取り込むことによって、第２末尾データ値を１バイト・レジスタ２１１に保持させるように制御する。
【００６４】
ここで、シリアルメモリ１０１が保持する具体的な値と、アドレスバイト数検出モジュール１０８の判定動作のタイミングチャートとを用いて、具体的な動作例を説明する。図１１〜図１４は、本実施形態の半導体装置１０２へ接続するシリアルメモリ１０１のデータ内容例を示す図である。図１５Ａ〜図１８Ｄは、本実施形態の半導体装置１０２へシリアルメモリ１０１を接続した場合の動作例を示すタイミングチャートである。シリアルメモリ１０１のアドレスバイト数が図１１、１５Ａ、１５Ｂでは４、図１２、１６Ａ〜１６Ｃでは３、図１３、図１７Ａ〜１７Ｄでは２、図１４、図１８Ａ〜１８Ｄでは１の場合をそれぞれ示している。
【００６５】
図１１〜図１４に示すように、シリアルメモリ１０１には、均一では無い値を格納していることを前提とする。
図１５Ａ〜図１８Ｄに示す符号Ｔ５１１からＴ５４４で示すタイミングチャートは、図８Ａ〜図１０Ｂの処理と次のように対応する。タイミングチャートＴ５１１、Ｔ５２１、Ｔ５３１、Ｔ５４１は、図８ＡのステップＳ２０２の処理（図９Ａ、９Ｂのフローチャート）によって、第１アドレスに応じた第１データ列情報を取得する場合を示す。タイミングチャートＴ５１２、Ｔ５２２、Ｔ５３２、Ｔ５４２は、図８ＢのステップＳ２０４の処理（図１０Ａ、１０Ｂのフローチャート）によって、第２アドレスに応じた第２データ列情報を取得する場合を示す。タイミングチャートＴ５２３、Ｔ５３３、Ｔ５４３は、図８ＢのステップＳ２０８の処理（図１０Ａ、１０Ｂのフローチャート）によって、新たな第２アドレスに応じた第２データ列情報を取得する場合を示す。タイミングチャートＴ５３４、Ｔ５４４は、図８ＢのステップＳ２１２の処理（図１０Ａ、１０Ｂのフローチャート）によって、さらに新たな第２アドレスに応じた第２データ列情報を取得する場合を示す。
図１５Ａ〜図１８Ｄでは、第１アドレスを"００００ＦＦ００ｈ"とする。
【００６６】
まず、半導体装置１０２へアドレスバイト数４のシリアルメモリ１０１を接続する場合を説明する。
シリアルメモリ１０１には、図１１に示すデータが格納されている。
図１５Ａに示す、タイミングチャートＴ５１１では、第１アドレスを用いて、シリアルメモリ１０１の第１データ列情報を取得する（図８Ａ、ステップＳ２０２）。
先ず、半導体装置１０２は、アドレスバイト数検出用デバイス選択信号Ｎ１０１にロウ・レベルを出力する。続いて、半導体装置１０２は、シリアルメモリ用クロック信号Ｎ１０２に同期して、１バイトの読み出し命令コード（タイミングＣ１）と、４バイトの第１アドレス（タイミングＣ２〜Ｃ５）とをシリアルメモリ用データ入力信号Ｎ１０３に順次出力する。
引き続き、半導体装置１０２は、シリアルメモリ用クロック信号Ｎ１０２に同期して、シリアルメモリ用データ出力信号Ｎ１０４から第１の値を取得し（タイミングＣ６）、第１の値とデータ値が異なる第２の値を取得する（タイミングＣ１０）まで、第１データ列の取得を継続する。
このとき、シリアルメモリ１０１は、シリアルメモリ用データ入力信号Ｎ１０３に入力された読み出し命令コード（タイミングＣ１）と４バイトのアドレス００００ＦＦ００ｈ（タイミングＣ２〜Ｃ５）とを認識し、該当アドレスのデータをシリアルメモリ用データ出力信号Ｎ１０４に出力開始（タイミングＣ６）する。
ここで、半導体装置１０２は、第１の値が００ｈ、第２の値がＢＣｈ、及び、カウント値が５となる第１データ列情報を得る。
【００６７】
図１５Ｂに示す、タイミングチャートＴ５１２では、第１アドレス００００ＦＦ００ｈのビット０を反転して得られる第２アドレス０ｘ００００ＦＦ０１ｈを用いて、シリアルメモリ１０１の第２データ列情報を取得する。
このとき、シリアルメモリ１０１は、シリアルメモリ用データ入力信号Ｎ１０３に入力された読み出し命令コード（タイミングＣ１）と４バイトのアドレス００００ＦＦ０１ｈ（タイミングＣ２〜Ｃ５）とを認識し、該当アドレスのデータをシリアルメモリ用データ出力信号Ｎ１０４に出力開始（タイミングＣ６）する。
ここで、半導体装置１０２は、第１の値が００ｈ、第２の値がＢＣｈ、及び、カウント値が４となる第２データ列情報を得る。
【００６８】
タイミングチャートＴ５１１及びＴ５１２で得られた第１及び第２データ列情報は、一致しない。
この結果から、接続されたシリアルメモリのアドレスバイト数は、４であると判断する。
【００６９】
次に、半導体装置１０２へアドレスバイト数３のシリアルメモリ１０１を接続する場合を説明する。
シリアルメモリ１０１には、図１２に示すデータが格納されている。
図１６Ａ、１６Ｂに示す、タイミングチャートＴ５２１及びＴ５２２においては、シリアルメモリ１０１のアドレスバイト数が３である。従って、シリアルメモリ１０１は、シリアルメモリ用データ入力信号Ｎ１０３に入力された読み出し命令コード（タイミングＣ１）と上位３バイトのアドレス００００ＦＦｈ（タイミングＣ２〜Ｃ４）とを認識し、認識したアドレスのデータ出力を開始（タイミングＣ５）する。一方、半導体装置１０２は、タイミングＣ５までは、アドレスを出力する処理を実施するため、タイミングＣ６からの第１及び第２データ列を読み出す。その結果、タイミングチャートＴ５２１及びＴ５２２において、半導体装置１０２は、第１及び第２データ列情報ともに、第１の値が００ｈ、第２の値がＢＣｈ、カウント値が４となる情報を取得する。
タイミングチャートＴ５２１及びＴ５２２で得られる第１データ列情報と第２データ列情報とは、一致する。
【００７０】
図１６Ｃに示す、タイミングチャートＴ５２３では、第１アドレス００００ＦＦ００ｈのビット８を反転して得た第２アドレス０ｘ００００ＦＥ００を用いて、シリアルメモリ１０１のデータ列情報を取得する。
このとき、シリアルメモリ１０１は、シリアルメモリ用データ入力信号Ｎ１０３に入力された読み出し命令コード（タイミングＣ１）と上位３バイトのアドレス００００ＦＥｈ（タイミングＣ２〜Ｃ４）とを認識し、該当アドレスのデータ出力を開始（タイミングＣ５）する。
ここで、半導体装置１０２は、タイミングＣ６からのデータ列を読み出し、第１のデータが００ｈ、第２のデータがＢＣｈ、カウント値が５となる、新たな第２データ列情報を取得する。
タイミングチャートＴ５２１及びＴ５２３で得られた第１及び第２データ列情報は、一致しない。
この結果から、接続されたシリアルメモリのアドレスバイト数は、３であると判断する。
なお、タイミングチャートＴ５２３において半導体装置１０２から出力されるアドレスの最下位１バイトは、上述した説明ではゼロを設定した。しかし、シリアルメモリ１０１が最下位バイトの値を参照することが無いため、任意の値でもよい。
【００７１】
次に、半導体装置１０２へアドレスバイト数２のシリアルメモリ１０１を接続する場合を説明する。
シリアルメモリ１０１には、図１３に示すデータが格納されている。
図１７Ａ〜１７Ｃに示す、タイミングチャートＴ５３１、Ｔ５３２及びＴ５３３においては、シリアルメモリ１０１のアドレスバイト数が２である。従って、シリアルメモリ１０１は、シリアルメモリ用データ入力信号Ｎ１０３に入力された読み出し命令コード（タイミングＣ１）と上位２バイトのアドレス００００ｈ（タイミングＣ２〜Ｃ３）とを認識し、認識したアドレスのデータ出力を開始（タイミングＣ４）する。一方、半導体装置１０２は、タイミングＣ５までは、アドレスを出力する処理を実施するため、タイミングＣ６からの第１及び第２データ列を読み出す。その結果、タイミングチャートＴ５３１〜Ｔ５３３において、半導体装置１０２は、第１及び第２データ列情報ともに、第１の値が００ｈ、第２の値がＢＣｈ、カウント値が３となる情報を取得する。
タイミングチャートＴ５３１、Ｔ５３２及びＴ５３３で得られる第１データ列情報と、二つの第２データ列情報とは、すべて一致する。
【００７２】
図１７Ｄに示す、タイミングチャートＴ５３４では、第１アドレス００００ＦＦ００ｈのビット１６を反転して得た第２アドレス０ｘ０００１ＦＦ００を用いて、シリアルメモリ１０１のデータ列情報を取得する。
このとき、シリアルメモリ１０１は、シリアルメモリ用データ入力信号Ｎ１０３に入力された読み出し命令コード（タイミングＣ１）と上位２バイトのアドレス０００１ｈ（タイミングＣ２〜Ｃ３）とを認識し、該当アドレスのデータ出力を開始（タイミングＣ４）する。
ここで、半導体装置１０２は、タイミングＣ６からのデータ列を読み出し、第１の値が００ｈ、第２の値がＢＣｈ、カウント値が２となるさらに新たな第２データ列情報を取得する。
タイミングチャートＴ５３１及びＴ５３４で得られた第１及び第２データ列情報は、一致しない。
この結果から、接続されたシリアルメモリのアドレスバイト数は、２であると判断する。
なお、半導体装置１０２から出力されるアドレスについて、タイミングチャートＴ５３３における最下位１バイトと、タイミングチャートＴ５３４における最下位２バイトとを、上述した説明ではゼロに設定した。しかし、シリアルメモリ１０１がこれらの値を参照することが無いため、任意の値でもよい。
【００７３】
最後に、半導体装置１０２へアドレスバイト数１のシリアルメモリ１０１を接続する場合を説明する。
シリアルメモリ１０１には、図１４に示すデータが格納されている。
図１８Ａ〜１８Ｄに示す、タイミングチャートＴ５４１、Ｔ５４２、Ｔ５４３及びＴ５４４おいては、シリアルメモリのアドレスバイト数が１である。従って、シリアルメモリ１０１は、シリアルメモリ用データ入力信号Ｎ１０３に入力された読み出し命令コード（タイミングＣ１）と上位１バイトのアドレス００ｈ（タイミングＣ２）とを認識し、認識したアドレスのデータ出力を開始（タイミングＣ３）する。一方、半導体装置１０２は、タイミングＣ５までは、アドレスを出力する処理を実施するため、タイミングＣ６から第１及び第２データ列を読み出す。その結果、タイミングチャートＴ５４１〜Ｔ５４４において、半導体装置１０２は、第１及び第２データ列情報ともに、第１の値が００ｈ、第２の値がＢＣｈ、カウント値が２となる情報を取得する。
タイミングチャートＴ５４１〜Ｔ５４４で得られる第１データ列情報と、三つの第２データ列情報とは、一致する。
【００７４】
この結果から、接続されたシリアルメモリのアドレスバイト数は、１であると判断する。
なお、半導体装置１０２から出力されるアドレスについて、タイミングチャートＴ５４３における最下位１バイトと、タイミングチャートＴ５４４における最下位２バイトとを、上述した説明ではゼロに設定した。しかし、シリアルメモリ１０１がこれらの値を参照することが無いため、任意の値でもよい。
【００７５】
＊  実施形態１のメカニズムおよび効果
以上説明したとおり、本実施形態のアドレスバイト数判定装置及び方法を用いると、シリアルメモリ１０１に格納されている既存のデータを読み出すことによって、シリアルメモリ１０１のアドレスバイト数を判定する。これは、シリアルメモリ１０１のアドレスバイト数の判定に、既知の判定用データをシリアルメモリ１０１に書き込むことを必要としない。これにより、マスクＲＯＭやプロテクト済みの書込み不能なシリアルメモリであってもアドレスバイト数を判定するという有利な効果を生じる。
また、シリアルメモリ１０１への判定用データの書き込みが不要であるので、シリアルメモリ１０１に格納されていたデータを破壊しない効果も生じる。
さらに、シリアルメモリ１０１への判定用のデータを書き込みが不要であるので、書き込みが遅いＮＯＲ型ＦＬＡＳＨやＥＥＰＲＯＭ等であっても、アドレスバイト数の判定時間が延びない効果も生じる。
また、本実施形態のアドレスバイト数判定装置では、プルアップ抵抗によって与えられるシリアルデータ出力信号の常時電位を利用せずに、シリアルメモリから出力されるデータのみを用いてアドレスバイト数の判定を行う。これにより、ノイズ耐性が高く、またシリアルデータ出力信号の常時電位をハイ・レベルに保つプルアップ抵抗が不要となる効果も生じる。
【００７６】
実施形態２．
実施形態２では、メモリコントローラ型のシリアルメモリインタフェースを用いる半導体装置へ一実施形態のアドレスバイト数判定装置を搭載する場合のシステムの一態様を説明する。
＊  実施形態２の構成
図１９は、実施形態２における、アドレスバイト数判定装置を搭載する半導体装置のシステム構成例を示す図である。実施形態２のシステム構成例は、シリアルメモリ１０１と、一実施形態のアドレスバイト数判定装置を搭載する半導体装置４０１とで構成される。半導体装置４０１は、シリアルメモリ１０１と外部接続する。
半導体装置４０１は、クロック生成モジュール１０３、ＣＰＵ１０４、ＲＡＭ１０６、アドレスバイト数検出モジュール１０８、ＳＰＩメモリ・コントローラ・モジュール４０２、インバータ４０３、及び、ＳＰＩ信号切り替えモジュール１１０で構成される。
ＳＰＩメモリ・コントローラ・モジュール４０２は、システムバスＮ１１５に接続されたバススレーブであり、ホールド要求信号Ｎ４０５と、アドレスバイト数検出結果信号Ｎ１１４と、ＳＰＩ入出力用データ出力信号Ｎ４０４とを受け、ＳＰＩ入出力用デバイス選択信号Ｎ４０１と、ＳＰＩ入出力用クロック信号Ｎ４０２と、ＳＰＩ入出力用データ入力信号Ｎ４０３とを出力する。ＳＰＩメモリ・コントローラ・モジュール４０２は、メモリバイト数が検出された後、シリアルメモリ１０１とのデータの入出力を制御する機能を担う。
インバータ４０３は、アドレスバイト数検出完了信号Ｎ１１３を受け、ホールド要求信号Ｎ４０５を出力する。
図４と同じ符号の構成要素は同様であるため、説明を省略する。
【００７７】
＊  実施形態２の動作
図１９で説明した半導体装置４０１の動作を、図２０のフローチャートを用いて説明する。
図１９のシステムに電源が投入されると（ステップＳ７０１）、半導体装置４０１では、クロック生成モジュール１０３は、リセット信号Ｎ１１７をアサートするとともに（ステップＳ７０２）、クロック信号Ｎ１１６にクロックの出力を開始する。リセット信号Ｎ１１７がアサートされたことにより、アドレスバイト数検出モジュール１０８は、アドレスバイト数検出完了信号Ｎ１１３をデアサート状態に初期化する。さらに、インバータ４０３は、アドレスバイト数検出完了信号Ｎ１１３がデアサートされると、ホールド要求信号Ｎ４０５をアサートする。
そして、クロック生成モジュール１０３は、所定時間経過後に、リセット信号Ｎ１１７をデアサートする（ステップＳ７０３）。
リセット信号Ｎ１１７がデアサートされると、ＣＰＵ１０４は、ブート処理を開始する（ステップＳ７０４）。一方、アドレスバイト数検出モジュール１０８では、リセット信号Ｎ１１７がデアサートされたことにより、アドレスバイト数を判定する処理を開始する。
そして、ＣＰＵ１０４は、命令コード取得のために、システムバスＮ１１５経由でＳＰＩメモリ・コントローラ・モジュール４０２に対するリードアクセスを開始する（ステップＳ７０５）
この時、アドレスバイト数検出モジュール１０８は、アドレスバイト数の検出が完了していないため、アドレスバイト数検出完了信号Ｎ１１３は、デアサートされ、またホールド要求信号Ｎ４０５は、アサートされた状態である。
ＳＰＩメモリ・コントローラ・モジュール４０２は、ホールド要求信号Ｎ４０５がアサートされているため（ステップＳ７０６、ＮＯ）、シリアルメモリのバス・サイクル発行を保留し、ＣＰＵ１０４からのアクセス要求をウエイト状態に保つ。
【００７８】
その後、アドレスバイト数検出モジュール１０８は、接続されたシリアルメモリ１０１のアドレスバイト数の検出を完了すると、アドレスバイト数検出結果信号Ｎ１１４に検出したアドレスバイト情報を出力し、アドレスバイト数検出完了信号Ｎ１１３をアサートする。
インバータ４０３は、アドレスバイト数検出完了信号Ｎ１１３がアサートされたため、ホールド要求信号Ｎ４０５をデアサートする。
ＳＰＩメモリ・コントローラ・モジュール４０２は、ホールド要求信号Ｎ４０５がデアサートされると（ステップＳ７０６、ＹＥＳ）、保留していたシリアルメモリのバス・サイクルを開始する（ステップＳ７０７）。この時、シリアルメモリのバス・サイクルは、アドレスバイト数検出結果信号Ｎ１１４で示されるアドレスバイト数に従って組み立てられ、ＣＰＵ１０４からのアクセス要求に対応したデータが取得される。
ＳＰＩメモリ・コントローラ・モジュール４０２は、ＣＰＵ１０４からのアクセス要求に対応したデータをシステムバスＮ１１５に出力し、ウエイトを解除してＣＰＵ１０４からのアクセスを完了させる（ステップＳ７０８）。
以降、ＳＰＩメモリ・コントローラ・モジュール４０２は、ＣＰＵ１０４からのアクセス要求に応じ、シリアルメモリ１０１からデータを取得した値をシステムバスＮ１１５に出力する。
【００７９】
＊  実施形態２の効果
メモリコントローラ型のシリアルメモリインタフェースであっても、実施形態１で説明した周辺Ｉ／Ｏ型のシリアルメモリインタフェースと同様に、判定用データをシリアルメモリ１０１へ書き込まないで、アドレスバイト数の検出を行うことが出来る。
【００８０】
実施形態３．
上記各実施形態では、第１アドレスの特定ビットを判定させて第２アドレスを生成するときに、特定ビットを一つとして説明したが、これに限られることはない。例えば、一つのアドレス部位うちのの二つのビットを判定させることを排除するものではない。
さらに、上記各実施形態では、第２アドレスの特定ビットを、１番目から最大バイト数までの複数のアドレス部位のうち、最大バイト数のアドレス部位の最下位ビットから一つずつ上位のアドレス部位の最下位ビットへ順番に移動している動作例を説明した。しかし、これに限られるわけではない。例えは、２番目のアドレス部位から順番に最大バイト数までのアドレス部位の最下位ビット（または最下位ビットを含む複数のビット）を反転し、各アドレス部位の有効・無効を判別した後、アドレスバイト数を判定する手順であってもよい。この場合には、第１データ列情報と第２データ列情報との比較結果が不一致であること、かつ、他の上位のアドレス部位の有効である場合に、アドレスバイト数を判定する。加えて、比較結果が一致であり、２番目から最大バイト数までのアドレス部位が無効である場合には、アドレスバイト数を１と判定する。動作例は、図１，３を参照して説明した動作と同様であるため、ここでは説明を省略する。
【００８１】
実施形態４．
上記各実施形態で説明したアドレスバイト数判定装置及び方法、例えば、図５のアドレスバイト数検出モジュール１０８は、ハードウェアで実現する場合に限られるものではなく、ソフトウェアや、組み込みシステムのように、ハードウェアとソフトウェアとの組合せにより実現してもよい。ハードウェア、ファームウェア、ソフトウェアのいずれか、あるいは、これらの二つ以上の組合せにより実現してもよい。
例えば、アドレス数判定方法は、コンピュータに各処理を実行させるプログラムによって実現することができる。プログラムは、例えば、少なくとも次の各処理をコンピュータに実行させる。
【００８２】
（１）シリアルメモリのアドレスの最大バイト数を仮定し、最大バイト数を有する第１アドレスをシリアルメモリへ出力する処理。
（２）第１アドレスの出力に応じて、第１データ列として、最初に取得する第１先頭データ値から、前記第１先頭データ値と異なる第１末尾データ値が検出されるまでのデータ列を前記シリアルメモリから読み出す処理。
（３）第１アドレスの特定ビットを反転した第２アドレスをシリアルメモリへ出力する処理。
（４）第２アドレスの出力に応じて、第２データ列として、最初に取得する第２先頭データ値から、第２先頭データ値と異なる第２末尾データ値が検出されるまでのデータ列をシリアルメモリから読み出す処理。
（５）第１データ列と第２データ列とを比較する処理。
（６）第１データ列と第２データ列とが不一致であることを検出すると、特定ビットを含むアドレス部位に基づいて前記シリアルメモリのアドレスバイト数を判定する処理。
これらの処理は、図３を参照して説明した動作と同様であり、また、図８Ａ〜１０Ｂが具体的な動作の一例となるため、詳細な説明を省略する。
【００８３】
また、プログラムは、例えば、図２１に示す半導体装置８０１内で実行させることができる。図２１の構成例は、図４に示す半導体装置１０２から、汎用入出力ポート１０７、アドレスバイト数検出モジュール１０８、ＳＰＩ信号切り替えモジュール１１０を除いた構成である。加えて、クロックド・シリアル・インタフェース・モジュール１０９は、シリアルメモリ１０１と直接接続されるように構成される。
半導体装置８０１では、プログラムは、ＲＯＭ１０５に格納され、電源がＯＮになると、ＲＯＭ１０５からプログラムが読み出される。プログラムは、ＣＰＵ１０４の制御のもとで、実行される。プログラムは、クロックド・シリアル・インタフェース・モジュール１０９によって、シリアルメモリ１０１との入出力を実施する。
図２１の構成例では、半導体装置８０１に示すように、一般的な半導体装置の構成に特別な回路を追加することなく、プログラムをＲＯＭ１０５に組み込むことによって、一実施形態のアドレスバイト数判定方法を実施することが可能になる。
【００８４】
さらに、上述の例において、プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access Memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００８５】
上記各実施形態で説明したように、一実施形態のアドレスバイト数判定装置及び方法は、次の処理を実行する。
ＳＰＩに準拠した不揮発性シリアルメモリのアドレスバイト数の判定方法であって、想定される最大のアドレスバイト数を仮定して、第１アドレスからシリアルメモリの読み出しサイクルを開始し、少なくとも１回のデータ変化を含む第１データ列（第１のバイト列データ）を取得すること。想定される最大のアドレスバイト数を仮定して、第１アドレスの特定ビットを反転して得られる第２アドレスからシリアルメモリの読み出しサイクルを開始し、少なくとも１回のデータ変化を含む第２データ列（第２のバイト列データ）を取得すること。第１データ列と第２データ列を比較すること。比較結果が一致する場合には、特定ビットを含むアドレス部位が有効であると判断し、一致しない場合には、特定ビットを含むアドレス部位が無効であると判断すること。
このような各処理を実行することにより、シリアルメモリに判定用データを書き込むことなく、シリアルメモリのアドレスバイト数を判定する。これにより、書き換え不能な不揮発性シリアルメモリに対するアドレスバイト数の自動判定が可能となる。
【００８６】
以上、本発明者によってなされた発明を実施形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【００８７】
１０１    シリアルメモリ
１０２、４０１、８０１    半導体装置
１０３    クロック生成モジュール
１０４    ＣＰＵ
１０５    ＲＯＭ
１０６    ＲＡＭ
１０７    汎用入出力ポート
１０８    アドレスバイト数検出モジュール
１０９    クロックド・シリアル・インタフェース・モジュール
１１０    ＳＰＩ信号切り替えモジュール
２０１    シリアル転送クロック生成モジュール
２０２    シーケンス制御モジュール
２０３    バイト選択モジュール
２０４    ビット反転制御モジュール
２０５    パラレル／シリアル変換モジュール
２０６    ＡＮＤゲート
２０７    シリアル／パラレル変換モジュール
２０８、２０９、２１０、２１１    １バイト・レジスタ
２１２、２１３    カウンタ
２１４、２１５，２１６，２１７，２１８    比較器
２１９    ＡＮＤゲート
３０１，３０２，３０３    セレクタ
３０４、３０５    バッファ
４０２    ＳＰＩメモリ・コントローラ・モジュール
４０３    インバータ
Ｎ１０１  シリアルメモリ用デバイス選択信号
Ｎ１０２  シリアルメモリ用クロック信号
Ｎ１０３  シリアルメモリ用データ入力信号
Ｎ１０４  シリアルメモリ用データ出力信号
Ｎ１０５  アドレスバイト数検出用デバイス選択信号
Ｎ１０６  アドレスバイト数検出用クロック信号
Ｎ１０７  アドレスバイト数検出用データ入力信号
Ｎ１０８  アドレスバイト数検出用データ出力信号
Ｎ１０９  ＳＰＩ入出力用デバイス選択信号
Ｎ１１０  ＳＰＩ入出力用クロック信号
Ｎ１１１  ＳＰＩ入出力用データ入力信号
Ｎ１１２  ＳＰＩ入出力用データ出力信号
Ｎ１１３  アドレスバイト数検出完了信号
Ｎ１１４  アドレスバイト数検出結果信号
Ｎ１１５  システムバス
Ｎ１１６  バスのクロック信号
Ｎ１１７  バスのリセット信号
Ｎ２０１  シリアル転送クロック信号
Ｎ２０２  アドレスバイト数検出用アドレス信号
Ｎ２０３  アドレスバイト数検出用命令コード
Ｎ２０４  出力バイトデータ選択信号
Ｎ２０５  出力バイトデータ
Ｎ２０６  ビット反転制御信号
Ｎ２０７  ビット反転制御済みアドレス
Ｎ２０８  データ更新制御信号
Ｎ２０９  クロック出力許可信号
Ｎ２１０  受信データ
Ｎ２１１  受信データキャプチャ制御信号
Ｎ２１２  受信データキャプチャ制御信号
Ｎ２１３  受信データキャプチャ制御信号
Ｎ２１４  受信データキャプチャ制御信号
Ｎ２１５  キャプチャ済み受信データ
Ｎ２１６  キャプチャ済み受信データ
Ｎ２１７  キャプチャ済み受信データ
Ｎ２１８  キャプチャ済み受信データ
Ｎ２１９  カウンタ初期化信号
Ｎ２２０  カウントクロック
Ｎ２２１  カウンタ初期化信号
Ｎ２２２  カウントクロック
Ｎ２２３  カウント結果
Ｎ２２４  カウント結果
Ｎ２２５、Ｎ２２６、Ｎ２２７、Ｎ２２８、Ｎ２２９  比較結果出力信号
Ｎ２３０  比較結果出力信号
Ｎ４０１  ＳＰＩ入出力用デバイス選択信号
Ｎ４０２  ＳＰＩ入出力用クロック信号
Ｎ４０３  ＳＰＩ入出力用データ入力信号
Ｎ４０４  ＳＰＩ入出力用データ出力信号
Ｎ４０５  ホールド要求信号
【図１】
2013175014.tif 000003
【図２】
2013175014.tif 000004
【図３】
2013175014.tif 000005
【図４】
2013175014.tif 000006
【図５】
2013175014.tif 000007
【図６】
2013175014.tif 000008
【図７】
2013175014.tif 000009
【図８Ａ】
2013175014.tif 000010
【図８Ｂ】
2013175014.tif 000011
【図９Ａ】
2013175014.tif 000012
【図９Ｂ】
2013175014.tif 000013
【図１０Ａ】
2013175014.tif 000014
【図１０Ｂ】
2013175014.tif 000015
【図１１】
2013175014.tif 000016
【図１２】
2013175014.tif 000017
【図１３】
2013175014.tif 000018
【図１４】
2013175014.tif 000019
【図１５Ａ】
2013175014.tif 000020
【図１５Ｂ】
2013175014.tif 000021
【図１６Ａ】
2013175014.tif 000022
【図１６Ｂ】
2013175014.tif 000023
【図１６Ｃ】
2013175014.tif 000024
【図１７Ａ】
2013175014.tif 000025
【図１７Ｂ】
2013175014.tif 000026
【図１７Ｃ】
2013175014.tif 000027
【図１７Ｄ】
2013175014.tif 000028
【図１８Ａ】
2013175014.tif 000029
【図１８Ｂ】
2013175014.tif 000030
【図１８Ｃ】
2013175014.tif 000031
【図１８Ｄ】
2013175014.tif 000032
【図１９】
2013175014.tif 000033
【図２０】
2013175014.tif 000034
【図２１】
2013175014.tif 000035
【図２２Ａ】
2013175014.tif 000036
【図２２Ｂ】
2013175014.tif 000037
【図２３Ａ】
2013175014.tif 000038
【図２３Ｂ】
2013175014.tif 000039