(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-12
(45)【発行日】2024-12-20
(54)【発明の名称】ポインタ転送装置及びポインタ転送方法
(51)【国際特許分類】
G06F 5/06 20060101AFI20241213BHJP
G06F 1/12 20060101ALI20241213BHJP
【FI】
G06F5/06
G06F1/12 510
(21)【出願番号】P 2024505719
(86)(22)【出願日】2022-03-09
(86)【国際出願番号】 JP2022010281
(87)【国際公開番号】W WO2023170815
(87)【国際公開日】2023-09-14
【審査請求日】2024-02-15
(73)【特許権者】
【識別番号】000006013
【氏名又は名称】三菱電機株式会社
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】田中 進
【審査官】征矢 崇
(56)【参考文献】
【文献】米国特許出願公開第2016/0124889(US,A1)
【文献】米国特許出願公開第2013/0121100(US,A1)
【文献】特開2014-071929(JP,A)
【文献】米国特許出願公開第2007/0220184(US,A1)
【文献】特開2010-268302(JP,A)
【文献】特開2010-160653(JP,A)
【文献】特開平04-121892(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F5/06
G06F1/12
H04L7/00
(57)【特許請求の範囲】
【請求項1】
メモリへのデータ書込及び前記メモリからのデータ読出の一方の動作である第1動作を実行する第1回路と、前記データ書込及び前記データ読出の他方の動作である第2動作を実行する第2回路との間に配置されたポインタ転送装置であって、
前記ポインタ転送装置は、
第1クロックに従った
前記第1回路による
前記第1動作の実行毎に第1ポインタを、増加方向又は減少方向の予め定められた方向に1ずつ変化させる第1ポインタ生成部と、
第2クロックに従った
前記第2回路による
前記第2動作の実行毎に第2ポインタを前記予め定められた方向に1ずつ変化させる第2ポインタ生成部と、
前記第1クロックに同期して前記第2ポインタ生成部による前記第2ポインタの値を前記第1回路側に取り込む第1同期化部と、
前記第1回路側における前記第2ポインタの値を演算する第1回路側ポインタ値演算部と、
前記第1回路側ポインタ値演算部で演算されている前記第2ポインタの値と、前記第1同期化部で取り込まれた前記第2ポインタの値との一致比較を実行する第1一致検出部とを備え、
前記第1回路側ポインタ値演算部は、前記第1一致検出部で不一致が検出される間は、前記第1クロックのサイクル毎に、前記第2ポインタの値を前記予め定められた方向に1ずつ変化させる一方で、前記第1一致検出部で一致が検出されたときは前記第2ポインタの値を維持
し、
前記第1回路は、前記第1回路側ポインタ値演算部によって演算された前記第2ポインタの値を用いて前記第2回路による前記メモリへの前記第2動作の状況を把握した上で、前記第1回路および前記第2回路の間で正しくデータが受け渡されるように、前記第1ポインタ生成部による前記第1ポインタによって示された前記メモリのアドレスを対象として前記第1動作を実行する、ポインタ転送装置。
【請求項2】
前記一方の動作は、前記データ書込であり、
前記他方の動作は、前記データ読出であり、
前記第1回路は、前記第1回路側ポインタ値演算部によって演算された前記第2ポインタの値を用いて、前記第2回路が前記メモリから未読出のアドレスのデータを上書き消去しないように、前記データ書込を実行する、請求項1記載のポインタ転送装置。
【請求項3】
前記一方の動作は、前記データ読出であり、
前記他方の動作は、前記データ書込であり、
前記第1回路は、前記第1回路側ポインタ値演算部によって演算された前記第2ポインタの値を用いて、前記第1回路から前記メモリにデータが書き込まれていないアドレスからデータを読み出さないように、前記データ読出を実行する、請求項1記載のポインタ転送装置。
【請求項4】
前記ポインタ転送装置は、
前記第2クロックに同期して前記第1ポインタ生成部による前記第1ポインタの値を前記第2回路側に取り込む第2同期化部と、
前記第2回路側における前記第1ポインタの値を演算する第2回路側ポインタ値演算部と、
前記第2回路側ポインタ値演算部で演算されている前記第1ポインタの値と、前記第2同期化部で取り込まれた前記第1ポインタの値との一致比較を実行する第2一致検出部とを更に備え、
前記第2回路側ポインタ値演算部は、前記第2一致検出部で不一致が検出される間は、前記第2クロックのサイクル毎に、前記第1ポインタの値を前記予め定められた方向に1ずつ変化させる一方で、前記第2一致検出部で一致が検出されたときは前記第1ポインタの値を維持し、
前記第2回路は、前記第2回路側ポインタ値演算部によって演算された前記第1ポインタの値を用いて前記第1回路による前記メモリへの前記第1動作の状況を把握した上で、前記第1回路および前記第2回路の間で正しくデータが受け渡されるように、前記第2ポインタ生成部による前記第2ポインタによって示された前記メモリのアドレスを対象として前記第2動作を実行する、請求項1記載のポインタ転送装置。
【請求項5】
前記第1動作は、前
記データ書込であり、
前記第2動作は、前
記データ読出であり、
前記第1回路は、前記第1回路側ポインタ値演算部によって演算された前記第2ポインタの値を用いて、前記第2回路が前記メモリから未読出のアドレスのデータを上書き消去しないように、前記データ書込を実行し、
前記第2回路は、前記第2回路側ポインタ値演算部によって演算された前記第1ポインタの値を用いて、前記第1回路から前記メモリにデータが書き込まれていないアドレスからデータを読み出さないように、前記データ読出を実行する、請求項4記載のポインタ転送装置。
【請求項6】
前記第1回路は、前記第1ポインタ生成部によって生成された前記第1ポインタの値と、前記第1回路側ポインタ値演算部によって演算される前記第2ポインタの値と、前記メモリのアドレス数に相当するメモリ深さとに基づいて、前記メモリに対する前記データ書込の可能回数を算出する、請求項
5記載のポインタ転送装置。
【請求項7】
前記第2回路は、前記第2ポインタ生成部によって生成された前記第2ポインタの値と、前記第2回路側ポインタ値演算部によって演算された前記第1ポインタの値と、前記メモリのアドレス数に相当するメモリ深さとに基づいて、前記メモリに対する前記データ読出の可能回数を算出する、請求項
5記載のポインタ転送装置。
【請求項8】
第1クロックに従って
メモリへのデータ書込及び前記メモリからのデータ読出の一方の動作である第1動作を実行する第1回路と、第2クロックに従って
前記データ書込及び前記データ読出の他方の動作である第2動作を実行する第2回路との間でのポインタ転送方法であって、
前記第1動作が実行される毎に前記第1回路側で第1ポインタを増加方向又は減少方向の予め定められた方向に1ずつ変化させるステップと、
前記第2動作が実行される毎に前記第2回路側で第2ポインタを前記予め定められた方向に1ずつ変化させるステップと、
前記第1クロックに同期して前記第2回路側での前記第2ポインタの値を前記第1回路側に取り込むステップと、
前記第1回路側における前記第2ポインタの値を演算するステップと、
前記第1回路側で演算されている前記第2ポインタの値と、前記第2回路側から取り込まれた前記第2ポインタの値との一致比較を実行するステップとを備え、
前記第2ポインタの値を演算するステップは、
前記一致比較を実行するステップにおいて不一致が検出される間は、前記第1クロックのサイクル毎に、前記第2ポインタの値を前記予め定められた方向に1ずつ変化させるステップと、
前記一致比較を実行するステップにおいて一致が検出されると前記第2ポインタの値を維持するステップとを含
み、
前記第1回路は、前記第1回路側で演算された前記第2ポインタの値を用いて前記第2回路による前記メモリへの前記第2動作の状況を把握した上で、前記第1回路および前記第2回路の間で正しくデータが受け渡されるように、前記第1回路側での前記第1ポインタによって示された前記メモリのアドレスを対象として前記第1動作を実行する、ポインタ転送方法。
【請求項9】
前記一方の動作は、前記データ書込であり、
前記他方の動作は、前記データ読出であり、
前記第1回路は、前記第1回路側で演算された前記第2ポインタの値を用いて、前記第2回路が前記メモリから未読出のアドレスのデータを上書き消去しないように、前記データ書込を実行する、請求項8記載のポインタ転送方法。
【請求項10】
前記一方の動作は、前記データ読出であり、
前記他方の動作は、前記データ書込であり、
前記第1回路は、前記第1回路側で演算された前記第2ポインタの値を用いて、前記第1回路から前記メモリにデータが書き込まれていないアドレスからデータを読み出さないように、前記データ読出を実行する、請求項8記載のポインタ転送方法。
【請求項11】
前記ポインタ転送方法は、
前記第2クロックに同期して、前記第1回路側での前記第1ポインタの値を前記第2回路側に取り込むステップと、
前記第2回路側における前記第1ポインタの値を演算するステップと、
前記第2回路側で演算されている前記第1ポインタの値と、前記第1回路側から取り込まれた前記第1ポインタの値との一致比較を実行するステップとを更に備え、
前記第1ポインタの値を演算するステップは、
前記一致比較を実行するステップにおいて不一致が検出される間は、前記第2クロックのサイクル毎に、前記第1ポインタの値を前記予め定められた方向に1ずつ変化させるステップと、
前記一致比較を実行するステップにおいて一致が検出されると前記第1ポインタの値を維持するステップとを含
み、
前記第2回路は、前記第2回路側で演算された前記第1ポインタの値を用いて前記第1回路による前記メモリへの前記第1動作の状況を把握した上で、前記第1回路および前記第2回路の間で正しくデータが受け渡されるように、前記第2回路側での前記第2ポインタによって示された前記メモリのアドレスを対象として前記第2動作を実行する、請求項
8記載のポインタ転送方法。
【請求項12】
前記第1動作は、前
記データ書込であり、
前記第2動作は、前
記データ読出であり、
前記第1回路は、前記第1回路側で演算された前記第2ポインタの値を用いて、前記第2回路が前記メモリから未読出のアドレスのデータを上書き消去しないように、前記データ書込を実行し、
前記第2回路は、前記第2回路側で演算された前記第1ポインタの値を用いて、前記第1回路から前記メモリにデータが書き込まれていないアドレスからデータを読み出さないように、前記データ読出を実行する、請求項
11記載のポインタ転送方法。
【請求項13】
前記メモリに対する前記データ書込の可能回数は、前記第1回路側で生成された前記第1ポインタの値と、前記第1回路側で演算された前記第2ポインタの値と、前記メモリのアドレス数に相当するメモリ深さとに基づいて、前記第1回路側で算出される、請求項
12記載のポインタ転送方法。
【請求項14】
前記メモリに対する前記データ読出の可能回数は、前記第2回路側で生成された前記第2ポインタの値と、前記第2回路側で演算された前記第1ポインタの値と、前記メモリのアドレス数に相当するメモリ深さとに基づいて、前記第2回路側で算出される、請求項
12記載のポインタ転送方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ポインタ転送装置及びポインタ転送方法、並びに、当該ポインタ転送装置を備えるメモリ制御装置に関する。
【背景技術】
【0002】
論理回路における非同期クロック間のデータの受け渡しでは、データの同期化が行われる。データ同期化の一手法として、特開2007-233636号公報(特許文献1)に記載される様に、メモリ、代表的には,FIFO(First In First Out)メモリを介して非同期クロック間でデータを受け渡す同期化手法が公知である。
【0003】
通常、この様な同期化手法では、データの受け渡しに用いるメモリに対して、ライトする空きスペースがあるか、及び、リードするデータが格納されているかを判断するために、双方のクロックで生成されたポインタを用いる必要がある。この際に、非同期の異なるクロック間で、ポインタ値が化けることなくデータを受け渡しするために、グレイコードが利用されることがある。
【0004】
特開2006-074758号公報(特許文献2)には、通常2n項目に対応するグレイコードを偶数項目で展開可能とするグレイコードの生成方法が記載されており、この簡約グレイコードを用いて、非同期クロック間でポインタ値が正しく同期化される技術が記載されている。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2007-233636号公報
【文献】特開2006-074758号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、特許文献1では、ポインタを用いた演算を行う前に同期化を行うことを示す非同期受け渡し部が示されているが、具体的な回路構成が示されておらず、結果として、ポインタの値の誤転送がどのように実現されるかが記載されてない。このため、正しいデータの受け渡しが可能かどうかは不明である。
【0007】
又、特許文献2には、上述した偶数項目に対応するグレイコードを用いて、ポインタ値の誤転送を防止する技術が記載されるが、項目数が奇数個でよい場合でもメモリの容量に1アドレス分大きいものを使用する必要があり、回路規模や消費電力が増加するといった課題があった。
【0008】
本開示は、このような問題点を解決するためになされたものであって、本開示の目的は、簡易な構成及び制御によって、非同期クロック間でのポインタ値の誤転送を回避した正しいポインタ同期化が実行できるメモリ制御装置及びメモリ制御方法を提供することである。
【課題を解決するための手段】
【0009】
本開示のある局面によれば、ポインタ転送装置が提供される。ポインタ転送装置は、第1ポインタ生成部と、第2ポインタ生成部と、第1同期化部と、第1回路側ポインタ値演算部と、第1一致検出部とを備える。第1ポインタ生成部は、第1クロックに従った第1回路による第1動作の実行毎に増加方向又は減少方向の予め定められた方向に1ずつ変化させる。第2ポインタ生成部は、第2クロックに従った第2回路による第2動作の実行毎に第2ポインタを予め定められた方向に1ずつ変化させる。第1同期化部は、第1クロックに同期して第2ポインタ生成部による第2ポインタの値を第1回路側に取り込む。第1回路側ポインタ値演算部は、第1回路側における第2ポインタの値を演算する。第1一致検出部は、第1回路側ポインタ値演算部での第2ポインタの値と、第1同期化部で取り込まれた第2ポインタの値との一致比較を実行する。第1回路側ポインタ値演算部は、第1一致検出部で不一致が検出される間は、第1クロックのサイクル毎に、第2ポインタの値を予め定められた方向に1ずつ変化させる一方で、第1一致検出部で一致が検出されたときは第2ポインタの値を維持する。
【0010】
本開示の他のある局面によれば、第1クロックに従って第1回路で第1動作が実行されるとともに、第2クロックに従って第2回路で第2動作が実行される下でのポインタ転送方法が提供される。ポインタ転送方法は、第1動作が実行される毎に第1回路側で第1ポインタを増加方向又は減少方向の予め定められた方向に1ずつ変化させるステップと、第2動作が実行される毎に第2回路側で第2ポインタを予め定められた方向に1ずつ変化させるステップと、第1クロックに同期して第2回路側での第2ポインタの値を第1回路側に取り込むステップと、第1回路側における第2ポインタの値を演算するステップと、第1回路側で演算されている第2ポインタの値と、第2回路側から取り込まれた第2ポインタの値との一致比較を実行するステップとを備える。第2ポインタの値を演算するステップは、一致比較を実行するステップにおいて不一致が検出される間は、第1クロックのサイクル毎に第2ポインタの値を予め定められた方向に1ずつ変化させるステップと、一致比較を実行するステップにおいて一致が検出されると第2ポインタの値を維持するステップとを含む。
【発明の効果】
【0011】
本開示によれば、非同期クロック間のポインタ転送において、送信側でのポインタ値の変化を検出して、受信側で演算されているポインタ値を1ずつ変化させる制御によって、送信側及び受信側の間でのポインタ値の誤転送を回避した正しいポインタ同期化を実現することができる。
【図面の簡単な説明】
【0012】
【
図1】本実施の形態に係るメモリ制御装置の構成を説明するブロック図である。
【
図2】データライトにおけるライト可能数の算出処理を説明する図表である。
【
図3】データライト及びデータリードに伴う、ライトポインタ及びリードポインタ並びにライト可能数及びリード可能数の変化の一例を説明する図表である。
【
図4】メモリリード回路からメモリライト回路へのリードポインタの転送処理の具体例を説明するタイミングチャートである。
【
図5】データリードにおけるリード可能数の算出処理を説明する図表である。
【
図6】メモリライト回路からメモリリード回路へのライトポインタの転送処理の具体例を説明するタイミングチャートである。
【発明を実施するための形態】
【0013】
以下に、本開示の実施の形態について、図面を参照して詳細に説明する。なお、以下では、図中の同一又は相当部分には同一符号を付して、その説明は原則的に繰返さないものとする。
【0014】
図1は、本実施の形態に係るメモリ制御装置100の構成を説明するブロック図である。以下の説明で明らかになる様に、メモリ制御装置100は、例えば、電子機器で用いられる、非同期の異なるクロックで動作する論理回路の間でのデータ転送に用いることができる。
【0015】
(回路構成の説明)
図1に示される様に、メモリ制御装置100は、非同期の異なるライトクロックWCLK及びリードクロックRCLKを受けて動作する。メモリ制御装置100は、データを一時的に保持するためのメモリ300と、ライトクロックWCLKに同期してメモリ300に対してデータを書込むためのメモリライト回路101と、リードクロックRCLKに同期してメモリ300からデータを読出すためのメモリリード回路201とを備える。ライトクロックWCLK及びリードクロックRCLKは、それぞれのクロック周期毎に生成されたものが、メモリ制御装置100に入力される。尚、以下では、各信号及びクロックについて、論理ハイレベルを「1」とも表記し、論理ローレベルを「0」とも表記する。
【0016】
メモリライト回路101は、ライト側アクセス制御部103と、ライト側ライトポインタ生成部107と、リード側リードポインタ同期化部109と、ライト側リードポインタ演算部112と、ライト側一致検出部113とを含む。
【0017】
ライト側アクセス制御部103は、メモリ300に対するデータ書込に関する全体の制御を実行する。具体的には、ライト側アクセス制御部103は、後述する様に、メモリ300に対する書込可否の判断結果に従って、ライト許可WPRMを出力する(WRPM=「1」)。ライト側アクセス制御部103は、ライト指示WCMDを受けたときに、書込可能な状態(WPRM=「1」)であると、ライト側ライトイネーブル104を有効(「1」にする。ライト側アクセス制御部103は、ライト側ライトイネーブル104の有効時には、ライト側ライトポインタインクリメント106を更に出力する。ライト側ライトポインタ生成部107は、メモリ300のライトアドレスを示すライト側ライトポインタ108を生成する。
【0018】
ライト側ライトイネーブル104の有効時には、ライトクロックWCLKの立上がりエッジに応答して、ライトデータWDATが、ライト側ライトポインタ108で示される、メモリ300のライトアドレスに書き込まれることで、データライトが実行される。ライト側ライトポインタ108は、ライトデータWDATの書込毎に、即ち、ライト側ライトポインタインクリメント106の出力時(即ち、106=「1」の期間)において、ライトクロックWCLKに同期して1ずつ増加される。
【0019】
リード側リードポインタ同期化部109は、メモリリード回路201においてリードクロックRCLKに従って生成されたリード側リードポインタ208を受ける。リード側リードポインタ同期化部109は、リード側リードポインタ208をライトクロックWCLKで同期化した、リード側リードポインタ111を生成する。
【0020】
ライト側一致検出部113は、リード側リードポインタ同期化部109が生成するリード側リードポインタ111の値と、ライト側リードポインタ演算部112によるライト側リードポインタ110の値との一致検出結果に基づき、ライト側リードポインタインクリメント114を出力する。
【0021】
ライト側リードポインタ演算部112は、ライト側一致検出部113からのライト側リードポインタインクリメント114に基づいて、ライトクロックWCLKに同期したライト側リードポインタ110の値を演算する。ライト側アクセス制御部103は、リード側リードポインタ同期化部109によって生成されたリード側リードポインタ111ではなく、ライト側リードポインタ演算部112によるライト側リードポインタ110を用いて、メモリ300に対するライトデータWDATの書込可否を判断する。
【0022】
メモリリード回路201は、リード側アクセス制御部203と、リード側リードポインタ生成部207と、ライト側ライトポインタ同期化部209と、リード側ライトポインタ演算部212と、リード側一致検出部213とを含む。
【0023】
リード側アクセス制御部203は、メモリ300からのデータ読出に関する全体の制御を実行する。具体的には、リード側アクセス制御部203は、後述する様に、メモリ300からの読出可否の判断結果に従って、リード許可RPRMを出力する(RRPM=「1」)。リード側アクセス制御部203は、リード指示RCMDを受けたときに、読出可能な状態(RPRM=「1」)であると、リード側リードイネーブル204を有効(「1」)とする。リード側アクセス制御部203は、リード側リードイネーブル204の有効化時には、リード側リードポインタインクリメント206を更に出力する。リード側リードポインタ生成部207は、メモリ300のリードアドレスを示すリード側リードポインタ208を生成する。
【0024】
リード側リードイネーブル204の有効時には、リードクロックRCLKの立上がりエッジに応答して、リードデータRDATが、リード側リードポインタ208で示されるメモリ300のリードアドレスから読出されることで、データリードが実行される。リード側リードポインタ208は、リードデータRDATの読出毎に、即ち、リード側リードポインタインクリメント206の出力時(即ち、206=「1」の期間)において、リードクロックRCLKに同期して1ずつ増加される。
【0025】
ライト側ライトポインタ同期化部209は、メモリライト回路101においてライトクロックWCLKに従って生成されたライト側ライトポインタ108を受ける。ライト側ライトポインタ同期化部209は、ライト側ライトポインタ108をリードクロックRCLKで同期化した、ライト側ライトポインタ211を生成する。リード側一致検出部213は、ライト側ライトポインタ同期化部209が生成するライト側ライトポインタ211と、リード側ライトポインタ演算部212によるリード側ライトポインタ210との一致検出結果に基づき、リード側ライトポインタインクリメント214を出力する。
【0026】
リード側ライトポインタ演算部212は、リード側一致検出部213からのリード側ライトポインタインクリメント214に基づいて、リードクロックRCLKに同期したリード側ライトポインタ210の値を演算する。リード側アクセス制御部203は、ライト側ライトポインタ同期化部209によって生成されたライト側ライトポインタ211ではなく、リード側ライトポインタ演算部212によるリード側ライトポインタ210を用いて、メモリ300からのリードデータRDATの読出可否を判断する。
【0027】
この様に、メモリライト回路101では、ライトクロックWCLKに従って、ライト側ライトポインタ108によって示されるメモリ300のアドレスに対して、データライトが実行される。同様に、メモリリード回路201では、リードクロックRCLKに従って、リード側リードポインタ208によって示されるメモリ300のアドレスに対して、データリードが実行される。
【0028】
メモリライト回路101によるデータライトは、メモリ300からのメモリリード回路201による読出状況を把握して、メモリ300から未読出のデータを上書き消去してしまわない様に実行する必要がある。この際に、当該読出状況は、ライトクロックWCLKに同期した動作によってメモリライト回路101側で認識された、ライト側リードポインタ110を用いて把握される。従って、ポインタ値の誤転送を防止した、リードクロックRCLKに同期してインクリメントされるリード側リードポインタ208と、ライト側リードポインタ110との同期化処理が重要となる。
【0029】
同様に、メモリリード回路201によるデータリードは、メモリ300に対するメモリライト回路101による書込状況を把握して、メモリ300に読出データが無いのに誤ってメモリ300からのデータ読出を実行しない様に、言い換えると、未読出のデータを順次読出す様に実行する必要がある。この際に、当該書込状況は、リードクロックRCLKに同期した動作によってメモリリード回路201側で認識された、リード側ライトポインタ210によって把握される。従って、ポインタ値の誤転送を防止した、ライトクロックWCLKに同期してインクリメントされるライト側ライトポインタ108と、リード側ライトポインタ210との同期化処理が重要となる。
【0030】
次に、
図1に示されたメモリ制御装置100における、ポインタ転送に係る回路動作について、より詳細説明する。尚、前提として、メモリ300の深さは7段とし、初期状態において、各ポインタ値は「0」に初期化されるものとする。
【0031】
以下、ライトポインタ及びリードポインタは、メモリ深さに従った値の範囲内で変化するポインタ部と、「0」又は「1」に設定されるフラグ部とを有するものとする。フラグ部の値は、ポインタ部の値が一巡する毎に値が反転される。上述の様にメモリ深さが7である場合には、ポインタ部の値は「0」を初期値として、データライト又はデータリードが行われる毎に1ずつ増加する。そして、ポインタ部の値が「6」である状態で、データライト又はデータリードが行われると、ポインタ部の値が「0」に戻るとともに、フラグ部の値は「0」から「1」、又は、「1」から「0」に反転される。
【0032】
まず、ライト動作について説明する。ライト動作では、ライト指示WCMDがライト側アクセス制御部103に入力される。このときに、ライトが可能であればライト側アクセス制御部103は、ライト側ライトイネーブル104を有効化する(104=「1」)。ライト側ライトイネーブル104が有効化されると、ライト側ライトポインタ108で示されるメモリ300のアドレスへ、ライトデータWDATが書き込まれる。この際に、ライトが不可能であれば、ライト指示WCMDが入力されても、メモリ300に対して、特に処理は行われない。
【0033】
図2には、データライトにおけるライト可能数の算出処理例が示される。ライト可否は、
図2に例示されたライト可能数の算出値に従って、実行することができる。
【0034】
図2において、wpfは、ライト側ライトポインタ108のフラグ部の値を示し、wppは、ライト側ライトポインタ108のポインタ部の値を示す。又、rpfは、ライト側リードポインタ110のフラグ部の値を示し、rppは、ライト側リードポインタ110のポインタ部の値を示す。Nは、メモリ深さである。
図2に従って判定されたライト可能数に基づくライト可否の判定結果は、ライト許可WPRMに反映されて、ライト側アクセス制御部103から出力される。具体的には、ライト可能数が0のとき、WPRM=「0」に設定される一方で、ライト可能数が、予め定められた任意の自然数以上のとき、WPRM=「1」に設定される。
【0035】
図3には、データライト及びデータリードに伴う、ライトポインタ(wpf,wpp)及びリードポインタ(rpf,rpp)、並びに、及び、ライト可能数及びリード可能数の変化の一例を説明する図表が示される。
【0036】
メモリライト回路101では、ライト側ライトポインタ108のフラグ部wpf及びポインタ部wppと、ライト側リードポインタ110のフラグ部rpf及びポインタ部rppとの値を用いて、
図2に従ってライト可能数を求めることで、ライト可否の判定が実行される。
【0037】
図3の例では、メモリ300にデータが存在しないwpf=wpp=rpf=rpp=0(初期値)の初期状態から、データライトが5回実行される。これに応じて、wppが、データライト毎に0から5まで1ずつ増加する。この際に、wpp<Nであるので、wpf=0に維持されており、データリードが実行されていないことから、rpf=rpp=0も維持されている。
【0038】
この際に、ライト可能数は、初期状態ではNに等しい7であり、その後、データライト毎に、
図2に示された演算式N-(wpp-rpp)に従って1ずつ減少する。5回のデータライト後には、ライト可能数は、N-5=2まで減少している。
【0039】
上記5回のデータライト後に、同じく5回のデータリードが実行される。これに応じて、rppが、データリード毎に0から5まで1ずつ増加する。この際に、rpp<Nの範囲内であるので、rpf=0に維持されており、データライトが実行されていないことから、ライトポインタの値は、それまでのwpf=0,wpp=5に維持される。
【0040】
この際に、データリード毎に、ライト可能数は、
図2に示された演算式N-(wpp-rpp)に従って1ずつ増加する。データライトと同数のデータリードが終了した状態では、wpp=rpp(=5)、かつ、wpf=wpf(=0)となっており、かつ、ライト可能数はN(=7)に戻っている。
【0041】
続いて、wpp=5(wpf=0)の状態から7回のデータライトが行われると、2回目のデータライトにおいて、wppが6からインクリメントされる際に、wpp=0に戻されるとともに、フラグ部wpfが「0」から「1」に反転される。以降では、wpf=1の下で、wppがインクリメントされるので、7回目のデータライト後には、wpf=1,wpp=5となる。又、ライト側リードポインタ110については、rpf=0,rpp=5が維持されている。
【0042】
この際に、ライト可能数は、
図2に示された演算式N-(wpp-rpp)(wpf=rpf,wpp>rppのとき)、-(wpp-rpp)(wpf≠rpf,wpp<rppのとき)、及び、0(wpf≠rpf,wpp=rppのとき)に従って、データライト毎に1ずつ減少する。7回のデータライト後には、ライト可能数は、N-7=0まで減少している。このとき、ライト許可WPRMは「0」に設定される。
【0043】
上記7回のデータライト後に、同じく7回のデータリードが実行される。rpp=5(rpf=0)の状態から7回のデータリードが行われると、2回目のデータリードにおいて、rppが6からインクリメントされる際に、rpp=0に戻されるとともに、フラグ部rpfが「0」から「1」に反転される。以降では、rpf=1の下で、rppがインクリメントされるので、7回目のデータリード後には、rpf=1,rpp=5となる。この際に、ライト可能数は、
図2に示された演算式、-(wpp-rpp)(wpf≠rpf,wpp<rppのとき)、N-(wpp-rpp)(wpf=rpf,wpp>rppのとき)、及び、N(wpf=rpf,wpp=rppのとき)に従って、データリード毎に1ずつ増加する。ライト許可WPRMについても「1」に設定される。7回のデータリード後には、ライト可能数はN(=7)まで戻っている。
【0044】
次に、リードポインタのリード側及びライト側の間での同期化処理について説明する。
再び
図1を参照して、データリードが行われた場合には、リード側リードポインタ208が変化する。リード側リードポインタ208は、リードクロックRCLKに同期化しているため、リード側リードポインタ同期化部109により、ライトクロックWCLKに同期化させる必要がある。
【0045】
例えば、
図1に示されたリード側リードポインタ同期化部109の構成は、一般的に知られる2段フリップフロップとすることができる。ライト側一致検出部113は、ライトクロックWCLKに従ってライト側で同期化されたリード側リードポインタ111の値と、ライト側リードポインタ110の値との一致比較を実行する。ライト側一致検出部113は、リード側リードポインタ111の値と、ライト側リードポインタ110との値が不一致であると、ライト側リードポインタインクリメント114を有効化する(114=「1」)。一方で、リード側リードポインタ111の値と、ライト側リードポインタ110との値が一致するときには、ライト側リードポインタインクリメント114は無効化される(114=「0」)。
【0046】
ライト側リードポインタインクリメント114が有効(=「1」)である状態では、ライト側リードポインタ演算部112は、ライトクロックWCLKのサイクル毎に、ライト側リードポインタ110(フラグ部rpf,ポインタ部rpp)をインクリメントする。上述の様に、インクリメント後のポインタ部rppの値がメモリ深さNになるときには、rpp=Nとすることなく、rpp=0に戻すとともに、フラグ部rpfの値が反転される。
【0047】
ライト側リードポインタ110が、ライト側で同期化されたリード側リードポインタ111に追いついて両者が一致すると、ライト側リードポインタインクリメント114は、無効(=「0」)となり、ライト側リードポインタ110のインクリメントは行われない。即ち、ライト側リードポインタ110の値は維持される。
【0048】
ここで、複数ビットから構成されるリード側リードポインタ208についても、リード側リードポインタ同期化部109により、例えば、2段フリップフロップによって同期化されている。このため、リード側リードポインタ208の変化のタイミングと、ライトクロックWCLKの立ち上がりエッジのタイミングとが重なった場合には、所謂、メタ・ステーブル状態となり、ライト側で同期化されたリード側リードポインタ111の値に、リード側リードポインタ208の値を正しく転送できない可能性がある。これにより、誤った値のままでライト側リードポインタ110をライト可否の判断に使用すると、メモリ300に空き領域がないのにデータライトを実行してしまう可能性がある。
【0049】
従って、本実施の形態においては、ライトクロックWCLKに従って同期化されたリード側リードポインタ111の値をそのままライト側リードポインタ110として用いるのではなく、ライト側で同期化されたリード側リードポインタ111と、ライト側リードポインタ110とが異なることをライト側一致検出部113で検出した場合に、当該リード側リードポインタ111と、ライト側リードポインタ110とが等しくなるまで、ライト側リードポインタ110を1ずつ変化させる様に、ポインタ部wpp及びフラグ部wpfの値を変化させる。この様な処理を追加することで、ライト側リードポインタ110について、リード側リードポインタ208に追従して、値を誤ることなく、リード側からライト側へ転送することが可能となる。
【0050】
尚、上述の様に、同期化回路として、リード側リードポインタ同期化部109には2段フリップフロップを適用することが可能であるが、他の同期化方式によって、リード側リードポインタ同期化部109を構成することも可能である。更には、ライト側一致検出部113によって、ライトクロックWCLKに従って同期化されたリード側リードポインタ111と、ライト側リードポインタ110との値の不一致時には、ライト側リードポインタ110の値をリード側から読み込まれた値に追従させる構成としているので、リード側リードポインタ同期化部109は、同期化回路を用いずに構成することも可能である。
【0051】
次に、
図4を用いて、メモリリード回路201からメモリライト回路101へのリードポインタの転送処理の具体例を説明する。
図4中では、リード側リードポインタ208、ライト側で同期化されたリード側リードポインタ111、及び、ライト側リードポインタ110のそれぞれについて、フラグ部rpf及びポインタ部rppの値を、「rpf-rpp」と表記する。
【0052】
例えば、
図4の初期状態では、リード側リードポインタ208は、フラグ部rpf=0、ポインタ部rpp=3であり(「0-3」)、ライト側で同期化されたリード側リードポインタ111及びライト側リードポインタ110についても同様に、フラグ部rpf=0、ポインタ部rpp=3となっていること(「0-3」)が示されている。即ち、メモリライト回路101及びメモリリード回路201の間で、リードポインタは、正しく共通の値が認識された状態となっている。
【0053】
この状態から、メモリリード回路201では、リード側リードポインタインクリメント206が有効(=「1」)となる期間では、リードクロックRCLKの立上がりエッジ毎にメモリ300に対してデータリードが実行される。データリードの実行に応じて、リード側リードポインタ208が、立上がりエッジ毎(RCLK)にインクリメントされる。
【0054】
図4の例では、まず3個の立上がりエッジ(RCLK)のそれぞれにて3回のデータリードが実行されて、リード側リードポインタ208が、クロックエッジ毎にインクリメントされる。これにより、リード側リードポインタ208は、「0-3」から「0-6」まで変化する。その後、1回ずつのデータリードが二度行われることで、リード側リードポインタ208は、「0-6」から「1-0」に変化し、更に、「1-0」から「1-1」に変化する。
【0055】
メモリライト回路101のリード側リードポインタ同期化部109は、リードクロックRCLKとは非同期のライトクロックWCLKの立上がりエッジに応答してリード側リードポインタ208の値を取り込む。これにより、ライトクロックWCLKに従って同期化されたリード側リードポインタ111が生成される。
【0056】
しかしながら、
図4の例では、時刻t1において、リード側リードポインタ208が「0-3」から「0-4」へ変化するタイミングと、ライトクロックWCLKの立上がりエッジが重なる。これにより、メタ・ステーブル状態が発生するので、ライト側で同期化されたリード側リードポインタ111の値は一位に定まらない。この現象について、
図4中では、「0-3」から不定値となるので、「≠0-3」と表記している。
【0057】
図4の例では、その他のリード側リードポインタ208の変化タイミングは、ライトクロックWCLKの立ち上がりエッジと重ならないため、リード側リードポインタ208の値が、ライト側で同期化されたリード側リードポインタ111に正しく取り込まれている。具体的には、リード側リードポインタ208の「0-6」、「1-0」、「1-1」は、時刻t2、t5、及び、t7の立上がりエッジ(WCLK)でリード側リードポインタ同期化部109に取り込まれ、それぞれの次の立上がりエッジである時刻t3,時刻t6、及び、時刻t8において、ライト側で同期化されたリード側リードポインタ111に反映されている。上述の様に、リード側リードポインタ同期化部109については2段フリップフロップでの構成を想定しているため、リード側リードポインタ208の値が、上述の遅れを伴って、ライト側で同期化されたリード側リードポインタ111に反映されている。
【0058】
ライト側リードポインタインクリメント114は、ライト側一致検出部113によって、ライト側で同期化されたリード側リードポインタ111がライト側リードポインタ110と異なる値であるサイクルでは有効(=「1」)とされる。反対に、ライト側で同期化されたリード側リードポインタ111及びライト側リードポインタ110が同じであるサイクルでは、ライト側リードポインタインクリメント114は、無効(=「0」)とされる。
【0059】
ライト側リードポインタ演算部112は、ライト側リードポインタインクリメント114が有効(=「1」)であることを確認すると、ライトクロックWCLKの次の立上がりエッジにおいて、ライト側リードポインタ110をインクリメントする。一方で、ライト側リードポインタインクリメント114が無効(=「0」)であるときには、ライト側リードポインタ110の値は維持される。
【0060】
この結果、
図4の例では、時刻t3~t5の、ライトクロックWCLKの各立ち上がりエッジにおいて、ライト側リードポインタ110がインクリメントされる。これにより、ライト側リードポインタ110は、時刻t5において、リード側リードポインタ208と一致している、ライト側で同期化されたリード側リードポインタ111の値である「0-6」まで変化する。この様に、メタ・ステーブル状態となった不定値(「≠0-3」)が、そのままライト側で同期化されたリード側リードポインタ111に取り込まれることがない。
【0061】
その後のデータリードによる、リード側リードポインタ208の「1-0」及び「1-1」への変化は、ライトクロックWCLKに従ってライト側で同期化されたリード側リードポインタ111へ取り込まれる。更に、ライト側リードポインタ110の値は、ライト側一致検出部113によってライト側リードポインタインクリメント114が有効(=「1」)にされることで、ライト側で同期化されたリード側リードポインタ111の値に追いつくまで、インクリメントされる。
【0062】
この様に、本実施の形態では、ライトクロックWCLKに同期して取り込まれたリード側リードポインタ208の値をそのまま用いるのではなく、取り込まれたリードポインタの値(即ち、リード側リードポインタ111の値)とライト側リードポインタ110との値が異なる場合に、ライト側リードポインタ110を1ずつ変化させる処理が実行される。これにより、メモリリード回路201でのデータリードの実行に伴うリード側リードポインタ208の変化に追従させて、ライト側リードポインタ110の値を誤ることなく変化することができる。
【0063】
この様に、異なるクロックで動作するメモリリード回路201及びメモリライト回路101の間で、リードポインタをメモリリード回路201からメモリライト回路101へ誤りなく転送することで、ポインタの同期化が実現される。この結果、メモリライト回路101におけるデータライトの可否判定を正確に行うことで、結果的に、メモリ300を介した、非同期クロック間での正しいデータの受け渡しが可能となる。
【0064】
次に、再び
図1を参照して、リード動作について説明する。リード動作では、リード指示RCMDがリード側アクセス制御部203に入力される。このときに、リードが可能であればリード側アクセス制御部203からリード側リードイネーブル204が有効化(「1」)される。リード側リードイネーブル204が有効化されると、リード側リードポインタ208で示されるメモリ300のリードアドレスからリードデータRDATが読出される。この際に、リードが不可能であれば、リード指示RCMDが入力されても、メモリ300に対して、特に処理は行われない。
【0065】
図5には、データリードにおけるリード可能数の算出処理例が示される。リード可否は、
図5に例示されたリード可能数の算出値に従って、実行することができる。
【0066】
図5において、wpfは、リード側ライトポインタ210のフラグ部の値を示し、wppは、リード側ライトポインタ210のポインタ部の値を示す。又、rpfは、リード側リードポインタ208のフラグ部の値を示し、rppは、リード側リードポインタ208のポインタ部の値を示す。Nは、
図2と同様にメモリ深さを示す。
図5に従って算出されたリード可能数に基づくリード可否の判定結果は、リード許可RPRMに反映されて、リード側アクセス制御部203から出力される。具体的には、リード可能数が0のとき、RPRM=「0」に設定される一方で、リード可能数が予め定められた任意の自然数以上のとき、RPRM=「1」に設定される。
【0067】
再び
図3を参照して、データライト及びデータリードに伴う、ライトポインタ(wpf、wpp)及びリードポインタ(rpf,rpp)、並びに、リード可能数の変化の一例を説明する。
【0068】
メモリリード回路201では、リード側ライトポインタ210のフラグ部wpf及びポインタ部wppと、リード側リードポインタ208のフラグ部rpf及びポインタ部rppとの値を用いて
図5で説明したリード可能数を求めることで、リード可否の判定が実行される。
【0069】
上述した様に、
図3の例では、wpf=wpp=rpf=rpp=0(初期値)の初期状態から、データライトが5回実行されるが、この間、データリードが実行されていないことから、rpf=rpp=0も維持される。一方で、wpf=0のままで、wppが、データライト毎に0から5まで1ずつ増加する。この際に、リード可能数は、初期状態では0である一方で、その後、データライト毎に、
図5に示された演算式wpp-rppに従って1ずつ増加する。5回のデータライト後には、リード可能数は、wpp-rpp=5まで増加している。
【0070】
次に、5回のデータライト後に、同じく5回のデータリードが実行される際には、rppが、データリード毎に0から5まで1ずつ増加するが、rpp<Nの範囲内であるので、rpf=0に維持される。一方で、データライトが実行されていないことから、ライトポインタの値は、それまでのwpf=0,wpp=5に維持される。
【0071】
この際に、データリード毎に、リード可能数は、
図5に示された演算式wpp-rppに従って1ずつ減少する。データライトと同数のデータリードが終了した状態では、wpp=rpp(=5)、かつ、wpf=wpf(=0)となっており、かつ、リード可能数は0に戻っている。このとき、リード許可RPRMは「0」に設定される。
【0072】
続いて、rpp=5(rpf=0)の状態から7回のデータライトが行われる際には、リード側リードポインタ208について、rpf=0,rpp=5が維持されている。一方で、リード側ライトポインタ210については、上述の様に、2回目のデータライトにおいて、wpp=0に戻されるとともに、フラグ部wpfが「0」から「1」に反転される。そして、7回目のデータライト後には、wpf=1,wpp=5となる。この際に、リード可能数は、
図5に示された演算式、具体的には、wpp-rpp(wpf=rpf,wpp>rppのとき)、N+(wpp-rpp)(wpf≠rpf,wpp<rppのとき)、及び、N(wpf≠rpf,wpp=rppのとき)に従って、データライト毎に1ずつ増加する。7回のデータライト後には、リード可能数は、N=7まで増加している。
【0073】
上記7回のデータライト後に、同じく7回のデータリードが実行されると、上述の様に、2回目のデータリードにおいて、rpp=0に戻されるとともに、フラグ部rpfが「0」から「1」に反転される。以降では、rpf=1の下で、rppがインクリメントされて、7回目のデータリード後には、rpf=1,rpp=5となる。この際に、リード可能数は、
図5に示された演算式、具体的には、N+(wpp-rpp)(wpf≠rpf,wpp<rppのとき)、wpp-rpp(wpf=rpf,wpp>rppのとき)、及び、0(wpf=rpf,wpp=rppのとき)に従って、データリード毎に1ずつ減少する。7回目のデータリード後には、リード可能数は0になる。このとき、リード許可RPRMは「0」に設定される。
【0074】
次に、ライトポインタのライト側及びリード側の間での同期化処理について説明する。
再び
図1を参照して、データライトが行われた場合には、ライト側ライトポインタ108が変化する。ライト側ライトポインタ108は、ライトクロックWCLKに同期化しているため、ライト側ライトポインタ同期化部209により、リードクロックRCLKに同期化させる必要がある。
【0075】
図1に示されたライト側ライトポインタ同期化部209の構成についても、リード側リードポインタ同期化部109で説明したのと同様に、2段フリップフロップとすることができる。リード側一致検出部213によって、リードクロックRCLKに従ってリード側で同期化されたライト側ライトポインタ211の値と、リード側ライトポインタ210の値との一致比較が実行される。リード側一致検出部213は、ライト側ライトポインタ211の値と、リード側ライトポインタ210との値が不一致であると、リード側ライトポインタインクリメント214を有効化する(214=「1」)。一方で、ライト側ライトポインタ211の値と、リード側ライトポインタ210との値が不一致であると、リード側ライトポインタインクリメント214は無効化される(214=「0」)。
【0076】
リード側ライトポインタインクリメント214が有効(=「1」)である状態では、リード側ライトポインタ演算部212は、リードクロックRCLKの1サイクル毎に、リード側ライトポインタ210(フラグ部wpf,ポインタ部wpp)をインクリメントする。リード側ライトポインタ210が、リード側で同期化されたライト側ライトポインタ211に追いついて両者が一致すると、リード側ライトポインタインクリメント214は、無効(=「0」)となり、リード側ライトポインタ210のインクリメントは行われない。即ち、リード側ライトポインタ210の値は維持される。
【0077】
ここで、複数ビットから構成されるライト側ライトポインタ108についても、ライト側ライトポインタ同期化部209により、例えば、2段フリップフロップによって同期化されている。このため、ライト側ライトポインタ108の変化のタイミングと、リードクロックRCLKの立ち上がりエッジのタイミングとが重なった場合には、所謂、メタ・ステーブル状態となり、リード側で同期化されたライト側ライトポインタ211の値に、ライト側ライトポインタ108の値を、正しく転送できない可能性がある。これにより、誤った値のままでリード側ライトポインタ210をリード可否の判断に使用すると、メモリ300に未読出のデータが無いのにデータリードを実行してしまう可能性がある。
【0078】
従って、本実施の形態においては、リードクロックRCLKに従って同期化されたライト側ライトポインタ211の値をそのままリード側ライトポインタ210として用いるのではなく、リード側で同期化されたライト側ライトポインタ211と、リード側ライトポインタ210とが異なることをリード側一致検出部213で検出した場合に、リード側で同期化されたライト側ライトポインタ211と、リード側ライトポインタ210とが等しくなるまで、リード側ライトポインタ210を1ずつ変化させる様に、ポインタ部rpp及びフラグ部rpfの値を変化させる。この様な処理を追加することで、リード側ライトポインタ210についても、ライト側ライトポインタ108に追従して、値を誤ることなく、ライト側からリード側へ転送することが可能となる。
【0079】
尚、上述の様に、ライト側ライトポインタ同期化部209には、同期化回路として、2段フリップフロップを適用することが可能であるが、他の同期化方式によって、ライト側ライトポインタ同期化部209を構成することも可能である。更には、リード側一致検出部213によって、リード側で同期化されたライト側ライトポインタ211と、リード側ライトポインタ210との値の不一致時に、リード側ライトポインタ210の値をライト側での値に追従させる構成としているので、ライト側ライトポインタ同期化部209は、同期化回路を用いずに構成することも可能である。
【0080】
次に、
図6を用いて、メモリライト回路101からメモリリード回路201へのライトポインタの転送処理の具体例を説明する。
図6中では、ライト側ライトポインタ108、リード側で同期化されたライト側ライトポインタ211、及び、リード側ライトポインタ210のそれぞれについて、
図4と同様に、フラグ部wpf及びポインタ部wppの値を「wpf-wpp」と表記する。
【0081】
図6において、初期状態では、ライト側ライトポインタ108は、フラグ部wpf=0、ポインタ部wpp=3であり(「0-3」)、リード側で同期化されたライト側ライトポインタ211及びリード側ライトポインタ210についても同様に、フラグ部wpf=0、ポインタ部wpp=3となっている(「0-3」)。即ち、メモリリード回路201及びメモリライト回路101の間で、ライトポインタは、正しく共通の値が認識された状態となっている。
【0082】
この状態から、メモリライト回路101では、ライト側ライトポインタインクリメント106が有効(=「1」)となる期間では、ライトクロックWCLKの立上がりエッジ毎にメモリ300に対してデータライトが実行される。データライトの実行に応じて、ライト側ライトポインタ108が、立上がりエッジ毎(WCLK)にインクリメントされる。
【0083】
図6の例では、まず3個の立上がりエッジ(WCLK)のそれぞれにて3回のデータライトが実行されて、ライト側ライトポインタ108が、クロックエッジ毎にインクリメントされる。これにより、ライト側ライトポインタ108は、「0-3」から「0-6」まで変化する。その後、1回ずつのデータライトが二度行われることで、ライト側ライトポインタ108は、「0-6」から「1-0」に変化し、更に、「1-0」から「1-1」に変化する。
【0084】
メモリリード回路201のライト側ライトポインタ同期化部209は、ライトクロックWCLKとは非同期のリードクロックRCLKの立上がりエッジに応答してライト側ライトポインタ108の値を取り込む。これにより、リードクロックRCLKに従ってリード側で同期化されたライト側ライトポインタ211が生成される。
【0085】
しかしながら、
図6の例では、時刻t10において、ライト側ライトポインタ108が「0-3」から「0-4」へ変化するタイミングと、リードクロックRCLKの立上がりエッジが重なる。これにより、メタ・ステーブル状態が発生するので、リード側で同期化されたライト側ライトポインタ211の値は一位に定まらず、不定値(
図4と同様に、「≠0-3」と表記)となる。
【0086】
図6の例では、その他のライト側ライトポインタ108の変化タイミングは、リードクロックRCLKの立ち上がりエッジと重ならないため、ライト側ライトポインタ108の値が、リード側で同期化されたライト側ライトポインタ211に正しく導入されている。具体的には、ライト側ライトポインタ108の「0-4」、「0-5」、「0-6」、「1-0」、「1-1」は、時刻t11、t13、t15、t18、及び、t21の立上がりエッジ(RCLK)において、ライト側ライトポインタ同期化部209に取り込まれ、それぞれの次の立上がりエッジである時刻t12,t14、t16、t19、及び、t22において、リード側で同期化されたライト側ライトポインタ211に反映されている。上述の様に、ライト側ライトポインタ同期化部209についても2段フリップフロップでの構成を想定しているため、ライト側ライトポインタ108の値が、上述の遅れを伴って、リード側で同期化されたライト側ライトポインタ211に反映されている。
【0087】
リード側ライトポインタインクリメント214は、リード側一致検出部213によって、リード側で同期化されたライト側ライトポインタ211がリード側ライトポインタ210と異なる値であるサイクルでは有効(=「1」)とされる。反対に、リード側で同期化されたライト側ライトポインタ211及びリード側ライトポインタ210が同じであるサイクルでは、リード側ライトポインタインクリメント214は、無効(=「0」)とされる。
【0088】
リード側ライトポインタ演算部212は、リード側ライトポインタインクリメント214が有効(=「1」)であることを確認すると、リードクロックRCLKの次の立上がりエッジにおいて、リード側ライトポインタ210をインクリメントする。一方で、リード側ライトポインタインクリメント214が無効(=「0」)であるときには、リード側ライトポインタ210の値は維持される。
【0089】
この結果、
図6の例では、時刻t12、t15、t17、t20、及び、t23の、リードクロックRCLKの各立ち上がりエッジにおいて、リード側ライトポインタ210がインクリメントされる。これにより、リード側ライトポインタ210は、時刻t23において、ライト側ライトポインタ108と一致している、リード側で同期化されたライト側ライトポインタ211の値である「1-1」まで変化する。この様に、メタ・ステーブル状態となった不定値(「≠0-3」)が、そのままリード側で同期化されたライト側ライトポインタ211に取り込まれることがない。
【0090】
更に、リード側ライトポインタ210の値はライト側ライトポインタ108の正しい値が取り込まれたライト側ライトポインタ211の値と不一致になると、リード側一致検出部213によってリード側ライトポインタインクリメント214が有効(=「1」)にされることで、リード側で同期化されたライト側ライトポインタ211の値に追いつくまで、インクリメントされる。
【0091】
この様に、リードクロックRCLKに同期して取り込まれたライト側ライトポインタ108の値をそのまま用いるのではなく、取り込まれたライトポインタの値(即ち、ライト側ライトポインタ211の値)とリード側ライトポインタ210との値が異なる場合に、リード側ライトポインタ210を1ずつ変化させる処理とすることで、メモリライト回路101でのデータライトの実行に伴うライト側ライトポインタ108の変化に追従させて、リード側ライトポインタ210の値を誤ることなく変化することができる。
【0092】
これにより、異なるクロックで動作するメモリライト回路101及びメモリリード回路201の間で、ライトポインタをメモリライト回路101からメモリリード回路201へ誤りなく転送することで、ポインタ値の誤転送を回避した正しいポインタ同期化を実現できる。この結果、メモリリード回路201におけるデータリードの可否判定を正確に行うことで、結果的に、メモリ300を介した、非同期クロック間での正しいデータの受け渡しが可能となる。
【0093】
以上のように、本実施の形態によれば、非同期クロック間のポインタ転送において送信側ポインタの値の変化を検出して、受信側のポインタの値を1ずつ変化させることで追従させる処理を行うことで、誤転送を防止した正しくポインタの同期化を実行することできる。この結果、メモリ300を介した、正しいデータの受け渡しが可能となる。
【0094】
又、特許文献2の様なグレイコードを用いないことから、ポインタが奇数個の場合にアクセスされるメモリの容量を1アドレス分大きいものを使用する必要がなくなり、回路規模や消費電力の増加を防止することができる。
【0095】
以上説明した本実施の形態において、ライトクロックWCLKは「第1クロック」の一実施例に対応し、リードクロックRCLKは「第2クロック」の一実施例に対応し、メモリライト回路101は「第1回路」の一実施例に対応し、メモリリード回路201は「第2回路」の一実施例に対応する。
【0096】
更に、メモリライト回路101において、ライト側ライトポインタ108は「第1ポインタ」、ライト側ライトポインタ生成部107は「第1ポインタ生成部」、リード側リードポインタ同期化部109は「第1同期化部」、ライト側リードポインタ演算部112は「第1回路側ポインタ値演算部」、ライト側一致検出部113は「第1一致検出部」の一実施例にそれぞれ対応する。又、ライト側リードポインタ110は、「第1回路側ポインタ値演算部で演算された第2ポインタ」に対応し、リード側リードポインタ同期化部109によって生成されたリード側リードポインタ111は、「第1同期化部で取り込まれた第2ポインタ」に対応する。
【0097】
同様に、メモリリード回路201において、リード側リードポインタ208は「第2ポインタ」、リード側リードポインタ生成部207は「第2ポインタ生成部」、ライト側ライトポインタ同期化部209は「第2同期化部」、リード側ライトポインタ演算部212は「第2回路側ポインタ値演算部」、リード側一致検出部213は「第2一致検出部」の一実施例にそれぞれ対応する。又、リード側ライトポインタ210は、「第2回路側ポインタ値演算部で演算された第1ポインタ」に対応し、ライト側ライトポインタ同期化部209によって生成されたライト側ライトポインタ211は、「第2同期化部で取り込まれた第1ポインタ」に対応する。
【0098】
尚、本実施の形態において、各ポインタは、データライト毎及びデータリード毎にインクリメントされる例を示したが、各ポインタがデータライト毎及びデータリード毎にデクリメントされる場合でも、本実施の形態に係るメモリ制御を適用することが可能である。この場合には、本実施の形態での説明において、「インクリメント」を「デクリメント」に適宜読み替えることで、同様のメモリ制御を実現することができる。即ち、本実施の形態において、各ポインタ値は、増加方向又は減少方向の予め定められた方向に1ずつ変化する。
【0099】
更に、本実施の形態では、メモリ300へのデータ格納数は外部へ出力されていないが、格納数を示す情報がメモリ制御装置100から外部に出力されてもよい。又、各回路ブロックの動作に要するクロックサイクル数は、上述の説明に限定されず、自由に設定することが可能である。又、以上では、ライトポインタの転送及びリードポインタの転送の両方、即ち、双方向のポインタ転送の各々に本実施の形態に係るポインタ転送を適用する例を説明したが、ライトポインタの転送及びリードポインタの転送の一方のみに、本実施の形態を適用することも可能である。例えば、ライトポインタの転送のみに、本実施の形態を適用する場合には、
図1の構成例からライト側のライト側リードポインタ演算部112及びライト側一致検出部113の配置を省略することができる。反対に、リードポインタの転送のみに、本実施の形態を適用する場合には、
図1の構成例からリード側のリード側ライトポインタ演算部212及びリード側一致検出部213の配置を省略することができる。
【0100】
又、本実施の形態では、メモリ300に対するデータライト及びデータリードを伴うものとしてメモリ制御を説明したが、非同期クロック間のポインタ転送の部分のみに対して本実施の形態を適用することで、本実施の形態に係るポインタ転送装置及びポインタ制御方法を提供することも可能である。この場合にも、双方向のポインタ転送のうちの一方向のポインタ転送のみに対して本実施の形態が適用される様に、ポインタ転送装置及びポインタ制御方法を構成することができる。
【0101】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本開示の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0102】
100 メモリ制御装置、101 メモリライト回路、103 ライト側アクセス制御部、104 ライト側ライトイネーブル、106 ライト側ライトポインタインクリメント、107 ライト側ライトポインタ生成部、108 ライト側ライトポインタ、109 リード側リードポインタ同期化部、110 ライト側リードポインタ、111 リード側リードポインタ(ライト回路側同期化)、112 ライト側リードポインタで演算部、113 ライト側一致検出部、114 ライト側リードポインタインクリメント、201 メモリリード回路、203 リード側アクセス制御部、204 リード側リードイネーブル、206 リード側リードポインタインクリメント、207 リード側リードポインタ生成部、208 リード側リードポインタ、209 ライト側ライトポインタ同期化部、210 リード側ライトポインタ、211 ライト側ライトポインタ(リード回路側同期化)、212 リード側ライトポインタ演算部、213 リード側一致検出部、214 リード側ライトポインタインクリメント、300 メモリ、N メモリ深さ、RCLK リードクロック、RCMD リード指示、RDAT リードデータ、RPRM リード許可、WCLK ライトクロック、WCMD ライト指示、WDAT ライトデータ、WPRM ライト許可、rpf フラグ部(リードポインタ)、rpp ポインタ部(リードポインタ)、rpf フラグ部(ライトポインタ)、wpp ポインタ部(ライトポインタ)。