(57)【要約】【課題】簡単で低コストなハードウェア構成で、且つ、ハードウェアの回路構成を変更せずにステートマシンの制御内容を任意に変更する。【解決手段】クロック同期型メモリ３０を用い、このメモリ３０の各アドレスにムーア型ステートマシン２０の状態Sを表すデータを格納しておく。そして、ステートマシン２０に対する入力信号in[j-1:0]と、メモリ３０のリードデータrdata[m:0]の中の状態Sを表すデータrdata[m:k]とを組み合わせて、セレクタ２１を介してメモリ３０のアドレスに入力することで、クロック信号clkに同期して状態Sを変化させながら動作するムーア型ステートマシン２０として振る舞わせる。【選択図】図１
2009145957.tif 000002
【特許請求の範囲】
【請求項１】
ライトアドレスを入力すると共に、下位ビット又は上位ビットからなるステートマシンに対する入力信号と、前記入力信号に対して異なる位置のビットにより構成され、前記ステートマシンの現在の状態を表す第１のデータとが組み合わされた第１の信号を入力し、第１及び第２の論理レベルに遷移するライトイネーブル信号が前記第１の論理レベルの時には前記ライトアドレスを選択し、前記ライトイネーブル信号が前記第２の論理レベルの時には前記第１の信号を選択するセレクタと、
複数番地からなる記憶領域を有し、前記ライトイネーブル信号が前記第１の論理レベルの時に、クロック信号に同期してライトデータを取り込んで前記記憶領域の各番地に、前記ステートマシンの次の状態を表す第２のデータと、前記ステートマシンの出力信号を表す第３のデータとを格納し、前記ライトイネーブル信号が前記第２の論理レベルの時に、前記クロック信号に同期して前記クロック信号の１周期内に、前記セレクタにより選択された前記第１の信号により指定される前記記憶領域の番地から、前記第２及び第３のデータを有するリードデータを読み出し、前記リードデータ中の前記第２のデータを前記第１のデータとして前記セレクタへ与えると共に、前記第３のデータを前記ステートマシンの出力信号として外部に出力するクロック同期型メモリとを備えたことを特徴とするステートマシン。
【請求項２】
ライトアドレスを入力すると共に、下位ビット又は上位ビットからなるステートマシンに対する入力信号と、前記入力信号に対して異なる位置のビットにより構成され、前記ステートマシンの現在の状態を表す第１のデータとが組み合わされた第１の信号を入力し、第１及び第２の論理レベルに遷移する第１のライトイネーブル信号が前記第１の論理レベルの時には前記ライトアドレスを選択し、前記第１のライトイネーブル信号が前記第２の論理レベルの時には前記第１の信号を選択する第１のセレクタと、
複数番地からなる第１の記憶領域を有し、前記第１のライトイネーブル信号が前記第１の論理レベルの時に、クロック信号に同期して第１のライトデータを取り込んで前記第１の記憶領域の各番地に、前記ステートマシンの次の状態を表す第２のデータを格納し、前記第１のライトイネーブル信号が前記第２の論理レベルの時に、前記クロック信号に同期して前記クロック信号の１周期内に、前記第１のセレクタにより選択された前記第１の信号により指定される前記第１の記憶領域の番地から、前記第２のデータを読み出して前記第１のデータとして前記第１のセレクタへ与えるクロック同期型メモリと、
前記ライトアドレスを入力すると共に、前記ステートマシンに対する前記入力信号と前記第２のデータとが組み合わされた第２の信号を入力し、第１及び第２の論理レベルに遷移する第２のライトイネーブル信号が前記第１の論理レベルの時には前記ライトアドレスを選択し、前記第２のライトイネーブル信号が前記第２の論理レベルの時には前記第２の信号を選択する第２のセレクトと、
複数番地からなる第２の記憶領域を有し、第１及び第２の論理レベルに遷移する第３のライトイネーブル信号が前記第１の論理レベルの時に、第２のライトデータを取り込んで前記第２の記憶領域の各番地に、前記ステートマシンの出力信号を表す第３のデータを格納し、前記第２のライトイネーブル信号が前記第２の論理レベルの時に、前記第２のセレクタにより選択された前記第２の信号により指定される前記第２の記憶領域の番地から、前記第３のデータを読み出して前記ステートマシンの出力信号として外部に出力する非同期型メモリとを備えたことを特徴とするステートマシン。
【請求項３】
請求項１又は２記載のステートマシンと、
前記ステートマシンの出力により制御され、前記クロック信号に同期して所定の処理を行う被制御回路とを備えたことを特徴とする半導体集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ステートマシンと、このステートマシンにより制御される半導体集積回路に関するものである。
【背景技術】
【０００２】
半導体集積回路を制御する手段として、ステートマシンを使って制御することが一般的である。ステートマシンとは、有限オートマトンを回路で実現したものであり、単位時間毎に、入力信号によって状態を変化（遷移）させながら、出力信号を生成する回路である。入力信号、状態、及び、出力信号は、一般的には多ビットである。
【０００３】
従来、この種のステートマシンに関する技術としては、例えば、次のような文献等に記載されるものがあった。
【０００４】
【特許文献１】国際公開ＷＯ０１／０６１４６４号公報
【特許文献２】特開平１１−５３２１６号公報（特許第３０６３６９４号公報）
【特許文献３】特開平１０−３３３８８１号公報（特許第３１８９８７５号公報）
【０００５】
特許文献１には、記憶回路、比較回路、解析回路及び演算回路からなるステートマシン、並びにこれを用いた半導体デバイス及びその設計方法の技術が記載されている。
【０００６】
特許文献２には、次のステート番号及びそのステートで出力すべき出力信号からなる状態遷移情報を格納するレジスタ群と、現在のステート番号及び入力信号を入力し前記レジスタ群のうちの次にステート番号の状態遷移情報を格納するレジスタを選択するセレクト信号を出力する組み合わせ論理回路と、前記組み合わせ論理回路からのセレクト信号に基づいて前記レジスタ群のうちの１つのレジスタを選択し、その状態遷移情報を出力するセレクタと、外部からの前記レジスタ群のレジスタに状態遷移情報を書き込む書き込み手段とを備え、外部から前記レジスタ群のうちの１つ以上のレジスタに状態遷移情報を書き込むことによりインプリメントされる状態遷移を変更できるステートマシン制御回路の技術が記載されている。
【０００７】
特許文献３には、現在の状態である現ステートから次の状態である次ステートを算出する次ステートロジック部と、前記現ステートを保持するための少なくとも１つの現ステート保持レジスタを備え、前記次ステートロジック部から出力される次ステートをクロックに同期して新たな現ステートとして保持する現ステート保持部とを有するステートマシンにおいて、前記現ステートと前記次ステートとを比較し、前記現ステートと前記次ステートとが一致したとき、前記現ステート保持部レジスタに対する前記クロックの供給を停止する比較部を有するステートマシンの技術が記載されている。
【０００８】
図１３（ａ）、（ｂ）は、従来の特許文献１〜３等に記載されたステートマシンの原理を説明するための構成及び動作を示す図である。
【０００９】
ステートマシン１は、「現在の状態」（状態state)と「現在の入力」（入力信号in)によって「次の状態」が決まる。そこで、「次の状態」を、「現在の状態」と「現在の入力」から求められる関数とみなすことができる。この時の関数をfunc1(状態、入力)とする。
【００１０】
ステートマシン１の出力信号outの生成方式は２通りあり、「現在の状態」のみによって「現在の出力」が決まるものをムーア型ステートマシンと呼び、「現在の状態」と「現在の入力」によって「現在の出力」が決まるものをミーリ型ステートマシンと呼ぶ。そこで、「現在の出力」を、「現在の状態」や「現在の入力」から求められる関数とみなすことができる。この時の関数を、ムーア型ステートマシンの場合はfunc2(状態)、ミーリ型ステートマシンの場合はfunc2(状態、入力)とする。
【００１１】
図１４は、従来のムーア型ステートマシンの原理を示す構成図である。
ムーア型ステートマシン２は、入力信号inと現在の状態とから次の状態を求める関数func1を実現するための組み合わせ回路からなる演算回路Ｃ１と、この演算回路Ｃ１から出力される次の状態を保持する記憶素子Ｓと、この記憶素子Ｓから出力される現在の状態から現在の出力を求める関数func2を実現するための組み合わせ回路からなる演算回路Ｃ２とにより構成されている。
【００１２】
図１５は、従来のミーリ型ステートマシンの原理を示す構成図である。
ミーリ型ステートマシン３は、入力信号inと現在の状態とから次の状態を求める関数func1を実現するための組み合わせ回路からなる演算回路Ｃ１と、この演算回路Ｃ１から出力される次の状態を保持する記憶素子Ｓと、この記憶素子Ｓから出力される現在の状態と入力信号inから現在の出力を求める関数func２を実現するための組み合わせ回路からなる演算回路Ｃ２とにより構成されている。
【００１３】
図１６は、従来のステートマシンを有する半導体集積回路の原理を示す構成図である。
この図１６には、半導体集積回路１０をステートマシン１で制御する際の一般的な構成が示されている。ここで想定している半導体集積回路１０は、クロック信号clkの立ち上がりエッジ（＝立ち上がりのタイミング）に同期して動作するものとする。即ち、半導体集積回路１０に対する入力信号in、及び、半導体集積回路内の全ての要素（ステートマシン１の状態stateや制御信号cs、半導体集積回路１０の出力信号out）がクロック信号clkの立ち上がりエッジから、ある遅延時間後に変化するものとする。
【００１４】
図１７は、図１６の半導体集積回路１０における動作を示すタイミングチャートである。
この図１７において、ＰＤは、被制御回路１１が制御信号csを利用できる期間である。ステートマシン１の状態stateや出力信号out（即ち、制御対象に対する制御信号cs）が変化するタイミングは、信号の伝播遅延等の影響でクロック信号clkの立ち上がりエッジから少し遅れて変化する。被制御回路１１が、ステートマシン１からの制御信号csを使ってクロック信号clkの次の立ち上がりエッジまでに機能に応じた演算処理を行い、出力信号outを生成するものとすると、ステートマシン１から出力される制御信号csはなるべく速く変化するのが望ましい。
【発明の開示】
【発明が解決しようとする課題】
【００１５】
しかしながら、従来のステートマシン１では、次のような課題があった。
図１６に示すように、ステートマシン１を使って半導体集積回路１０を制御する場合、通常、半導体集積回路１０の内部構造は固定したものになるので、その中のステートマシン１の制御内容を変更したり修正するときには、ハードウェアを設計し直すことになる。例えば、大規模集積回路（以下「LSI」という。）ならば、設計から製造までの工程をやり直さなければいけない。プログラムすることができるLSI(Field  Programmable  Gate  Array、以下「FPGA」という。）を用いれば、ハードウェアの回路構成を変更することができるが、FPGAはそのために複雑な構造をしており、コストも高く、変更作業に数分〜数時間掛かり、回路構成を変更するために専用のツールが必要になる場合もある。
【００１６】
又、特許文献２に記載されたステートマシン制御回路では、レジスタ群に格納された状態遷移情報を書き換えることで、制御内容を変更できるようになっているが、現在のステート番号及び入力信号を入力して、次のステート番号の状態遷移情報を格納するレジスタを選択するためのセレクト信号を出力する機能を有する組み合わせ論理回路等が、ハードウェアで構成されているので、制御内容の変更も一定の範囲内に制限される。
【００１７】
従って、従来の技術では、簡単で低コストなハードウェア構成で、且つ、ハードウェアの回路構成を変更せずにステートマシンの制御内容を任意に変更することが困難であった。
【課題を解決するための手段】
【００１８】
本発明のステートマシンでは、セレクタとクロック同期型メモリとを用いて、ムーア型ステートマシンを実現している。
【００１９】
ここで、前記セレクタは、ライトアドレス（書き込みアドレス）を入力すると共に、下位ビット又は上位ビットからなる前記ステートマシンに対する入力信号と、前記入力信号に対して異なる位置のビットにより構成され、前記ステートマシンの現在の状態を表す第１のデータとが組み合わされた第１の信号を入力し、第１及び第２の論理レベルに遷移するライトイネーブル信号が前記第１の論理レベルの時には前記ライトアドレスを選択し、前記ライトイネーブル信号が前記第２の論理レベルの時には前記第１の信号を選択するものである。
【００２０】
前記クロック同期型メモリは、複数の番地（アドレス）からなる記憶領域を有し、前記ライトイネーブル信号が前記第１の論理レベルの時に、クロック信号に同期してライトデータを取り込んで前記記憶領域の各アドレスに、前記ステートマシンの次の状態を表す第２のデータと、前記ステートマシンの出力信号を表す第３のデータとを格納し、前記ライトイネーブル信号が前記第２の論理レベルの時に、前記クロック信号に同期して前記クロック信号の１周期内に、前記セレクタにより選択された前記第１の信号により指定される前記記憶領域のアドレスから、前記第２及び第３のデータを有するリードデータを読み出し（リードし）、前記リードデータ中の前記第２のデータを前記第１のデータとして前記セレクタへ与えると共に、前記第３のデータを前記ステートマシンの出力信号として外部に出力するメモリである。
【００２１】
本発明の他のステートマシンでは、第１のセレクタと、クロック同期型メモリと、第２のセレクタと、非同期型メモリとを用いて、ミーリ型ステートマシンを実現している。
【００２２】
ここで、前記第１のセレクタは、ライトアドレスを入力すると共に、下位ビット又は上位ビットからなる前記ステートマシンに対する入力信号と、前記入力信号に対して異なる位置のビットにより構成され、ステートマシンの現在の状態を表す第１のデータとが組み合わされた第１の信号を入力し、第１及び第２の論理レベルに遷移する第１のライトイネーブル信号が前記第１の論理レベルの時には前記ライトアドレスを選択し、前記第１のライトイネーブル信号が前記第２の論理レベルの時には前記第１の信号を選択するものである。
【００２３】
前記クロック同期型メモリは、複数のアドレスからなる第１の記憶領域を有し、前記第１のライトイネーブル信号が前記第１の論理レベルの時に、クロック信号に同期して第１のライトデータを取り込んで前記第１の記憶領域の各アドレスに、前記ステートマシンの次の状態を表す第２のデータを格納し、前記第１のライトイネーブル信号が前記第２の論理レベルの時に、前記クロック信号に同期して前記クロック信号の１周期内に、前記第１のセレクタにより選択された前記第１の信号により指定される前記第１の記憶領域のアドレスから、前記第２のデータをリードして前記第１のデータとして前記第１のセレクタへ与えるメモリである。
【００２４】
前記第２のセレクタは、前記ライトアドレスを入力すると共に、前記入力信号と前記第２のデータとが組み合わされた第２の信号を入力し、第１及び第２の論理レベルに遷移する第２のライトイネーブル信号が前記第１の論理レベルの時には前記ライトアドレスを選択し、前記第２のライトイネーブル信号が前記第２の論理レベルの時には前記第２の信号を選択するものある。
【００２５】
前記非同期型メモリは、複数アドレスからなる第２の記憶領域を有し、第１及び第２の論理レベルに遷移する第３のライトイネーブル信号が前記第１の論理レベルの時に、第２のライトデータを取り込んで前記第２の記憶領域の各アドレスに、前記ステートマシンの現在の出力信号を表す第３のデータを格納し、前記第２のライトイネーブル信号が前記第２の論理レベルの時に、前記第２のセレクタにより選択された前記第２の信号により指定される前記第２の記憶領域のアドレスから、前記第３のデータをリードして前記ステートマシンの出力信号として外部に出力するメモリである。
【００２６】
本発明の半導体集積回路では、前記発明のステートマシンと、前記ステートマシンの出力により制御され、前記クロック信号に同期して所定の処理を行う被制御回路とを備えている。
【発明の効果】
【００２７】
本発明のステートマシンによれば、クロック同期型メモリの各アドレスにステートマシンの状態を表すデータを格納しておき、ステートマシンに対する入力信号と、そのクロック同期型メモリのリードデータ中の状態を表すデータとを組み合わせて、そのクロック同期型メモリのアドレスに入力することで、クロック信号に同期して状態を変化させながら動作するステートマシンとして振る舞わせる構成にしたので、簡単で低コストなハードウェア構成で、且つ、ハードウェアの回路構成を変更せずにステートマシンの制御内容を任意に変更することが可能なムーア型ステートマシンやミーリ型ステートマシンを提供できる。
【００２８】
本発明の半導体集積回路によれば、ステートマシン内のメモリの内容を半導体集積回路の外部、更には、半導体集積回路を組み込んだ製品の外部から書き換えて、ステートマシンの制御内容を変更することにより、その制御内容に対するハードウェアレベルの変更を容易に行うことが可能になる。
【発明を実施するための最良の形態】
【００２９】
ステートマシンは、クロック同期型メモリを備え、このメモリの各アドレスにステートマシンの状態を表すデータを格納しておき、ステートマシンに対する入力信号と、そのメモリのリードデータ中の状態を表すデータとを組み合わせて、そのメモリのアドレスに入力することで、クロック信号に同期して状態を変化させながら動作するムーア型ステートマシンとして振る舞わせることができる。
【実施例１】
【００３０】
（実施例１の構成）
図１は、本発明の実施例１を示すものであってクロック同期型メモリを使用して実現されたムーア型ステートマシンの概略の構成図である。
【００３１】
このムーア型ステートマシン２０は、jビット（bit)の入力信号in[j-1:0]を入力してkビットの出力信号out[k-1:0]を出力するものであり、アドレス信号addr[n:0]を選択して出力するセレクタ２１と、そのアドレス信号addr[n:0]により指定されたアドレス（番地）に対してデータのライト（書き込み）及びリード（読み出し）が行われるクロック同期型メモリ３０等とにより、構成されている。
【００３２】
セレクタ２１は、クロック同期型メモリ３０に対するn+1ビット（bit)のライトアドレスwaddr[n:0]を入力すると共に、ステートマシン２０に対する下位ビット又は上位ビット（例えば、下位のjビット）の入力信号in[j-1:0]と、クロック同期型メモリ３０からのリードデータrdata[m:0]のうちの例えば上位iビットのステートマシン状態を表す第１のデータrdata[m:k]と、が組み合わされた第１の信号INを入力し、第１の論理レベル（例えば、“１”）及び第２の論理レベル（例えば、“０”）に遷移するライトイネーブル信号weからなるアドレス選択信号が“１”の時には、ライトアドレスwaddr[n:0]を選択し、そのアドレス選択信号（we）が“０”の時には、第１の信号INを選択し、この選択結果であるアドレス信号addr[n:0]を出力してクロック同期型メモリ３０に与えるものである。
【００３３】
クロック同期型メモリ３０は、クロック信号clkのエッジ（例えば、立ち上がりエッジ）においてライトイネーブル信号weが“１”の時にライトモードになり、この時のn+1ビットのライトアドレスwaddr[n:0]が示すアドレスにライトデータwdata[m:0] を書き込み、クロック信号clkの立ち上がりエッジにおいてライトイネーブル信号weが“０”の時にリードモードになり、アドレス信号addr[n:0]を取り込み、そのクロック信号clkの立ち上がりエッジからある遅延時間（リードデータ出力遅延）後に、アドレス信号addr[n:0]で指定されたアドレスの記憶内容をリードデータrdata[m:0]として出力するものである。リードデータrdata[m:0]は、上位iビットの第１のデータrdata[m:k]がステートマシン２０の状態を表すデータであり、下位kビットの第２のデータrdata[k-1:0]がステートマシン２０の出力信号out[k-1:0]として出力される。
【００３４】
このクロック同期型メモリ３０に対するアドレス信号addr[n:0]は、前記セレクタ２１により、ライトイネーブル信号weが“１”の時（即ち、ライト時）は、ライトデータwaddr[n:0]が入力されるように、又、ライトイネーブル信号weが“０”の時（即ち、リード時）は、上位のiビットが第１のデータrdata[m:k]であり、下位のjビットが入力信号in[j-1:0]であるような第１の信号INが入力されるように、ライトイネーブル信号weにより選択される。
【００３５】
図２は、図１中のクロック同期型メモリ３０を示す概略の構成図である。
クロック同期型メモリ３０は、クロック信号clkの立ち上がりエッジに同期してこのクロック信号clkの１周期内にリードデータrdata[m:0]を読み出すことができる半導体メモリ等により構成されている。このクロック同期型メモリ３０は、例えば、セレクタ２１から与えられるアドレス信号addr[n:0]をクロック信号clkの立ち上がりエッジに同期してデコードするアドレスデコーダ３１を有し、この出力側に、複数のアドレス２（ｎ＋１）を有する記憶領域３２が接続されている。記憶領域３２は、データのリード及びライト可能な複数のスタティック型ランダム・アクセス・メモリ・セル（以下「SRAMセル」という。）を有するメモリセルアレイや、或いは、複数のレジスタ等により構成されている。各アドレスには、ステートマシン状態を表す上位iビットの第１のデータrdata[m:k]と、ステートマシン出力信号を表す下位kビットの第２のデータrdda[k-1:0]とが格納される。この記憶領域３２には、入／出力回路３３が接続されている。入／出力回路３３は、ライトイネーブル信号weが“１”の時に、クロック信号clkの立ち上がりエッジに同期してライトデータ(wdata[m:0]を入力して記憶領域３２へ与え、ライトイネーブル信号weが“０”の時に、クロック信号clkの立ち上がりエッジに同期して記憶領域３２からのリードデータrdata[m:0]を出力する回路である。
【００３６】
図３は、図２のクロック同期型メモリ３０に対するアドレス信号addr[n:0]を示す概略の構成図である。
【００３７】
アドレス信号addr[n:0]は、ステートマシン２０の現在の状態を示す上位iビット（bit）のデータ[n:j]と、ステートマシン２０に対する現在の入力を示す下位jビット（bit)のデータ[j-1:0]とにより、構成されている。
【００３８】
図４は、図２のクロック同期型メモリ３０のリードデータrdata[m:0]を示す概略の構成図である。
【００３９】
リードデータrdata[m:0]は、ステートマシン２０の次の状態を示す上位iビット(bit)のデータ[m:k]と、ステートマシン２０の次の状態における出力を示す下位kビット（bit)のデータ[k-1:0]とにより、構成されている。
【００４０】
（実施例１の動作）
本実施例１のムーア型ステートマシン２０では、以下のようなクロック同期型メモリ３０に対するライト動作（１）と、リード動作であるステートマシンの動作（２）とが行われる。
【００４１】
（１）  メモリ３０に対するライト動作
図５は、図１中のメモリ３０に対するライト動作を示すタイミングチャートである。
図５において、クロック信号clkの立ち上がりエッジの時刻t1,t2,t3,・・・は、メモリ３０のサンプルタイミングである。ライトアドレスwaddr[n:0]である｛S1,I1｝，｛S2，I2｝，｛S3,I3｝，・・・中のS1,S2,S3,・・・は、実現したいムーア型ステートマシン２０の各状態を示し、I1,I2,I3,・・・は、その各入力信号を示す。ライトデータwdata[m:0] であるWDATA1,WDATA2,WDATA3,・・・は、関数func1,func2により次式（１）のように表される。
WDATA1={func1(S1,I1),func2(func1(S1,I1))}
WDATA2={func1(S2,I2),func2(func1(S2,I2))}
WDATA3={func1(S3,I3),func2(func1(S3,I3))}
・・・（１）
【００４２】
予め計算された式（１）のライトデータwdata[m:0]は、以下の手順でメモリ３０の各アドレスにライトされる。
【００４３】
図１のムーア型ステートマシン２０において、ライトイネーブル信号weが“１”になってメモリ３０がライトモードになり、セレクタ２１がライトアドレスwaddr[n:0]側に切り替わる。クロック信号clkの立ち上がりエッジのサンプルタイミング時刻t1,t2,t3,・・・に同期して、ライトアドレスwaddr[n:0]及びライトデータwdata[m:0]がステートマシン２０に入力される。入力されたライトアドレスwaddr[n:0]は、セレクタ２１で選択され、この選択結果であるアドレス信号addr[n:0]がメモリ３０に入力される。
【００４４】
図２のメモリ３０において、入力されたアドレスwaddr[n:0]は、アドレスデコーダ３１によりデコードされ、このデコード結果により記憶領域３２のアドレスが指定される。入力されたライトデータwdata[m:0]は、入／出力回路３３により取り込まれ、記憶領域３２における指定されたアドレスへライトされる。この際、実現したいステートマシン２０の各状態S、及び、各入力信号Iの全ての組み合わせについて、メモリ３０における記憶領域３２の{S,I}アドレスに{func1(S,I),func2(func1(S,I))}という値がライトされる。func1は「現在の状態」と「現在の入力」から「次の状態」を決めるための関数であり、func2は「現在の状態」から「現在の出力」を決めるための関数である。ライトする値は、予め計算されている。
【００４５】
（２）  メモリ３０のリード動作（ステートマシンの動作）
図６は、図１中のメモリ３０のリード動作であるステートマシンの動作を示すタイミングチャートである。
【００４６】
図６において、t11,t12,t13,・・・はクロック信号clkの立ち上がりエッジの時刻、Tはクロック信号clkの１周期である。入力信号in[j-1:0]であるアドレス信号addr[j-1:0]におけるI1,I2,I3，・・・は、ムーア型ステートマシン２０の各入力を示し、アドレス信号addr[n:j]である上位iビットのリードデータrdata[m:k]におけるS1,S2,S3,・・・は、ステートマシン２０の各状態を示す。下位kビットのリードデータrdata[k-1:0]であるステートマシン２０の出力信号out[k-1:0]におけるO1,O2,O3,・・・は、各出力を示す。DLは、クロック信号clkの立ち上がりエッジの時刻t11,・・・からのメモリ３０の出力遅延時間である。
【００４７】
各状態S2,S3,・・・と各出力O1,O2,O3,・・・は、関数func1,func2により次式（２）のように表される。
S2=func1(S1,I1)    O1=func2(S1)
S3=func1(S2,I2)    O2=func2(S2)
O3=func2(S3)
・・・（２）
【００４８】
前記（１）のライト動作によってメモリ３０の内容が設定されると、以下の手順で、メモリ３０のアドレスに「現在の状態」と「現在の入力」を入力することにより、次のサイクルにおいて、「次の状態」と「次の状態における出力」がメモリ３０からリードされる。
【００４９】
図１のムーア型ステートマシン２０において、メモリ３０に対するライト動作が完了した後、ライトイネーブル信号weを“０”にすると、メモリ３０がリードモードになり、セレクタ２１が第１の信号IN側に切り替わる。クロック信号clkと入力信号in[j-1:0]をステートマシン２０に入力すれば、クロック信号clkの立ち上がりエッジの時刻t11,t12,t13,・・・に同期して、その下位jビットの入力信号in[j-1:0]と上位iビットのリードデータrdata[m:k]とが組み合わされた第１の信号INがセレクタ２１で選択され、この選択結果であるアドレス信号addr[n:0]がメモリ３０に入力される。
【００５０】
図２のメモリ３０において、入力されたアドレスaddr[n:0]は、アドレスデコーダ３１によりデコードされ、このデコード結果により記憶領域３２のアドレスが指定され、この指定されたアドレスから、クロック信号clkの立ち上がりエッジの時刻t11,t12,t13,・・・毎に、リードデータrdata[m:0]（即ち、ステートマシン２０の状態S2,S3,・・・と出力O2,O3,・・・）がリードされ、入／出力回路３３から出力される。出力されたリードデータrdata[m:0]のうち、上位iビットのリードデータrdata[m:k]は、ステートマシン２０の状態S2,S3,・・・を表すデータであり、セレクタ２１へ帰還入力され、下位kビットのリードデータ[k-1:0]は、ステートマシン２０の出力O2,O3,・・・を表すデータであり、出力信号out[k-1:0]として外部へ出力される。この際、メモリ３０に対してはリードを繰り返しているだけであり、このリードの繰り返しにより、「次の状態」と「次の状態における出力」がメモリ３０から順次リードされて入／出力回路３３から出力される。
【００５１】
（実施例１の効果）
本実施例１によれば、クロック同期型メモリ３０を用い、このメモリ３０の各アドレスにムーア型ステートマシン２０の状態Sを表すデータを格納しておき、ステートマシン２０に対する入力信号in[j-1:0]と、メモリ３０のリードデータrdata[m:0]の中の状態Sを表すデータrdata[m:k]とを組み合わせて、メモリ３０のアドレスに入力することで、クロック信号clkに同期して状態Sを変化させながら動作するムーア型ステートマシン２０として振る舞わせる構成にしたので、次の（ａ）〜（ｃ）のような効果がある。
【００５２】
（ａ）  メモリ３０に書き込むデータを変更することで、同一のハードウェア構成で、ステートマシン２０の振る舞い（即ち、単位時間毎の状態Sと出力O）を変更することができる。ステートマシン２０の入力信号数、出力信号数、状態数は、ステートマシン２０の制御内容が複雑になるほど大きくなるが、メモリ３０のアドレス／リードデータ／ライトデータのビット数の大きいメモリを用いれば、複雑なステートマシン２０を実現できる。
【００５３】
（ｂ）  従来のステートマシンの場合、ステートマシンの制御内容（即ち、状態と出力信号を決めるための関数）の複雑さによってステートマシンの動作速度（即ち、クロック周波数）の上限値が変わるので、ステートマシンのクロック周波数の上限値を知るために、タイミング解析という作業が必要になる。これに対し、本実施例１では、メモリ３０のAC特性の１つであるリードデータ出力遅延（DL)によってクロック周波数の上限値が決まるので、ステートマシン２０の制御内容の複雑さに依存せず、予めクロック周波数の上限値を知ることができる。なお、メモリ３０へのライト動作は、通常はシステム起動時等に１回だけ行われるものなので、ライト時間に時間が掛かったとしても問題にはならない。
【００５４】
（ｃ）  前記（ａ）及び（ｂ）により、簡単で低コストなハードウェア構成で、且つ、ハードウェアの回路構成を変更せずにステートマシンの制御内容を任意に変更することが可能なムーア型ステートマシン２０を提供できる。
【実施例２】
【００５５】
（実施例２の構成）
図７は、本発明の実施例２を示すものであってクロック同期型メモリ及び非同期型メモリを使用して実現されたミーリ型ステートマシンの概略の構成図であり、実施例１を示す図１中の要素と共通の要素には共通の符号が付されている。
【００５６】
このミーリ型ステートマシン２０Ａは、jビットの入力信号in[j-1:0]を入力してkビットの出力信号out[k-1:0]を出力するものであり、第１のアドレス信号addr1[n:0]を選択して出力する第１のセレクタ２１と、その第１のアドレス信号addr1[n:0]により指定されたアドレスに対してデータのライト及びリードが行われるクロック同期型メモリ３０Aと、このクロック同期型メモリ３０Ａの出力側に接続され、第２のアドレス信号addr2[n:0]を選択して出力する第２のセレクタ２２と、その第２のアドレス信号addr2[n:0]により指定されたアドレスに対してデータのライト及びリードが行われる非同期型メモリ４０等とにより、構成されている。
【００５７】
第１のセレクタ２１は、実施例１と同様に、クロック同期型メモリ３０Ａに対するn+1ビットのライトアドレスwaddr[n:0]を入力すると共に、ステートマシン２０Aに対する下位ビット又は上位ビット（例えば、下位のjビット）の入力信号in[j-1:0]と、メモリ３０Ａからのリードデータrdata1[i-1:0]である例えば上位iビットのステートマシンの現在の状態を表す第２のデータとが組み合わされた第１の信号IN1を入力し、第１の論理レベル（例えば、“１”）及び第２の論理レベル（例えば、“０”）に遷移する第１のライトイネーブル信号we1からなるアドレス選択信号が“１”の時には、ライトアドレスwaddr[n:0]を選択し、そのアドレス選択信号（we1）が“０”の時には、第１の信号IN1を選択し、この選択結果である第１のアドレス信号addr1[n:0]を出力してメモリ３０Aに与えるものである。
【００５８】
クロック同期型メモリ３０Ａは、実施例１のクロック同期型メモリ３０と同様に、複数のアドレスからなる第１の記憶領域を有し、クロック信号clkのエッジ（例えば、立ち上がりエッジ）において第１のライトイネーブル信号we1が“１”の時にライトモードになり、この時のn+1ビットのライトアドレスwaddr[n:0]が示す第１の記憶領域のアドレスにiビットの第１のライトデータwdata1[i-1:0] をライトし、クロック信号clkの立ち上がりエッジにおいて第１のライトイネーブル信号we1が“０”の時にリードモードになり、第１のアドレス信号addr1[n:0]を取り込み、そのクロック信号clkの立ち上がりエッジからある遅延時間（リードデータ出力遅延）後に、第１のアドレス信号addr1[n:0]で指定された第１の記憶領域中のアドレスの記憶内容をリードデータrdata1[i-1:0]として出力するものである。
【００５９】
このメモリ３０Ａに対する第１のアドレス信号addr1[n:0]は、前記第１のセレクタ２１により、第１のライトイネーブル信号we1が“１”の時（即ち、ライト時）は、第１のライトアドレスwaddr[i-1:0]が入力されるように、又、第１のライトイネーブル信号we1が“０”の時（即ち、リード時）は、上位のiビットが第２のデータrdata1[j-1:0]であり、下位のjビットが入力信号in[j-1:0]であるような第１の信号IN1が入力されるように、第１のライトイネーブル信号we1により選択される。
【００６０】
第２のセレクタ２２は、ライトアドレスwaddr[n:0]を入力すると共に、上位iビットの第２のデータrdata1[i-1:0]と下位jビットの入力信号in[j-1:0]とが組み合わされた第２の信号IN2を入力し、第１の論理レベル（例えば、“１”）及び第２の論理レベル（例えば、“０”）に遷移する第２のライトイネーブル信号we2が例えば“１”の時にはライトアドレスwaddr[n:0]を選択し、第２のライトイネーブル信号we2が例えば“０”の時には第２の信号IN2を選択し、この選択結果である第２のアドレス信号addr2[n:0]を出力して非同期型メモリ４０へ与えるものである。
【００６１】
非同期型メモリ４０は、クロック同期型メモリ３０Ａとほぼ同様に、複数アドレスからなる第２の記憶領域を有し、第１の論理レベル（例えば、“１”）及び第２の論理レベル（例えば、“０”）に遷移する第３のライトイネーブル信号we3が例えば“１”の時に、第２のライトデータwdata2[k-1:0]を取り込んで第２の記憶領域の各アドレスにステートマシンの現在の出力信号を表す第３のデータrdata2[k-1:0]を格納し、第２のライトイネーブル信号we2が“０”の時に、第２のセレクタ２２により選択された第２の信号IN2により指定される第２の記憶領域のアドレスから、ある遅延時間（リードデータ出力遅延）後に、第３のデータrdata2[k-1:0]をリードして出力信号out[k-1:0]として出力するものである。
【００６２】
本実施例２のクロック同期型メモリ３０Ａは、実施例１の図２に示すクロック同期型メモリ３０とほぼ同様に、SRAMや、或いは複数のレジスタ等により構成されている。又、非同期型メモリ４０は、例えば、図２において、クロック信号clkが削除され、アドレスデコーダ３１及び入／出力回路３３がクロック信号clkに対して非同期に動作するような構成になっている。
【００６３】
図８は、図７のクロック同期型メモリ３０Ａ及び非同期型メモリ４０に対する第１のアドレス信号addr1[n:0]及び第２のアドレス信号addr2[n:0]を示す概略の構成図である。
【００６４】
各アドレス信号addr1[n:0],addr2[n:0]は、ステートマシン２０Ａの現在の状態を示す上位iビットのデータ[n:j]と、ステートマシン２０Ａに対する現在の入力を示す下位jビットのデータ[j-1:0]とにより、構成されている。
【００６５】
（実施例２の動作）
本実施例２のミーリ型ステートマシン２０Ａでは、以下のようなクロック同期型メモリ３０Ａに対するライト動作（１）と、非同期型メモリ４０に対するライト動作（２）と、クロック同期型メモリ３０Ａ及び非同期型メモリ４０のリード動作であるステートマシンの動作（３）とが行われる。
【００６６】
（１）  メモリ３０Ａに対するライト動作
図９は、図７中のメモリ３０Ａに対するライト動作を示すタイミングチャートである。
図９において、クロック信号clkの立ち上がりエッジの時刻t1,t2,t3,・・・は、メモリ３０Ａのライトタイミングである。ライトアドレスwaddr[n:0]である｛S1,I1｝，｛S2，I2｝，｛S3,I3｝，・・・中のS1,S2,S3,・・・は、実現したいミーリ型ステートマシン２０Ａの各状態を示し、I1,I2,I3,・・・は、その各入力信号を示す。第１のライトデータwdata1[i-1:0]は、関数func1(S1,I1),func1(S2,I2),funcl(S3,I3),・・・により表される。
【００６７】
第１のライトデータwdata1[i-1:0]は、以下の手順でメモリ３０Ａの各アドレスにライトされる。
【００６８】
図７のミーリ型ステートマシン２０Ａにおいて、第１のライトイネーブル信号we1が“１”になってメモリ３０Ａがライトモードになり、第１のセレクタ２１がライトアドレスwaddr[n:0]側に切り替わる。クロック信号clkの立ち上がりエッジのライトタイミング時刻t1,t2,t3,・・・に同期して、ライトアドレスwaddr[n:0]及び第１のライトデータwdata1[i-1:0]がステートマシン２０Ａに入力される。入力されたライトアドレスwaddr[n:0]は、セレクタ２１で選択され、この選択結果である第１のアドレス信号addr1[n:0]がメモリ３０Ａに入力される。
【００６９】
メモリ３０Ａにおいて、入力された第１のアドレス信号addr1[n:0]により第１の記憶領域のアドレスが指定される。入力された第１のライトデータwdata1[i-1:0]は、第１の記憶領域における指定されたアドレスへライトされる。この際、実現したいステートマシン２０Ａの各状態S、及び、各入力信号Iの全ての組み合わせについて、メモリ３０Ａの{S,I}アドレスに関数func1(S,I)という値がライトされる。func1は「現在の状態」と「現在の入力」から「次の状態」を決めるための関数である。
【００７０】
（２）  メモリ４０に対するライト動作
図１０は、図７中のメモリ４０に対するライト動作を示すタイミングチャートである。
図１０において、第３のライトイネーブル信号we3の立ち上がりエッジの時刻t1,t2,t3,・・・は、メモリ４０のライトタイミングである。第２のライトデータwdata2[k-1:0]は、関数func2(S1,I1),func2(S2,I2),func3(S3,I3),・・・により表される。
【００７１】
第２のライトデータwdata2[k-1:0]は、以下の手順でメモリ４０の各アドレスにライトされる。
【００７２】
図７のミーリ型ステートマシン２０Ａにおいて、第２のライトイネーブル信号we2が“１”の時に、メモリ４０がライトモードになり、第２のセレクタ２２がライトアドレスwaddr[n:0]側に切り替わる。第３のライトイネーブル信号we3の立ち上がりエッジのライトタイミング時刻t1,t2,t3,・・・に同期して、ライトアドレスwaddr[n:0]及び第２のライトデータwdata2[k-1:0]がステートマシン２０Ａに入力される。入力されたライトアドレスwaddr[n:0]は、セレクタ２２で選択され、この選択結果である第２のアドレス信号addr2[n:0]がメモリ４０に入力される。
【００７３】
メモリ４０において、入力された第２のアドレス信号waddr2[n:0]により第２の記憶領域のアドレスが指定される。入力された第２のライトデータwdata2[k-1:0]は、第２の記憶領域における指定されたアドレスへライトされる。この際、実現したいミーリ型ステートマシン２０Ａの各状態S、及び、各入力信号Iの全ての組み合わせについて、メモリ４０の{S,I}アドレスに関数func2(S,I)という値がライトされる。func2は「現在の状態」と「現在の入力」から「現在の出力」を決めるための関数である。
【００７４】
（３）  メモリ３０Ａ及び４０のリード動作（ステートマシンの動作）
図１１は、図７中のメモリ３０Ａ及び４０のリード動作であるステートマシンの動作を示すタイミングチャートである。
【００７５】
図１１において、t11,t12,t13,・・・はクロック信号clkの立ち上がりエッジの時刻、Tはクロック信号clkの１周期である。入力信号in[j-1:0]であるアドレス信号addr1[j-1:0],addr2[j-1:0]におけるI1,I2,I3，・・・は、ミーリ型ステートマシン２０Ａの各入力を示し、アドレス信号addr1[n:j]であるリードデータrdata1[i-1:0]及びアドレス信号addr2[n:j]におけるS1,S2,S3,・・・は、ステートマシン２０Ａの各状態を示す。リードデータrdata2[k-1:0]である出力信号out[k-1:0]におけるO1,O2,O3,・・・は、ステートマシン２０Ａの各出力を示す。DL1は、クロック信号clkの立ち上がりエッジの時刻t11,・・・からのメモリ３０Aの出力遅延時間、DL2は、出力遅延時間DL1後からのメモリ４０の出力遅延時間である。
【００７６】
各状態S2,S3,・・・と各出力O1,O2,O3,・・・は、関数func1,func2により次式（３）のように表される。
S2=func1(S1,I1)    O1=func2(S1,I1)
S3=func1(S2,I2)    O2=func2(S2,I2)
O3=func2(S3,I3)
・・・（３）
【００７７】
前記（１）のライト動作によってメモリ３０Ａの内容が設定されると、以下の手順で、メモリ３０Ａのアドレスに「現在の状態」と「現在の入力」を入力することにより、次のサイクルにおいて、「次の状態」がメモリ３０Ａからリードされる。更に、前記（２）のライト動作によってメモリ４０の内容が設定されると、以下の手順で、メモリ４０のアドレスに「現在の状態」と「現在の入力」を入力することにより、メモリ４０のリードデータ出力遅延時間DL2後に「現在の出力」がメモリ４０からリードされる。
【００７８】
図７のミーリ型ステートマシン２０Ａにおいて、メモリ３０Ａとメモリ４０に対するライト動作が完了した後、第１、第２のライトイネーブル信号we1,we2を“０”、第３のライトイネーブル信号we3を“１”にすると、メモリ３０Ａ及び４０がリードモードになり、第１のセレクタ２１が第１の信号IN1側に切り替わり、第２のセレクタ２２が第２の信号IN2側に切り替わる。
【００７９】
クロック信号clkと入力信号in[j-1:0]をステートマシン２０Ａに入力すれば、クロック信号clkの立ち上がりエッジ毎に、入力信号in[j-1:0]とリードデータrdada1[i-1:0]とが組み合わされた第１の信号IN1が第１のセレクタ２１で選択され、この選択結果である第１のアドレス信号addr1[n:0]がメモリ３０Ａに入力され、このメモリ３０Ａからステートマシンの状態S1,S2,S3，・・・がリードされる。この状態S1,S2,S3，・・・と入力信号in[j-1:0]とが組み合わされた第２の信号IN2が、第２のセレクタ２２で選択され、この選択結果である第２のアドレス信号addr2[n:0]がメモリ４０に入力され、このメモリ４０からステートマシンの出力O1,O2,O3，・・・がリードされる。この時、メモリ３０Ａとメモリ４０に対しては、リードを繰り返しているだけであり、このリードの繰り返しにより、「現在の出力」がメモリ４０から順次リードされてステートマシンの出力信号out[k-1:0]として出力される。
【００８０】
（実施例２の効果）
本実施例２によれば、クロック同期型メモリ３０Ａと非同期型メモリ４０を用いて、クロック信号clkに同期して状態Sを変化させながら動作するミーリ型ステートマシン２０Ａとして振る舞わせる構成にしたので、実施例１とほぼ同様の効果がある。
【実施例３】
【００８１】
図１２は、本発明の実施例３を示すステートマシンを搭載したシステムの概略の構成図である。
【００８２】
このシステム５０は、LSIやボード等で構成され、システム全体をプログラム制御する中央処理装置（以下「CPU」という。）５１を有している。CPU５１には、システムバス５２が接続され、このシステムバス５２に、外部との通信及びデータの読み込みを行う通信モジュール５３と、メモリコントローラ５４とが接続されている。メモリコントローラ５４には、１つ又は複数の半導体集積回路（例えば、２つのモジュール）６０−１，６０−２が接続されている。各モジュール６０−１，６０−２には、図１や図７に示すステートマシン２０−１，２０−２と、この各ステートマシン２０−１，２０−２によりそれぞれ制御される各被制御回路６１−１，６１−２等とが、それぞれ設けられている。メモリコントローラ５４は、各モジュール６０−１，６０−２のステートマシン２０−１，２０−２内に設けられるメモリへの書き込み等を制御するものである。
【００８３】
このような構成のシステム５０において、例えば、CPU５１は通信モジュール５３を制御して各モジュール６０−１，６０−２のステートマシン２０−１，２０−２内の各メモリにライトするデータを外部から読み込み、読み込んだデータを各モジュール６０−１，６０−２のステートマシン２０−１，２０−２内のメモリにライトすれば、システム５０内の各モジュール６０−１，６０−２のステートマシン２０−１，２０−２の制御内容を容易に変更することができる。例えば、インターネット上のサーバ等がシステム５０内のCPU５１と通信を行い、各モジュール６０−１，６０−２内のステートマシン２０−１，２０−２の制御内容に対するハードウェアレベルの変更を容易に行うことが可能になる。
【００８４】
（変形例）
本発明は、上記実施例に限定されず、例えば、図１及び図７におけるクロック同期型メモリ３０，３０Ａを、クロック信号clkの立ち下がりエッジに同期して動作する構成に変更したり、クロック同期型メモリ３０，３０Ａ及び非同期型メモリ４０を、図２以外の他の回路構成に変更したり、或いは、図１のムーア型ステートマシン２０内や図７のミーリ型ステートマシン２０Ａ内に、他の回路を付加して機能の拡張を図る等、種々の利用形態や変形が可能である。
【図面の簡単な説明】
【００８５】
【図１】本発明の実施例１を示すものであってクロック同期型メモリを使用して実現されたムーア型ステートマシンの概略の構成図である。
【図２】図１中のクロック同期型メモリ３０を示す概略の構成図である。
【図３】図２のクロック同期型メモリ３０に対するアドレス信号addr[n:0]を示す概略の構成図である。
【図４】図２のクロック同期型メモリ３０のリードデータrdata[m:0]を示す概略の構成図である。
【図５】図１中のメモリ３０に対するライト動作を示すタイミングチャートである。
【図６】図１中のメモリ３０のリード動作であるステートマシンの動作を示すタイミングチャートである。
【図７】本発明の実施例２を示すものであってクロック同期型メモリ及び非同期型メモリを使用して実現されたミーリ型ステートマシンの概略の構成図である。
【図８】図７のクロック同期型メモリ３０Ａ及び非同期型メモリ４０に対する第１のアドレス信号addr1[n:0]及び第２のアドレス信号addr2[n:0]を示す概略の構成図である。
【図９】図７中のメモリ３０Ａに対するライト動作を示すタイミングチャートである。
【図１０】図７中のメモリ４０に対するライト動作を示すタイミングチャートである。
【図１１】図７中のメモリ３０Ａ及び４０のリード動作であるステートマシンの動作を示すタイミングチャートである。
【図１２】本発明の実施例３を示すステートマシンを搭載したシステムの概略の構成図である。
【図１３】ステートマシンの原理を説明するための構成及び動作を示す図である。
【図１４】従来のムーア型ステートマシンの原理を示す構成図である。
【図１５】従来のミーリ型ステートマシンの原理を示す構成図である。
【図１６】ステートマシンを有する半導体集積回路の原理を示す構成図である。
【図１７】図１６の半導体集積回路１０における動作を示すタイミングチャートである。
【符号の説明】
【００８６】
２０      ムーア型ステートマシン
２０Ａ      ミーリ型ステートマシン
２０−１，２０−２      ステートマシン
２１，２２      セレクタ
３０，３０Ａ      クロック同期型メモリ
４０      非同期型メモリ
５０      システム
６０−１，６０−２      モジュール
【図１】
2009145957.tif 000003
【図２】
2009145957.tif 000004
【図３】
2009145957.tif 000005
【図４】
2009145957.tif 000006
【図５】
2009145957.tif 000007
【図６】
2009145957.tif 000008
【図７】
2009145957.tif 000009
【図８】
2009145957.tif 000010
【図９】
2009145957.tif 000011
【図１０】
2009145957.tif 000012
【図１１】
2009145957.tif 000013
【図１２】
2009145957.tif 000014
【図１３】
2009145957.tif 000015
【図１４】
2009145957.tif 000016
【図１５】
2009145957.tif 000017
【図１６】
2009145957.tif 000018
【図１７】
2009145957.tif 000019