(57)【特許請求の範囲】
【請求項１】
半導体装置であって、
第１のクロック信号に基づいてデータを出力する第１の信号処理回路と、
ある一定の周期で第１のクロック信号の立ち上がり又は立ち下がりと一致する第２のクロック信号に基づいてデータ入力する第２の信号処理回路と、
前記第１のクロック信号及び前記第２のクロック信号に関する情報に基づいて、前記第２のクロック信号のセットアップ時間より前に前記第２の信号処理回路に到着するデータのみを出力するように前記第１の信号処理回路を制御する第１の制御信号を生成して、この生成した第１の制御信号を前記第１のクロック信号の立ち上がり又は立ち下がりのタイミングによって変化させる、又は前記セットアップ時間より前に到着するデータのみを入力するように前記第２の信号処理回路を制御する第２の制御信号を生成して、この生成した第２の制御信号を前記第２のクロック信号の立ち上がり又は立ち下がりのタイミングによって変化させる制御回路と
を有することを特徴とする半導体装置。
【請求項２】
半導体装置であって、
第１のクロック信号に基づいてデータを出力する第１の信号処理回路と、
ある一定の周期で第１のクロック信号の立ち上がり又は立ち下がりとの位相差がある一定値になる第２のクロック信号に基づいてデータ入力する第２の信号処理回路と、
前記第１のクロック信号及び前記第２のクロック信号に関する情報に基づいて、前記第２のクロック信号のセットアップ時間より前に前記第２の信号処理回路に到着するデータのみを出力するように前記第１の信号処理回路を制御する第１の制御信号を生成し、この生成した第１の制御信号を前記第１のクロック信号の立ち上がり又は立ち下がりのタイミングによって変化させる、又は前記セットアップ時間より前に到着するデータのみを入力するように前記第２の信号処理回路を制御する第２の制御信号を生成し、この生成した第２の制御信号を前記第２のクロック信号の立ち上がり又は立ち下がりのタイミングによって変化させる制御回路と
を有することを特徴とする半導体装置。
【請求項３】
前記制御回路は、前記第１のクロック信号に同期して複数のデータを入力された順に、ある一定の周期に予め定められた数のデータを出力するように制御する前記第１の制御信号を生成する出力制御回路であることを特徴とする請求項１又は請求項２に記載の半導体装置。
【請求項４】
前記制御回路は、複数のデータの中から前記セットアップ時間より前に到着するデータを選択して入力するように制御する前記第２の制御信号を生成する入力制御回路であることを特徴とする請求項１又は請求項２に記載の半導体装置。
【請求項５】
前記制御回路は、前記セットアップ時間より前に到着しないデータを出力しないように前記第１の信号処理回路を制御する前記第１の制御信号を生成する出力制御回路であることを特徴とする請求項１又は請求項２に記載の半導体装置。
【請求項６】
前記制御回路は、前記セットアップ時間より前に到着しないデータを入力しないように前記第２の信号処理回路を制御する前記第２の制御信号を生成する入力制御回路であることを特徴とする請求項１又は請求項２に記載の半導体装置。
【請求項７】
前記制御回路は、前記セットアップ時間より前に到着しないデータは、データを一定時間だけ遅延させる遅延部で遅延させたデータを入力するように制御する前記第２の制御信号を生成する遅延選択制御回路であることを特徴とする請求項１又は請求項２に記載の半導体装置。
【請求項８】
前記遅延部は、前記セットアップより前に到着しないデータを前記第２のクロック信号の１クロック分遅延させることを特徴とする請求項７に記載の半導体装置。
【請求項９】
前記データは、前記第１のクロックに同期して所定の動作を行う第１の機能部から出力される、処理要求を示す処理要求データ、若しくは処理要求データを受信したことを示す処理要求リセットデータであることを特徴とする請求項１から請求項８のいずれかに記載の半導体装置。
【請求項１０】
前記処理要求データ及び前記処理要求リセットデータは、前記第１の機能部と、前記第２のクロックに同期して所定の動作を行う第２の機能部との間で送受信されるデータであることを特徴とする請求項９に記載の半導体装置。
【請求項１１】
前記処理要求データ及び前記処理要求リセットデータは、前記第１の機能部と、バスとの間で送受信されるデータであることを特徴とする請求項９に記載の半導体装置。
【請求項１２】
前記半導体装置は、前記データの送受信中の動作状況を履歴情報として保持する履歴保存手段を有することを特徴とする請求項１から請求項１１のいずれかに記載の半導体装置。
【請求項１３】
前記半導体装置は、
前記履歴保存手段が保持する履歴情報に基づいて、半導体装置の性能低下の原因を解析する解析手段を有することを特徴とする請求項１２に記載の半導体装置。
【請求項１４】
前記履歴保存手段は、前記履歴情報を外部に出力する出力手段を有することを特徴とする請求項１２又は請求項１３に記載の半導体装置。
【請求項１５】
前記セットアップ時間を、動作時に動的に変更することを特徴とする請求項１から請求項１４に記載の半導体装置。
【請求項１６】
前記第１の信号処理回路は、前記第１のクロック信号の異なるサイクルでデータを出力する複数のフリップフロップを有し、
前記制御回路は、前記複数のフリップフロップの出力の中から前記セットアップ時間より前に到着する出力を、前記第２の信号処理回路が選択して入力するように、前記第２の制御信号によって制御することを特徴とする請求項１又は請求項２に記載の半導体装置。
【請求項１７】
半導体装置の通信制御方法であって、
第１のクロック信号に基づいてデータを出力する第１の信号処理ステップと、
ある一定の周期で第１のクロック信号の立ち上がり又は立ち下がりと一致する第２のクロック信号に基づいてデータ入力する第２の信号処理ステップと、
前記第１のクロック信号及び前記第２のクロック信号に関する情報に基づいて、前記第２のクロック信号のセットアップ時間より前に前記第２の信号処理回路に到着するデータのみを出力するように前記第１の信号処理回路を制御する第１の制御信号を生成して、この生成した第１の制御信号を前記第１のクロック信号の立ち上がり又は立ち下がりのタイミングによって変化させる又は前記セットアップ時間より前に到着するデータのみを入力するように前記第２の信号処理回路を制御する第２の制御信号を生成して、この生成した第２の制御信号を前記第２のクロック信号の立ち上がり又は立ち下がりのタイミングによって変化させる制御ステップと
を有する
ことを特徴とする通信制御方法。
【請求項１８】
半導体装置の通信制御方法であって、
第１のクロック信号に基づいてデータを出力する第１の信号処理ステップと、
ある一定の周期で第１のクロック信号の立ち上がり又は立ち下がりとの位相差がある一定値になる第２のクロック信号に基づいてデータ入力する第２の信号処理ステップと、
前記第１のクロック信号及び前記第２のクロック信号に関する情報に基づいて、前記第２のクロック信号のセットアップ時間より前に前記第２の信号処理回路に到着するデータのみを出力するように前記第１の信号処理回路を制御する第１の制御信号を生成し、この生成した第１の制御信号を前記第１のクロック信号の立ち上がり又は立ち下がりのタイミングによって変化させる、又は前記セットアップ時間より前に到着するデータのみを入力するように前記第２の信号処理回路を制御する第２の制御信号を生成し、この生成した第２の制御信号を前記第２のクロック信号の立ち上がり又は立ち下がりのタイミングによって変化させる制御ステップと
を有する
ことを特徴とする通信制御方法。
【請求項１９】
前記制御ステップは、前記第１のクロック信号に同期して複数のデータを入力された順に、ある一定の周期に予め定められた数のデータを出力するように制御する前記第１の制御信号を生成することを特徴とする請求項１７又は請求項１８に記載の通信制御方法。
【請求項２０】
前記制御ステップは、複数のデータの中から前記セットアップ時間より前に到着するデータを選択して入力するように制御する前記第２の制御信号を生成することを特徴とする請求項１７又は請求項１８に記載の通信制御方法。
【請求項２１】
前記制御ステップは、前記セットアップ時間より前に到着しないデータを出力しないように制御する前記第１の制御信号を生成することを特徴とする請求項１７又は請求項１８に記載の通信制御方法。
【請求項２２】
前記制御ステップは、前記セットアップ時間より前に到着しないデータを入力しないように制御する前記第２の制御信号を生成することを特徴とする請求項１７又は請求項１８に記載の通信制御方法。
【請求項２３】
前記制御ステップは、前記セットアップ時間より前に到着しないデータは、データを一定時間だけ遅延させる遅延部で遅延させたデータを入力するように制御する前記第２の制御信号を生成することを特徴とする請求項１７又は請求項１８のいずれかに記載の通信制御方法。
【請求項２４】
前記制御ステップは、前記セットアップ時間より前に到着しないデータを前記遅延部で前記第２のクロック信号の１遅延させることを特徴とする請求項２３に記載の通信制御方法。
【請求項２５】
前記制御ステップは、前記セットアップ時間を、動作時に動的に変更することを特徴とする請求項１７から請求項２０のいずれかに記載の通信制御方法。
【請求項２６】
前記制御ステップは、前記第１のクロック信号の異なるサイクルで出力されるデータの中から前記セットアップ時間より前に到着する出力を選択して入力するように、前記第２の制御信号によって制御することを特徴とする請求項１７又は請求項１８に記載の通信制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
機能ブロックを複数有する半導体装置に関し、特に、異なるクロック周波数で動作する複数のコア間で通信する半導体装置及びその方法に関する。
【背景技術】
【０００２】
従来、異なるクロック周波数で動作するコア（機能ブロック）同士の通信方法には、主に同期方式及び非同期方式の２種類がある。【０００３】
図１２は、同期方式を用いて通信する半導体装置を示す図である。【０００４】
このような半導体装置において、コアＡとコアＢとで通信する場合、同期方式では通信する２つのコアの各クロックの周波数比が1対整数倍(例えば、1:2, 1:3, ...等)や、1対整数分の1倍(例えば、1:1/2, 1:1/3, ...等)であり、かつ２つのクロックの位相が等しいことが条件となる。すなわち、同期通信はクロック同士が同期しているコア間でのみ行うことが出来る通信方法である。【０００５】
図１３は、非同期方式を用いて通信する半導体装置を示す図である。【０００６】
２つのコアの各クロックの周波数比が1対整数倍や、1対整数分の1倍ではなく、かつ２つのクロックの位相が等しくないコア間で行われる通信が非同期通信である。非同期方式を用いて通信すると、信号を出力するタイミングと信号を入力するタイミングとが非同期関係になり、信号が“０”と“１”との間をある時間揺らぐ状態（この状態をmetastability：メタスタビリティという）になるので、メタスタビリティによる誤動作を防止する為、通常、同期化回路が用いられる技術が提案されている（例えば、特許文献１）。【０００７】
特許文献１に記載の技術は、第１のクロック信号に同期して所定の動作を行う第１のコアと、第２のクロック信号に同期して所定の動作を行う第２のコアとの間に同期化回路を設けている。そして、この同期化回路は第１のコアの出力データを第１のクロック信号に同期してラッチし、ラッチした信号を第２のクロック信号に同期して出力している。【０００８】
また、上記以外にもメタスタビリティによる誤動作を防止する技術が提案されている（例えば、特許文献２）。【０００９】
特許文献２に記載の技術は、データ入力信号とクロック入力信号の変化を検知し、セットアップ若しくはホールドタイムを満足しない場合にフリップフロップのデータ入力の信号を変更しないように制御して、メタスタビリティによる誤動作を防止している。
【特許文献１】特開２００３‐２７３８４７号
【特許文献２】特開平６‐４５８８０号
【発明の開示】
【発明が解決しようとする課題】
【００１０】
従来の同期方式は、各コアのクロック周波数比が1対整数倍や1対整数分の1倍に限定されるという問題がある。この制限は通信するコアの数が増加するにつれて益々深刻になる。【００１１】
さらに近年、消費電力の低減の為に、各コア毎に周波数及び電源電圧を動作時に動的に変更する動的周波数電圧制御方式(Dynamic Frequency Voltage Scaling: DFVS)が提案されている。コア毎にDFVSを実施する場合、電源電圧が変更されることによりクロックの分配遅延が変化するため、コア間で同期関係が保てなくなる。すなわち、従来の同期方式では通信できないという問題がある。また、各コアが設定できるクロック周波数が限定されていると、DFVSの低電力化に対する効果が減少するという問題がある。【００１２】
一方、上述した特許文献１のような非同期方式には主に次に示す問題がある。【００１３】
第１に、非決定性動作の問題がある。チップデバイスの特性ばらつきや動作環境等に依存して、クロックサイクルのレベルでの動作が非決定的(nondeterministic)になる。その結果、ハードウェア/ソフトウェアの検証・デバックやテストにかかるコストが増大してしまう。【００１４】
第２に、通信レイテンシが大きいという問題がある。同期化に要する遅延の為に通信レイテンシが増加し、通信スループットが低下する。その結果、性能の低下や、それを補償するために面積・電力が増加してしまう。【００１５】
第３に、メタスタビリティによる誤動作の可能性があり、この結果、信頼性が低下するという問題がある。これは、クロック周波数の増加や低電圧化や同期化を行う箇所の増加にともない益々悪化する。信頼性を向上するには、メタスタビリティを解消する為の時間を十分に確保する必要があるが、その結果、同期化に要する遅延が益々増大し、通信レイテンシが増加する。【００１６】
又、上述した特許文献２の技術は、動作時にデータ入力信号とクロック入力信号の変化を検知し、セットアップ若しくはホールドタイムを満足しているか否かを判断するが、チップデバイスの特性ばらつきや動作環境等に依存してその判断基準が変動するため、クロックサイクルのレベルでの動作が非決定的になるという問題がある。【００１７】
そこで、本発明の目的は、上記問題点を鑑みて発明されたものであって、各コアが設定できるクロック周波数の自由度が大きく、動作が決定的(deterministic)で、通信レイテンシが小さく、信頼性の高い、コア間の通信ができる技術を提供することにある。【００１８】
又、本発明の目的は、半導体装置内の通信履歴から半導体装置の性能に影響を与える要因を解析し、次世代の半導体装置に反映させることにより、信頼性の高い半導体装置を提供することにある。
【課題を解決するための手段】
【００１９】
上記課題を解決するための第１の発明は、半導体装置であって、第１のクロック信号に基づいてデータを出力する第１の信号処理回路と、ある一定の周期で第１のクロック信号の立ち上がり又は立ち下がりと一致する第２のクロック信号に基づいてデータ入力する第２の信号処理回路と、前記第１のクロック信号及び前記第２のクロック信号に関する情報に基づいて、前記第２のクロック信号のセットアップ時間より前に前記第２の信号処理回路に到着するデータのみを出力するように前記第１の信号処理回路を制御する第１の制御信号を生成して、この生成した第１の制御信号を前記第１のクロック信号の立ち上がり又は立ち下がりのタイミングによって変化させる、又は前記セットアップ時間より前に到着するデータのみを入力するように前記第２の信号処理回路を制御する第２の制御信号を生成して、この生成した第２の制御信号を前記第２のクロック信号の立ち上がり又は立ち下がりのタイミングによって変化させる制御回路とを有することを特徴とする。
【００２０】
上記課題を解決するための第２の発明は、半導体装置であって、第１のクロック信号に基づいてデータを出力する第１の信号処理回路と、ある一定の周期で第１のクロック信号の立ち上がり又は立ち下がりとの位相差がある一定値になる第２のクロック信号に基づいてデータ入力する第２の信号処理回路と、前記第１のクロック信号及び前記第２のクロック信号に関する情報に基づいて、前記第２のクロック信号のセットアップ時間より前に前記第２の信号処理回路に到着するデータのみを出力するように前記第１の信号処理回路を制御する第１の制御信号を生成し、この生成した第１の制御信号を前記第１のクロック信号の立ち上がり又は立ち下がりのタイミングによって変化させる、又は前記セットアップ時間より前に到着するデータのみを入力するように前記第２の信号処理回路を制御する第２の制御信号を生成し、この生成した第２の制御信号を前記第２のクロック信号の立ち上がり又は立ち下がりのタイミングによって変化させる制御回路とを有することを特徴とする。
【００２１】
上記課題を解決するための第３の発明は、上記第１又は第２の発明において、前記制御回路は、前記第１のクロック信号に同期して複数のデータを入力された順に、ある一定の周期に予め定められた数のデータを出力するように制御する前記第１の制御信号を生成する出力制御回路であることを特徴とする。
【００２２】
上記課題を解決するための第４の発明は、上記第１又は第２の発明において、前記制御回路は、複数のデータの中から前記セットアップ時間より前に到着するデータを選択して入力するように制御する前記第２の制御信号を生成する入力制御回路であることを特徴とする。
【００２３】
上記課題を解決するための第５の発明は、上記第１又は第２の発明において、前記制御回路は、前記セットアップ時間より前に到着しないデータを出力しないように前記第１の信号処理回路を制御する前記第１の制御信号を生成する出力制御回路であることを特徴とする。
【００２４】
上記課題を解決するための第６の発明は、上記第１又は第２の発明において、前記制御回路は、前記セットアップ時間より前に到着しないデータを入力しないように前記第２の信号処理回路を制御する前記第２の制御信号を生成する入力制御回路であることを特徴とする。
【００２５】
上記課題を解決するための第７の発明は、上記第１又は第２の発明において、前記制御回路は、前記セットアップ時間より前に到着しないデータは、データを一定時間だけ遅延させる遅延部で遅延させたデータを入力するように制御する前記第２の制御信号を生成する遅延選択制御回路であることを特徴とする。
【００２６】
上記課題を解決するための第８の発明は、上記第７の発明において、前記遅延部は、前記セットアップより前に到着しないデータを前記第２のクロック信号の１クロック分遅延させることを特徴とする。【００２７】
上記課題を解決するための第９の発明は、上記第１から第８のいずれかの発明において、前記データは、
前記第１のクロックに同期して所定の動作を行う第１の機能部から出力される、処理要求を示す処理要求データ、若しくは処理要求データを受信したことを示す処理要求リセットデータであることを特徴とする。【００２８】
上記課題を解決するための第１０の発明は、上記第９の発明において、前記処理要求データ及び前記処理要求リセットデータは、前記第１の機能部と、前記第２のクロックに同期して所定の動作を行う第２の機能部との間で送受信されるデータであることを特徴とする。【００２９】
上記課題を解決するための第１１の発明は、上記第９の発明において、前記処理要求データ及び前記処理要求リセットデータは、前記第１の機能部と、バスとの間で送受信されるデータであることを特徴とする。【００３０】
上記課題を解決するための第１２の発明は、上記第１から第１１のいずれかの発明において、前記半導体装置は、
前記データの送受信中の動作状況を履歴情報として保持する履歴保存手段を有することを特徴とする。【００３１】
上記課題を解決するための第１３の発明は、上記第１２の発明において、前記半導体装置は、
前記履歴保存手段が保持する履歴情報に基づいて、半導体装置の性能低下の原因を解析する解析手段を有することを特徴とする。【００３２】
上記課題を解決するための第１４の発明は、上記第１２又は第１３の発明において、前記履歴保存手段は、前記履歴情報を外部に出力する出力手段を有することを特徴とする。【００３３】
上記課題を解決するための第１５の発明は、上記第１から第１４のいずれかの発明において、前記セットアップ時間を、動作時に動的に変更することを特徴とする。【００３４】
上記課題を解決するための第１６の発明は、上記第１又は第２の発明において、前記第１の信号処理回路は、前記第１のクロック信号の異なるサイクルでデータを出力する複数のフリップフロップを有し、前記制御回路は、前記複数のフリップフロップの出力の中から前記セットアップ時間より前に到着する出力を、前記第２の信号処理回路が選択して入力するように、前記第２の制御信号によって制御することを特徴とする。
【００３５】
上記課題を解決するための第１７の発明は、半導体装置の通信制御方法であって、第１のクロック信号に基づいてデータを出力する第１の信号処理ステップと、ある一定の周期で第１のクロック信号の立ち上がり又は立ち下がりと一致する第２のクロック信号に基づいてデータ入力する第２の信号処理ステップと、前記第１のクロック信号及び前記第２のクロック信号に関する情報に基づいて、前記第２のクロック信号のセットアップ時間より前に前記第２の信号処理回路に到着するデータのみを出力するように前記第１の信号処理回路を制御する第１の制御信号を生成して、この生成した第１の制御信号を前記第１のクロック信号の立ち上がり又は立ち下がりのタイミングによって変化させる又は前記セットアップ時間より前に到着するデータのみを入力するように前記第２の信号処理回路を制御する第２の制御信号を生成して、この生成した第２の制御信号を前記第２のクロック信号の立ち上がり又は立ち下がりのタイミングによって変化させる制御ステップとを有することを特徴とする。
【００３６】
上記課題を解決するための第１８の発明は、半導体装置の通信制御方法であって、第１のクロック信号に基づいてデータを出力する第１の信号処理ステップと、ある一定の周期で第１のクロック信号の立ち上がり又は立ち下がりとの位相差がある一定値になる第２のクロック信号に基づいてデータ入力する第２の信号処理ステップと、前記第１のクロック信号及び前記第２のクロック信号に関する情報に基づいて、前記第２のクロック信号のセットアップ時間より前に前記第２の信号処理回路に到着するデータのみを出力するように前記第１の信号処理回路を制御する第１の制御信号を生成し、この生成した第１の制御信号を前記第１のクロック信号の立ち上がり又は立ち下がりのタイミングによって変化させる、又は前記セットアップ時間より前に到着するデータのみを入力するように前記第２の信号処理回路を制御する第２の制御信号を生成し、この生成した第２の制御信号を前記第２のクロック信号の立ち上がり又は立ち下がりのタイミングによって変化させる制御ステップとを有することを特徴とする。
【００３７】
上記課題を解決するための第１９の発明は、上記第１７又は第１８の発明において、前記制御ステップは、前記第１のクロック信号に同期して複数のデータを入力された順に、ある一定の周期に予め定められた数のデータを出力するように制御する前記第１の制御信号を生成することを特徴とする。
【００３８】
上記課題を解決するための第２０の発明は、上記第１７又は第１８の発明において、前記制御ステップは、複数のデータの中から前記セットアップ時間より前に到着するデータを選択して入力するように制御する前記第２の制御信号を生成することを特徴とする。
【００３９】
上記課題を解決するための第２１の発明は、上記第１７又は第１８の発明において、前記制御ステップは、前記セットアップ時間より前に到着しないデータを出力しないように制御する前記第１の制御信号を生成することを特徴とする。
【００４０】
上記課題を解決するための第２２の発明は、上記第１７又は第１８の発明において、前記制御ステップは、前記セットアップ時間より前に到着しないデータを入力しないように制御する前記第２の制御信号を生成することを特徴とする。
【００４１】
上記課題を解決するための第２３の発明は、上記第１７又は第１８の発明において、前記制御ステップは、前記セットアップ時間より前に到着しないデータは、データを一定時間だけ遅延させる遅延部で遅延させたデータを入力するように制御する前記第２の制御信号を生成することを特徴とする。
【００４２】
上記課題を解決するための第２４の発明は、上記第２３の発明において、前記制御ステップは、前記セットアップ時間より前に到着しないデータを前記遅延部で前記第２のクロック信号の１遅延させることを特徴とする。
上記課題を解決するための第２５の発明は、上記第１７から第２０のいずれかの発明において、前記制御ステップは、前記セットアップ時間を、動作時に動的に変更することを特徴とする。
上記課題を解決するための第２６の発明は、上記第１７又は第１８の発明において、前記制御ステップは、前記第１のクロック信号の異なるサイクルで出力されるデータの中から前記セットアップ時間より前に到着する出力を選択して入力するように、前記第２の制御信号によって制御することを特徴とする。
【００４３】
本発明の半導体装置は、送信する側のクロックと受信側のクロックのエッジ間の時間差が、ある設計時に決定する遅延設計値Tdよりも大きい場合はデータ通信し、小さい場合はデータ通信しない。【００４４】
データを通信しない第１の方法として、送信側がそのクロックエッジではデータを出力しない、または受信側がそのクロックエッジではデータを入力しない方法がある。第２の方法として、データを遅延させて受信側が受信側の次のクロックのエッジで入力するようにする。
【発明の効果】
【００４５】
本発明によると、設計時に予め想定する範囲内で、各コアのクロック周波数を自由に設定することが可能であり、そのクロックにより同期的に通信しているため、動作が決定的で、通信レイテンシが小さく、信頼性の高い、コア間通信を実現することができる。又、これにより、非同期方式で問題となるメタスタビリティ問題を回避し、動作がサイクルレベルで確定的で、かつ低レイテンシ、低スループットのコア間通信を実現することができる。【００４６】
更に、半導体装置内の通信履歴から半導体装置の性能に影響を与える要因を解析しているので、次世代の半導体装置に反映させ、信頼性の高い半導体装置を提供することができる。
【発明を実施するための最良の形態】
【００４７】
本発明の実施の形態を説明する。【００４８】
本発明の半導体装置は、クロック信号clkAに同期してデータを送信するコアＡと、ある一定の周期でクロック信号clkAの立ち上がり又は立ち下がりと一致するクロック信号clkBに同期してデータ受信するコアＢと、コアＡとコアＢとの間の通信を制御する制御部とを有する。【００４９】
制御部は、クロック信号clkBのセットアップ時間より前に到着するデータのみをコアＢが受信できるように制御する。【００５０】
制御する方法としては、クロック信号clkAの立ち上がりエッジとその立ち上がりのすぐ後に立ち上がるクロック信号clkBの立ち上がりエッジとの位相差に相当する時間が遅延設計値Td以下の場合には、コアAはデータを出力しない又はコアBは入力しないように制御する。あるいは、クロック信号clkAの立ち上がりエッジとその立ち上がりのすぐ後に立ち上がるクロック信号clkBの立ち上がりエッジとの位相差に相当する時間がTd以下の場合には、データを遅延させてコアBが次のクロックエッジのタイミングで入力できるように制御する。【００５１】
以下に具体的な実施例を説明する。
【実施例１】
【００５２】
本発明における実施例１について説明する。【００５３】
図１は、本発明における実施例１の半導体装置の構成図である。【００５４】
コアＡ及びコアＢは、所定の機能を有する回路ブロックであり、例えばＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）等である。各コアは、各々に入力される各クロックに同期して所定の処理を行う。【００５５】
ここで、各コアに入力されるクロック信号について説明する。【００５６】
図２は、コアＡに入力されるクロック信号clkA及びコアＢに入力されるクロック信号clkBのタイミングチャートである。【００５７】
クロック信号clkAとクロック信号clkBとの周波数は、任意の基準周波数をｆ（ｆ＞０）とした場合、クロック信号clkAはmf、クロック信号clkBはnf(m,
nは整数)になるように設計される。また、クロック信号clkAとクロック信号clkBとの位相関係が常に一定になるように、即ち、ある一定の周期で各クロック信号の立ち上がり又は立ち下がりが一致するように、各コアに入力される前に位相調整回路１０で調整される。このように調整されたクロック信号clkAはmサイクル毎にクロック信号clkBに対する位相関係が一巡（位相が一致）し、クロック信号clkBはnサイクル毎にクロック信号clkAに対する位相関係が一巡（位相が一致）する。図２は、例として上記ｍが８、ｎが５である場合、すなわちクロック信号clkAの周波数が８ｆ、クロック信号clkBの周波数が５ｆである場合を示している。この場合、クロック信号clkAは８サイクル毎、クロック信号clkBは５サイクル毎にそれぞれのクロック信号の立ち上がりが一致する。また、クロック信号clkAとクロック信号clkBとの立ち上がりが一致するサイクルを０として、それぞれのクロックの各サイクルにつけた番号を相番号と呼ぶことにする。相番号が０のサイクルから、クロック信号clkAはｍサイクル後、クロック信号clkBはｎサイクル後に再びそれぞれのクロックの立ち上がりが一致するので、相番号はそれぞれｍ及びｎで充分となる。尚、位相調整回路１０は、例えばDLL（Digital Locked
Loop）回路等の遅延調整回路により実現することが出来る。たとえ、各コアの電圧が動的に変化する場合でも、それに追従して動的に位相調整することが可能である。【００５８】
再び図１を参照すると、コアＡは、クロック信号clkAに同期して所定の動作を行う各種機能部３Ａと、フリップフロップ１と、データ出力制御回路１０１とを有する。ここで、機能部とは例えばＣＰＵやＤＳＰ等における機能実行部に相当する。【００５９】
フリップフロップ１は、データ出力制御回路１０１の制御に基づいて、信号をクロック信号clkAに同期して出力する。尚、本実施例では、クロック信号clkAの立ち上がりエッジのタイミングで出力する場合を用いて説明するが、クロック信号clkAの立ち下がりエッジのタイミングで出力してもよい。【００６０】
データ出力制御回路１０１は、コアＡからコアＢへデータを送信する場合、コアＡからコアＢへのデータ送信時間を考慮して、コアＢのフリップフロップ２のセットアップ時間より前に到着するデータのみを送信するように、クロック信号clkA及びクロック信号clkBの周波数とクロック信号clkAの相番号とに基づいてフリップフロップ１を制御する。詳細に述べると、例えば図２のクロック信号clkAの相番号３の立ち上がりエッジのタイミングでデータを出力すると、このデータを入力するタイミングは、クロック信号clkAの相番号３の立ち上がりエッジより後のクロック信号clkBの立ち上がりエッジのタイミングである。しかしながら、クロック信号clkBの相番号２の立ち上がりエッジのようにクロック信号clkAの立ち上がりエッジから、その後に立ち上がるクロック信号clkBの立ち上がりエッジまでの時間が短すぎると、正しいデータを入力することができない。従ってデータ出力制御回路１０１は、クロック信号clkAの立ち上がりエッジからその後に立ち上がるクロック信号clkBの立ち上がりエッジまでの位相差に相当する時間が遅延設計値Td以下の場合には、クロック信号clkAの相番号３の立ち上がりエッジのタイミングではデータを出力しないようにフリップフロップ１を制御する。また、図２のクロック信号clkAの相番号０及び相番号１のように、クロック信号clkBの相番号１の立ち上がりエッジまでの位相差が遅延設計値Td以上である立ち上がりエッジが２つある場合、どちらか一方の立ち上がりエッジのタイミングではデータを出力しないようにフリップフロップ１を制御するか、若しくはコアＡの機能部３Ａ自身がどちらか一方のサイクルにのみフリップフロップ１へデータを出力するように制御する。【００６１】
コアＢはクロック信号clkBに同期して所定の動作を行う各種機能部３Ｂと、フリップフロップ２と、データ入力制御回路１０２とを有する。【００６２】
フリップフロップ２は、データ入力制御回路１０２の制御に基づいて、信号をクロック信号clkBに同期して入力する。尚、本実施例では、クロック信号clkBの立ち上がりエッジのタイミングで入力する場合を用いて説明するが、クロック信号clkBの立ち下がりエッジのタイミングで入力してもよいものとする。【００６３】
データ入力制御回路１０２は、コアAからコアBへデータを送信する場合、データの到着がコアＢのフリップフロップ２のセットアップ時間に間に合わないデータを入力しないように、クロック信号clkA及びクロック信号clkBの周波数とクロック信号clkBの相番号とに基づいてフリップフロップ２を制御する。詳細に述べると、クロック信号clkAのある立ち上がりエッジからクロック信号clkBのある立ち上がりエッジまでの位相差が遅延設計値Td以下の場合には、そのサイクルではデータを入力しないようにフリップフロップ２を制御する。【００６４】
ここで、遅延設計値Tdの決定方法について図３を参照して説明する。【００６５】
遅延設計値Tdは、フリップフロップ１がクロック信号clkAのある立ち上がりエッジのタイミングでデータ送信を開始してからコアＢが受信するまでの時間であるデータ送信時間を考慮して設定する。詳細には、クロック信号clkAとクロック信号clkBとの間のクロックスキューの時間＋クロックジッタの時間をTskewG、フリップフロップの遅延時間をTff、フリップフロップのセットアップ時間をTsu、最小サイクル時間（最大周波数時のサイクル時間）をTcyc（min）とすると、遅延設計値Tdは、Tcyc（min）＞Td＞TskewG＋Tsu＋Tffとなるように設定することになる。【００６６】
続いて、本実施例の動作について説明する。尚、本実施例では、ｍ＝８、ｎ＝５の場合を用いて説明する。【００６７】
図４は、本実施例においてコアＡからコアＢにデータを送信する際にデータ出力制御回路１０１がデータの出力を制御する場合の動作を説明するためのタイムチャートである。【００６８】
図中のクロック信号clkAはコアＡのクロック信号clkAであり、図中のクロック信号clkBはコアＢのクロック信号clkBである。ｍ＝８であるため、クロック信号clkAの周波数は８ｆであり、相番号は０〜７までとなる。同様にｎ＝５であるためクロック信号clkBの周波数は５ｆであり、相番号は０〜５までとなる。クロック信号clkA、クロック信号clkBの各相番号が０のときに位相が一致(各クロック信号の立ち上がりのタイミングが一致)しているので、クロック信号clkAの８サイクル毎、クロック信号clkBの５サイクル毎に位相関係が一巡することになる。すなわち、データ出力制御回路１０１は、クロック信号clkAの８サイクル内及びクロック信号clkBの５サイクル内の位相関係を考慮してデータの通信制御を行うことになる。Dout_ENは、データ出力制御回路１０１からの制御信号である。Din_ENは、データ出力制御回路１０２からの制御信号である。Doutは、フリップフロップ１が出力する入力信号である。Dinは、フリップフロップ２が出力し、コアＢの機能部３Ｂが入力する信号である。【００６９】
ここで、遅延設計値Tdとしてクロック信号clkAのサイクル時間の半分を選択した場合、図４に示すように、クロック信号clkAの相番号３の立ち上がりエッジからクロック信号clkBの相番号２の立ち上がりエッジ、及びクロック信号clkAの相番号６の立ち上がりエッジからクロック信号clkBの相番号４の立ち上がりエッジへの位相差に相当する時間がTd以下になる。このことは、クロック信号clkA及びクロック信号clkBの周波数とクロック信号clkAの相番号とからわかるので、この場合、データ通信しないようにデータ出力制御回路１０１は制御することになる。【００７０】
コアＡがデータを出力しないように制御する場合、データ出力制御回路１０１はクロック信号clkAの周波数８ｆ、クロック信号clkBの周波数５ｆ及びクロック信号clkAの相番号０〜７が与えられるので、クロック信号clkAの相番号３及び６の立ち上がりエッジのタイミングで出力しないように制御する。また、クロック信号clkAの相番号０及び１の立ち上がりエッジのタイミングで出力されたデータを、クロック信号clkBの相番号１の立ち上がりエッジのタイミングで入力することが出来るが、ここではクロック信号clkAの相番号１の立ち上がりエッジのタイミングで出力されたデータを受け取るようにする為、相番号０のタイミングではデータを出力しないように出力制御回路１０１が制御する場合について説明する。【００７１】
まず、データ出力制御回路１０１は、クロック信号clkAの相番号１及び２でデータを出力するように、クロック信号clkAの相番号０の立ち上がりエッジのタイミングで制御信号Dout_ENをＨｉｇｈにする。【００７２】
データ出力制御回路１０１は、クロック信号clkAの相番号３の立ち上がりエッジのタイミングでフリップフロップ１がデータを出力しないように、クロック信号clkAの相番号２の立ち上がりエッジのタイミングからホールド時間経った後、制御信号Dout_ENをＬｏｗにする。【００７３】
クロック信号clkAの相番号４の立ち上がりエッジのタイミングでフリップフロップ１がデータを出力できるように、クロック信号clkAの相番号３の立ち上がりエッジのタイミングからホールド時間経った後、制御信号Dout_ENをＨｉｇｈにする。【００７４】
データ出力制御回路１０１は、クロック信号clkAの相番号６の立ち上がりエッジのタイミングでフリップフロップ１がデータを出力しないように、クロック信号clkAの相番号５の立ち上がりエッジのタイミングからホールド時間経った後、制御信号Dout_ENをＬｏｗにする。【００７５】
クロック信号clkAの相番号７の立ち上がりエッジのタイミングでフリップフロップ１がデータを出力できるように、クロック信号clkAの相番号６の立ち上がりエッジのタイミングからホールド時間経った後、制御信号Dout_ENをＨｉｇｈにする。【００７６】
次に、クロック信号clkAの相番号０の立ち上がりエッジのタイミングでフリップフロップ１がデータを出力しないように、クロック信号clkAの相番号７の立ち上がりエッジのタイミングで制御信号Dout_ENをＬｏｗにする。【００７７】
以上の動作を繰り返すことにより、非同期方式で問題となるメタスタビリティ問題を回避し、動作がサイクルレベルで確定的で、かつ低レイテンシ、低スループットのコア間通信を実現することができる。【００７８】
位相差に相当する時間がTd以下の場合に、データを通信しないように制御する方法として、上述したコアＡがそのタイミングではデータを出力しないようにデータ出力制御回路１０１がフリップフロップ１を制御する方法と、コアＢがそのタイミングではデータを入力しないようにデータ入力制御回路１０２がフリップフロップ２を制御する方法がある。【００７９】
次に、データ入力制御回路１０２がフリップフロップ２を制御する方法について説明する。【００８０】
図５は、本実施例においてコアＡからコアＢにデータを送信する際にデータ入力制御回路１０２がデータの入力を制御する場合の動作を説明するためのタイムチャートである。【００８１】
コアＢがデータを入力しないように制御する場合、上述した通り、クロック信号clkAの相番号３及び６の立ち上がりエッジのタイミングで出力されたデータを入力しないように制御する。また、クロック信号clkAの相番号０及び１の立ち上がりエッジのタイミングで出力されたデータを、クロック信号clkBの相番号１の立ち上がりエッジのタイミングで入力することが出来るが、ここではコアＡの機能部３Ａがクロック信号clkAの相番号０か１のどちらか一方の立ち上がりエッジのタイミングでしかデータを出力しない場合について説明する。同様に、クロック信号clkAの相番号２、３及び４についても、コアＡの機能部３Ａが相番号２，３，４のいずれか１つの立ち上がりエッジのタイミングでしかデータを出力しないとする。更に、同様に、クロック信号clkAの相番号５、６及び７についても、コアＡの機能部３Ａが相番号５，６，７のいずれか１つの立ち上がりエッジのタイミングでしかデータを出力しないとする。【００８２】
まず、データ入力制御回路１０２は、クロック信号clkAの相番号３の立ち上がりエッジのタイミングでフリップフロップ１が出力したデータを、クロック信号clkBの相番号２の立ち上がりエッジのタイミングでフリップフロップ２が入力しないように、クロック信号clkBの相番号１の立ち上がりエッジのタイミングで制御信号Din_ENをＬｏｗにする。【００８３】
クロック信号clkAの相番号４の立ち上がりエッジのタイミングでフリップフロップ１が出力したデータを、クロック信号clkBの相番号３の立ち上がりエッジのタイミングでフリップフロップ２が入力できるように、クロック信号clkBの相番号２の立ち上がりエッジのタイミングで制御信号Din_ENをＨｉｇｈにする。【００８４】
データ入力制御回路１０２は、クロック信号clkAの相番号６の立ち上がりエッジのタイミングでフリップフロップ１が出力したデータを、クロック信号clkBの相番号４の立ち上がりエッジのタイミングでフリップフロップ２が入力しないように、クロック信号clkBの相番号３の立ち上がりエッジのタイミングで制御信号Din_ENをＬｏｗにする。【００８５】
クロック信号clkAの相番号７の立ち上がりエッジのタイミングでフリップフロップ１が出力したデータを、クロック信号clkBの相番号０の立ち上がりエッジのタイミングでフリップフロップ２が入力できるように、クロック信号clkBの相番号４の立ち上がりエッジのタイミングで制御信号Din_ENをＨｉｇｈにする。また、クロック信号clkAの相番号１の立ち上がりエッジのタイミングでフリップフロップ１が出力したデータは、制御信号Din_ENがＨｉｇｈのままであるため、クロック信号clkBの相番号１の立ち上がりエッジのタイミングでフリップフロップ２が入力する。【００８６】
以上の動作を繰り返すことにより、非同期方式で問題となるメタスタビリティ問題を回避し、動作がサイクルレベルで確定的で、かつ低レイテンシ、低スループットのコア間通信を実現することができる。【００８７】
尚、本実施例ではデータ出力制御回路１０１とデータ入力制御回路１０２とを有する半導体装置を構成例に挙げて説明したが、これに限るものではない。即ち、どちらか一方を有した構成であればよい。また、本実施例では、コアＡからコアＢにデータを送信する場合について説明したため、コアＡがデータ出力制御回路１０１を、コアＢがデータ入力制御回路１０２を有する構成であったが、コアＢからコアＡにデータを送信する場合は、コアＡがデータ入力制御回路１０２を、コアＢがデータ出力制御回路１０１を有する構成となる。又、コアＡ及びコアＢにデータ出力制御回路１０１又はデータ入力制御回路１０２を有する構成をとり、コアＡとコアＢとでデータ送受信する構成であっても良い。
【実施例２】
【００８８】
実施例１において、位相差に相当する時間が遅延設計値Td以下の場合にデータを通信しない方法として、そのタイミングではデータを出力しない又は入力しない方法について説明したが、データを遅延させてコアBが次のクロックエッジのタイミングで入力できるようにしてもよい。本実施例では、データを遅延させる方法について説明する。尚、上述した実施例と同様の構成については、同一番号を付し、詳細な説明を省略する。【００８９】
図６は、本実施例の半導体装置の構成を示す図である。【００９０】
フリップフロップ１は、信号をクロック信号clkAに同期して出力する。尚、本実施例では、クロック信号clkAの立ち上がりエッジのタイミングで出力する場合を用いて説明するが、クロック信号clkAの立ち下がりエッジのタイミングで出力してもよいものとする。【００９１】
フリップフロップ２は、信号をクロック信号clkBに同期して入力する。尚、本実施例では、クロック信号clkBの立ち上がりエッジのタイミングで入力する場合を用いて説明するが、クロック信号clkBの立ち下がりエッジのタイミングで入力してもよいものとする。【００９２】
遅延素子３０は、フリップフロップ１から出力されたデータを遅延値Tdly時間だけ遅延させる。【００９３】
ここで、遅延値Tdlyの決定方法について図３を参照して説明する。【００９４】
遅延値Tdlyは、遅延設計値Td同様、コアＡがクロック信号clkAのある立ち上がりエッジでデータ送信開始してからコアＢが受信するまでの時間であるデータ送信時間を考慮して設定する。
最小サイクル時間(最大周波数時のサイクル時間)をTcyc(min)、クロック信号clkAとクロック信号clkBとの間のクロックスキュー+クロックジッタをTskewG、クロック信号clkA内またはクロック信号clkB内のクロックスキュー+クロックジッタをTskewL、クロック信号clkAとクロック信号clkBの位相差をTpd、フリップフロップの遅延をTff、フリップフロップのセットアップ時間をTsu、フリップフロップのホールド時間をThoとすると、TdlyはTskewG＋Tsu＋Tho＜Tdly＜Tcyc(min)−TskewL−Tsu−Tffとなるように設定する。【００９５】
データ遅延選択制御回路１０３は、クロック信号clkAの周波数、クロック信号clkBの周波数及びクロック信号clkBの相番号に基づいて、コアＡからの出力データであるDoutまたは、その出力を遅延素子３０が遅延値Tdly時間だけ遅延させたDout_DLYのいずれかからのデータをフリップフロップ２が入力するかセレクタ４を制御する。【００９６】
セレクタ４は、データ遅延選択制御回路１０３からの制御信号Dselに基づいて、DoutまたはDout_DLYの出力値を選択する。【００９７】
続いて、本実施例における動作について説明する。【００９８】
図７は、データ遅延選択制御回路１０３の動作を説明するためのタイミングチャートである。尚、本実施例では、基準周波数をfとして、クロック信号clkAの周波数が8f、クロック信号clkBの周波数が5fとした場合の動作を説明する。【００９９】
図中のクロック信号clkAはコアＡのクロック信号clkAであり、図中のクロック信号clkBはコアＢのクロック信号clkBである。ｍ＝８であるため、クロック信号clkAの周波数は８ｆであり、相番号は０〜７までとなる。同様にｎ＝５であるためクロック信号clkBの周波数は５ｆであり、相番号は０〜４までとなる。クロック信号clkA、クロック信号clkBの各相番号が０のときに位相が一致(各クロック信号の立ち上がりのタイミングが一致)しているので、クロック信号clkAの８サイクル毎、クロック信号clkBの５サイクル毎に位相関係が一巡することになる。すなわち、データ遅延選択制御回路１０３は、クロック信号clkAの８サイクル内及びクロック信号clkBの５サイクル内の位相関係を考慮してデータの通信制御を行うことになる。Doutは、フリップフロップ１からの出力データであり、遅延させていないデータである。Dout_DLYは、フリップフロップからの出力データを遅延素子で遅延させたデータである。Dselは、データ遅延選択制御回路１０３からの制御信号である。Dinは、フリップフロップ２が出力するデータである。【０１００】
図７に示すように、クロック信号clkAの相番号３の立ち上がりエッジからクロック信号clkBの相番号２の立ち上がりエッジ、及びクロック信号clkAの相番号６の立ち上がりエッジからクロック信号clkBの相番号４の立ち上がりエッジへの位相差がTd以下となる。このことは、クロック信号clkA及びクロック信号clkBの周波数とクロック信号clkBの相番号とからわかるので、このときデータ遅延選択制御回路１０３は、clkAの相番号３及び相番号６の立ち上がりエッジのタイミングでフリップフロップ１が出力するデータを遅延素子によりTdlyだけ遅延されたデータをフリップフロップ２が入力するデータとして選択する。すなわち、クロック信号clkAの相番号３の立ち上がりエッジからクロック信号clkBの相番号２の立ち上がりエッジ、及びクロック信号clkAの相番号６の立ち上がりエッジからクロック信号clkBの相番号４の立ち上がりエッジでデータを送受信する代わりに、遅延素子３０でTdlyだけ遅延させたデータをフリップフロップ２が入力するようにセレクタ４を制御することにより、クロック信号clkAの相番号３の立ち上がりエッジからクロック信号clkBの相番号３の立ち上がりエッジ、及びクロック信号clkAの相番号６のクロックエッジからクロック信号clkBの相番号０の立ち上がりエッジのタイミングで入力するように制御する。【０１０１】
まず、クロック信号clkAの相番号０又は１の立ち上がりエッジのタイミングでフリップフロップ１が出力したデータを、クロック信号clkBの相番号１の立ち上がりエッジのタイミングでフリップフロップ２がDoutから受信するように、データ遅延選択制御回路１０３はクロック信号clkBの相番号１の立ち上がりエッジのタイミングでは、DselにＬｏｗを出力する。【０１０２】
データ遅延選択制御回路１０３は、クロック信号clkAの相番号３の立ち上がりエッジのタイミングでフリップフロップ１が出力したデータをDout_DLYから受信するように、クロック信号clkBの相番号１の立ち上がりエッジのタイミングで、制御信号DoutをＨｉｇｈにする。【０１０３】
クロック信号clkAの相番号４の立ち上がりエッジのタイミングでフリップフロップ１が出力したデータをDoutから入力するように、クロック信号clkBの相番号２の立ち上がりエッジのタイミングで、制御信号DselをＬｏｗにする。【０１０４】
クロック信号clkAの相番号６の立ち上がりエッジのタイミングでフリップフロップ１が出力したデータを、Dout_DLYから入力するように、クロック信号clkBの相番号３の立ち上がりエッジのタイミングで、制御信号DselをＨｉｇｈにする。【０１０５】
クロック信号clkAの相番号７の立ち上がりエッジのタイミングでフリップフロップ１が出力したデータを、Doutから入力するように、クロック信号clkBの相番号４の立ち上がりエッジのタイミングで、制御信号DselをＬｏｗにする。【０１０６】
以上により、非同期方式で問題となるメタスタビリティ問題を回避し、動作がサイクルレベルで確定的で、かつ低レイテンシ、低スループットのコア間通信を実現することができる。
【実施例３】
【０１０７】
本実施例では、上述した半導体装置を使用したハンドシェイク回路について説明する。尚、上述した構成と同様の構成については同一番号を付し、詳細な説明を省略する。また、本実施例では上述した実施例２を用いた場合について説明するが、実施例１で説明した半導体装置を用いてもよい。【０１０８】
図８は、上述した実施例２の半導体装置を用いたリクエストのハンドシェイク回路を示す図である。尚、リクエストとはデータ通信やデータ処理などにおける処理要求のデータのことである。【０１０９】
ハンドシェイク回路８０は、データ遅延選択制御回路１０３Ａ、データ遅延選択制御回路１０３Ｂ、データ遅延選択回路２０Ａ、データ遅延選択回路２０Ｂ、データ遅延素子３０及び同期式ＳＲフリップフロップ８１を有す。また、コアＡとコアＢとの電源電圧の差を変換するレベルシフタ回路８２を有す。【０１１０】
コアＡの機能部３Ａは、ハンドシェイク回路８０を通じて、リクエストがある旨をコアＢに通知し、コアＢはリクエストを受け取った旨をコアＡに通知する。リクエストの有無は、コアA及びコアBで共有する同期式SRフリップフロップ８１に保持され、それぞれのコアが備えるデータ遅延選択回路２０Ａ及び２０Ｂを通じて同期的にハンドシェイク処理が行われる。【０１１１】
続いて、ハンドシェイクの動作について説明する。【０１１２】
まず、リクエストをセットする動作について説明する。【０１１３】
コアＡの機能部３ＡはReq_setの信号をＨｉｇｈにすることで、同期式SRフリップフロップ８１にリクエストをセットする（ステップＢＳ３０１）。【０１１４】
リクエストがセットされた旨は、同期式SRフリップフロップ８１の出力Doutからの信号がＨｉｇｈとなって出力される（ステップＢＳ３０２）。【０１１５】
このリクエストがセットされた旨を示すDoutの値Ｈｉｇｈは、コアB側にあるデータ遅延選択回路２０Ｂを通じてReq_Bに出力され、コアBにリクエストがある旨が通知される（ステップＢＳ３０３）。【０１１６】
ここで、ステップＢＳ３０３について詳細に説明する。【０１１７】
データ遅延選択制御回路１０３Ｂは、Doutの値がＨｉｇｈになった時、図７のクロック信号clkBの相番号０，１，３のように、この直前のクロック信号clkAの立ち上がりエッジからクロック信号clkBの立ち上がりまでTd以上ある場合は、Doutからの信号を入力するように制御する。フリップフロップ２は、Doutからの信号をクロック信号clkBの立ち上がりエッジのタイミングで入力し、Req_Bに出力する。【０１１８】
図７のクロック信号clkBの相番号2,4のように、直前のクロック信号clkAの立ち上がりからクロック信号clkBの立ち上がりまでがTd以下である場合は、Doutを遅延素子３０によりTdlyだけ遅延させたDout_DLYからの信号を、入力するように制御する。フリップフロップ２はクロック信号clkBの立ち上がりエッジのタイミングで入力し、Req_Bに出力する。【０１１９】
また、図７のクロック信号clkBの相番号0のように、クロック信号clkAの立ち上がりとクロック信号clkBの立ち上がりが等しい場合には、Doutをフリップフロップ２に入力せずに、直接Req_Bに出力するように制御する。【０１２０】
尚、データ遅延選択制御回路１０３Ｂは、クロック信号clkAの周波数、クロック信号clkBの周波数、クロック信号clkBの相番号、及び遅延設計値Tdを参照して、上記のように制御する。これにより、メタスタビリティを回避し、かつ確定的にコアAからのリクエストをコアBに通知する。【０１２１】
上述のステップＢＳ３０１及びＢＳ３０２で説明した、リクエストがセットされた旨を示すDoutの値Ｈｉｇｈは、データ遅延選択回路２０Ａを通じてReq_Aに出力され、同期式SRフリップフロップ８１にリクエストがセットされている旨がコアAに通知される（ステップＡＳ３０３）。コアＡは以前のリクエストがセットされている間は、新たなリクエストをセットすることはできない。【０１２２】
ここで、ステップＡＳ３０３について詳細に説明する。【０１２３】
データ遅延選択制御回路１０３Ａは、Doutの値がＨｉｇｈになった時、この直前のクロック信号clkBの立ち上がりエッジからクロック信号clkAの立ち上がりまでTd以上ある場合は、Doutからの信号を入力するように制御する。フリップフロップ１は、Doutからの信号をクロック信号clkAの立ち上がりエッジのタイミングで入力し、Req_Aに出力する。【０１２４】
直前のクロック信号clkBの立ち上がりからクロック信号clkAの立ち上がりまでがTd以下である場合は、Doutを遅延素子３０によりTdlyだけ遅延させたDout_DLYからの信号を、入力するように制御する。フリップフロップ１はクロック信号clkAの立ち上がりエッジのタイミングで入力し、Req_Aに出力する。【０１２５】
クロック信号clkBの立ち上がりとクロック信号clkAの立ち上がりとが等しい場合には、Doutをフリップフロップ１に入力せずに、直接Req_Aに出力するように制御する。【０１２６】
尚、データ遅延選択制御回路１０３Ａは、クロック信号clkAの周波数、クロック信号clkBの周波数、クロック信号clkAの相番号、及び遅延設計値Tdを参照して、上記ように制御する。【０１２７】
続いてセットされたリクエストをリセットする動作について説明する。【０１２８】
コアBは、リクエストを受信すると、もしくはリクエストの対象となっている処置が完了すると、クロック信号clkBの立ち上がりエッジのタイミングでReq_resetをＨｉｇｈにすることでクロック信号clkBの立ち上がりエッジのタイミングで、同期式SRフリップフロップ８１に保持されているリクエストをリセットする（ステップＡＲ３０１）。このリクエストがリセットされた旨は、同期式SRフリップフロップ８１の出力Doutからの信号がＬｏｗとなって出力される（ステップＡＲ３０２）。【０１２９】
このリクエストがセットされた旨を示すDoutの値Ｌｏｗは、コアＡ側にあるデータ遅延選択回路２０Ａを通じてReq_Aに出力され、コアＡにリクエストがある旨が通知される（ステップＡＲ３０３）。【０１３０】
ここで、ステップＡＲ３０３について詳細に説明する。【０１３１】
データ遅延選択制御回路１０３Ａは、Doutの値がＬｏｗになった時、この直前のクロック信号clkBの立ち上がりエッジからクロック信号clkAの立ち上がりまでTd以上ある場合は、Doutからの信号を入力するように制御する。フリップフロップ１は、Doutからの信号をクロック信号clkAの立ち上がりエッジのタイミングで入力し、Req_Aに出力する。【０１３２】
直前のクロック信号clkBの立ち上がりからクロック信号clkAの立ち上がりまでがTd以下である場合は、Doutを遅延素子３０によりTdlyだけ遅延させたDout_DLYからの信号を、入力するように制御する。フリップフロップ１はクロック信号clkAの立ち上がりエッジのタイミングで入力し、Req_Aに出力する。【０１３３】
クロック信号clkAの立ち上がりとクロック信号clkBの立ち上がりが等しい場合には、Doutをフリップフロップ１に入力せずに、直接Req_Aに出力するように制御する。【０１３４】
尚、データ遅延選択制御回路１０３Ａは、クロック信号clkAの周波数、クロック信号clkBの周波数、クロック信号clkAの相番号、及び遅延設計値Tdlyを参照して、上記ように制御する。その結果、コアAにリクエストがリセットされた旨を通知する。コアAは新たなリクエストをセットすることができる。【０１３５】
上述のステップＡＲ３０１及びＡＲ３０２で説明した、リクエストがリセットされた旨は、コアＢ側のデータ遅延選択回路２０Ｂを通じてDoutの値がReq_Bに出力され、同期式SRフリップフロップ８１にリクエストがリセットされた旨がコアBに通知される（ステップＢＲ３０３）。コアAは以前のリクエストがセットされている間は、新たなリクエストをセットすることはできない。【０１３６】
ここで、ステップＢＲ３０３について詳細に説明する。【０１３７】
データ遅延選択制御回路１０３Ｂは、Doutの値がＬｏｗになった時、この直前のクロック信号clkAの立ち上がりエッジからクロック信号clkBの立ち上がりまでTd以上ある場合は、Doutからの信号を入力するように制御する。フリップフロップ２は、Doutからの信号をクロック信号clkBの立ち上がりエッジのタイミングで入力し、Req_Bに出力する。【０１３８】
直前のクロック信号clkAの立ち上がりからクロック信号clkBの立ち上がりまでがTd以下である場合は、Doutを遅延素子３０によりTdlyだけ遅延させたDout_DLYからの信号を、入力するように制御する。フリップフロップ２はクロック信号clkBの立ち上がりエッジのタイミングで入力し、Req_Bに出力する。【０１３９】
クロック信号clkBの立ち上がりとクロック信号clkAの立ち上がりとが等しい場合には、Doutをフリップフロップ１に入力せずに、直接Req_Bに出力するように制御する。【０１４０】
尚、データ遅延選択制御回路１０３Ｂは、クロック信号clkAの周波数、クロック信号clkBの周波数、クロック信号clkBの相番号、及び遅延設計値Tdlyを参照して、上記のように制御する。【０１４１】
上述したように、本発明のハンドシェイク回路によれば、コア間で同期的にリクエストの送受信が行えるため、非同期方式で問題となるメタスタビリティを回避し、動作がサイクルレベルで確定的でかつ低レイテンシ、低スループットのコア間通信を実現することが出来る。
【実施例４】
【０１４２】
本実施例では、上述したハンドシェイク回路を有するバス・インターフェース回路を備えるSOC（System on a Chip）について説明する。【０１４３】
図９は本発明におけるSOCの構成例である。【０１４４】
SOCを構成する各コアのクロックはすべて、バスのクロックにあわせて位相を調整し、コア間の通信は必ずバスを介して行われる。これにより各コアの周波数範囲に差がある場合でも、コア間が直接通信する方法に比べて、少ない周波数のステップ数で任意のコア間の通信を実現することができる。また、クロック周波数及び電源電圧を変更する場合でも、位相調整回路１０により動的にクロック間の位相を一定に調整するので、同期通信が可能であり、すなわち非同期方式で問題となるメタスタビリティ問題を回避し、動作がサイクルレベルで確定的で、かつ低レイテンシ、低スループットのコア間通信を実現することができる。【０１４５】
図１０は、バス・インターフェース回路の構成例である。【０１４６】
バス・インターフェース回路は、リクエストFIFO(requestFIFO)２１０１、データFIFO(data FIFO)２１０２、データ遅延選択制御回路１０３Ａ、及びデータ遅延選択制御回路１０３Ｂを備える。【０１４７】
リクエストFIFO２１０１は複数のハンドシェイク回路８０を備え、コア(Master Core)２１１０からMReqに入力されるリクエストを、バス(Bus
Interconnect)２１２０にReqを通じて同期的に通知する。また、そのリクエストに対応する命令(Cmd)、アドレス(Addr)、及びデータ(Data)をデータFIFOよりバス２１２０に出力する。尚、ここでのコア(Master
Core)２１１０は、バスに対してリクエストを発行するコア全般を示す。【０１４８】
続いて、動作について説明する。【０１４９】
コアはバスに対するリクエストを、MReqを通じて入力する。同時にそのリクエストの命令/アドレス/データをMCmd/MAddr/MDataを通じて入力する。バス・インターフェース回路は、リクエストFIFOに空きあれば(リクエストがセットされていないハンドシェイク回路があれば)、リクエストFIFO内の空いているハンドシェイク回路のいずれかにそのリクエストをセットする。同時に、入力された命令/アドレス/データをデータFIFOに格納する。また、リクエストを受理した旨をSAckを通じてコアに通知する。一方、リクエストFIFOに空きがなく、リクエストを受理できない場合は、その旨をSAckを通じてコアに通知する。【０１５０】
リクエストFIFOのハンドシェイク回路にセットされたリクエストは、ハンドシェイク回路の機能により同期的にReqを通じてバスに出力される。同時にそのリクエストに対応する命令/アドレス/データがデータFIFOから取り出されて、Cmd/Addr/Dataを通じてバスに出力される。【０１５１】
バスは、リクエストを受理した場合は、その旨をAckを通じてバス・インターフェース回路に通知する。バス・インターフェース回路は受理されたリクエストがセットされていたハンドシェイク回路において，そのリクエストをリセットする。一方、バスがリクエストを受理できない場合は、その旨をAckを通じてバス・インターフェース回路に通知する。バス・インターフェース回路はリクエストが受理されるまで、バスへのリクエストの出力を継続する。【０１５２】
上述したように、本発明のバス・インターフェース回路によりコアとバスとの間で同期的にリクエストの送受信が行えるため、非同期方式で問題となるメタスタビリティ問題を回避し、動作がサイクルレベルで確定的で、かつ、低レイテンシ、低スループットのコア間通信を実現することができる。
【実施例５】
【０１５３】
本実施例では、上述したコア間の通信、コアとバスとの間の通信における各部の動作状況を保持する構成について説明する。尚、上述した構成と同様の構成については同一番号を付し、詳細な説明を省略する。【０１５４】
図１１は、本発明におけるオンチップ・デバッグ回路の構成例である。【０１５５】
コア１１０は、ＣＬＫ生成部１１１からのクロックに同期して動作する。又、他のコアとのデータ通信を、ハンドシェイク回路８０及びバスを介して行う。尚、コア１１０は、上述したコア（Master Core）と同等である。【０１５６】
ＣＬＫ生成部１１１は、ある一定の周期でバスのクロック信号の立ち上がり又は立ち下がりと一致するクロック信号を生成する。【０１５７】
履歴保存部１１２は、実際にデータを出入力（送受信）しているコア及びバスの動作状況を履歴情報として保存するものである。例えば、履歴保存部１１２は、コア及びバスのクロック周波数と、コア及びバスの電源電圧とが変化したタイミングと変化後の値と、コアのクロックの立ち上がりとバスのクロックの立ち上がり又はコアのクロックの立ち下がりとバスのクロックの立ち下がりが一緒になるタイミングとを履歴情報として保存する。更に、ＬＳＢ（Least Significant Bit/Byte）等のバスのデータの一部やreq信号、ack信号の送受信タイミングも履歴情報として保存する。尚、履歴保存は、バスのクロックの立ち上がりまたは立ち下がりエッジのタイミングで保存する構成であっても、若しくはコアのクロックの立ち上がりまたは立ち下がりエッジのタイミングで保存する構成であっても良い。【０１５８】
解析部１１３は、履歴保存部１１２が保持する履歴情報に基づいて半導体装置の性能低下の原因を解析し、コア周波数、コア電源電圧、バス周波数等を制御する。例えば、履歴保存部１１２が保持する履歴情報からreq信号、ack信号の送受信タイミングを解析し、ack信号の送信が遅い場合はバスの周波数を上げ、req信号の送信が遅い場合はコアの周波数を上げる制御をする。【０１５９】
出力部１１４は、履歴保存部１１２の履歴情報を外部に出力する。外部に出力された履歴情報は、デバッグＳ／Ｗ（ソフトウェア）でシミュレートさせ、半導体装置の性能低下の原因を解明する。尚、この出力部は、履歴情報が所定量蓄積させてから所定量毎に送信する構成であっても、予め定められた時間に送信する構成であっても、外部から要求された際に送信する構成であっても良い。【０１６０】
続いて、本実施例における動作について説明する。【０１６１】
コア１１０は、他のコアとのデータ通信を、ハンドシェイク回路８０及びバスを介して行う。【０１６２】
その一方で、履歴保存部１１２は各種情報を収集して履歴情報を保存する。【０１６３】
解析部１１３は、履歴情報に基づいて各種解析を行い、コア周波数、コア電源電圧、バス周波数等を制御する。【０１６４】
履歴保存部１１２は、履歴情報を外部に出力する。【０１６５】
上述した構成をとると、バスの動作状況を履歴情報として保存し、その履歴情報に基づいてコアの周波数等を制御しているので、半導体装置全体の性能向上が可能となる。又、実動作しているコア及びバスの動作状況を履歴保存して外部に出力しているので、次世代の半導体装置に反映させることが可能となる。
【実施例６】
【０１６６】
実施例２において、コアＡからコアＢへの通信を行なう際に、コアＡとコアＢのそれぞれのクロックの位相差が遅延設計値Td以下の場合にデータを通信しない方法として、位相差がTd以下の場合には、データを遅延値Tdlyだけ遅延させたデータをコアＢが入力する方法を説明した。【０１６７】
実施例２の構成を説明する図６を参照すると、コアＢがデータをTdlyだけ遅延させる遅延素子３０を備える構成であるが、遅延素子３０はコアＡが備えてもよい。また、データを遅延させる方法として、遅延素子３０を使用する代わりに、クロックの立下りでデータをラッチするフリップフロップを使用することもできる。【０１６８】
図１４は、コアＡ側でクロックの立下りでデータをラッチするフリップフロップによってデータを遅延させる方法による半導体装置の構成を示す図である。図６の実施例２の構成と同様の構成要素については、同一番号を付し、詳細な説明を省略する。【０１６９】
図１４を参照するとコアＡは、フリップフロップ１の出力信号DoutをクロックclkAの立下りでラッチするフリップフロップ２３０を備える。すなわち、フリップフロップ２３０は信号DoutをクロックclkAのサイクル時間の半分だけ遅延させ、Dout_DLYとして出力する機能を有する。これは遅延値TdlyがクロックclkAのサイクル時間の半分と等しい場合の遅延素子３０と同様の機能であるので、本実施例の動作は図７に示した実施例２の場合と同様になる。本実施例の構成は実施例２の構成と比較して、遅延値TdlyはクロックclkAのサイクル時間の半分に限定されるが、遅延素子の遅延値のばらつきには影響されないという利点がある。
【実施例７】
【０１７０】
コアＡからコアＢへの通信を行なう際に、コアＡとコアＢのそれぞれのクロックの位相差が遅延設計値Td以下の場合には、データを遅延値Tdlyだけ遅延させたデータをコアＢが入力する方法の別の実施例を図１５を参照して説明する。尚、上述した実施例と同様の構成については、同一番号を付し、詳細な説明を省略する。【０１７１】
図１５は、本実施例の半導体装置の構成を示す図である。【０１７２】
コアＡが備えるイネーブル付きフリップフロップ２３１及び２３２は、機能部３Ａが出力する信号Dout0をクロックclkAに同期してラッチし、それぞれ信号Dout1、Dout2としてコアＢへ出力する。ただし、信号をラッチして出力するのはそれぞれのイネーブル信号en1、en2により動作を指示された場合のみである。データ出力選択制御回路２０２は、クロックclkAの相番号を参照して、フリップフロップ２３１及び２３２が１サイクル毎に交互に動作するようにイネーブル信号en1及びen2を生成する。すなわち信号Dout1及びDout2には、それぞれお互いにクロックclkAで1サイクル遅延させた信号が出力されることになる。詳細には、Dout1が出力する信号よりも1サイクル遅い信号がDout2に出力され、Dout2が出力する信号よりも1サイクル遅い信号がDout1に出力される。よって、本実施例では遅延値Tdlyは常にクロックclkAのサイクル時間と等しくなる。【０１７３】
一方、コアＢ側の構成は、実施例６におけるコアＢの構成のデータ遅延選択制御回路１０３をデータ入力選択制御回路２０１に置き換えた以外は、実施例６におけるコアＢの構成と同様の構成である。データ入力選択制御回路２０１の機能はデータ遅延選択制御回路１０３の機能と同様であるが、実施例６及び実施例２では信号Doutに対して常に信号Dout_DLYに遅延した信号が出力されるのに対して、本実施例の構成では信号Dout1またはDout2に交互に遅延した信号が出力されるので、それに対応した制御がなされる。【０１７４】
次に、図１６を参照して本実施例の動作の詳細を説明する。【０１７５】
図１６は、本実施例の動作を説明するためのタイミングチャートである。尚、本実施例では、基準周波数をfとして、クロック信号clkAの周波数が8f、クロック信号clkBの周波数が5fとした場合の動作を説明する。【０１７６】
図中のクロック信号clkAはコアＡのクロック信号clkAであり、図中のクロック信号clkBはコアＢのクロック信号clkBである。ｍ＝８であるため、クロック信号clkAの周波数は８ｆであり、相番号は０〜７までとなる。同様にｎ＝５であるためクロック信号clkBの周波数は５ｆであり、相番号は０〜４までとなる。クロック信号clkA、クロック信号clkBの各相番号が０のときに位相が一致(各クロック信号の立ち上がりのタイミングが一致)しているので、クロック信号clkAの８サイクル毎、クロック信号clkBの５サイクル毎に位相関係が一巡することになる。すなわち、データ出力選択制御回路２０２及びデータ入力選択制御回路２０１は、クロック信号clkAの８サイクル内及びクロック信号clkBの５サイクル内の位相関係を考慮してデータの通信制御を行うことになる。【０１７７】
Dout0はコアＡの機能部３Ａが出力する信号である。【０１７８】
en1、en2はそれぞれフリップフロック２３１及び２３２のイネーブル信号であり、データ出力選択制御回路２０２が出力する。Dout1はフリップフロップ２３１からの出力データであり、Dout2はフリップフロップ２３２からの出力データである。Dselは、データ入力選択制御回路２０１からの制御信号である。Dinは、フリップフロップ２が出力するデータである。【０１７９】
図１６に示すように、フリップフロップ２３１のイネーブル信号en1は、フリップフロップ２３１が１サイクル毎に動作するように、１サイクル毎にHighとLowを交互に繰り返す信号である。同様に、フリップフロップ２３２のイネーブル信号en2は、フリップフロップ２３２が１サイクル毎に動作するように、１サイクル毎にHighとLowを交互に繰り返す信号であるが、フリップフロップ２３２がフリップフロップ２３１と交互に動作するように、en1とは位相が反対である。【０１８０】
図１６に示すように、クロック信号clkAの相番号３の立ち上がりエッジからクロック信号clkBの相番号２の立ち上がりエッジ、及びクロック信号clkAの相番号６の立ち上がりエッジからクロック信号clkBの相番号４の立ち上がりエッジへの位相差がTd以下となる。このことは、クロック信号clkA及びクロック信号clkBの周波数とクロック信号clkBの相番号とからわかるので、このときデータ入力選択制御回路２０１は、clkAの相番号３の立ち上がりエッジのタイミングでフリップフロップ２３２が出力するDout2よりもクロックclkAの1サイクル遅延したDout1をフリップフロップ２が入力するデータとして選択する。同様に、相番号６の立ち上がりエッジのタイミングでフリップフロップ２３１が出力するDout1よりもクロックclkAの1サイクル遅延したDout2をフリップフロップ２が入力するデータとして選択する。それ以外の場合には、フリップフロップ２がDout1またはDout2のうち遅延していない方のデータを入力するように選択する。Dout1またはDout2のいずれが遅延していていずれが遅延いていないかは、データ入力選択制御回路２０１が入力するclkA、clkBの周波数情報、及びclkBの相番号から判断することができる。【０１８１】
次に、Dout1またはDout2のいずれかを選択する信号Dselの詳細を説明する。まず、クロック信号clkAの相番号１の立ち上がりエッジのタイミングでフリップフロップ２３２がDout2に出力したデータを、クロック信号clkBの相番号１の立ち上がりエッジのタイミングでフリップフロップ２がDout2から受信するように、データ入力選択制御回路２０１はクロック信号clkBの相番号１の立ち上がりエッジのタイミングでは、DselにHighを出力する。【０１８２】
次に、データ入力選択制御回路２０１は、クロック信号clkAの相番号３の立ち上がりエッジのタイミングでフリップフロップ２３２が出力したデータDout2ではなく、clkAの相番号２のタイミングでフリップフロップ２３１が出力したデータDout1を受信するように、クロック信号clkBの相番号２の立ち上がりエッジのタイミングでは、制御信号DselをLowにする。【０１８３】
次に、クロック信号clkAの相番号４の立ち上がりエッジのタイミングでフリップフロップ２３１が出力したデータDout1を入力するように、クロック信号clkBの相番号３の立ち上がりエッジのタイミングでは、制御信号DselをＬｏｗにする。【０１８４】
次に、クロック信号clkAの相番号６の立ち上がりエッジのタイミングでフリップフロップ２３１が出力したデータDout1ではなく、clkAの相番号５のタイミングでフリップフロップ２３２が出力したデータDout2を入力するように、クロック信号clkBの相番号４の立ち上がりエッジのタイミングでは、制御信号DselをHighにする。【０１８５】
次に、クロック信号clkAの相番号７の立ち上がりエッジのタイミングでフリップフロップ２３２が出力したデータDout2を入力するように、クロック信号clkBの相番号０の立ち上がりエッジのタイミングでは、制御信号DselをHighにする。【０１８６】
以上により、非同期方式で問題となるメタスタビリティ問題を回避し、動作がサイクルレベルで確定的で、かつ低レイテンシ、低スループットのコア間通信を実現することができる。【０１８７】
また、本実施例によれば、データDout1及びDout2はクロックclkAの２サイクル毎に変化し、２サイクルの間はデータが安定しているため、実施例２や実施例６のデータDout及びDout_DLYがクロックclkAの１サイクル毎に変化するのに比べてタイミングに余裕があるので、特にフリップフロップ２のホールド制約に関して、タイミング設計が容易になるという効果がある。【０１８８】
上述した本実施例はコアＡにおいて２つのフリップフロップ２３１及び２３２を交互に動作させる構成であるが、フリップフロップの数は２つに限らず、３つ以上であっても良い。その場合、データ出力選択制御回路は、それぞれにフリップフロップを順々に同時には１つのフリップフロップのみが動作するように、各フリップフロップのイネーブル信号を生成する。フリップフロップが３つの場合の構成例を図１７に示す。【０１８９】
フリップフロップ２３１、２３２に加えて信号Dout3を出力する３つ目のフリップフロップ２３３を備える。データ出力選択制御回路２０４は、それぞれの３つのフリップフロップのイネーブル信号en1,en2,en3を出力し、３つのフリップフロップが順々に動作するように制御する。データ入力選択制御回路２０３は、３つの信号Dout1,
Dout2,Dout3のいずれか一つをフリップフロップが２つの場合と同様に適切に選択する。この場合データDout1,Dout2及びDout3はクロックclkAの３サイクル毎に変化し、３サイクルの間はデータが安定しているため、さらにタイミング設計が容易になるという効果がある。
【実施例８】
【０１９０】
上述した実施例において、クロックclkAとclkBはある一定周期(相番号０)において立ち上がり又は立ち下さりが一致するクロックであったが、クロックclkAとclkBが相番号０において立ち上がり又は立ち下さりが一致する(すなわち位相差が0)クロックではなくて、ある一定値Tphになるようなクロックであったとしても、上述した各実施例と同様の方法でコア間通信を実現することが可能である。この場合、クロックclkA及びclkBの各エッジ間の位相差は、相番号０の時の位相差が0のときに比べてTphだけずれた位相差になる。【０１９１】
例えば、図１８に示すように、相番号０のときにclkAにくらべてclkBがTphだけ遅くなる場合には、その他の相番号のエッジ間の位相差は、相番号０の時の位相差が０の場合に比べて、Tphだけ大きくなる。データ遅延選択制御回路やデータ入力選択制御回路はそれを考慮してコア間の通信制御を行なうことで、上述した実施例と同様にコア間通信を実現することができる。【０１９２】
実施例７及び図１５に示した構成を、相番号０の時の位相差が０ではなくTphであっても動作するように変更した構成を図１９に示す。図１５の構成との違いは、データ入力選択制御回路２０１をデータ入力選択制御回路２０５に置き換えている。データ入力選択制御回路２０５は、位相差Tphを入力することで、位相差Tphを考慮した制御が可能である。また、相番号０の時に位相差を０にするように調整する必要がないので、位相調整回路１０を省略している。すなわち、本構成によれば、位相を調整するのに必要な回路の面積や電力を削減することができるという効果がある。
【実施例９】
【０１９３】
上述した実施例において、遅延設計値Tdは設計時に決定する定数であるとして説明したが、回路動作時に変更可能な変数であってもよい。【０１９４】
その場合、データ遅延選択制御回路やデータ入力選択制御回路はTdの値を動作時に考慮してコア間の通信制御を行なうことで、上述した実施例と同様にコア間通信を実現することができる。【０１９５】
実施例７及び図１５に示した構成を、動作時にTdが変更可能なように変更した構成を図２０に示す。図１５の構成との違いは、データ入力選択制御回路２０１をデータ入力選択制御回路２０６に置き換えたのみである。データ入力選択制御回路２０６は、遅延設計値Tdを入力することで、動作時のTdの変更に追従した制御が可能である。すなわち、本構成によれば、クロックclkAやclkBのジッタの大きさやclkAとclkB間のスキューの大きさに応じて、遅延設計値Tdを適応的に柔軟に設定できる為、過剰なタイミング余裕を削減することができ、結果としてコア間通信の信頼性を確保しつつ、通信の性能を向上することができるという効果がある。
【図面の簡単な説明】
【０１９６】
【図１】図１は、本発明における実施例１の構成例である。
【図２】図２は、タイミングチャートである。
【図３】図３は、Td及びTdlyを説明するための図である。
【図４】図４は、本発明の実施例１の動作を説明するためのタイミングチャートである。
【図５】図５は、本発明の実施例１の動作を説明するためのタイミングチャートである。
【図６】図６は、本発明の実施例２の構成例である。
【図７】図７は、本発明の実施例２の動作を説明するためのタイミングチャートである。
【図８】図８は、本発明の実施例３の構成例である。
【図９】図９は、本発明の実施例４を説明するためのブロック図である。
【図１０】図１０は、本発明の実施例４のバス・インターフェースの構成例である。
【図１１】図１１は、本発明の実施例５のオンチップ・デバッグ回路の構成例である。
【図１２】図１２は、従来の同期式回路の構成図である。
【図１３】図１３は、従来の非同期式回路の構成図である。
【図１４】本発明の実施例６の構成を示す図である。
【図１５】本発明の実施例７の構成を示す図である。
【図１６】本発明の実施例７の動作を示すタイミングチャートである。
【図１７】本発明の実施例７の第２の構成を示す図である。
【図１８】本発明の実施例８の動作を説明するタイミングチャートである。
【図１９】本発明の実施例８の構成を示す図である。
【図２０】本発明の実施例９の構成を示す図である。
【符号の説明】
【０１９７】
１              コアＡのフリップフロップ
２              コアＢのフリップフロップ
１０            位相調整回路
８０            ハンドシェイク回路
８１            同期式ＳＲフリップフロップ
８２            レベルシフタ
１０１          データ出力制御回路
１０２          データ入力制御回路
１０３          データ選択制御回路
１１１          ＣＬＫ生成部
１１２          履歴保存部
１１３          解析部
８１０          レベルシフタ
【図１】
0004998699.tif 000002
【図２】
0004998699.tif 000003
【図３】
0004998699.tif 000004
【図４】
0004998699.tif 000005
【図５】
0004998699.tif 000006
【図６】
0004998699.tif 000007
【図７】
0004998699.tif 000008
【図８】
0004998699.tif 000009
【図９】
0004998699.tif 000010
【図１０】
0004998699.tif 000011
【図１１】
0004998699.tif 000012
【図１２】
0004998699.tif 000013
【図１３】
0004998699.tif 000014
【図１４】
0004998699.tif 000015
【図１５】
0004998699.tif 000016
【図１６】
0004998699.tif 000017
【図１７】
0004998699.tif 000018
【図１８】
0004998699.tif 000019
【図１９】
0004998699.tif 000020
【図２０】
0004998699.tif 000021