図面を参照しながら本実施形態を説明する。
本実施形態のメモリシステムの構成を説明する。図1は、本実施形態のメモリシステム1のブロック図である。
メモリシステム1は、メモリアクセス装置10と、メモリ20と、CPU(Central Processing Unit)30と、バス40と、を備える。
CPU30は、所定のアプリケーションを起動して、メモリ20に格納されたデータに対してデータ処理を実行するモジュールである。CPU30は、メモリ20からデータを読み出し、アプリケーションの命令に基づいて読み出したデータに対して所定のデータ処理を実行し、データ処理の実行結果をメモリ20へ書き込む。また、CPU30は、メモリ20からデータを読み出すために、メモリアクセスを要求するリクエストを発行する。
メモリアクセス装置10は、メモリアクセスを制御する装置である。メモリアクセス装置10は、バス40を介してCPU30に接続され、バス40を介さずにメモリ20に接続される。また、メモリアクセス装置10は、CPU30により発行されたリクエストに基づいて、メモリアクセスを制御する。
メモリ20は、パラレルインタフェースを有し、様々なデータを記憶する記憶媒体(例えば、DRAM)である。
本実施形態のメモリアクセス装置の構成を説明する。図2は、本実施形態のメモリアクセス装置10の構成図である。
図2に示すように、メモリアクセス装置10は、システム回路12と、メモリアクセス回路14と、を備える。メモリアクセス回路14は、メモリ20と、システム回路12と、に接続される。
システム回路12は、メモリアクセスコマンド(MAC)を発行する回路である。システム回路12は、メモリアクセスコマンド発行部121と、システムクロックツリー122と、メモリデ−タ制御部124 と、を備える。
メモリアクセス回路14は、メモリアクセスを制御する回路である。メモリアクセス回路14は、PLL141と、第1DLL142〜第5DLL146と、第1位相検出回路(以下、「PD(Phase Detector)」という)147aと、第2PD147bと、第1論理回路148〜第3論理回路150と、第1ファイクロックツリー151〜第3ファイクロックツリー153と、設定角度算出部154と、マスタDLL155と、第1増幅回路156〜第4増幅回路159と、を備える。なお、DLLの数は、6つに限られるものではない。すなわち、メモリアクセス回路14は、6つ以上のDLLを備えても良い。また、メモリアクセスコマンド発行部121及び第1論理回路148〜第3論理回路150は、幾つでも良い。
メモリアクセスコマンド発行部121は、メモリ20へのアクセスを命令するメモリアクセスコマンド(MAC)を発行するモジュールである。メモリアクセスコマンド発行部121は、バス40を介して転送されるリクエスト(REQ)とシステムクロック信号(SYSTEM_CLK)とを入力し、入力したリクエスト(REQ)及びシステムクロック信号(SYSTEM_CLK)に基づいてメモリアクセスコマンド(MAC)を発行する。
メモリデ−タ制御部124 は、メモリアクセスコマンド発行部121が発行したメモリアクセスコマンド(MAC)に応じて、バス40から入力されるデータ(DATA)を第1論理回路148と、第2論理回路149と、へ出力する。
PLL141は、基準信号(REF)の周波数を逓倍した、任意の周波数(以下、「基準周波数」という)と出力信号(以下、「PLL出力」という)の位相差を検出し、検出した位相差に基づいて基準周波数にロックされたPLL出力を生成する回路である。PLL出力は、基準クロック信号(PHY_CLK_CK)のソース信号である。
第1ファイクロックツリー151は、所定の第1クロックツリー長TL1の分だけPLL出力を遅延させて基準クロック信号(PHY_CLK_CK)を生成するモジュールである。基準クロック信号(PHY_CLK_CK)は、基準周波数の逓倍の周波数を有する。基準クロック信号(PHY_CLK_CK)は、メモリ20の動作タイミングを制御するためのタイミング制御信号のソース信号(すなわち、メモリ20のソースクロック)であるので、メモリアクセス回路14で使用される信号の中で、クロックジッタを低減する優先度が最も高い信号であり、配線長が最も短い配線で伝送される。
マスタDLL155は、クロックスキューの補正や位相角度の設定に用いられる遅延補正信号(DLL_CNT)を生成する回路である。マスタDLL155は、基準クロック信号(PHY_CLK_CK)を入力し、入力した基準クロック信号(PHY_CLK_CK)のクロックをカウントして遅延補正信号(DLL_CNT)を生成する。遅延補正信号(DLL_CNT)は、補正量ΔCや位相角度の基準となる、基準クロック信号の1サイクル分の周期に相当する遅延素子数を示す信号である。
第1DLL142は、基準クロック信号(PHY_CLK_CK)とシステムクロック信号(SYSTEM_CLK)との間のクロックスキューを補正するクロックデスキュー回路である。システムクロック信号(SYSTEM_CLK)は、システムクロックツリー122により生成される信号である。第1DLL142は、基準クロック信号(PHY_CLK_CK)と、第1PD147aの出力である第1PD出力(PD_OUT1)と、遅延補正信号(DLL_CNT)と、を入力し、第1PD出力(PD_OUT1)に基づいて補正方向を決定し、遅延補正信号(DLL_CNT)に基づいて補正量ΔC2を決定し、決定した補正方向及び補正量ΔC2に基づいて基準クロック信号(PHY_CLK_CK)を遅延させて、第1DLL出力(DLL_OUT1)を生成する。第1DLL出力(DLL_OUT1)は、システムクロック信号(SYSTEM_CLK)のソース信号である。
システムクロックツリー122は、PLL出力に対して所定の第3クロックツリー長TL3の分だけ第1DLL出力(DLL_OUT1)を遅延させて、システムクロック信号(SYSTEM_CLK)を生成するモジュールである。すなわち、システムクロック信号(SYSTEM_CLK)は、クロックスキューが補正された第1DLL出力(DLL_OUT1)に基づいて生成される信号である。
第2ファイクロックツリー152は、基準クロック信号(PHY_CLK_CK)を入力し、PLL出力に対して所定の第2クロックツリー長TL2の分だけ基準クロック信号(PHY_CLK_CK)を遅延させて、DLLクロック信号(DLL_CLK)を生成するモジュールである。DLLクロック信号(DLL_CLK)は、タイミング制御信号の一種であるストローブ信号(DQS)及びデータ信号(DQ)のソース信号である。
第2DLL143は、基準クロック信号(PHY_CLK_CK)とファイクロック信号(PHY_CLK)との間のクロックスキューを補正するクロックデスキュー回路である。ファイクロック信号(PHY_CLK)は、メモリアクセス回路14内で使用される信号である。第2DLL143は、基準クロック信号(PHY_CLK_CK)と、第2PD147bの出力である第2PD出力(PD_OUT2)と、遅延補正信号(DLL_CNT)と、を入力し、第2PD出力(PD_OUT2)に基づいて補正方向を決定し、遅延補正信号(DLL_CNT)に基づいて補正量ΔC1を決定し、決定した補正方向及び補正量ΔC1に基づいて基準クロック信号(PHY_CLK_CK)を遅延させて、第2DLL出力(DLL_OUT2)を生成する。第2DLL出力(DLL_OUT2)は、ファイクロック信号(PHY_CLK)のソース信号である。また、第2DLL143は、補正量ΔC1に対応する基準角度Aを生成する。
第3ファイクロックツリー153は、第2DLL出力(DLL_OUT2)を入力し、PLL出力に対して所定の第2クロックツリー長TL2の分だけ第2DLL出力(DLL_OUT2)を遅延させて、ファイクロック信号(PHY_CLK)を生成するモジュールである。すなわち、ファイクロック信号(PHY_CLK)は、クロックスキューが補正された第2DLL出力(DLL_OUT2)に基づいて生成される信号である。ファイクロック信号(PHY_CLK)のクロックツリー長は、DLLクロック信号(DLL_CLK)のクロックツリー長と等しい。
設定角度算出部154は、第3DLL144〜第5DLL146へ供給すべき設定角度を算出するモジュールである。設定角度は、第1論理回路148の出力であるストローブ信号(DQS)と、第2論理回路149の出力であるデータ信号(DQ)及びデータマスク信号(DM)と、第3論理回路150の出力であるアドレス信号(ADDR)及びコマンド信号(CMD)との間に設定すべき位相差を示す情報である。設定角度算出部154は、第2DLL143により生成された基準角度Aと、メモリアクセス回路14に接続された所定の外部回路(例えば、システム回路12)により生成された所定の位相角度Bと、を加算し、基準角度A及び位相角度Bの和を設定角度として第3DLL144〜第5DLL146へ出力する。位相角度Bは、第3DLL144〜第5DLL146のそれぞれについて、システム回路12により個別に決められる任意の追加補正量を示す角度であって、ストローブ信号(DQS)と、データ信号(DQ)及びデータマスク信号(DM)、アドレス信号(ADDR)及びコマンド信号(CMD)との間に設定すべき位相差に対応する角度である。すなわち、システム回路12は、第3DLL144用の位相角度と、第4DLL145用の位相角度と、第5DLL146用の位相角度と、を個別に決める。なお、位相角度Bは、ストローブ信号(DQS)と、データ信号(DQ)及びデータマスク信号(DM)と、アドレス信号(ADDR)及びコマンド信号(CMD)との間に設定すべき位相差に加えて、ストローブ信号(DQS)とメモリ基準信号(CK)との間に設定すべき位相差を含んでも良い。
第3DLL144〜第5DLL146は、それぞれ、基準クロック信号(PHY_CLK_CK)とDLLクロック信号(DLL_CLK)との間のクロックスキューを補正するクロックデスキュー回路である。加えて、任意の位相角度を設定することができる回路である。第3DLL144〜第5DLL146は、それぞれ、設定角度と、DLLクロック信号(DLL_CLK)と、遅延補正信号(DLL_CNT)と、設定角度算出部154の出力信号と、を入力し、設定角度及び遅延補正信号(DLL_CNT)に基づいて補正量を決定し、決定した補正方向及び補正量に基づいてDLLクロック信号(DLL_CLK)を遅延させて第3DLL出力(DLL_OUT3)〜第5DLL出力(DLL_OUT5)を生成する。第3DLL出力(DLL_OUT3)は、ストローブ信号(DQS)のソース信号である。第4DLL出力(DLL_OUT4)は、データ信号(DQ)及びデータマスク信号(DM)のソース信号である。第5DLL出力(DLL_OUT5)は、アドレス信号(ADDR)及びコマンド信号(CMD)のソース信号である。
第2PD147bは、ファイクロック信号(PHY_CLK)のクロックエッジの位相と基準クロック信号(PHY_CLK_CK)のクロックエッジの位相との間のずれを検出する回路(例えばフリップフロップ)である。第2PD147bは、ファイクロック信号(PHY_CLK)と、基準クロック信号(PHY_CLK_CK)と、を入力し、ファイクロック信号(PHY_CLK)のクロックエッジと基準クロック信号(PHY_CLK_CK)のクロックエッジとのずれを検出し、ファイクロック信号(PHY_CLK)のシステムクロック信号(SYSTEM_CLK)に対する遅延方向(ファイクロック信号(PHY_CLK)がシステムクロック信号(SYSTEM_CLK)に対して遅れているか又は進んでいるか)を示す第2検出信号(PD_OUT2)を生成する。第2検出信号(PD_OUT2)は、ファイクロック信号(PHY_CLK)と基準クロック信号(PHY_CLK_CK)の位相差に応じた1ビットの信号であって、例えば、“0”はファイクロック信号(PHY_CLK)が基準クロック信号(PHY_CLK_CK)に対して遅れていることを示し、“1”はファイクロック信号(PHY_CLK)が基準クロック信号(PHY_CLK_CK)に対して進んでいることを示す。
第1PD147aは、ファイクロック信号(PHY_CLK)のクロックエッジの位相とシステムクロック信号(SYSTEM_CLK)のクロックエッジの位相との間のずれを検出する回路(例えばフリップフロップ)である。第1PD147aは、ファイクロック信号(PHY_CLK)と、システムクロック信号(SYSTEM_CLK)と、を入力し、ファイクロック信号(PHY_CLK)のクロックエッジとシステムクロック信号(SYSTEM_CLK)のクロックエッジとのずれを検出し、ファイクロック信号(PHY_CLK)のシステムクロック信号(SYSTEM_CLK)に対する遅延方向(ファイクロック信号(PHY_CLK)がシステムクロック信号(SYSTEM_CLK)に対して遅れているか又は進んでいるか)を示す第1検出信号(PD_OUT1)を生成する。第1検出信号(PD_OUT1)は、ファイクロック信号(PHY_CLK)とシステムクロック信号(SYSTEM_CLK)の位相差に応じた1ビットの信号であって、例えば、“0”はファイクロック信号(PHY_CLK)がシステムクロック信号(SYSTEM_CLK)に対して遅れていることを示し、“1”はファイクロック信号(PHY_CLK)がシステムクロック信号(SYSTEM_CLK)に対して進んでいることを示す。
第1論理回路148は、メモリ20のストローブ信号(DQS)を生成する回路である。第1論理回路148は、ファイクロック信号(PHY_CLK)と、データ(DATA)と、第3DLL出力(DLL_OUT3)と、を入力し、入力した信号からストローブ信号(DQS)を生成し、生成したストローブ信号(DQS)を、第1増幅回路156を介してメモリ20へ出力する。なお、第1論理回路148は、第3DLL144に組み込まれても良い。
第2論理回路149は、メモリ20のデータ信号(DQ)及びデータマスク信号(DM)を生成する回路である。第2論理回路149は、ファイクロック信号(PHY_CLK)と、データ(DATA)と、第4DLL出力(DLL_OUT4)と、を入力し、入力した信号からデータ信号(DQ)を生成し、生成したデータ信号(DQ)を、第2増幅回路157を介してメモリ20へ出力する。なお、第2論理回路149は、第4DLL145に組み込まれても良い。
第3論理回路150は、メモリ20のアドレス信号(ADDR)及びコマンド信号(CMD)を生成する回路である。第3論理回路150は、ファイクロック信号(PHY_CLK)と、メモリアクセスコマンド(MAC)と、第5DLL出力(DLL_OUT5)と、を入力し、入力した信号からアドレス信号(ADDR)及びコマンド信号(CMD)を生成し、生成したアドレス信号(ADDR)及びコマンド信号(CMD)を、第3増幅回路158を介してメモリ20へ出力する。なお、第3論理回路150は、第5DLL146に組み込まれても良い。
第1増幅回路156は、第1論理回路148から出力されたストローブ信号(DQS)を増幅し、増幅したストローブ信号(DQS)をメモリ20へ出力する回路である。第2増幅回路157は、第2論理回路149から出力されたデータ信号(DQ)及びデータマスク信号(DM)を増幅し、増幅したデータ信号(DQ)をメモリ20へ出力する回路である。第3増幅回路158は、第3論理回路150から出力されたアドレス信号(ADDR)及びコマンド信号(CMD)を増幅し、増幅したアドレス信号(ADDR)及びコマンド信号(CMD)をメモリ20へ出力する回路である。第4増幅回路159は、基準クロック信号(PHY_CLK_CK)を増幅してメモリ20のタイミング制御信号の一種であるメモリ基準信号(CK)を生成し、生成したメモリ基準信号(CK)をメモリ20へ出力する回路である。
本実施形態のメモリアクセス装置で取り扱われる信号を説明する。図3は、本実施形態のメモリアクセス装置10で取り扱われる信号波形図である。
図3に示すように、ある時点において、第2PD147bの入力である第2PD入力は、PLL出力に対して第2クロックツリー長TL2だけ遅延している。この第2PD入力は、第2DLL143がクロックスキューを補正していないときに第3ファイクロックツリー153から出力される信号である。第2クロックツリー長TL2は、第1クロックツリー長TL1より長く、且つ第3クロックツリー長TL3より短い。これは、第3ファイクロックツリー153が、PLL出力に対して第2クロックツリー長TL2の分だけ第2DLL出力(DLL_OUT2)を遅延させるためである。この場合に、第2PD147bは、基準クロック信号(PHY_CLK_CK)と第2PD入力との間に第2クロックツリー長TL2の分の位相差が存在することを示す第2検出信号(PD_OUT2)を生成する。次いで、第2DLL143は、第2検出信号(PD_OUT2)に基づいて基準クロック信号(PHY_CLK_CK)の補正量ΔC1を算出し、基準クロック信号(PHY_CLK_CK)を補正量ΔC1だけ補正して第2DLL出力(DLL_OUT2)を生成する。次いで、第3ファイクロックツリー153は、第2DLL出力(DLL_OUT2)を遅延させて、ファイクロック信号(PHY_CLK)を生成する。これにより、ファイクロック信号(PHY_CLK)の位相が基準クロック信号(PHY_CLK_CK)と等しくなる。
次に、ある時刻において、第1PD147aの入力である第1PD入力は、PLL出力に対して第3クロックツリー長TL3だけ遅延している。この第1PD入力は、第1DLL142がクロックスキューを補正していないときに第3ファイクロックツリー153から出力される信号である。第3クロックツリー長TL3は、第2クロックツリー長TL2より長い。これは、システムクロックツリー122が、第3ファイクロックツリー153より長いためである。この場合に、第1PD147aは、ファイクロック信号(PHY_CLK)と第1PD入力との間に第3クロックツリー長TL3の分の位相差が存在することを示す第1検出信号(PD_OUT1)を生成する。次いで、第1DLL142は、第1検出信号(PD_OUT1)に基づいて基準クロック信号(PHY_CLK_CK)の補正量ΔC2を算出し、基準クロック信号(PHY_CLK_CK)を補正量ΔC2だけ補正して第1DLL出力(DLL_OUT1)を生成する。次いで、システムクロックツリー122は、第1DLL出力(DLL_OUT1)を遅延させて、システムクロック信号(SYSTEM_CLK)を生成する。ファイクロック信号(PHY_CLK)の位相は、上記のとおり、基準クロック信号(PHY_CLK_CK)と等しいため、システムクロック信号(SYSTEM_CLK)の位相もファイクロック信号(PHY_CLK)と等しくなる。補正量ΔC2は、第3クロックツリー長TL3と第1クロックツリー長TL1との差である。
本実施形態のマスタDLLを説明する。図4は、本実施形態のマスタDLL155の構成図である。
図4は、4相クロックを使用するマスタDLL155を示している。マスタDLL155は、複数の遅延素子21a〜21dと、複数の位相比較回路22a〜22dと、遅延制御回路23と、を備える。
複数の遅延素子21a〜21dは、それぞれ、4相の基準クロック信号(0度の基準クロック信号(CLK_0)、90度の基準クロック信号(CLK_90)、180度の基準クロック信号(CLK_180)、及び270度の基準クロック信号(CLK_270))のうちの1相を入力し、入力した基準クロック信号を1相分遅延させて遅延基準クロック信号を生成する。例えば、遅延素子21aは、0度の基準クロック信号(CLK_0)を入力し、入力した0度の基準クロック信号(CLK_0)を90度遅延させて90度の遅延基準クロック信号(CLK_90’)を生成する。
複数の位相比較回路22a〜22dは、それぞれ、4相の基準クロック信号(0度の基準クロック信号(CLK_0)〜270度の基準クロック信号(CLK_270))のうちの1相と、各遅延素子21a〜21dの出力である4相の遅延基準クロック信号(CLK_0’〜 CLK_270’)と、を入力し、基準クロック信号(CLK_0〜 CLK_270)と遅延基準クロック信号(CLK_0’〜 CLK_270’)の位相を比較し、基準クロック信号(CLK_0〜 CLK_270)と遅延基準クロック信号(CLK_0’〜 CLK_270’)の位相差に応じたクロックスキュー信号CS1〜CS4を生成する。
遅延制御回路23は、クロックスキュー信号CS1〜CS4の何れかに基づいて、動作させる遅延素子21a〜21dの数を調整する回路である。遅延制御回路23は、クロックスキュー信号CS1〜CS4を入力し、入力したクロックスキュー信号CS1〜CS4の何れかに基づいて90度に相当する遅延値(すなわち、クロック周期の1/4に相当する時間)と等価の遅延素子(以下、「90度分の遅延素子」という)の数を算出し、算出90度分の遅延素子の数に応じた遅延補正信号(DLL_CNT)を生成し、生成した遅延補正信号(DLL_CNT)を第1DLL142〜第5DLL146へ出力する。
(第1実施形態)
第1実施形態を説明する。第1実施形態は、マスタDLLを使用する場合の第1DLL〜第5DLLの例である。
第1実施形態の第1DLL〜第5DLLの構成を説明する。図5は、第1実施形態の第1DLL142及び第2DLL143の構成図である。図6は、第1実施形態の第3DLL144〜第5DLL146の構成図である。
図5は、4相クロックを使用する第1DLL142及び第2DLL143を示している。第1DLL142及び第2DLL143は、それぞれ、複数の第1マルチプレクサ31a〜31cと、複数の遅延素子アレイ32a及び32bと、複数の第2マルチプレクサ33a及び33bと、位相比較回路34と、遅延制御回路35と、を備える。
第1マルチプレクサ31a〜31cは、それぞれ、4相の基準クロック信号(0度の基準クロック信号(CLK_0)、90度の基準クロック信号(CLK_90)、180度の基準クロック信号(CLK_180)、及び270度の基準クロック信号(CLK_270))のうちの1相を選択する。
第1マルチプレクサ31a及び31cは、それぞれ、位相制御又は遅延補正信号算出に使用される基準クロック信号の複数相のうち任意の基準相を選択する基準相マルチプレクサである。第1マルチプレクサ31a及び31cにより選択される2つの基準相は、互いに同一であっても良いし、異なっても良い。
第1マルチプレクサ31bは、基準クロック信号の複数相のうち、遅延制御回路35により算出される基準角度Aに対して任意の選択相(例えば、1相先の先行相)の基準クロック信号を選択する選択相マルチプレクサである。例えば、第1マルチプレクサ31bは、基準角度Aが120度の場合には180度のクロック信号を選択し、基準角度Aが225度の場合には270度のクロック信号を選択する。基準相及び選択相の組み合わせは4通りである。すなわち、基準相及び選択相の組み合わせは、基準クロック信号(CLK_0及びCLK_90)、(CLK_90及びCLK_180)、(CLK_180及びCLK_270)、並びに(CLK_270及びCLK_0)である。従って、算出される遅延補正信号(DLL_CNT)も4通りである。4相の基準クロック信号が入力されるときにスキュー差が発生するので、各遅延補正信号(DLL_CNT)の値がばらつく場合があるが、タイミングマージンが十分に確保されていれば、各遅延補正信号(DLL_CNT)の値のばらつきは無視することができる。
遅延素子アレイ32aは、第1マルチプレクサ31aにより選択された基準相の基準クロック信号を遅延させて、基準相の遅延基準クロック信号を生成する。遅延素子アレイ32aは、位相制御用の遅延素子アレイ又は遅延補正信号算出用の遅延素子アレイとして使用される。
遅延素子アレイ32bは、第1マルチプレクサ31cにより選択された選択相の基準クロック信号を遅延させて、選択相の遅延基準クロック信号を生成する。遅延素子アレイ32bは、遅延素子アレイ32aが位相制御用の遅延素子アレイとして使用される場合には、遅延補正信号算出用の遅延素子アレイとして使用され、遅延素子アレイ32aが遅延補正信号算出用の遅延素子アレイとして使用される場合には、位相制御用の遅延素子アレイとして使用される。すなわち、2つの遅延素子アレイ32a及び32bの機能は、互いに排他的である。
第2マルチプレクサ33a及び33bは、位相制御用の遅延素子アレイ(例えば、遅延素子アレイ32a)の機能と、遅延補正信号算出用の遅延素子アレイ(例えば、遅延素子アレイ32b)の機能と、を切り替えるモジュールである。
第2マルチプレクサ33aは、遅延素子アレイ32aから出力された基準クロック信号(例えば、位相制御用の基準クロック信号)及び遅延素子アレイ32bから出力された基準クロック信号(例えば、遅延補正信号算出用の基準クロック信号)の一方を選択し、選択した基準クロック信号を第1DLL出力(DLL_OUT1)又は第2DLL出力(DLL_OUT2)として、システムクロックツリー122又は第3ファイクロックツリー153へ出力するDLL出力マルチプレクサである。
第2マルチプレクサ33bは、遅延素子アレイ32aから出力された基準クロック信号(例えば、位相制御用の基準クロック信号)及び遅延素子アレイ32bから出力された基準クロック信号(例えば、遅延補正信号算出用の基準クロック信号)の一方を選択するDLL出力マルチプレクサである。
位相比較回路34は、選択相の基準クロック信号と、第2マルチプレクサ33bにより選択された基準クロック信号と、を入力し、2つの基準クロック信号の位相を比較し、2つの基準クロック信号の位相差に応じたクロックスキュー信号を生成する。
遅延制御回路35は、第1検出信号(PD_OUT1)又は第2検出信号(PD_OUT2)と、遅延補正信号(DLL_CNT)と、クロックスキュー信号とに基づいて、第1マルチプレクサ31a〜31c、第1遅延素子32a、第2遅延素子32b、並びに第2マルチプレクサ33a及び33bを制御する。具体的には、遅延制御回路35は、第1検出信号(PD_OUT1)又は第2検出信号(PD_OUT2)に基づいて補正方向を決定する。また、遅延制御回路35は、クロックスキュー信号に基づいて、遅延補正信号(DLL_CNT)を補正する。次いで、遅延制御回路35は、第1検出信号(PD_OUT1)又は第2検出信号(PD_OUT2)に応じた補正方向に基づいて、補正量ΔCを更新する。これにより、補正量ΔCが増加又は減少し、第1検出信号(PD_OUT1)又は第2検出信号(PD_OUT2)の補正方向が逆になる。次いで、遅延制御回路35は、更新された補正量ΔCと遅延補正信号(DLL_CNT)との値の比率を計算し、計算した比率に基づいてクロックスキューを調整するための基準角度Aを決定する。このとき、遅延制御回路35は、基準角度Aが0〜90度である場合には、0度の基準クロック信号(CLK_0)を選択するように第1マルチプレクサ31aを制御し、基準角度Aが90〜180度である場合には、90度の基準クロック信号(CLK_90)を選択するように第1マルチプレクサ31aを制御し、基準角度Aが180〜270度である場合には、180度の基準クロック信号(CLK_180)を選択するように第1マルチプレクサ31aを制御し、基準角度Aが270〜360度である場合には、270度の基準クロック信号(CLK_270)を選択するように第1マルチプレクサ31aを制御する。
図6は、4相クロックを使用する第3DLL144〜第5DLL146を示している。第3DLL144〜第5DLL146は、それぞれ、複数の第1マルチプレクサ41a〜41cと、複数の遅延素子アレイ42a及び42bと、複数の第2マルチプレクサ43a及び43bと、位相比較回路44と、遅延制御回路45と、を備える。なお、遅延素子アレイ42a及び42b、並びに位相比較回路44は、第1DLL142及び第2DLL143と同様である(図5を参照)。
第1マルチプレクサ41a〜41cは、それぞれ、4相の基準クロック信号(0度の基準クロック信号(CLK_0)、90度の基準クロック信号(CLK_90)、180度の基準クロック信号(CLK_180)、及び270度の基準クロック信号(CLK_270))のうちの1相を選択する。
第1マルチプレクサ41a及び41cは、それぞれ、位相制御又は遅延補正信号算出に使用される基準クロック信号の複数相のうち任意の基準相を選択する基準相マルチプレクサである。第1マルチプレクサ41a及び41cにより選択される2つの基準相は、互いに同一であっても良いし、異なっても良い。
第1マルチプレクサ41bは、基準クロック信号の複数相のうち、遅延制御回路45により算出される設定角度に対して選択相(例えば、1相先の先行相)の基準クロック信号を選択する選択相マルチプレクサである。例えば、第1マルチプレクサ41bは、設定角度が120度の場合には180度のクロック信号を選択し、設定角度が225度の場合には270度のクロック信号を選択する。基準相及び選択相の組み合わせは4通りである。すなわち、基準相及び選択相の組み合わせは、基準クロック信号(CLK_0及びCLK_90)、(CLK_90及びCLK_180)、(CLK_180及びCLK_270)、並びに(CLK_270及びCLK_0)である。従って、算出される遅延補正信号(DLL_CNT)も4通りである。4相の基準クロック信号が入力されるときにスキュー差が発生するので、各遅延補正信号(DLL_CNT)の値がばらつく場合があるが、タイミングマージンが十分に確保されていれば、各遅延補正信号(DLL_CNT)の値のばらつきは無視することができる。
第2マルチプレクサ43a及び43bは、位相制御用の遅延素子アレイ(例えば、遅延素子アレイ42a)の機能と、遅延補正信号算出用の遅延素子アレイ(例えば、遅延素子アレイ42b)の機能と、を切り替えるモジュールである。
第2マルチプレクサ43aは、遅延素子アレイ42aから出力された基準クロック信号(例えば、位相制御用の基準クロック信号)及び遅延素子アレイ42bから出力された基準クロック信号(例えば、遅延補正信号算出用の基準クロック信号)の一方を選択し、選択した基準クロック信号を第3DLL出力(DLL_OUT3)〜第5DLL出力(DLL_OUT5)として、第1論理回路148〜第3論理回路150へ出力する基準クロック選択部である。
第2マルチプレクサ43bは、遅延素子アレイ42aから出力された基準クロック信号(例えば、位相制御用の基準クロック信号)及び遅延素子アレイ42bから出力された基準クロック信号(例えば、遅延補正信号算出用の基準クロック信号)の一方を選択する基準クロック選択部である。
遅延制御回路45は、設定角度及びクロックスキュー信号に基づいて、第1マルチプレクサ41a〜41c、第1遅延素子42a、第2遅延素子42b、並びに第2マルチプレクサ43a及び43bを制御する。具体的には、遅延制御回路45は、設定角度が0〜90度である場合には、0度の基準クロック信号(CLK_0)を選択するように第1マルチプレクサ41aを制御し、設定角度が90〜180度である場合には、90度の基準クロック信号(CLK_90)を選択するように第1マルチプレクサ41aを制御し、設定角度が180〜270度である場合には、180度の基準クロック信号(CLK_180)を選択するように第1マルチプレクサ41aを制御し、設定角度が270〜360度である場合には、270度の基準クロック信号(CLK_270)を選択するように第1マルチプレクサ41aを制御する。
第1実施形態の第1DLL〜第5DLLの動作を説明する。図7は、第1実施形態の第1DLL142〜第5DLL146の動作説明図である。なお、図6の第3DLL144〜第5DLL146は、図5の第1DLL142及び第2DLL143と同様に動作するので、その説明を省略する。
例えば、図7に示すように、基準角度Aが45度である場合には、遅延制御回路35は、0度の基準クロック信号(CLK_0)を選択するように第1マルチプレクサ31a及び31cを制御し、90度の基準クロック信号(CLK_90)を選択するように第1マルチプレクサ31bを制御する。また、設定角度が45度である場合には、図6の遅延制御回路45は、図5の遅延制御回路35と同様に動作する。
また、図5の遅延制御回路35は、基準角度A及び遅延補正信号(DLL_CNT)に基づいて、遅延補正信号算出用の遅延素子アレイ(例えば、遅延素子アレイ32b)の90度分の遅延素子の数を調整する。例えば、遅延制御回路35は、式1を用いて遅延素子の数を算出する。式1において、Nは遅延素子の数であり、Cは遅延補正信号(DLL_CNT)の値であり、MOD(R/90)はRを90で除したときの余りであり、Rは基準角度Aである。遅延制御回路35は、第1DLL142〜第5DLL146に対して最適化された遅延調整量を示す遅延補正信号(DLL_CNT)として、式1の算出結果を保持する。また、図6の遅延制御回路45は、図5の遅延制御回路35と同様に動作する。
遅延制御回路35の動作例を説明する。
はじめに、遅延制御回路35は、任意の相の基準クロック信号(例えば、0度の基準クロック信号(CLK_0))を選択するように、第1マルチプレクサ31cを制御する。次に、遅延制御回路35は、所定の象限(例えば、0度〜90度の象限)で遅延補正信号算出用の遅延素子アレイ(例えば、遅延素子アレイ32b)の遅延素子の数を調整する。次に、遅延制御回路35は、遅延素子の数を調整していない象限(以下、「未調整象限」という)の相の基準クロック信号を選択するように第1マルチプレクサ31cを制御する。次に、遅延制御回路35は、算出済みの遅延補正信号の値を起点として、未調整象限の遅延素子の数を調整する。これにより、第1DLL142〜第5DLL146の初期調整が終了する。初期調整では、未調整象限の遅延素子の数を調整するときに、算出済みの遅延補正信号(すなわち、遅延素子の数を調整した象限の算出結果)を使用するので、遅延補正信号の算出の所要時間を短縮することができる。
遅延制御回路35は、第1DLL142〜第5DLL146の初期調整を終了すると、第1DLL142〜第5DLL146が動作している間に、位相比較回路34を常に監視する。例えば、遅延素子アレイ32bが遅延補正信号算出用の遅延素子アレイとして使用される場合には、遅延制御回路35は、第2マルチプレクサ33bに遅延素子アレイ32bを選択させ、第1マルチプレクサ31bに使用中のクロック(例えば、120度)に対して1相先のクロック(例えば、180度)を選択させ、第1マルチプレクサ31cに使用中のクロックに対して1相前のクロック(例えば、90度)を選択させる。遅延素子アレイ32bは、遅延補正信号(DLL_CNT)を約90度遅延させる。このとき、遅延制御回路35は、クロックスキュー信号が遅延素子を通るパスの方が長いことを示す場合には、遅延補正信号の値を小さくし、クロックスキュー信号が遅延素子を通るパスの方が短いことを示す場合には、遅延補正信号の値を大きくする。例えば、電圧及び温度に応じて遅延素子の特性を補正する場合には、常に、遅延補正信号(DLL_CNT)の値を遅延補正信号算出用の遅延素子アレイを用いて、更新する必要がある。また、ディレイラインとして使用している象限以外の遅延補正信号(DLL_CNT)も、更新する必要がある。
この初期調整と並行して、第1DLL142及び第2DLL143は、それぞれ、初期調整後も第1検出信号(PD_OUT1)及び第2検出信号(PD_OUT2)を参照し続け、スキューの変化に応じて補正量ΔCを変化させる。
第1実施形態のメモリアクセス回路14は、上記のとおり、メモリアクセス回路14のタイミングマージンにあわせて最適に配線されたクロックツリーでクロック間のスキューを補正する第1DLL142〜第5DLL146を備えている。従って、メモリアクセス回路14の回路規模及び消費電力の増加を抑え、且つ、タイミングマージンを減少させることなく、メモリアクセス回路14のクロックスキューを補正することができる。
(第2実施形態)
第2実施形態を説明する。第2実施形態は、第1実施形態より回路面積及び消費電力が小さい第1DLL〜第5DLLの例である。なお、上述の実施形態と同様の説明は省略する。
第2実施形態の第1DLL〜第5DLLの構成を説明する。図8は、第2実施形態の第1DLL142〜第5DLL146の構成図である。
図8は、4相クロックを使用する各DLLを示している。第1DLL142〜第5DLL146は、それぞれ、第1マルチプレクサ31又は41と、遅延素子アレイ32又は42と、遅延制御回路35又は45と、を備える。
第1マルチプレクサ31及び41は、それぞれ、4相の基準クロック信号(0度の基準クロック信号(CLK_0)、90度の基準クロック信号(CLK_90)、180度の基準クロック信号(CLK_180)、及び270度の基準クロック信号(CLK_270))のうちの1相を選択する基準相マルチプレクサである。
遅延素子アレイ32及び42は、それぞれ、第1マルチプレクサ31及び41から出力された基準クロック信号を遅延させて、遅延基準クロック信号を生成し、生成した遅延基準クロック信号を第1DLL出力(DLL_OUT1)〜第5DLL出力(DLL_OUT5)として、システムクロックツリー122、第1論理回路148、又は第2論理回路149へ出力する。
遅延制御回路35及び45は、それぞれ、第1PD出力(PD_OUT1)、第2PD出力(PD_OUT2)、又は設定角度に基づいて、第1マルチプレクサ31及び41を制御する。具体的には、遅延制御回路35及び45は、それぞれ、基準角度A及び設定角度が0〜90度である場合には、0度の基準クロック信号(CLK_0)を選択するように第1マルチプレクサ31及び41を制御し、基準角度A及び設定角度が90〜180度である場合には、90度の基準クロック信号(CLK_90)を選択するように第1マルチプレクサ31及び41を制御し、基準角度A及び設定角度が180〜270度である場合には、180度の基準クロック信号(CLK_180)を選択するように第1マルチプレクサ31及び41を制御し、基準角度A及び設定角度が270〜360度である場合には、270度の基準クロック信号(CLK_270)を選択するように第1マルチプレクサ31及び41を制御する。
また、第3DLL144〜第5DLL146の遅延制御回路45は、設定角度及び遅延補正信号(DLL_CNT)に基づいて、遅延素子アレイ42の90度分の遅延素子の数を調整する。例えば、遅延制御回路45は、式1を用いて遅延素子の数を算出する。遅延制御回路45は、第3DLL144〜第5DLL146に対して最適化された遅延調整量に対応する遅延補正信号(DLL_CNT)として、式1の算出結果を保持する。
第2実施形態の第1DLL142及び第2DLL143は、第1実施形態の第2マルチプレクサ33a及び33b、並びに位相比較回路34を備えていない。また、第2実施形態の第3DLL144〜第5DLL146は、第1実施形態の第2マルチプレクサ43a及び43b、並びに位相比較回路44を備えていない。また、第2実施形態の第1マルチプレクサ31及び41、並びに遅延素子アレイ32及び42は、第1実施形態より少ない。従って、タイミングマージンに対する要求が比較的緩いパスのクロックスキューを補正する場合に、第1DLL142〜第5DLL146の回路面積及び消費電力を第1実施形態より低減することができる。
(第3実施形態)
第3実施形態を説明する。第3実施形態は、遅延制御回路がn相クロックの補正量を算出する例である。なお、上述の実施形態と同様の説明は省略する。
第3実施形態の第1DLL〜第5DLLの構成は、第1実施形態と同様である(図5及び図6)。
第3実施形態の第1DLL〜第5DLLの動作を説明する。図9及び図10は、第3実施形態の第1DLL142〜第5DLL146の動作説明図である。
遅延補正信号の合計(すなわち、360度)を遅延素子の数Nで除算すると、1相あたりの遅延補正信号(DLL_CNT)の理想値が得られる。例えば、m(mは自然数)相目の遅延補正信号(DLL_CNT)を補正量の算出式は、(m−1)相目までの遅延補正信号(DLL_CNT)の合計と(m−1)相目までの理想値の合計との大小関係と、m相目までの遅延補正信号(DLL_CNT)の合計とm相目までの理想値の合計との大小関係と、に応じて変わる。例えば、360×(m−1)/N度を設定するためには、m相目の0度補正値が必要となる。
図9は、4相クロックにおいて、実際の基準クロック信号(CLK_90、CLK_180、及びCLK_270)が、基準クロック信号(CLK_0)より短い場合の遅延補正信号(DLL_CNT)を示している。
1相目(0度以上)では、遅延補正信号(DLL_CNT)81が90度(理想値)より小さい。従って、遅延制御回路35及び45は、式2を用いて、基準クロック信号(CLK_90)と90度(理想値)との差D(1)を算出する。式2において、SUMは遅延補正信号(DLL_CNT)の合計であり、DLL_CNT(1)は1相目の遅延補正信号(DLL_CNT)81である。補正後の遅延補正信号(DLL_CNT)は、1相目(0度以上)の遅延補正信号(DLL_CNT)81及び差D(1)の和に相当する。
2相目(90度以上)では、基準クロック信号(CLK_90)が90度(理想値)より小さい。従って、遅延制御回路35及び45は、それぞれ、基準クロック信号(CLK_90)の位相に差D(1)を加算した値(0度補正値)を算出する。
2相目(90度以上)では、遅延補正信号(DLL_CNT)83が180度(理想値)より小さい。従って、遅延制御回路35及び45は、それぞれ、式3を用いて、基準クロック信号(CLK_180)と180度(理想値)との差D(2)を算出する。式3において、SUMは遅延補正信号(DLL_CNT)の合計であり、SUM(2)は2相目までの遅延補正信号(DLL_CNT)の合計である。補正後の遅延補正信号(DLL_CNT)は、2相目(90度以上)の遅延補正信号(DLL_CNT)83及び差D(2)の和に相当する。
図10は、4相クロックにおいて、実際の基準クロック信号(CLK_90、CLK_180、及びCLK_270)が、基準クロック信号(CLK_0)より長い場合の遅延補正信号(DLL_CNT)を示している。
1相目(0度以上)では、遅延補正信号(DLL_CNT)91が90度(理想値)より大きい。従って、遅延制御回路35及び45は、それぞれ、式4を用いて、基準クロック信号(CLK_90)と90度(理想値)との差D(3)を算出する。式4において、DLL_CNT(1)は1相目の遅延補正信号(DLL_CNT)91であり、SUMは遅延補正信号(DLL_CNT)の合計である。補正後の遅延補正信号(DLL_CNT)は、1相目(0度以上)の遅延補正信号(DLL_CNT)91及び差D(3)の和に相当する。
区間92の角度を設定する場合には、基準クロック信号(CLK_0)を起点に、90度分の遅延である遅延補正信号(DLL_CNT)91を90度補正値として設定する。区間92は、基準クロック信号(CLK_90)の実際値と理想値との差分を表す。換言すると、区間92は、基準クロック信号(CLK_0)を起点にして設定角度を設定する場合の位相の範囲を表す。次に、遅延補正回路35及び45は、それぞれ、“(設定角度から90度を引いた値)+(90度補正値)”を遅延素子アレイ32a又は32b、及び42a又は42bに設定する。
区間93の角度を設定する場合には、遅延補正回路35及び45は、それぞれ、基準クロック信号(CLK_90)を起点に、設定角度(すなわち、遅延補正信号(DLL_CNT)91)から差D(3)を引いた値を遅延素子アレイ32a又は32b、及び42a又は42bに設定する。
第3実施形態では、遅延制御回路35及び45が、それぞれ、n相クロックの補正量を算出する。従って、n相クロックのスキュー差によるタイミングマージンの減少を問題とする場合に、補正の精度を改善することができる。
(第4実施形態)
第4実施形態を説明する。システムクロック信号(SYSTEM_CLK)がPLL141に供給される例である。なお、上述の実施形態と同様の説明は省略する。
第4実施形態のメモリアクセス装置の構成を説明する。図11は、第4実施形態のメモリアクセス装置10の構成図である。
図11に示すように、メモリアクセス装置10は、第1実施形態〜第3実施形態と同様に、システム回路12と、メモリアクセス回路14と、を備える。メモリアクセス回路14は、メモリ20と、システム回路12と、に接続される。
システム回路12は、メモリアクセスコマンド(MAC)を発行する回路である。システム回路12は、メモリアクセスコマンド発行部121と、システムクロックツリー122と、メモリデ−タ制御部124 と、を備える。
メモリアクセス回路14は、メモリアクセスを制御する回路である。メモリアクセス回路14は、PLL141と、第2DLL143〜第5DLL146と、第2PD147bと、第1論理回路148〜第3論理回路150と、第1ファイクロックツリー151〜第3ファイクロックツリー153と、設定角度算出部154と、マスタDLL155と、第1増幅回路156〜第4増幅回路159と、を備える。なお、DLLの数は、5つに限られるものではない。すなわち、メモリアクセス回路14は、5つ以上のDLLを備えても良い。また、メモリアクセスコマンド発行部121及び第1論理回路148〜第3論理回路150は、幾つでも良い。
メモリアクセスコマンド発行部121は、メモリ20へのアクセスを命令するメモリアクセスコマンド(MAC)を発行するモジュールである。メモリアクセスコマンド発行部121は、バス40を介して転送されるリクエスト(REQ)と、システムクロックツリー122により生成されるシステムクロック信号(SYSTEM_CLK)と、を入力し、入力したリクエスト(REQ)及びシステムクロック信号(SYSTEM_CLK)に基づいてメモリアクセスコマンド(MAC)を発行する。
システムクロックツリー調整部122は、基準信号(REF)を所定の第3クロックツリー長TL3の分だけ遅延させて、システムクロック信号(SYSTEM_CLK)を生成するモジュールである。
メモリデ−タ制御部124 は、メモリアクセスコマンド発行部121が発行したメモリアクセスコマンド(MAC)に応じて、バス40から入力されるデータ(DATA)を第1論理回路148と、第2論理回路149と、へ出力する。
PLL141は、基準周波数とPLL出力との位相差を検出し、検出した位相差に基づいて基準周波数にロックされたPLL出力を生成する回路である。PLL出力は、基準クロック信号(PHY_CLK_CK)のソース信号である。すなわち、システムクロック信号(SYSTEM_CLK)と基準クロック信号(PLL_CLK_CK)は、PLL141によりデスキューされている。
第1ファイクロックツリー151は、所定の第1クロックツリー長TLαの分だけPLL出力を遅延させて基準クロック信号(PHY_CLK_CK)を生成するモジュールである。基準クロック信号(PHY_CLK_CK)は、基準周波数の逓倍の周波数を有する。基準クロック信号(PHY_CLK_CK)は、メモリ20の動作タイミングを制御するためのタイミング制御信号のソース信号(すなわち、メモリ20のソースクロック)であるので、メモリアクセス回路14で使用される信号の中で、クロックジッタを低減する優先度が最も高い信号であり、配線長が最も短い配線で伝送される。
マスタDLL155は、クロックスキューの補正量ΔCの決定に用いられる遅延補正信号(DLL_CNT)を生成する回路である。マスタDLL155は、基準クロック信号(PHY_CLK_CK)を入力し、入力した基準クロック信号(PHY_CLK_CK)のクロックをカウントして遅延補正信号(DLL_CNT)を生成する。遅延補正信号(DLL_CNT)は、補正量ΔCの基準となる、基準クロック信号の1サイクル分の周期に相当する遅延素子数を示す信号である。
第2ファイクロックツリー152は、基準クロック信号(PHY_CLK_CK)を入力し、PLL出力に対して所定の第2クロックツリー長TL2の分だけ基準クロック信号(PHY_CLK_CK)を遅延させて、DLLクロック信号(DLL_CLK)を生成するモジュールである。DLLクロック信号(DLL_CLK)は、タイミング制御信号の一種であるストローブ信号(DQS)及びデータ信号(DQ)のソース信号である。
第2DLL143は、基準クロック信号(PHY_CLK_CK)とファイクロック信号(PHY_CLK)との間のクロックスキューを補正するクロックデスキュー回路である。ファイクロック信号(PHY_CLK)は、メモリアクセス回路14内で使用される信号である。第2DLL143は、基準クロック信号(PHY_CLK_CK)と、第2PD147bの出力である第2PD出力(PD_OUT2)と、遅延補正信号(DLL_CNT)と、を入力し、第2PD出力(PD_OUT2)に基づいて補正方向を決定し、遅延補正信号(DLL_CNT)に基づいて補正量ΔC1を決定し、決定した補正方向及び補正量ΔC1に基づいて基準クロック信号(PHY_CLK_CK)を遅延させて、第2DLL出力(DLL_OUT2)を生成する。第2DLL出力(DLL_OUT2)は、ファイクロック信号(PHY_CLK)のソース信号である。また、第2DLL143は、補正量ΔC1に対応する基準角度Aを生成する。
第3ファイクロックツリー153は、第2DLL出力(DLL_OUT2)を入力し、PLL出力に対して所定の第2クロックツリー長TL2の分だけ第2DLL出力(DLL_OUT2)を遅延させて、ファイクロック信号(PHY_CLK)を生成するモジュールである。すなわち、ファイクロック信号(PHY_CLK)は、クロックスキューが補正された第2DLL出力(DLL_OUT2)に基づいて生成される信号である。ファイクロック信号(PHY_CLK)のクロックツリー長は、DLLクロック信号(DLL_CLK)のクロックツリー長と等しい。
設定角度算出部154は、第3DLL144〜第5DLL146へ供給すべき設定角度を算出するモジュールである。設定角度は、第1論理回路148の出力であるストローブ信号(DQS)と、第2論理回路149の出力であるデータ信号(DQ)及びデータマスク信号(DM)と、第3論理回路150の出力であるアドレス信号(ADDR)及びコマンド信号(CMD)との間に設定すべき位相差を示す情報である。設定角度算出部154は、第2DLL143により生成された基準角度Aと、メモリアクセス回路14に接続された所定の外部回路(例えば、システム回路12)により生成された所定の位相角度Bと、を加算し、基準角度A及び位相角度Bの和を設定角度として第3DLL144〜第5DLL146へ出力する。位相角度Bは、第3DLL144〜第5DLL146のそれぞれについて、システム回路12により個別に決められる任意の追加補正量を示す角度であって、ストローブ信号(DQS)と、データ信号(DQ)及びデータマスク信号(DM)と、第3論理回路150の出力であるアドレス信号(ADDR)及びコマンド信号(CMD)との間に設定すべき位相差に対応する角度である。すなわち、システム回路12は、第3DLL144用の位相角度と、第4DLL145用の位相角度と、第5DLL146用の位相角度と、を個別に決める。なお、位相角度Bは、ストローブ信号(DQS)と、データ信号(DQ)と、アドレス信号(ADDR)及びコマンド信号(CMD)との間に設定すべき位相差に加えて、ストローブ信号(DQS)とメモリ基準信号(CK)との間に設定すべき位相差を含んでも良い。
第3DLL144〜第5DLL146は、それぞれ、基準クロック信号(PHY_CLK_CK)とDLLクロック信号(DLL_CLK)との間のクロックスキューを補正するクロックデスキュー回路である。第3DLL144〜第5DLL146は、それぞれ、設定角度と、DLLクロック信号(DLL_CLK)と、遅延補正信号(DLL_CNT)と、を入力し、設定角度及び遅延補正信号(DLL_CNT)に基づいて補正方向及び補正量を決定し、決定した補正方向及び補正量に基づいて基準クロック信号(PHY_CLK_CK)を遅延させて第3DLL出力(DLL_OUT3)〜第5DLL出力(DLL_OUT5)を生成する。第3DLL出力(DLL_OUT3)は、ストローブ信号(DQS)のソース信号である。第4DLL出力(DLL_OUT4)は、データ信号(DQ)及びデータマスク信号(DM)のソース信号である。第5DLL出力(DLL_OUT5)は、アドレス信号(ADDR)及びコマンド信号(CMD)のソース信号である。
第2PD147bは、ファイクロック信号(PHY_CLK)のクロックエッジの位相と基準クロック信号(PHY_CLK_CK)のクロックエッジの位相との間のずれを検出する回路(例えばフリップフロップ)である。第2PD147bは、ファイクロック信号(PHY_CLK)と、基準クロック信号(PHY_CLK_CK)と、を入力し、ファイクロック信号(PHY_CLK)のクロックエッジと基準クロック信号(PHY_CLK_CK)のクロックエッジとのずれを検出し、ファイクロック信号(PHY_CLK)のシステムクロック信号(SYSTEM_CLK)に対する遅延方向(ファイクロック信号(PHY_CLK)がシステムクロック信号(SYSTEM_CLK)に対して遅れているか又は進んでいるか)を示す第2検出信号(PD_OUT2)を生成する。第2検出信号(PD_OUT2)は、ファイクロック信号(PHY_CLK)と基準クロック信号(PHY_CLK_CK)の位相差に応じた1ビットの信号であって、例えば、“0”はファイクロック信号(PHY_CLK)が基準クロック信号(PHY_CLK_CK)に対して遅れていることを示し、“1”はファイクロック信号(PHY_CLK)が基準クロック信号(PHY_CLK_CK)に対して進んでいることを示す。
第1論理回路148は、メモリ20のストローブ信号(DQS)を生成する回路である。第1論理回路148は、ファイクロック信号(PHY_CLK)と、データ(DATA)と、第3DLL出力(DLL_OUT3)と、を入力し、入力した信号からストローブ信号(DQS)を生成し、生成したストローブ信号(DQS)をメモリ20へ出力する。なお、第1論理回路148は、第3DLL144に組み込まれても良い。
第2論理回路149は、メモリ20のデータ信号(DQ)及びデータマスク信号(DM)を生成する回路である。第2論理回路149は、ファイクロック信号(PHY_CLK)と、データ(DATA)と、第4DLL出力(DLL_OUT4)と、を入力し、入力した信号からデータ信号(DQ)を生成し、生成したデータ信号(DQ)をメモリ20へ出力する。なお、第2論理回路149は、第4DLL145に組み込まれても良い。
第3論理回路150は、メモリ20のアドレス信号(ADDR)及びコマンド信号(CMD)を生成する回路である。第3論理回路150は、ファイクロック信号(PHY_CLK)と、メモリアクセスコマンド(MAC)と、第5DLL出力(DLL_OUT5)と、を入力し、入力した信号からアドレス信号(ADDR)及びコマンド信号(CMD)を生成し、生成したアドレス信号(ADDR)及びコマンド信号(CMD)を、第3増幅回路158を介してメモリ20へ出力する。なお、第3論理回路150は、第5DLL146に組み込まれても良い。
第1増幅回路156は、第1論理回路148から出力されたストローブ信号(DQS)を増幅し、増幅したストローブ信号(DQS)をメモリ20へ出力する回路である。第2増幅回路157は、第2論理回路149から出力されたデータ信号(DQ)及びデータマスク信号(DM)を増幅し、増幅したデータ信号(DQ)及びデータマスク信号(DM)をメモリ20へ出力する回路である。第3増幅回路158は、第3論理回路150から出力されたアドレス信号(ADDR)及びコマンド信号(CMD)を増幅し、増幅したアドレス信号(ADDR)及びコマンド信号(CMD)をメモリ20へ出力する回路である。第4増幅回路159は、基準クロック信号(PHY_CLK_CK)を増幅してメモリ20のタイミング制御信号の一種であるメモリ基準信号(CK)を生成し、生成したメモリ基準信号(CK)をメモリ20へ出力する回路である。
第4実施形態のメモリアクセス装置で取り扱われる信号を説明する。図12は、第4実施形態のメモリアクセス装置10で取り扱われる信号波形図である。
図12に示すように、PLL141の位相調整機能により、システムクロック信号(SYSTEM_CLK)と基準クロック信号(PHY_CLK_CK)の遅延量の差分TLαは、補正量ΔCαで補正される。このとき、PLL141から見た基準クロックはシステムクロック信号(SYSTEM_CLK)となる。
ある時点において、第2PD入力は、PLL出力に対して第2クロックツリー長TL2だけ遅延している。この第2PD入力は、第2DLL143がクロックスキューを補正していないときに第3ファイクロックツリー153から出力される信号である。第2クロックツリー長TL2は、第1クロックツリー長TL1より長く、且つ、第3クロックツリー長TL3より短い。これは、第3ファイクロックツリー153が、PLL出力に対して第2クロックツリー長TL2の分だけ第2DLL出力(DLL_OUT2)を遅延させるためである。この場合に、第2PD147bは、基準クロック信号(PHY_CLK_CK)と第2PD入力との間に第2クロックツリー長TL2の分の位相差が存在することを示す第2検出信号(PD_OUT2)を生成する。次いで、第2DLL143は、第2検出信号(PD_OUT2)に基づいて基準クロック信号(PHY_CLK_CK)の補正量ΔC1を算出し、基準クロック信号(PHY_CLK_CK)を補正量ΔC1だけ補正して第2DLL出力(DLL_OUT2)を生成する。次いで、第3ファイクロックツリー153は、第2DLL出力(DLL_OUT2)を遅延させて、ファイクロック信号(PHY_CLK)を生成する。これにより、ファイクロック信号(PHY_CLK)の位相が基準クロック信号(PHY_CLK_CK)と等しくなる。
第4実施形態によれば、第1実施形態〜第3実施形態の第1DLL142及び第1PD147aを省略したメモリアクセス装置10により、第1実施形態〜第3実施形態と同様の効果が得られる。これにより、第1実施形態〜第3実施形態と比べて、メモリアクセス装置10の回路規模を縮小することができる。
なお、本実施形態では、データ信号(DQ)及びストローブ信号(DQS)を生成する場合に、バイトごとに複数のDLLを組み合わせても良い。このとき、組み合わせられるDLLの構成は、同一であっても良いし、互いに異なっていても良い。例えば、第1DLL142及び第2DLL143は、図5の構成を備え、第3DLL144〜第5DLL146は、図8の構成を備えていても良い。この場合には、図8の構成を備える第3DLL144〜第5DLL146は、図5の構成を備える第1DLL142又は第2DLL143から遅延補正信号(DLL_CNT)を取得することにより、回路面積を抑え、且つ、精度を保ったまま、複数の位相を調整することができる。
また、本実施形態では、第2論理回路149がデータ信号(DQ)及びデータマスク信号(DM)を出力する例について説明したが、第2論理回路149は、データ信号(DQ)のみを出力しても良い。
なお、本発明は、上述した実施形態に限定されるものではなく、その要旨を逸脱しない範囲で構成要素を変形して具体化される。また、上述した実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明が形成可能である。例えば、上述した実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。