(57)【要約】【課題】異なるクロックのデータ転送を行うときに、パルスストレッチ回路を用いることなく、不正な値が転送されないようにすることを目的とする。【解決手段】クロックＣＬＫ−Ａで動作する入力側回路部２とクロックＣＬＫ−Ｂで動作する出力側回路部３とを有し、データＤａｔａ−Ａを出力データＤａｔａ−Ｂとして出力させる回路であって、入力側回路部２に設けられ、入力データＤａｔａ−Ａを入力して中間データＭｉｄとして出力する入力側フリップフロップ４と、出力側回路３に設けられ、中間データＭｉｄを入力して出力データＤａｔａ−Ｂとして出力させる出力側フリップフロップ５と、出力側フリップフロップ５が中間データＭｉｄを入力するときには、中間データＭｉｄを固定値として出力するように入力側フリップフロップ４を制御する制御部６と、を備えたことを特徴とする。【選択図】  図１
2012175447.tif 000002
【特許請求の範囲】
【請求項１】
第１のクロックで動作する入力側回路部と前記第１のクロックとは異なる第２のクロックで動作する出力側回路部とを有し、前記入力側回路部に入力された入力データを前記出力側回路部から出力データとして出力させるデータ転送回路であって、
前記入力側回路部に設けられ、前記入力データを入力して中間データとして出力する入力側フリップフロップと、
前記出力側回路に設けられ、前記中間データを入力して出力データとして出力させる出力側フリップフロップと、
前記出力側フリップフロップが前記中間データを入力するときには、前記中間データ固定値として出力するように前記入力側フリップフロップを制御する制御部と、
を備えたことを特徴とするデータ転送回路。
【請求項２】
前記制御部は、前記出力側フリップフロップに前記中間データの入力を開始させてから終了させるまでの間は前記入力側フリップフロップに前記入力データを入力させず、それ以外の間に前記入力側フリップフロップに前記入力データを入力させる制御を行うこと
を特徴とする請求項１記載のデータ転送回路。
【請求項３】
前記制御部は、前記出力側フリップフロップの制御を行う制御信号を前記出力側回路部に出力し、この出力側回路部に出力された前記制御信号を入力して、前記入力側フリップフロップの制御を行うこと
を特徴とする請求項２記載のデータ転送回路。
【請求項４】
前記出力側回路部に設けられ、前記第１のクロックの前記制御信号を前記第２のクロックに同期させる出力側二段フリップフロップと、
前記入力側回路部に設けられ、前記第２のクロックの前記制御信号を前記第１のクロックに同期させる入力側二段フリップフロップと、
を備えていることを特徴とする請求項３記載のデータ転送回路。
【請求項５】
前記制御部に前記入力データの値が更新されたか否かを示すデータ更新トリガを入力し、このデータ更新トリガを前記入力データの１クロックの前後の値を比較して生成するトリガ生成回路により生成したこと
を特徴とする請求項１乃至４の何れか１項に記載のデータ転送回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、異なるクロックでデータの転送を行うデータ転送回路に関するものである。
【背景技術】
【０００２】
クロックの異なる回路間でデータの転送を行うためにデータ転送回路が用いられる。このデータ転送回路としては例えば特許文献１に開示された技術がある。図８を用いてデータ転送回路の一例を説明する。この図のデータ転送回路１０１は入力側回路部１０２と出力側回路部１０３とに分かれており、入力側回路部１０２に入力データＤａｔａ−Ａが入力される。入力側回路部１０２と出力側回路部１０３とはクロック境界を挟んで、動作するクロックが異なっている。
【０００３】
出力側回路部１０３は第１のフリップフロップ１０４と第２のフリップフロップ１０５とを備えて構成している。第１のフリップフロップ１０４は入力側回路部１０２から入力されるＮ（Ｎは２以上の整数）ビットの入力データＤａｔａ−Ａを保持する。そして、第１のフリップフロップ１０４は保持した入力データＤａｔａ−Ａを中間データＭｉｄとして第２のフリップフロップ１０５に出力する。第２のフリップフロップ１０５はＮビットの中間データＭｉｄを入力して保持する値を更新する。そして、保持した中間データＭｉｄを出力データＤａｔａ−Ｂとして出力する。
【０００４】
第１のフリップフロップ１０４および第２のフリップフロップ１０５は出力側回路部１０３のクロックＣＬＫ−Ｂで動作を行っており、このクロックＣＬＫ−Ｂは入力側回路１０２のクロックＣＬＫ−Ａとは異なっている。このために、第１のフリップフロップ１０４と第２のフリップフロップ１０５との二段のフリップフロップ構成としている。これにより、信号が不安定になるメタ・ステーブルが生じることを回避し、クロックＣＬＫ−Ａの入力データＤａｔａ−ＡをクロックＣＬＫ−Ｂに同期させている。
【０００５】
第１のフリップフロップ１０４にはＮビットの入力データＤａｔａ−Ａが入力されているが、この入力データＤａｔａ−Ａの各ビットが変化するタイミングは完全に同じタイミングとはなっておらず、ばらつきを生じる。これは、Ｎビットの各ビットでハイ（１）とロー（０）との値が変化するタイミングにずれを生じるためである。
【０００６】
そして、第１のフリップフロップ１０４および第２のフリップフロップ１０５は入力データＤａｔａ−ＡのクロックＣＬＫ−Ａとは異なるクロックＣＬＫ−Ｂで動作している。よって、入力データＤａｔａ−Ａが更新（変化）するタイミングと第１のフリップフロップ１０４が入力データＤａｔａ−Ａを入力して保持する値を更新するタイミングとが重なることがある。そして、このときに更新した値を第１のフリップフロップ１０４は中間データＭｉｄとして出力し、第２のフリップフロップ１０５に出力する。第２のフリップフロップ１０５はこの中間データＭｉｄを出力データＤａｔａ−Ｂとして出力する。
【０００７】
図９は図８の構成のタイミングチャートを示しており、入力データＤａｔａ−Ａが値＃１から値＃２に更新されたときに第１のフリップフロップ１０４は自身の値を更新している。そして、更新した値を中間データＭｉｄとして出力している。図１０は図９のＡの領域、つまり入力データＤａｔａ−Ａが更新され、且つそのタイミングで第１のフリップフロップ１０４が中間データＭｉｄの値として更新している箇所を示している。
【０００８】
入力データＤａｔａ−ＡはクロックＣＬＫ−Ａの立ち上がりエッジのタイミングで変化するが、各ビットで変化するタイミングにばらつきを生じている。そして、第１のフリップフロップ１０４が入力データＤａｔａ−Ａを入力して中間データＭｉｄとして値を出力するタイミングは、クロックＣＬＫ−Ａと同期されていないクロックＣＬＫ−Ｂである。
【０００９】
図１０では、クロックＣＬＫ−Ａの立ち上がりエッジのタイミングでｂｉｔ０から２まで全て「０」から「１」に変化する。ただし、各ビットで変化するタイミングにばらつきを生じている。そして、クロックＣＬＫ−Ａとほぼ同じタイミングでクロックＣＬＫ−Ｂが立ち上がり、そのエッジのタイミングで第１のフリップフロップ１０４は入力データＤａｔａ−Ａを入力して、中間データＭｉｄとして値を出力している。
【００１０】
クロックＣＬＫ−Ｂの立ち上がりエッジのタイミングでは、ｂｉｔ０は「１」に変化しているものの、ｂｉｔ１および２は依然として「０」のままである。本来ならｂｉｔ０から２まで「１」になっている値＃２が第１のフリップフロップ１０４に入力されて保持されなければならない。しかし、クロックＣＬＫ−Ｂの立ち上がりエッジのタイミングでは、ｂｉｔ０のみが「１」であり、ｂｉｔ１および２が「０」である値＃１'が入力されて保持される。つまり、不正な値が保持される。
【００１１】
この不正な値が中間データＭｉｄとなり、第２のフリップフロップ１０５が出力データＤａｔａ−Ｂとして出力する。これにより、出力結果が不正になる。つまり、本来の値とは異なる不正なデータが転送されることになる。この不正なデータの転送を回避するために図１１のデータ転送回路１１０を用いることができる。
【００１２】
このデータ転送回路１１０は入力側回路部１１１と出力側回路部１１２と入力側フリップフロップ１１３と出力側フリップフロップ１１４とパルスストレッチ回路１１５と二段フリップフロップ（図中では２段ＦＦ）１１６とトリガ出力フリップフロップ１１７とを備えて構成している。
【００１３】
入力側回路部１１１はクロックＣＬＫ−Ａの周波数で動作する回路部であり、出力側回路部１１２はクロックＣＬＫ−Ｂの周波数で動作する回路部である。入力側回路部１１１と出力側回路部１１２とはクロック境界を挟んで分割されており、クロックＣＬＫ−ＡとＣＬＫ−Ｂとは異なる周波数になっている。
【００１４】
入力側フリップフロップ１１３は入力データＤａｔａ−Ａを入力して保持し、保持した値を中間データＭｉｄとして出力する。出力側フリップフロップ１１４は入力側フリップフロップ１１３が出力した中間データＭｉｄを入力して保持する。そして、保持した値を出力データＤａｔａ−Ｂとして出力する。
【００１５】
パルスストレッチ回路１１５はデータ更新トリガＴｒｉｇ−Ａを入力する。このデータ更新トリガＴｒｉｇ−ＡはクロックＣＬＫ−Ａに同期した１ビットの信号になっており、入力データＤａｔａ−Ａが更新されたことを示している。パルスストレッチ回路１１５はデータ更新トリガＴｒｉｇ−Ａのパルス幅をクロックＣＬＫ−ＡからＣＬＫ−Ｂのパルス幅に変換する。この変換後の信号を１ビットのストレッチ信号Ｓｔｒとして出力する。
【００１６】
ストレッチ信号Ｓｔｒは二段フリップフロップ１１６に入力される。二段フリップフロップ１１６は２つのフリップフロップ１１６Ａとフリップフロップ１１６Ｂとを有して構成されている。二段のフリップフロップ１１６Ａおよび１１６Ｂを設けることにより、クロックＣＬＫ−Ａのストレッチ信号ＳｔｒをクロックＣＬＫ−Ｂに同期したイネーブル信号ＥＮＢとしている。
【００１７】
イネーブル信号ＥＮＢはトリガ出力フリップフロップ１１７に入力されて、データ更新トリガＴｒｉｇ−Ｂとして外部の回路に出力される。また、イネーブル信号ＥＮＢは出力側フリップフロップ１１４に入力されて、出力側フリップフロップ１１４の制御を行っている。
【００１８】
図１２は図１１の構成のタイミングチャートを示している。入力側フリップフロップ１１３に入力される入力データＤａｔａ−Ａが更新されるタイミングでデータ更新トリガＴｒｉｇ−Ａの値が「１」になる。このデータ更新トリガＴｒｉｇ−Ａは入力側フリップフロップ１１３の制御を行っており、データ更新トリガＴｒｉｇ−Ａが「１」になることにより、入力データＤａｔａ−Ａを入力して保持する値を更新させる。そして、保持した値が中間データＭｉｄとして出力される。
【００１９】
データ更新トリガＴｒｉｇ−Ａはパルスストレッチ回路１１５にも入力されており、パルスストレッチ回路１１５によりパルス幅がクロックＣＬＫ−ＡからクロックＣＬＫ−Ｂに変換されてストレッチ信号Ｓｔｒが生成される。このストレッチ信号Ｓｔｒは二段フリップフロップ１１６に入力されて、クロックＣＬＫ−Ｂに同期したイネーブル信号ＥＮＢとして出力される。
【００２０】
このイネーブル信号ＥＮＢにより出力側フリップフロップ１１４は中間データＭｉｄを入力して値を更新する。そして、出力データＤａｔａ−Ｂとして出力する。よって、出力側フリップフロップ１１４が値を更新するのは、データ更新トリガＴｒｉｇ−Ａをパルスストレッチ回路１１５でパルス幅を変換し、二段フリップフロップ１１６でクロックＣＬＫ−Ｂに同期させた後になっている。
【００２１】
このため、入力データＤａｔａ−Ａが変化するタイミングと出力側フリップフロップ１１４が中間データＭｉｄを入力して保持する値を更新するタイミングとが重なることがなくなる。よって、入力データＤａｔａ−Ａが変化している最中に中間データＭｉｄを取得することがなく、不正な値が転送されることがなくなる。
【先行技術文献】
【特許文献】
【００２２】
【特許文献１】特開平７−２０００９５号公報
【発明の概要】
【発明が解決しようとする課題】
【００２３】
入力側回路部１１１のクロックＣＬＫ−Ａよりも出力側回路部１１２のクロックＣＬＫ−Ｂが高速に動作するときには、パルスストレッチ回路１１５によるパルス幅の変換は要しない。一方、クロックＣＬＫ−ＢよりもクロックＣＬＫ−Ａが高速なときには、出力側回路部３でクロックＣＬＫ−Ａで動作する信号のクロックを認識することができなくなる。よって、この場合には、パルスストレッチ回路１１５によるパルス幅の変換が必要となる。
【００２４】
このため、クロックＣＬＫ−ＡとＣＬＫ−Ｂとの大小関係によってパルスストレッチ回路１１５の要否が決まる。そして、パルスストレッチ回路１１５のパルス幅の変換は、クロックＣＬＫ−ＡとＣＬＫ−Ｂとの比によって決まる。例えば、クロックＣＬＫ−ＡがＣＬＫ−Ｂの２倍の場合にはパルス幅を２倍に変換し、３倍の場合にはパルス幅を３倍に変換する。
【００２５】
従って、入力側回路部１１１のクロックＣＬＫ−Ａと出力側回路部１１２のクロックＣＬＫ−Ｂとの大小関係およびその比によって、パルスストレッチ回路１１５の要否およびその仕様が異なるようになる。前記の例でいえば、パルスストレッチ回路１１５は２倍に変換する仕様が要求される場合もあれば、３倍に変換する仕様が要求される場合もある。
【００２６】
クロックＣＬＫ−ＡとクロックＣＬＫ−Ｂとは固定された関係にはなっておらず、その大小関係および比は適宜に変化する。このため、仕様に応じたパルスストレッチ回路１１５を用意しなければならず、パルスストレッチ回路１１５の設計や検証工数が増大する。
【００２７】
また、図１１の構成でも、やはり不正なデータ転送を生じることがある。図１３のタイミングチャートを用いて説明する。中間データＭｉｄもＮビットのデータであり、各ビットの値が変化するタイミングにばらつきを生じる。出力側フリップフロップ１１４は中間データＭｉｄを入力して保持する値を更新するが、入力側フリップフロップ１１３のクロックＣＬＫ−Ａと出力側フリップフロップ１１４のクロックＣＬＫ−Ｂとは同期が取れていない。
【００２８】
このため、中間データＭｉｄが変化している途中のタイミングと出力側フリップフロップ１１４が中間データＭｉｄを入力して値を更新するタイミングとが重なることがある。図１４はこの状態を説明するための図１３のＢの領域を示している。この図に示すように、中間データＭｉｄの各ビットが変化するタイミングにはばらつきを生じている。
【００２９】
そして、これとほぼ同じタイミングで出力側フリップフロップ１１４は中間データＭｉｄを入力して値を更新し、出力データＤａｔａ−Ｂとして出力する。このため、中間データＭｉｄの変化途中の値を更新するため、本来の値＃２ではなく、不正な値＃１'が出力データＤａｔａ−Ｂとして出力される。つまり、不正な値が転送されることになる。
【００３０】
そこで、本発明は、異なるクロックのデータ転送を行うときに、パルスストレッチ回路を用いることなく、不正な値が転送されないようにすることを目的とする。
【課題を解決するための手段】
【００３１】
以上の課題を解決するため、本発明のデータ転送回路は、第１のクロックで動作する入力側回路部と前記第１のクロックとは異なる第２のクロックで動作する出力側回路部とを有し、前記入力側回路部に入力された入力データを前記出力側回路部から出力データとして出力させるデータ転送回路であって、前記入力側回路部に設けられ、前記入力データを入力して中間データとして出力する入力側フリップフロップと、前記出力側回路に設けられ、前記中間データを入力して出力データとして出力させる出力側フリップフロップと、前記出力側フリップフロップが前記中間データを入力するときには、前記中間データを固定値として出力するように前記入力側フリップフロップを制御する制御部と、を備えたことを特徴とするものである。
【００３２】
このデータ転送回路によれば、出力側フリップフロップが中間データを入力するときに、入力側フリップフロップは中間データを固定した値として出力している。これにより、中間データが変化している途中の値を出力側フリップフロップが入力することがなくなる。よって、パルスストレッチ回路を要することなく、不正な値が転送されることがなくなる。
【００３３】
また、前記制御部は、前記出力側フリップフロップに前記中間データの入力を開始させてから終了させるまでの間は前記入力側フリップフロップに前記入力データを入力させず、それ以外の間に前記入力側フリップフロップに前記入力データを入力させる制御を行うようにしてもよい。
【００３４】
出力側フリップフロップが中間データの入力を開始してから終了するまでの間に入力側フリップフロップの値を更新させないように制御することで、値が変化している途中のデータを入力することがなくなり、不正な値が転送されなくなる。
【００３５】
また、前記制御部は、前記出力側フリップフロップの制御を行う制御信号を前記出力側回路部に出力し、この出力側回路部に出力された前記制御信号を入力して、前記入力側フリップフロップの制御を行うようにしてもよい。
【００３６】
出力側フリップフロップを制御するために出力側回路部に出力した信号を再び入力側回路部の制御部に戻して入力していることで、出力側フリップフロップが値を入力して更新するときに中間データが変化しないように制御することができる。
【００３７】
また、前記出力側回路部に設けられ、前記第１のクロックの前記制御信号を前記第２のクロックに同期させる出力側二段フリップフロップと、前記入力側回路部に設けられ、前記第２のクロックの前記制御信号を前記第１のクロックに同期させる入力側二段フリップフロップと、を備えるようにしてもよい。
【００３８】
出力側二段フリップフロップと入力側二段フリップフロップとを設けることで、入力側回路と出力側回路との間でデータを入出力するときに、メタ・ステーブルの影響なく相手方のクロックに信号を同期させることができる。
【００３９】
また、前記制御部に前記入力データの値が更新されたか否かを示すデータ更新トリガを入力し、このデータ更新トリガを前記入力データの１クロックの前後の値を比較して生成するトリガ生成回路により生成してもよい。トリガ生成回路が１クロックの前後の値を比較することで、データ更新トリガを生成することができる。
【発明の効果】
【００４０】
本発明は、出力側フリップフロップが中間データを入力して保持する値を更新するときに、入力側フリップフロップは中間データを固定した値として出力している。これにより、中間データが変化しているときに出力側フリップフロップが入力することがなくなり、不正な値を転送されることを回避できるようになる。
【図面の簡単な説明】
【００４１】
【図１】データ転送回路の構成を示すブロック図である。
【図２】制御部の状態遷移の制御を示す図である。
【図３】図１の構成の動作を示すタイミングチャートである。
【図４】図１の構成の他の動作を示すタイミングチャートである。
【図５】図１の構成のさらに他の動作を示すタイミングチャートである。
【図６】トリガ生成回路の構成を示すブロック図である。
【図７】図６の構成の動作を示すタイミングチャートである。
【図８】従来のデータ転送回路を示すブロック図である。
【図９】図８の構成の動作を示すタイミングチャートである。
【図１０】図９のＡの領域を示す図である。
【図１１】従来の他のデータ転送回路を示すブロック図である。
【図１２】図１１の構成の動作を示すタイミングチャートである。
【図１３】図１１の構成の他の動作を示すタイミングチャートである。
【図１４】図１３のＢの領域を示す図である。
【発明を実施するための形態】
【００４２】
以下、図面を参照して本発明の実施形態について説明する。図１は本実施形態のデータ転送回路１を示している。データ転送回路１は入力側および出力側に所定の回路が接続されており、入力側に接続された回路から入力したデータを出力側に接続された回路に出力する。データ転送回路１に入力される前のデータと出力した後のデータとでは信号の周波数（クロック）が異なっている。なお、データ転送回路１に入力される前のデータと出力した後のデータにおいて、周波数が同じだが同期していない（位相がずれている）場合でも、この回路は有効に機能する。
【００４３】
データ転送回路１は、クロック境界を挟んで入力側回路部２と出力側回路部３とに領域が分割されている。入力側回路部２はクロックＣＬＫ−Ａ（第１のクロック）で動作を行っており、出力側回路部３はクロックＣＬＫ−Ｂ（第２のクロック）で動作を行っている。クロックＣＬＫ−ＡとクロックＣＬＫ−Ｂとは異なる周波数になっており、その大小関係は任意に設定できる。
【００４４】
データ転送回路１は入力側フリップフロップ４と出力側フリップフロップ５と制御部６と出力側二段フリップフロップ（図中では出力側２段ＦＦ）７と信号検出部８とトリガ出力フリップフロップ９と入力側二段フリップフロップ（図中では出力側２段ＦＦ）１０とを備えて構成している。
【００４５】
このうち、入力側フリップフロップ４と制御部６と入力側二段フリップフロップ１０とは入力側回路部２に設けられる。また、出力側フリップフロップ５と出力側二段フリップフロップ７と信号検出部８とトリガ出力フリップフロップ９とは出力側回路部３に設けられる。
【００４６】
入力側フリップフロップ４はデータ転送回路１に入力されるＮ（Ｎは２以上の整数）ビットの入力データＤａｔａ−Ａを入力して保持するＮビットのフリップフロップである。入力側フリップフロップ４はクロックＣＬＫ−Ａの周波数で動作を行っており、入力側イネーブル信号ＥＮＢ−Ａが「１」であり、且つクロックＣＬＫ−Ａの立ち上がりエッジにおいて入力データＤａｔａ−Ａを入力して、保持する値を更新する。そして、更新した値を中間データＭｉｄとして出力する。
【００４７】
出力側フリップフロップ５は入力側フリップフロップ４が出力するＮビットの中間データＭｉｄを入力して、保持する値を更新する。出力側フリップフロップ５はクロックＣＬＫ−Ｂの周波数で動作を行っており、出力側イネーブル信号ＥＮＢ−Ｂが「１」であり且つクロックＣＬＫ−Ｂの立ち上がりエッジにおいて中間データＭｉｄを入力して、保持する値を更新する。そして、更新した値をＮビットの出力データＤａｔａ−Ｂとして出力する。
【００４８】
制御部６はデータ更新トリガＴｒｉｇ−Ａおよび入力側アクノレッジ信号ＡＣＫ−Ａを入力して、これらの信号に基づいてレディ信号Ｒｅａｄｙおよびイネーブル信号ＥＮＢ−Ａを生成する。データ更新トリガＴｒｉｇ−Ａは入力データＤａｔａ−Ａの値が更新されるときに「１」になり、その他は「０」になっている１ビットの信号である。
【００４９】
図２に示すように、制御部６は４つの状態を遷移する状態遷移制御部（ステートマシン）になっている。初期値としては入力データ待機状態Ｓ１になっており、次に入力データホールド状態Ｓ２に遷移し、入力データレディ状態Ｓ３に遷移し、アクノレッジ待機状態Ｓ４に遷移した後に、再び入力データ待機状態Ｓ１に遷移する。
【００５０】
入力データ待機状態Ｓ１にあるときには、制御部６は１ビットのレディ信号Ｒｅａｄｙを「０」として出力し、１ビットの入力側イネーブル信号ＥＮＢ−Ａをデータ更新トリガＴｒｉｇ−Ａの値として出力する。
【００５１】
データ更新トリガＴｒｉｇ−Ａは入力データＤａｔａ−Ａの値が更新されたタイミングで「０」から「１」に変化する。そして、データ更新トリガＴｒｉｇ―Ａが「１」に変化したときに、入力データ待機状態Ｓ１から入力データホールド状態Ｓ２に遷移する。この状態では、制御部６はレディ信号Ｒｅａｄｙを「０」、入力側イネーブル信号ＥＮＢ−Ａを「０」として出力する。
【００５２】
入力データホールド状態Ｓ２から１クロック（クロックＣＬＫ−Ａの１クロック）後に無条件に入力データレディ状態Ｓ３に遷移する。この入力データレディ状態Ｓ３では、制御部６はレディ信号Ｒｅａｄｙを「１」、入力側イネーブル信号ＥＮＢ−Ａを「０」として出力する。
【００５３】
入力データレディ状態Ｓ３のときに、入力側二段フリップフロップ１０が出力する入力側アクノレッジ信号ＡＣＫ−Ａが「１」になると、アクノレッジ待機状態Ｓ４に遷移する。このアクノレッジ待機状態Ｓ４ではレディ信号Ｒｅａｄｙを「０」、入力側イネーブル信号ＥＮＢ−Ａを「０」として出力する。
【００５４】
アクノレッジ待機状態Ｓ４のときに入力側アクノレッジ信号ＡＣＫ−Ａが「０」に変化すると、入力データ待機状態Ｓ１に遷移する。従って、制御部６はデータ更新トリガＴｒｉｇ−Ａおよび入力側アクノレッジ信号ＡＣＫ−Ａに基づいて、以上の４つの状態を循環して遷移するように制御する。
【００５５】
出力側二段フリップフロップ７は、各１ビットの二段のフリップフロップ７Ａと７Ｂとを有して構成している。制御部６が出力する１ビットのレディ信号Ｒｅａｄｙはフリップフロップ７Ａに入力されて保持され、次にフリップフロップ７Ｂに入力されて保持される。この保持した値をフリップフロップ７Ｂが１ビットの出力側アクノレッジ信号ＡＣＫ−Ｂとして出力する。
【００５６】
レディ信号ＲｅａｄｙはクロックＣＬＫ−Ａの周波数の信号であり、出力側二段フリップフロップ７はこのレディ信号Ｒｅａｄｙを出力側回路部３のクロックＣＬＫ−Ｂに同期した信号にする。この出力側二段フリップフロップ７により信号が不安定になるメタ・ステーブルの影響を回避できる。そして、出力側二段フリップフロップ７が出力する信号がクロックＣＬＫ−Ｂの出力側アクノレッジ信号ＡＣＫ−Ｂとなる。
【００５７】
信号検出部８は出力側二段フリップフロップ７から出力される出力側アクノレッジ信号ＡＣＫ−Ｂの立ち上がりエッジを検出して、クロックＣＬＫ−Ｂの１クロック周期分のハイ・パルス（「１」となる信号）を出力する。この出力される信号が出力側イネーブル信号ＥＮＢ−Ｂとなる。出力されたイネーブル信号ＥＮＢ−Ｂはトリガ出力フリップフロップ９と出力側フリップフロップ５とに入力される。
【００５８】
トリガ出力フリップフロップ９は入力した出力側イネーブル信号ＥＮＢ−Ｂを入力して保持し、保持した値をデータ更新トリガＴｒｉｇ−Ｂとして出力する。よって、データ更新トリガＴｒｉｇ−Ｂは出力側イネーブル信号ＥＮＢ−Ｂよりも１クロック分遅れたタイミングの信号として出力される。
【００５９】
入力側二段フリップフロップ１０は各１ビットの二段のフリップフロップ１０Ａと１０Ｂとを有して構成している。出力側二段フリップフロップ７から出力された出力側アクノレッジ信号ＡＣＫ−Ｂは入力側二段フリップフロップ１０に入力される。
【００６０】
入力側二段フリップフロップ１０のフリップフロップ１０Ａに入力される出力側アクノレッジ信号ＡＣＫ−Ｂが入力されて保持され、次にフリップフロップ１０Ｂに入力されて保持される。そして、フリップフロップ１０Ｂが保持した値が入力側アクノレッジ信号ＡＣＫ−Ａとして出力される。この入力側アクノレッジ信号ＡＣＫ−Ａは制御部６に入力される。
【００６１】
２段の入力側二段フリップフロップ１０を介在させることにより、信号が不安定になるメタ・ステーブルの影響を回避できる。そして、クロックＣＬＫ−Ｂの出力側アクノレッジ信号ＡＣＫ−ＢはクロックＣＬＫ−Ａに同期した入力側アクノレッジ信号ＡＣＫ−Ａとなる。
【００６２】
レディ信号Ｒｅａｄｙ、出力側アクノレッジ信号ＡＣＫ−Ｂ、入力側アクノレッジ信号ＡＣＫ−Ａ、入力側イネーブル信号ＥＮＢ−Ａおよび出力側イネーブル信号ＥＮＢ−Ｂは入力側フリップフロップ４および出力側フリップフロップ５の制御を行う制御信号となる。当該制御信号に基づいて、入力側フリップフロップ４および出力側フリップフロップ５はデータを入力して値を更新するか否かの制御を行う。
【００６３】
次に、図３のタイミングチャートを用いて動作について説明する。この図では、クロックＣＬＫ−ＡとＣＬＫ−Ｂとは「ＣＬＫ−Ａ＞ＣＬＫ−Ｂ」の場合について説明している。勿論、後述するように「ＣＬＫ−Ａ＜ＣＬＫ−Ｂ」であってもよい。まず、初期状態（時刻Ｔ１）では、制御部６の状態は入力データ待機状態Ｓ１になっている。また、ＣＬＫ−Ａ＝ＣＬＫ−Ｂであっても、同等に機能し、同等の効果がある。
【００６４】
データ転送回路１の前段の他の回路よりＮビットの入力データＤａｔａ−Ａが入力される。このタイミングで入力データＤａｔａ−Ａは値＃１に更新される。よって、データ更新トリガＴｒｉｇ−Ａは「１」になり、このデータ更新トリガＴｒｉｇ−Ａは次のクロックの立ち上がりエッジで「０」に戻る。
【００６５】
この入力データ待機状態Ｓ１のときには、レディ信号Ｒｅａｄｙは「０」として出力している。そして、データ更新トリガＴｒｉｇ−Ａが「１」に変化している。入力データ待機状態Ｓ１では、入力側イネーブル信号ＥＮＢ−Ａはデータ更新トリガＴｒｉｇ−Ａの値を出力する。よって、入力側イネーブル信号ＥＮＢ−Ａは「１」に変化する。これにより、入力側フリップフロップ４は入力データＤａｔａ−Ａの入力を値＃１に更新する。そして、クロックＣＬＫ−Ａの次の時刻Ｔ２で中間データＭｉｄとして値＃１が出力される。
【００６６】
入力側イネーブル信号ＥＮＢ−Ａが「１」に変化するのは、入力データ待機状態Ｓ１であり且つデータ更新トリガＴｒｉｇ−Ａが「１」に変化したときのみである。よって、それ以外のときには、入力側フリップフロップ４は中間データＭｉｄの値＃１を継続的に保持し続ける。
【００６７】
前述したように、データ更新トリガＴｒｉｇ−Ａは「１」となっている。よって、次のクロックの時刻Ｔ２において、制御部６の状態は入力データホールド状態Ｓ２に遷移する。この状態では、制御部６はレディ信号Ｒｅａｄｙを「０」、入力側イネーブル信号ＥＮＢ−Ａを「０」として出力する。
【００６８】
次の時刻Ｔ３において、制御部６は無条件で入力データレディ状態Ｓ３に遷移する。このときには、レディ信号Ｒｅａｄｙを「１」、イネーブル信号ＥＮＢ−Ａを「０」として出力する。このレディ信号Ｒｅａｄｙが、クロック境界を挟んだ出力側二段フリップフロップ７に出力される。これにより、レディ信号ＲｅａｄｙがクロックＣＬＫ−Ｂに同期した出力側アクノレッジ信号ＡＣＫ−Ｂとなる。
【００６９】
レディ信号Ｒｅａｄｙが「１」に変化してから、出力側アクノレッジ信号ＡＣＫ−Ｂが「１」に変化するまでには所定の時間を要する。よって、時刻Ｔ３よりも後の時刻Ｔ４において出力側アクノレッジ信号ＡＣＫ−Ｂが「１」に変化する。この時刻Ｔ４はクロックＣＬＫ−Ｂに同期したタイミングになる。
【００７０】
信号検出部８は出力側アクノレッジ信号ＡＣＫ−Ｂが「１」に変化する立ち上がりエッジを検出する。そして、１クロック周期分のハイ・パルスの信号（値が「１」の信号）を出力する。この信号が出力側イネーブル信号ＥＮＢ−Ｂとなる。よって、クロックＣＬＫ−Ｂにおいて時刻Ｔ４の次の時刻Ｔ５にイネーブル信号ＥＮＢ−Ｂの値が「１」に変化し、その次の時刻Ｔ６において「０」に戻る。
【００７１】
このイネーブル信号ＥＮＢ−Ｂが出力側フリップフロップ５に入力される。出力側フリップフロップ５は、出力側イネーブル信号ＥＮＢ−Ｂが「１」になったことから、クロックＣＬＫ−Ｂの立ち上がりエッジにおいて、入力側フリップフロップ４が出力する中間データＭｉｄを入力して、保持している値を更新する。
【００７２】
このときの中間データＭｉｄは値＃１になっており、出力側フリップフロップ５はこの値＃１を更新し、時刻Ｔ５の次のクロックである時刻Ｔ６において出力データＤａｔａ−Ｂを値＃１として出力する。これにより、クロックＣＬＫ−Ａに同期した入力データＤａｔａ−Ａの値＃１を、クロックＣＬＫ−Ｂに同期する出力データＤａｔａ−Ｂとして出力している。そして、出力側フリップフロップ５は、出力側イネーブル信号ＥＮＢ−Ｂが「１」に変化するまで、保持している値＃１を継続して出力する。
【００７３】
時刻Ｔ４において、「１」に変化した出力側アクノレッジ信号ＡＣＫ−Ｂは信号検出部８だけではなく、入力側二段フリップフロップ１０にも入力される。そして、この入力側二段フリップフロップ１０により、出力側アクノレッジ信号ＡＣＫ−Ｂ（クロックＣＬＫ−Ｂに同期した信号）は入力側アクノレッジ信号ＡＣＫ−Ａ（クロックＣＬＫ−Ａに同期した信号）となる。
【００７４】
入力側アクノレッジ信号ＡＣＫ−Ａは、もともとは出力側アクノレッジ信号ＡＣＫ−Ｂであり、この出力側アクノレッジ信号ＡＣＫ−Ｂは、もともとはレディ信号Ｒｅａｄｙである。つまり、入力側アクノレッジ信号ＡＣＫ−Ａはレディ信号Ｒｅａｄｙを出力側回路部３に出力し、この出力側回路部３に出力した信号を入力側回路部２に戻した信号になる。
【００７５】
入力側アクノレッジ信号ＡＣＫ−Ａは出力側アクノレッジ信号ＡＣＫ−Ｂが「１」に変化したタイミングよりも後の時刻Ｔ７のクロックにおいて、「１」に変化する。この「１」に変化した入力側アクノレッジ信号ＡＣＫ−Ａが制御部６に入力される。入力側アクノレッジ信号ＡＣＫ−Ａが「１」に変化すると、図２に示すように制御部６は入力データレディ状態Ｓ３からアクノレッジ待機状態Ｓ４に遷移する。
【００７６】
アクノレッジ待機状態Ｓ４では、レディ信号Ｒｅａｄｙは「１」から「０」に更新しており、入力側イネーブル信号ＥＮＢ−Ａは「０」になっている。よって、時刻Ｔ７の次のクロックである時刻Ｔ８において、レディ信号Ｒｅａｄｙは「０」に変化する。このレディ信号Ｒｅａｄｙは出力側二段フリップフロップ７に入力されて、出力側アクノレッジ信号ＡＣＫ−Ｂとなる。
【００７７】
出力側二段フリップフロップ７において、レディ信号ＲｅａｄｙはクロックＣＬＫ−Ｂに同期した出力側アクノレッジ信号ＡＣＫ−Ｂとなる。よって、時刻Ｔ８よりも後のクロックの時刻Ｔ９において、出力側アクノレッジ信号ＡＣＫ−Ｂは「０」に変化する。
【００７８】
この出力側アクノレッジ信号ＡＣＫ−Ｂが入力側二段フリップフロップ１０を介して、クロックＣＬＫ−Ａに同期した入力側アクノレッジ信号ＡＣＫ−Ａとなる。よって、時刻Ｔ９よりも後のクロックである時刻Ｔ１０において入力側アクノレッジ信号ＡＣＫ−Ａは「０」に変化する。入力側アクノレッジ信号ＡＣＫ−Ａが「０」に変化すると、制御部６はアクノレッジ待機状態Ｓ４から入力データ待機状態Ｓ１に状態を遷移する。
【００７９】
以上より、出力側フリップフロップ５が中間データＭｉｄを入力して、保持する値を更新するのは、出力側イネーブル信号ＥＮＢ−Ｂが「１」に変化したときであり、この出力側イネーブル信号ＥＮＢ−Ｂが「０」に変化したときには、中間データＭｉｄの入力は終了している。
【００８０】
この出力側イネーブル信号ＥＮＢ−Ｂが「０」から「１」に変化し、「１」から「０」に変化するまでの間（出力側フリップフロップ５が中間データＭｉｄを入力して、保持する値を更新する間）は、入力側フリップフロップ４は保持した値を固定的に保持し続けるようにしている。つまり、この間は、入力側フリップフロップ４が保持する値を更新しないようにしている。
【００８１】
このために、制御部６は入力データ待機状態Ｓ１のときにのみ入力側イネーブル信号ＥＮＢ−Ａを「１」に変化することを可能にしている。つまり、入力データ待機状態Ｓ１のときにのみ入力側フリップフロップ４が入力データＤａｔａ−Ａを入力して、保持する値を更新することが可能なように制御している（入力側イネーブル信号ＥＮＢ−Ａを「１」にするように制御している）。
【００８２】
出力側フリップフロップ５は中間データＭｉｄを入力して、保持する値を更新するが、中間データＭｉｄの入力を開始するのは、出力側イネーブル信号ＥＮＢ−Ｂが「１」に変化したときである。出力側イネーブル信号ＥＮＢ−Ｂが「１」になるためには、出力側アクノレッジ信号ＡＣＫ−Ｂが「１」に変化している必要があり、つまりレディ信号Ｒｅａｄｙが「１」に変化している必要がある。
【００８３】
レディ信号Ｒｅａｄｙが「１」になるのは、制御部６が入力データレディ状態Ｓ３のときであり、入力データ待機状態Ｓ１に遷移するのは、入力データレディ状態Ｓ３からアクノレッジ待機状態Ｓ４に遷移したさらにその後である。入力データレディ状態Ｓ３から入力データ待機状態Ｓ１に遷移するまでの間には、出力側フリップフロップ５に出力側イネーブル信号の値「１」が入力されている。
【００８４】
つまり、入力側フリップフロップ４が入力データＤａｔａ−Ａの値を入力して保持する値を更新する前に、既に出力側フリップフロップ５が中間データＭｉｄを入力して保持する値の更新を開始している。
【００８５】
また、出力側イネーブル信号ＥＮＢ−Ｂは出力側アクノレッジ信号ＡＣＫ−Ｂの立ち上がりを検出したときの１クロック周期分のハイ・パルスになる。つまり、クロックＣＬＫ−Ｂの１クロックで「１」から「０」に戻る。出力側アクノレッジ信号ＡＣＫ−Ｂが「１」に変化して、この出力側アクノレッジ信号ＡＣＫ−Ｂが入力側アクノレッジ信号ＡＣＫ−Ａになり、制御部６はアクノレッジ待機状態Ｓ４に遷移する。
【００８６】
そして、「０」の値がレディ信号Ｒｅａｄｙ、出力側アクノレッジ信号ＡＣＫ−Ｂ、入力側アクノレッジ信号ＡＣＫ−Ａとなって、制御部６はアクノレッジした域状態Ｓ４から入力データ待機状態Ｓ１に遷移する。このときには、既に出力側フリップフロップ５に入力される出力側イネーブル信号ＥＮＢ−Ｂは「１」から「０」に変化しており、中間データＭｉｄの値を入力して更新する作業は終了している。
【００８７】
従って、出力側フリップフロップ５が中間データＭｉｄを入力して保持する値を更新する作業を開始してから終了するまでの間は入力データ待機状態Ｓ１にはならないように制御している。つまり、この間は入力側フリップフロップ４が入力データＤａｔａ−Ａの値を入力して更新しないように制御している。
【００８８】
つまり、出力側フリップフロップ５が中間データＭｉｄを入力している最中は、入力側フリップフロップ４は値の更新は行わず、保持している値を固定的に出力している。これにより、出力側フリップフロップ５が中間データＭｉｄを入力している最中に中間データＭｉｄの値が変化しなくなり、出力側フリップフロップ５は不正な値を入力することがなくなる。
【００８９】
このため、出力側フリップフロップ５が出力する出力データＤａｔａ−Ｂ、つまりデータ転送回路１が出力する出力データＤａｔａ−Ｂが不正な値となることを回避できる。そして、本実施形態の処理はパルスストレッチ回路を設けることなく行うことができる。このため、クロックＣＬＫ−ＡとＣＬＫ−Ｂとの大小関係およびその比によって、パルスストレッチ回路の設計や検証工数を変更する必要がなくなる。
【００９０】
図４は入力側回路部２のクロックＣＬＫ−Ａが出力側回路部３のクロックＣＬＫ−Ｂよりも非常に高速な場合のタイミングチャートを示している。この場合でも、出力側イネーブル信号ＥＮＢ−Ｂが「１」に変化して、出力データＤａｔａ−Ｂが更新されるときには、中間データＭｉｄは固定した値を保持し続けている。これにより、不正な値が転送されることなく、正確な値が転送される。
【００９１】
図５は入力側回路部２のクロックＣＬＫ−Ａよりも出力側回路部３のクロックＣＬＫ−Ｂの方が高速な場合（ＣＬＫ−Ａ＜ＣＬＫ−Ｂ）を示している。この場合でも、出力側フリップフロップ５が中間データＭｉｄを入力して保持する値を更新するときには、入力側フリップフロップ４は入力データＤａｔａ−Ａを入力して値を変更することがなく、固定的な値を出力している。これにより、クロックＣＬＫ−Ａ＜クロックＣＬＫ−Ｂであっても、不正な値が転送されることを回避することができるようになる。
【００９２】
図６はデータ更新トリガＴｒｉｇ−Ａを生成するトリガ生成回路２０を示している。トリガ生成回路２０はＮビットのトリガ生成フリップフロップ２１と比較器（図中ではＮｂｉｔＣｍｐ）２２とを備えて構成している。トリガ生成フリップフロップ２１はデータ転送回路１の入力側回路部２と同じクロックＣＬＫ−Ａで動作を行っている。
【００９３】
トリガ生成フリップフロップ２１は入力データＤａｔａ−Ａを入力して、その値を保持する。そして、１クロック遅れたタイミングで比較器２２に保持した値を出力する。このときにトリガ生成フリップフロップ２１が出力する値をＤａｔａ−Ｃとする。比較器２２には入力データＤａｔａ−Ａが直接的に入力されている。
【００９４】
比較器２２は入力データＤａｔａ−Ａの値とトリガ生成フリップフロップ２１から出力されたＤａｔａ−Ｃの値との比較を行っている。比較の結果、一致していれば「０」を出力し、異なれば「１」を出力する。この比較器２２が出力する値は前述したデータ更新トリガＴｒｉｇ−Ａになる。
【００９５】
図７はトリガ生成回路２０の動作を示しており、Ｄａｔａ−ＡとＤａｔａ−Ｃとの比較を行って、異なっているときには「１」を出力しており、つまり入力データＤａｔａ−Ａが更新されたときに「１」を出力するデータ更新トリガＴｒｉｇ−Ａを出力することができる。
【００９６】
従って、図６のトリガ生成回路２０により入力データＤａｔａ−Ａの１クロック分の前後のタイミングの値を比較することで、入力データＤａｔａ−Ａが更新されたか否かを示すデータ更新トリガＴｒｉｇ―Ａを生成することができる。この生成したデータ更新トリガＴｒｉｇ−Ａをデータ転送回路１に出力することができる。
【符号の説明】
【００９７】
１    データ転送回路
２    入力側回路部
３    出力側回路部
４    入力側フリップフロップ
５    出力側フリップフロップ
６    制御部
７    出力側二段フリップフロップ
８    信号検出部
９    トリガ出力フリップフロップ
１０    入力側二段フリップフロップ
２０    トリガ生成回路
２１    トリガ生成フリップフロップ
２２    比較器
【図１】
2012175447.tif 000003
【図２】
2012175447.tif 000004
【図３】
2012175447.tif 000005
【図４】
2012175447.tif 000006
【図５】
2012175447.tif 000007
【図６】
2012175447.tif 000008
【図７】
2012175447.tif 000009
【図８】
2012175447.tif 000010
【図９】
2012175447.tif 000011
【図１０】
2012175447.tif 000012
【図１１】
2012175447.tif 000013
【図１２】
2012175447.tif 000014
【図１３】
2012175447.tif 000015
【図１４】
2012175447.tif 000016