(57)【特許請求の範囲】
【請求項１】
ライトアドレス、ライトデータ及びリードアドレスを受け付け、データの書き込みとデータの読み出しの並列動作が可能な第１の記憶部と、
直列接続された複数の記憶素子からなる記憶部であって、前記ライトデータを受け付けると共に、前記第１の記憶部と並列接続された第２の記憶部と、
少なくとも前記ライトアドレス及び前記リードアドレスに応じて、前記第１の記憶部から読み出されたリードデータ及び前記第２の記憶部をなす前記複数の記憶素子のいずれかに記憶されたデータのいずれかを外部に出力するデータとして決定する決定部と、
前記決定部により外部に出力すると決定されたデータを選択的に出力する選択部と、
を備える半導体装置。
【請求項２】
前記第１の記憶部は、ライトイネーブルとリードイネーブルを受け付け、
前記選択部は、前記ライトアドレス、前記リードアドレス、前記ライトイネーブル及び前記リードイネーブルに応じて、外部に出力するデータを選択する、請求項１の半導体装置。
【請求項３】
前記第１の記憶部に供給される前記ライトデータを保持する第１の保持部と、
前記第１の記憶部に供給される前記ライトアドレスを保持する第２の保持部と、
前記第１の記憶部に供給される前記ライトイネーブルを保持する第３の保持部と、
前記第１の記憶部に供給される前記リードアドレスを保持する第４の保持部と、
前記第１の記憶部に供給される前記リードイネーブルを保持する第５の保持部と、
をさらに備える請求項２の半導体装置。
【請求項４】
前記決定部は、前記外部に出力するデータを示す選択信号を、前記選択部に向けて出力し、
前記選択信号を保持する第６の保持部をさらに備える、請求項３の半導体装置。
【請求項５】
前記ライトデータから誤り訂正符号を生成する誤り訂正符号化回路と、
前記誤り訂正符号に応じて、前記第１の記憶部から読み出されたリードデータを訂正する誤り訂正回路と、
をさらに備える、請求項１乃至４のいずれか一項に記載の半導体装置。
【請求項６】
前記決定部は、前記リードアドレスと前記ライトアドレスが一致する際のシステムクロックの遅延数に応じて、前記外部に出力するデータを決定する請求項１乃至５のいずれか一項に記載の半導体装置。
【請求項７】
前記決定部は、
前記ライトアドレスと前記リードアドレスが一致する場合には、前記第２の記憶部をなす複数の記憶素子のうち、初段の記憶素子が記憶するデータを前記外部に出力するデータとして決定し、
前記システムクロックの遅延数が、前記第２の記憶部をなす複数の記憶素子の数以上の場合には、前記第１の記憶部から読み出されたリードデータを前記外部に出力するデータとして決定する、請求項６の半導体装置。
【請求項８】
前記第１の保持部の前段に配置され、前記ライトデータを保持する第７の保持部と、
前記第２の保持部の前段に配置され、前記ライトアドレスを保持する第８の保持部と、
前記第３の保持部の前段に配置され、前記ライトイネーブルを保持する第９の保持部と、
をさらに備える、請求項４の半導体装置。
【請求項９】
前記第１の記憶部から読み出されたリードデータを保持する第１０の保持部と、
前記決定部に供給される前記リードアドレスを保持する第１１の保持部と、
をさらに備える、請求項８の半導体装置。
【請求項１０】
ライトアドレス、ライトデータ及びリードアドレスを受け付け、データの書き込みとデータの読み出しの並列動作が可能な第１の記憶部と、直列接続された複数の記憶素子からなる記憶部であって、前記ライトデータを受け付けると共に、前記第１の記憶部と並列接続された第２の記憶部と、を含む記憶装置からのデータ出力方法であって、
少なくとも前記ライトアドレス及び前記リードアドレスに応じて、前記第１の記憶部から読み出されたリードデータ及び前記第２の記憶部をなす前記複数の記憶素子のいずれかに記憶されたデータのいずれかを外部に出力するデータとして決定するステップと、
前記外部に出力すると決定されたデータを選択的に出力するステップと、
を含む、データ出力方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置及びデータ出力方法に関する。特に、データを記憶する半導体装置及びそのデータ出力方法に関する。
【背景技術】
【０００２】
近年、プログラミング可能なＦＰＧＡ（Field-Programmable Gate Array）が様々な用途（アプリケーション）にて用いられている。大容量のＲＡＭ（Random Access Memory）ブロックが搭載された大規模なＦＰＧＡが市場に安定的に供給されており、このような最新のＦＰＧＡを内部に組み込んだ製品が数多く開発されている。
【０００３】
また、通信技術の発展に伴い、ネットワークの通信容量の大容量化が著しい。このような環境の下、処理容量（処理能力）が１００Ｇｂｐｓに達する通信装置は既に実用化の段階にあり、より高速な装置（例えば、４００ｂｐｓの処理容量）の開発が始まっている。さらに、より一層の通信品質向上を目的として、１００Ｇｂｐｓの処理能力を確保しつつ、より複雑な処理を行うことで、ユーザの独自要望に添ったきめ細かいサービスを提供する装置の開発が始動しつつある。
【０００４】
このようなユーザ独自の機能を実現するため、通信装置等に要求される機能をＦＰＧＡにて実現することが多い。例えば、通信容量を１００Ｇｂｐｓと仮定する。この場合、１００Ｇｂｐｓの処理容量を実現する通信装置内部の信号バス帯域は、「信号バスビット数×システムクロック周波数≧１００Ｇｂｐｓ」という条件を満たす必要がある。例えば、信号バスビット数とシステムクロック周波数の関係は、以下のような組み合わせが用いられる場合が多い。
６４０ビット×１５６．２５ＭＨｚ（＝１００．０００Ｇｂｐｓ）
５１２ビット×３１２．５ＭＨｚ（＝１６０．０００Ｇｂｐｓ）
３２０ビット×３１２．５ＭＨｚ（＝１００．０００Ｇｂｐｓ）
【０００５】
特に、イーサネット（登録商標；以下同じ）等の可変長パケットを扱う通信装置は、その内部のチップ間通信プロトコルとして、信号帯域に余裕があるインターラーケン（Ｉｎｔｅｒｌａｋｅｎ）インターフェース（５１２ビット×３１２．５ＭＨｚ＝１６０．０００Ｇｂｐｓ）を標準的に用いることが多い。
【０００６】
特許文献１には、リードモディファイライト動作を高速に行なうことが可能な演算システムを提供する、と記載されている。リードモディファイライト動作とは、指定されたアドレスのデータを読み出し、当該読み出したデータの指定ビットを加工し、加工されたデータを元のアドレスに書き戻す動作である。特許文献１が開示する技術では、ＡＬＵ（Arithmetic Logic Unit）が、データを複数部分に分けて演算を行い、複数部分のデータに対応するバンク０、バンク１のメモリを用意する。その上で、バンク０がＡＬＵの演算結果を書き込んでいる際に、バンク１のデータ読み出しが行われる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−２９３５３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
なお、上記先行技術文献の開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。
【０００９】
通信装置内部のチップ間通信プロトコルに、インターラーケンインターフェース（５１２ビットパラレル）が採用され、通信装置内部の各モジュール（例えば、ＦＰＧＡを用いて実装された演算モジュール）が、１つのパケットを処理するのに許容される時間を考察する。イーサネット上の最小フレームサイズは、６４バイト（６４×８＝５１２ビット）と規定されている。従って、インターラーケンインターフェースを採用し、パケットの授受を行うＦＰＧＡ等は、６４バイトのパケット（１パケット）を１クロックにて処理する必要がある。上記の例では、１パケット（６４バイト）を処理するのに２クロック要したのでは、処理容量は８０Ｇｂｐｓとなり必要な処理容量を確保できないためである。
【００１０】
このように、通信装置等に実装されたＦＰＧＡは、大容量のデータを高速に処理することが望まれ、１つのパケットを処理するのに許容されるクロック数は１である。以下、１つのパケットを処理するのに許容されるクロック数が１という前提条件の下、ＦＰＧＡに生じる問題を具体的に説明する。その際、図２２に示すパケットモニタ回路を例に取り、問題点を説明する。パケットモニタ回路とは、通信装置が受信したパケット数を積算カウントする回路である。
【００１１】
パケットに複数のグループに振り分けられ、グループ単位にてパケットを積算カウントするための回路が図２２に示されるパケットモニタ回路である。また、各グループのパケットはランダムに入力され、同一のグループに属するパケットが連続して入力される場合も存在する。図２２において、パケットは、グループごとに用意された積算カウント回路８０−１〜８０−ｎ（ｎは正の整数、以下同じ）と、グループ選択回路８１と、に入力される。
【００１２】
積算カウント回路８０−１〜８０−ｎのそれぞれは、演算部８２と、フリップフロップ（ＦＦ；Flip-Flop）８３と、を備える。各演算部８２は、対応するグループのパケットが入力されると、フリップフロップ８３から読み出した値（積算パケット数）に１を加算し、その結果をフリップフロップ８３に出力する。グループ選択回路８１は、パケットのヘッダに格納されたアドレスに応じて、いずれのグループに対応する積算カウント回路８０−１〜８０−ｎを有効にするか決定し、対応するイネーブル信号ＧＲＰ＿ＥＮを活性化する（アクティブとする）。自回路に対応し、且つ、活性化したイネーブル信号ＧＲＰ＿ＥＮを受け取った積算カウント回路８０のフリップフロップ８３は、演算部８２が出力するデータを、選択回路８４に出力する。また、グループ選択回路８１は、パケットに含まれるアドレスに応じて、選択回路８４にグループ選択信号ＧＲＰ＿ＳＥＬを出力する。選択回路８４は、グループ選択信号ＧＲＰ＿ＳＥＬに応じて、外部に出力するデータを選択する。
【００１３】
例えば、積算カウント回路８０−１はグループ１（ＧＲＰ１）に割り当てられているとする。パケットモニタ回路にグループ１に割り当てられたアドレスを含むパケットが入力されると、積算カウント回路８０−１の演算部８２は、フリップフロップ８３が出力する積算カウント値（ＯＬＤ＿ＤＡＴＡ）に１を加算する。演算部８２は、加算結果をフリップフロップ８３に出力する。次に、パケットモニタ回路に入力されるシステムクロック（図示せず）が１クロック進むと、グループ選択回路８１は、積算カウント回路８０−１に対応するイネーブル信号ＧＲＰ＿ＥＮとグループ選択信号ＧＲＰ＿ＳＥＬをアクティブにする。イネーブル信号ＧＲＰ＿ＥＮがアクティブとなることで、積算カウント回路８０−１のフリップフロップ８３は、１クロック前に演算部８２が出力するデータをデータ出力端子から出力する。グループ選択信号ＧＲＰ＿ＳＥＬにより選択回路８４のポート１に供給されたデータ（積算カウント回路８０−１の出力）が選択され、パケットモニタ回路の出力となる。
【００１４】
以上のように、図２２に示す構成により受信パケットの積算カウントが可能となる。しかし、図２２に示す回路構成には、受信パケットを振り分ける際のグループの数が多くなると、回路規模が増大するという問題がある。グループの数と同じだけ積算カウント回路を用意する必要があるためである。
【００１５】
そのため、ハードウェアとしてＲＡＭが実装されているＦＰＧＡにおいて、多数のグループに対応したパケット積算機能を実現する際には、演算回路（加算回路）を１回路実装し、演算結果はＲＡＭに格納することで回路規模を抑制する対応が取られることが多い。そこで、以下の手順によりパケットの積算カウント回路を実現することが検討された。
（１）受信パケットのグループに相当するアドレスを指定して、積算結果を保持するＲＡＭから、前パケットまでの積算値が読み出される（リード処理）。
（２）加算器にて、読み出した積算値に１が加算される（演算処理）。
（３）グループに相当するアドレスが指定され、演算結果（積算値）がＲＡＭにストアされる（ライト処理）。
【００１６】
上記（１）〜（３）の動作を１クロックにて実行可能であれば、ＦＰＧＡに実装されたＲＡＭを用いてパケットの積算カウントが可能となる。即ち、ＦＰＧＡにはＲＡＭがハードウェアとしてチップに組み込み済であるので、リソースの有効利用が行える。
【００１７】
高速動作を目的とした通常のクロック同期型ＲＡＭは、書き込み側（ライト側）において、各信号をフリップフロップによりリタイミングした後にＲＡＭコアに入力する構成を有する。また、上記のクロック同期型ＲＡＭは、書き込みアドレスと読み出しアドレスに同じ値を指定してアクセスすることを禁じていることが多い。そのため、クロック同期型ＲＡＭは、書き込んだデータを１クロック後に読み出すことができない。即ち、ＦＰＧＡに組み込まれたクロック同期型ＲＡＭにおいては、ＲＡＭコアに書き込まれたデータを、１クロック後に読み出すことはできない。
【００１８】
従って、近年の通信装置に要求されるような高速動作において、ＦＰＧＡに予め組み込まれたＲＡＭを有効活用することができず、結果的に図２２に示すような回路構成（演算回路とフリップフロップをグループの数だけ用意する構成）が用いられる。
【００１９】
以上のように、例えば、３１２．５ＭＨｚといったシステムクロックを用いる高速回路において、データの書き込み後の読み出しに１クロック処理が要求される場合、ＦＰＧＡに組み込まれたＲＡＭを有効活用できないという問題がある。
【００２０】
上記の問題点は、特許文献１に開示された演算システムにおいても生じ得る。特許文献１が開示する演算システムでは、ライトアドレスとリードアドレスが一致する場合には、フリップフロップ（例えば、特許文献１の図５や図６に示される符号２４）が保持するライトデータが出力される。換言するならば、ライトデータを一時的に保持するフリップフロップが１つであるため、ライトアドレスやライトデータのリタイミング手段を挿入することができない。そのため、上記のような３１２．５ＭＨｚといった高速なシステムクロックを使用すると、システム全体の動作マージンが低下する等の問題が生じる可能性がある。
【００２１】
本発明は、ライトアドレスとリードアドレスが競合するような場合であっても、書き込まれたライトデータをリードデータとして出力すると共に、安定した高速動作を実現することに寄与する半導体装置を提供することを目的とする。
【課題を解決するための手段】
【００２２】
本発明の第１の視点によれば、ライトアドレス、ライトデータ及びリードアドレスを受け付け、データの書き込みとデータの読み出しの並列動作が可能な第１の記憶部と、直列接続された複数の記憶素子からなる記憶部であって、前記ライトデータを受け付けると共に、前記第１の記憶部と並列接続された第２の記憶部と、少なくとも前記ライトアドレス及び前記リードアドレスに応じて、前記第１の記憶部から読み出されたリードデータ及び前記第２の記憶部をなす前記複数の記憶素子のいずれかに記憶されたデータのいずれかを外部に出力するデータとして決定する決定部と、前記決定部により外部に出力すると決定されたデータを選択的に出力する選択部と、を備える半導体装置が提供される。
【００２３】
本発明の第２の視点によれば、ライトアドレス、ライトデータ及びリードアドレスを受け付け、データの書き込みとデータの読み出しの並列動作が可能な第１の記憶部と、直列接続された複数の記憶素子からなる記憶部であって、前記ライトデータを受け付けると共に、前記第１の記憶部と並列接続された第２の記憶部と、を含む記憶装置からのデータ出力方法であって、少なくとも前記ライトアドレス及び前記リードアドレスに応じて、前記第１の記憶部から読み出されたリードデータ及び前記第２の記憶部をなす前記複数の記憶素子のいずれかに記憶されたデータのいずれかを外部に出力するデータとして決定するステップと、前記外部に出力すると決定されたデータを選択的に出力するステップと、を含む、データ出力方法が提供される。
【発明の効果】
【００２４】
本発明の各視点によれば、ライトアドレスとリードアドレスが競合するような場合であっても、書き込まれたライトデータをリードデータとして出力すると共に、安定した高速動作を実現することに寄与する半導体装置及びデータ出力方法が、提供される。
【図面の簡単な説明】
【００２５】
【図１】一実施形態の概要を説明するための図である。
【図２】第１の実施形態に係る通信装置の内部構成の一例を示す図である。
【図３】第１の実施形態に係る演算モジュールの内部構成の一例を示す図である。
【図４】第１の実施形態に係る記憶部の内部構成の一例を示す図である。
【図５】第１の実施形態に係る読み出し先決定回路の回路構成の一例を示す図である。
【図６】第１の実施形態に係る選択信号出力回路の動作を示す真理値表の一例を示す図である。
【図７】第１の実施形態に係るＲＡＭコア単体に関する信号の入出力を示すタイムチャートの一例である。
【図８】第１の実施形態に係る記憶部全体に関する信号の入出力を示すタイムチャートの一例である。
【図９】第１の実施形態に係るデータ出力方法の一例を示すフローチャートである。
【図１０】第１の変形例に係る記憶部の内部構成の一例を示す図である。
【図１１】第１の変形例に係るＲＡＭコア単体に関する信号の入出力を示すタイムチャートの一例である。
【図１２】第１の変形例に係る記憶部全体に関する信号の入出力を示すタイムチャートの一例である。
【図１３】第２の変形例に係る記憶部の内部構成の一例を示す図である。
【図１４】第２の変形例に係るＲＡＭコア単体に関する信号の入出力を示すタイムチャートの一例である。
【図１５】第２の変形例に係る記憶部全体に関する信号の入出力を示すタイムチャートの一例である。
【図１６】第３の変形例に係る記憶部の内部構成の一例を示す図である。
【図１７】第３の変形例に係るＲＡＭコア単体に関する信号の入出力を示すタイムチャートの一例である。
【図１８】第３の変形例に係る記憶部全体に関する信号の入出力を示すタイムチャートの一例である。
【図１９】第４の変形例に係る記憶部の内部構成の一例を示す図である。
【図２０】第５の変形例に係る記憶部の内部構成の一例を示す図である。
【図２１】第５の変形例に係る読み出し先決定回路の内部構成の一例を示す図である。
【図２２】パケットモニタ回路の内部構成の一例を示す図である。
【発明を実施するための形態】
【００２６】
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。
【００２７】
上述のように、ライトアドレスとリードアドレスが競合するような場合であっても、書き込まれたライトデータをリードデータとして出力すると共に、安定した高速動作を実現する半導体装置が望まれる。
【００２８】
そこで、一例として図１に示す半導体装置１００を提供する。半導体装置１００は、第１の記憶部１０１と、第２の記憶部１０２と、決定部１０３と、選択部１０４と、を備える。第１の記憶部１０１は、ライトアドレス、ライトデータ及びリードアドレスを受け付け、データの書き込みとデータの読み出しの並列動作が可能である。第２の記憶部１０２は、直列接続された複数の記憶素子からなる記憶部であって、ライトデータを受け付けると共に、第１の記憶部１０１と並列接続される。決定部１０３は、少なくともライトアドレス及びリードアドレスに応じて、第１の記憶部１０１から読み出されたリードデータ及び第２の記憶部１０２をなす複数の記憶素子のいずれかに記憶されたデータのいずれかを外部に出力するデータとして決定する。選択部１０４は、決定部１０３により外部に出力すると決定されたデータを選択的に出力する。
【００２９】
半導体装置１００は、例えば、ＦＰＧＡに標準的に搭載されているデュアルポートメモリを第１の記憶部１０１として用いる。また、半導体装置１００は、システムクロックに同期してデータを保持するフリップフロップを複数連結することで、第２の記憶部１０２とする。半導体装置１００は、ライトアドレスとリードアドレスが競合し、第１の記憶部１０１からデータを読み出すことができない場合には、第２の記憶部１０２が記憶するデータを、半導体装置１００の出力データとして外部に出力する。即ち、半導体装置１００は、第１の記憶部１０１と第２の記憶部１０２を併用することで、ライトアドレスとリードアドレスの競合による問題点を解決する。
【００３０】
また、半導体装置１００に使用されるシステムクロックが高速であるため、ライトデータやライトアドレスを伝達するバスにリタイミング手段を挿入することが望まれる場合がある。このような場合であっても、第２の記憶部１０２は、直列接続された複数の記憶素子から構成されるため、リタイミング手段を挿入することにより生じる必要なデータの消失を回避できる。例えば、図１において、ライトデータ及びライトアドレスに係るバスに１段のリタイミング手段が挿入されたとする。この場合、ライトデータ及びライトアドレスはリタイミング手段により、１クロック遅延して第１の記憶部１０１に供給される。そのため、第１の記憶部１０１において、ライトアドレスとリードアドレスが一致したとしても、実際に半導体装置１００に供給されているライトアドレスは１クロック前のものである。従って、第２の記憶部１０２に含まれる記憶素子が１つの場合には、１クロック前のライトデータを保持することができず、第１の記憶部１０１にてライトアドレスとリードアドレスが一致した場合に、必要なデータ（ライトデータ）が消滅することになる。対して、上記の例で言えば、第２の記憶部１０２に２個以上の記憶素子が含まれ１クロック前のライトデータは保持されるので、必要なデータが消失することはない。このように、第２の記憶部１０２に複数の記憶素子を含ませることで、高速なシステムクロックが使用されたとしても、必要に応じてリタイミング手段を挿入できる余地があるので、半導体装置１００の安定動作を実現できる。
【００３１】
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
【００３２】
［第１の実施形態］
第１の実施形態について、図面を用いてより詳細に説明する。
【００３３】
図２は、第１の実施形態に係る通信装置１の内部構成の一例を示す図である。図２を参照すると、通信装置１は、通信モジュール１０と、演算モジュール１１と、を含んで構成される。
【００３４】
通信モジュール１０は、ネットワークを介して他の装置とパケットの送受信を行うインターフェースである。
【００３５】
演算モジュール１１は、通信モジュール１０からパケットを受信し、当該受信パケットに応じた演算処理を行う手段である。少なくとも演算モジュール１１は、ＦＰＧＡを用いて実現される。
【００３６】
通信モジュール１０と演算モジュール１１は、例えば、インターラーケン等のチップ間通信プロトコルを用いてパケットの送受信を行う。
【００３７】
図３は、演算モジュール１１の内部構成の一例を示す図である。演算モジュール１１は、演算部２１と、記憶部２２と、を含んで構成される。
【００３８】
演算部２１は、通信モジュール１０からパケットを入力する。演算部２１は、入力したパケットに対して予め定めた演算処理を行い、演算結果を記憶部２２に格納する。例えば、演算部２１は、入力パケットのヘッダに格納されたアドレスに応じて、各パケットをグループに振り分け、グループごとに受信したパケットの数を積算カウントする。
【００３９】
記憶部２２は、２つの入出力ポートを備え、各入出力ポートは独立してアクセス可能に構成される。
【００４０】
演算部２１は、ライトデータＷ＿ＤＡＴＡ、ライトアドレスＷ＿ＡＤＤ、ライトイネーブルＷ＿ＥＮのそれぞれを記憶部２２に出力する。また、演算部２１は、リードアドレスＲ＿ＡＤＤ、リードイネーブルＲ＿ＥＮのそれぞれを記憶部２２に出力し、記憶部２２からリードデータＲ＿ＤＡＴＡを取得する。なお、ライトイネーブルＷ＿ＥＮ及びリードイネーブルＲ＿ＥＮのアクティブはＨレベルである。
【００４１】
図４は、記憶部２２の内部構成の一例を示す図である。図４を参照すると、記憶部２２は、記憶回路２３と、メモリアレイ２４と、選択回路２５と、読み出し先決定回路２６と、を含んで構成される。
【００４２】
記憶回路２３は、演算部２１から供給されるライトデータＷ＿ＤＡＴＡを記憶する回路である。記憶回路２３は、２つの独立した入出力ポートを有するＲＡＭコア３１を含む。
【００４３】
ＲＡＭコア３１は、書き込みと読み出しが並列して行える所謂デュアルポートメモリである。なお、ＲＡＭコア３１は、ライトアドレスとリードアドレスに同じ値を設定することは禁止されている記憶装置である。ＲＡＭコア３１は、上述の第１の記憶部１０１に相当する。
【００４４】
ライトデータＷ＿ＤＡＴＡは、ＥＣＣ（Error Check and Correction）エンコーダ３２、フリップフロップ３３を介して、ＲＡＭコア３１のライトデータ入力端子Ｄ＿ＩＮ＿ＲＡＭに入力される。ライトアドレスＷ＿ＡＤＤは、フリップフロップ３４を介して、ＲＡＭコア３１のライトアドレス入力端子Ｗ＿ＡＤＤ＿ＲＡＭに入力される。ライトイネーブルＷ＿ＥＮは、フリップフロップ３５を介して、ＲＡＭコア３１のライトイネーブル入力端子Ｗ＿ＥＮ＿ＲＡＭに入力される。
【００４５】
リードアドレスＲ＿ＡＤＤは、フリップフロップ３６を介して、ＲＡＭコア３１のリードアドレス入力端子Ｒ＿ＡＤＤ＿ＲＡＭに入力される。リードイネーブルＲ＿ＥＮは、フリップフロップ３７を介して、ＲＡＭコア３１のリードイネーブル入力端子Ｒ＿ＥＮ＿ＲＡＭに入力される。ＲＡＭコア３１は、ＥＣＣデコーダ３８を介して、リードデータ出力端子Ｄ＿ＯＵＴ＿ＲＡＭから、リードデータＲＡＭ＿ＯＵＴを選択回路２５のポート０に出力する。
【００４６】
なお、ＥＣＣエンコーダ３２は、ＲＡＭコア３１に書き込むデータに対応する誤り訂正符号を生成する手段（誤り訂正符号化回路）であり、ＥＣＣデコーダ３８は誤り訂正符号のデコードと誤りデータの訂正を行う手段（誤り訂正回路）である。即ち、記憶回路２３は、ＲＡＭコア３１に保持されるデータにソフトエラー（ハードウェアには故障は生じていないが誤ったデータが記憶されるエラー；ビットエラー）が発生した場合に、当該ソフトエラーを訂正する機能を有する。
【００４７】
また、記憶回路２３は、ＲＡＭコア３１の各種入力端子にフリップフロップを接続する構成を有し、各種データのリタイミングを実施することで、システムクロックが３１２．５ＭＨｚとなるような高速動作を実現する。具体的には、ＲＡＭコア３１に供給されるライトデータ、ライトアドレス、ライトイネーブル、リードアドレス、リードイネーブルのそれぞれを、システムクロックに同期して保持するフリップフロップ３３〜３７がリタイミング手段として機能する。
【００４８】
メモリアレイ２４は、複数のフリップフロップ（記憶素子）が直列接続された回路である。メモリアレイ２４は、内部のフリップフロップによりデータを記憶する回路である。記憶回路２３とメモリアレイ２４は、並列に接続されている。メモリアレイ２４は、上述の第２の記憶部１０２に相当する。
【００４９】
メモリアレイ２４は、演算部２１から供給されるライトデータＷ＿ＤＡＴＡを、システムクロックに同期して記憶する手段である。図４に示す構成では、メモリアレイ２４は、４つのフリップフロップ４１−１〜４１−４を有するので、３クロック前までのライトデータＷ＿ＤＡＴＡの記憶が可能である。
【００５０】
フリップフロップ４１−１〜４１−４それぞれのデータ出力端子は、選択回路２５の入力端子と接続されている。具体的には、フリップフロップ４１−１のデータ出力端子は、選択回路２５のポート１に係る入力端子と接続されている。同様に、フリップフロップ４１−２のデータ出力端子は選択回路２５のポート２、フリップフロップ４１−３のデータ出力端子は選択回路２５のポート３、フリップフロップ４１−４のデータ出力端子は選択回路２５のポート４にそれぞれ接続されている。
【００５１】
読み出し先決定回路２６は、演算部２１から供給されるアドレス情報（ライトアドレスＷ＿ＡＤＤ、リードアドレスＲ＿ＡＤＤ）と、動作許可情報（ライトイネーブルＷ＿ＥＮ、リードイネーブルＲ＿ＥＮ）と、に応じて、記憶部２２全体の出力データを決定する手段である。より具体的には、読み出し先決定回路２６は、アドレス情報と動作許可情報に基づいて、記憶回路２３の出力データ及びメモリアレイ２４からの出力データのいずれを記憶部２２から外部に出力するデータ（リードデータＲ＿ＤＡＴＡ）とするかを決定する回路である。即ち、読み出し先決定回路２６は、ライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤを監視し、これらのアドレス情報と予め定めた所定の規則（ルール）に基づいて、選択回路２５によるデータの読み出し先を決定する回路である。読み出し先決定回路２６は、上述の決定部１０３に相当する。
【００５２】
読み出し先決定回路２６が選択回路２５に向けて出力する選択信号ＳＥＬは、フリップフロップ２７により１クロック遅延されて、選択信号ＳＥＬ＿１Ｔとして選択回路２５に供給される。なお、図４を含む図面において、各フリップフロップは、それぞれが記憶するデータのビット数に応じた数のフリップフロップが並列接続されて構成される。例えば、ライトデータＷ＿ＤＡＴＡが１６ビットのデータであれば、フリップフロップ３３やフリップフロップ４１−１〜４１−４のそれぞれは１６個のフリップフロップからなる。
【００５３】
図５は、読み出し先決定回路２６の回路構成の一例を示す図である。図５を参照すると、読み出し先決定回路２６は、アドレス比較回路５１−１〜５１−４と、論理積回路５２−１〜５２−４と、フリップフロップ５３−１〜５３−６と、選択信号出力回路５４と、を含んで構成される。
【００５４】
フリップフロップ５３−１〜５３−３はそれぞれ、ライトアドレスＷ＿ＡＤＤを遅延させる。フリップフロップ５３−４〜５３−６はそれぞれ、ライトイネーブルＷ＿ＥＮを遅延させる。なお、以降の説明において、フリップフロップ５３−１〜５３−３のそれぞれが出力するデータを、ＷＡ＿１Ｔ、ＷＡ＿２Ｔ、ＷＡ＿３Ｔと表記する。また、フリップフロップ５３−４〜５３−６のそれぞれが出力するデータを、ＷＥ＿１Ｔ、ＷＥ＿２Ｔ、ＷＥ＿３Ｔと表記する。
【００５５】
アドレス比較回路５１−１は、現クロック（システムクロックの遅延数＝０）におけるライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤを比較し、両者が一致する場合にはＨレベルを出力する。アドレス比較回路５１−１は、ライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤが不一致の場合には、Ｌレベルを出力する。
【００５６】
アドレス比較回路５１−２は、１クロック前のライトアドレスＷ＿ＡＤＤ（遅延数＝１クロック）と、現クロックのリードアドレスＲ＿ＡＤＤと、が一致するか否かを判定する回路である。同様に、アドレス比較回路５１−３は２クロック前、アドレス比較回路５１−４は３クロック前のライトアドレスＷ＿ＡＤＤと現クロックのリードアドレスＲ＿ＡＤＤの一致・不一致を判定する回路である。
【００５７】
論理積回路５２−１は、現クロックにおけるライトイネーブルＷ＿ＥＮとアドレス比較回路５１−１の出力信号の論理積演算を行い、演算結果を選択信号出力回路５４に出力する。論理積回路５２−２は、１クロック前のライトイネーブルＷ＿ＥＮとアドレス比較回路５１−２の出力信号の論理積演算を行い、その結果を選択信号出力回路５４に出力する。同様に、論理積回路５２−３は２クロック前、論理積回路５２−４は３クロック前のライトイネーブルＷ＿ＥＮとアドレス比較回路５１−３、５１−４の出力信号の論理積演算を行い、その結果を選択信号出力回路５４に出力する。
【００５８】
選択信号出力回路５４は、論理積回路５２−１〜５２−４のそれぞれが出力する演算結果を、入力端子ＩＮ＿１〜ＩＮ＿４により取得する。選択信号出力回路５４は、入力端子ＩＮ＿１〜ＩＮ＿４に印加される論理レベル（Ｈレベル又はＬレベル）に応じて、選択信号ＳＥＬを決定する回路である。選択信号出力回路５４は、ライトイネーブルＷ＿ＥＮがＨレベルであるライトアドレスＷ＿ＡＤＤに関し、ライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤとの間の関係に基づいて、選択信号ＳＥＬを決定する。具体的には、選択信号出力回路５４は、以下の動作を行う。
【００５９】
（ａ）選択信号出力回路５４は、ライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤが一致する場合（ＩＮ＿１＝Ｈレベル）、選択回路２５がポート１を選択するように選択信号ＳＥＬを出力する。つまり、ライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤが一致する場合、フリップフロップ４１−１の出力データが選択回路２５から出力される。
（ｂ）選択信号出力回路５４は、１クロック前のライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤが一致する場合（ＩＮ＿２＝Ｈレベル）、選択回路２５がポート２を選択するように選択信号ＳＥＬを出力する。つまり、１クロック前のライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤが一致する場合、フリップフロップ４１−２の出力データが選択回路２５から出力される。
（ｃ）選択信号出力回路５４は、２クロック前のライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤが一致する場合（ＩＮ＿３＝Ｈレベル）、選択回路２５がポート３を選択するように選択信号ＳＥＬを出力する。つまり、２クロック前のライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤが一致する場合、フリップフロップ４１−３の出力データが選択回路２５から出力される。
（ｄ）選択信号出力回路５４は、３クロック前のライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤが一致する場合（ＩＮ＿４＝Ｈレベル）、選択回路２５がポート４を選択するように選択信号ＳＥＬを出力する。つまり、３クロック前のライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤが一致する場合、フリップフロップ４１−４の出力データが選択回路２５から出力される。
（ｅ）選択信号出力回路５４は、ライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤの関係が上記（ａ）〜（ｄ）以外の場合には、選択回路２５がポート０のデータ（リードデータＲＡＭ＿ＯＵＴ）を選択するように選択信号ＳＥＬを出力する。
【００６０】
上記（ａ）〜（ｅ）に係る選択信号出力回路５４の動作を真理値表としてまとめた図が、図６である。なお、図６における「×」はドントケアを示す。
【００６１】
以上のように、読み出し先決定回路２６は、リードアドレスＲ＿ＡＤＤとライトアドレスＷ＿ＡＤＤが一致する際のシステムクロックの遅延数に応じて、外部に出力するデータを決定する。より具体的には、読み出し先決定回路２６は、ライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤが一致する場合には、メモリアレイ２４をなす複数のフリップフロップのうち、初段のフリップフロップ４１−１が記憶するデータを外部に出力するデータに決定する。また、読み出し先決定回路２６は、システムクロックの遅延数が、メモリアレイ２４を構成するフリップフロップの数（第１の実施形態では４）以上の場合には、ＲＡＭコア３１から読み出されるデータを外部に出力するデータに決定する。
【００６２】
選択回路２５は、選択信号ＳＥＬが１クロック遅延された選択信号ＳＥＬ＿１Ｔにより、記憶部２２の外部に出力するデータを選択的に出力する回路である。選択回路２５は、上述の選択部１０４に相当する。
【００６３】
次に、図７及び図８に示すタイムチャートを用いて記憶部２２の動作を説明する。
【００６４】
図７は、ＲＡＭコア３１単体に関する信号の入出力を示すタイムチャートの一例である。図８は、記憶部２２全体に関する信号の入出力を示すタイムチャートの一例である。図７及び図８では、記憶部２２からデータを読み出し、当該呼び出したデータに対して演算処理（例えば、パケットの積算カウント処理）を施し、次のクロックにて演算結果を書き込むといった演算部２１の動作を想定している。つまり、記憶部２２は、リード動作の１クロック後にライト動作することを想定している。
【００６５】
また、パケットに含まれるアドレスに応じて、各パケットはグループ分けされるが、図７及び図８では、同一のグループに関する処理が連続する場合を想定している。具体的には、時刻Ｔ１５〜Ｔ１９にて、ＲＡＭコア３１のアドレス値１に書き込まれるパケットが５回連続して入力されている。
【００６６】
図７を参照すると、時刻Ｔ０１〜Ｔ０６の期間は、ライトイネーブルＷ＿ＥＮがＨレベルであるためＲＡＭコア３１には、ライトデータ値０ａ〜５ａのそれぞれがＲＡＭコア３１のアドレス値０〜５に書き込まれる。なお、時刻Ｔ０１〜Ｔ０６の期間では、リードイネーブルＲ＿ＥＮはＬレベルであるため、ＲＡＭコア３１からデータが読み出されることはない。
【００６７】
次に、時刻Ｔ０９にて、演算部２１によるライトデータＷ＿ＤＡＴＡ及びライトアドレスＷ＿ＡＤＤの供給に先立ち、ＲＡＭコア３１からデータの読み出しが行われる。具体的には、ライトアドレスＷ＿ＡＤＤにアドレス値０が設定される１クロック前に、リードイネーブルＲ＿ＥＮがＨレベル、リードアドレスＲ＿ＡＤＤにアドレス値０がそれぞれ設定される。当該リードイネーブルＲ＿ＥＮ及びリードアドレスＲ＿ＡＤＤは１クロック遅延されてＲＡＭコア３１に供給され、時刻Ｔ１０にて、ＲＡＭコア３１のアドレス値０からリードデータ値０ａがリードデータＲＡＭ＿ＯＵＴとして読み出される。
【００６８】
また、時刻Ｔ１０にて、ライトイネーブルＷ＿ＥＮがＨレベルに設定され、アドレス値０、ライトデータ値０ｂに係る書き込み情報が、記憶部２２に供給される。当該書き込み情報（アドレス値０、ライトデータ値０ｂ）は、フリップフロップ３４、３５により１クロック遅延されてＲＡＭコア３１に供給され、時刻Ｔ１１のタイミングにてＲＡＭコア３１に書き込まれる。ＲＡＭコア３１は、このようなデータの読み出し動作と書き込みに係る動作を、時刻Ｔ１４まで繰り返す。
【００６９】
時刻Ｔ１５において、ライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤに同じアドレス値１が、記憶部２２に供給される。従って、時刻Ｔ１５から１クロック遅れた時刻Ｔ１６にて、ＲＡＭコア３１に、同じアドレス値１を持つライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤが供給される。この場合、ＲＡＭコア３１に同時アクセスが発生することとなり、ＲＡＭコア３１から出力される値（リードデータＲＡＭ＿ＯＵＴ）は不定となる。即ち、ＲＡＭコア３１の動作は、期待動作と異なる。
【００７０】
なお、図７以降の図面において、ＲＡＭコア３１によるリードデータＲＡＭ＿ＯＵＴが不定の場合の値を「×」を用いて表記する。また、ライトイネーブルＷ＿ＥＮやリードイネーブルＲ＿ＥＮが無効（Ｌレベル）の場合のデータ値及びアドレス値は無意味であるので、このような場合のデータ値等は「−」を用いて表記する。
【００７１】
図８を参照すると、時刻Ｔ１２にて、１クロック前の時刻Ｔ１１におけるライトアドレスＷ＿ＡＤＤ（ライトアドレス値＝１）と、リードアドレスＲ＿ＡＤＤ（リードアドレス値＝１）と、が一致する。そのため、読み出し先決定回路２６の論理積回路５２−２は、Ｈレベルを出力する。その結果、選択信号出力回路５４の入力端子ＩＮ＿２はＨレベルとなる。図６を参照すると、入力端子ＩＮ＿２がＨレベルであるので、選択信号出力回路５４は、選択回路２５がポート２を選択するように選択信号ＳＥＬを出力する。図８の時刻Ｔ１３にて、選択信号ＳＥＬが１クロック遅延された選択信号ＳＥＬ＿１Ｔが、選択回路２５に供給される。選択回路２５は、ポート２に供給されているデータ（メモリアレイ２４のフリップフロップ４１−２の出力データ）である「１ｂ」を、記憶部２２からのリードデータＲ＿ＤＡＴＡとして出力する。
【００７２】
記憶部２２は、このような動作を時刻Ｔ１４まで行う。
【００７３】
次に、時刻Ｔ１５において、ライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤとして同じアドレス値１が、記憶部２２に供給される。この場合、ライトアドレス値とリードアドレス値が一致するため、読み出し先決定回路２６の論理積回路５２−１は、Ｈレベルを出力する。その結果、選択信号出力回路５４の入力端子ＩＮ＿１にＨレベルが供給される。図６を参照すると、入力端子ＩＮ＿１がＨレベルであるので、選択信号出力回路５４は、選択回路２５がポート１を選択するように選択信号ＳＥＬを出力する。時刻Ｔ１６にて、選択信号ＳＥＬが１クロック遅延された選択信号ＳＥＬ＿１Ｔが、選択回路２５に供給される。選択回路２５は、ポート１に供給されているデータ（メモリアレイ２４のフリップフロップ４１−１の出力データ）である「１ｄ」を、記憶部２２からのリードデータＲ＿ＤＡＴＡとして出力する。
【００７４】
このように、同時アクセスが発生するような場合には、読み出し先決定回路２６は、フリップフロップ４１−１が記憶するライトデータＷ＿ＤＡＴＡを、記憶部２２全体の出力データ（リードデータＲ＿ＤＡＴＡ）として外部に出力する。その結果、記憶部２２は、期待通りのデータ出力を行える。
【００７５】
第１の実施形態に係るデータ出力方法をまとめると図９に示すフローチャートのとおりである。
【００７６】
ステップＳ０１において、少なくともライトアドレスＷ＿ＡＤＤ及びリードアドレスＲ＿ＡＤＤに応じて、ＲＡＭコア３１から読み出されたリードデータＲＡＭ＿ＯＵＴ及びメモリアレイ２４をなす複数のフリップフロップ４１のいずれかに記憶されたデータのいずれかを外部に出力するデータとして決定する。ステップＳ０２において、外部に出力すると決定されたデータを選択的に出力する。
【００７７】
以上のように、第１の実施形態に係る記憶部２２は、ライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤとの間の関係に基づいて、ＲＡＭコア３１が出力するデータ及びメモリアレイ２４が出力するデータのいずれかを、リードデータＲ＿ＤＡＴＡとして出力するか選択する。その結果、記憶部２２は、ライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤが一致するような場合も含め、これらのアドレス値がどのような値であっても、リード動作の１クロック後にライト動作が可能となる。即ち、第１の実施形態に係る記憶部２２は、ライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤが一致する場合であっても、ライトされたデータを確実にリードすることが可能である。また、フリップフロップ３３〜３７は各種データをリタイミングする手段として機能する。そのため、例えば、パケットを１００Ｇｂｐｓといった速度にて処理する必要がある通信装置１の演算モジュール１１に記憶部２２を組み込むことで、パケットを１クロックで処理することが可能となる。
【００７８】
また、演算モジュール１１をＦＰＧＡにて実現する場合に、フリップフロップに係るリソースを記憶装置として使用する必要がなくなり、汎用的なＦＰＧＡのリソースを有効活用できる。即ち、安価な通信装置１を短期間で開発することが可能となる。
【００７９】
ここで、一部のＦＰＧＡには、同時アクセスが発生した場合に、ライトデータを直接リードできる機能を有するものがある。このようなＦＰＧＡを使用すれば、同時アクセスに伴う問題は生じない。しかし、このような機能は、ごく一部のＦＰＧＡメーカから供給されるＦＰＧＡに限り実装されているものあり一般的ではない。つまり、大半のＦＰＧＡにはこのような機能は実装されておらず、上記のような例外的且つ特殊な機能を有するＦＰＧＡを採用することはできない。
【００８０】
また、１００Ｇｂｐｓといった処理容量が要求される通信装置１では、例えば、３１２．５ＭＨｚにて１クロック処理が必要となるため、ライトデータＷ＿ＤＡＴＡに対するＥＣＣが適用できないという問題がある。ＦＰＧＡにおいて、高速なＥＣＣ回路を実現するためには、予めＦＰＧＡにハードマクロとして組み込まれたＥＣＣ回路を用いるのが通常である。しかし、ハードマクロに係るＥＣＣ回路を組み込みつつ、同時アクセス時の出力を保証する記憶装置は存在しないのが現状である。つまり、上記の特殊機能（同時アクセスが発生した場合には、ライトデータを直接リードできる機能）が実装されたＦＰＧＡであっても、ＥＣＣ機能を有効にすることができないという問題がある。即ち、１クロック処理が要求されるような記憶装置では、ＥＣＣ回路の適用ができずソフトエラーによるＲＡＭのビット反転エラーを回避できない。その結果、信頼性の高い通信装置の実現が困難とある。
【００８１】
一方、第１の実施形態に係る記憶部２２は、同時アクセス時にはメモリアレイ２４のフリップフロップ４１−１に格納されたライトデータＷ＿ＤＡＴＡをリードデータＲ＿ＤＡＴＡとして出力するためソフトエラーによるビット反転エラーは生じない。また、ＲＡＭコア３１に格納されるライトデータＷ＿ＤＡＴＡには、ＥＣＣ回路（ＥＣＣエンコーダ３２とＥＣＣデコーダ３８）による誤り訂正が適用されるため、ソフトエラーによるビット反転エラーは必要に応じて訂正される。その結果、記憶部２２を用いる通信装置１の信頼性（品質）を向上させることができる。
【００８２】
なお、第１の実施形態にて説明した記憶部２２の構成及び動作は例示であって、種々の変形が可能である。以下、第１の実施形態の変形例について説明する。
【００８３】
［変形例１］
図１０は、第１の変形例に係る記憶部２２ａの内部構成の一例を示す図である。図４に示す記憶部２２と図１０に示す記憶部２２ａの相違点は、記憶回路２３の内部にフリップフロップ６１〜６３が追加されている点である。即ち、図１０に示す記憶部２２ａでは、ＲＡＭコア３１における書き込み側のリタイミング段数が２段となっている。
【００８４】
ＲＡＭコア３１の書き込み側のリタイミング段数が２段になっているため、ライトアドレスＷ＿ＡＤＤやライトデータＷ＿ＤＡＴＡは２クロック遅延してＲＡＭコア３１に供給される（例えば、図１１のＴ０１〜Ｔ０３参照）。また、例えば、図１２の時刻Ｔ１５、Ｔ１６を参照すると、同時アクセスが発生した場合であっても、期待通りのデータが記憶部２２ａから出力されているのが理解される。
【００８５】
［変形例２］
図１３は、第２の変形例に係る記憶部２２ｂの内部構成の一例を示す図である。図１０に示す記憶部２２ａと図１３に示す記憶部２２ｂの相違点は、ＲＡＭコア３１のリードデータ出力端子Ｄ＿ＯＵＴ＿ＲＡＭとＥＣＣデコーダ３８の間に挿入されるフリップフロップ６４と、リードアドレスＲ＿ＡＤＤを１クロック遅延させるフリップフロップ６５と、が追加されている点である。
【００８６】
記憶部２２ｂは、フリップフロップ６４が追加されることで、読み出し側のデータ出力をリタイミングする。また、ＲＡＭコア３１から出力されるリードデータＲＡＭ＿ＯＵＴと、記憶部２２ｂの外部（演算部２１）から供給されるリードアドレスＲ＿ＡＤＤと、の間の整合を図るためフリップフロップ６５が追加される。なお、図１３以降の図面において、フリップフロップ６５により１クロック遅延されるリードアドレスＲ＿ＡＤＤをリードアドレスＲ＿ＡＤＤ＿１Ｔと表記する。
【００８７】
図１４を参照すると、例えば、時刻Ｔ０９にてＲＡＭコア３１から読み出されたデータは、フリップフロップ６４により１クロック遅延され、時刻Ｔ１０にてリードデータＲＡＭ＿ＯＵＴとして出力される。
【００８８】
また、図１５を参照すると、例えば、時刻Ｔ０８にて演算部２１から供給されたリードアドレスＲ＿ＡＤＤは、フリップフロップ６５により１クロック遅延され、時刻Ｔ０９にてリードアドレスＲ＿ＡＤＤ＿１Ｔとして読み出し先決定回路２６に供給される。
【００８９】
さらに、例えば、図１５の時刻Ｔ１５にて、ライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤが一致しているため、同時アクセスが発生している。この場合、時刻Ｔ１５のリードアドレスＲ＿ＡＤＤ＿１Ｔのアドレス値と、ライトアドレスＷ＿ＡＤＤのアドレス値が一致するので、読み出し先決定回路２６の論理積回路５２−１は、Ｈレベルを出力する。その結果、選択信号出力回路５４の入力端子ＩＮ＿１にＨレベルが供給される。入力端子ＩＮ＿１がＨレベルであるので、選択信号出力回路５４は、選択回路２５がポート１を選択するように選択信号ＳＥＬを出力する。時刻Ｔ１６にて、選択信号ＳＥＬが１クロック遅延された選択信号ＳＥＬ＿１Ｔが、選択回路２５に供給され、ポート１に供給されているデータ「１ｄ」が出力される。
【００９０】
このように、第２の変形例に係る記憶部２２ｂであっても、同時アクセスが発生した場合には、期待通りのデータが出力される。
【００９１】
［変形例３］
図１６は、第３の変形例に係る記憶部２２ｃの内部構成の一例を示す図である。図１３に示す記憶部２２ｂと図１６に示す記憶部２２ｃの相違点は、ＲＡＭコア３１の読み出し側におけるデータ出力に対するリタイミングを２段実施するためのフリップフロップ６６、６７が追加されている点である。なお、図１６以降の図面において、フリップフロップ６５及び６６により２クロック遅延されるリードアドレスＲ＿ＡＤＤをリードアドレスＲ＿ＡＤＤ＿２Ｔと表記する。
【００９２】
図１７の時刻Ｔ０８〜Ｔ１０を参照すると、ＲＡＭコア３１から読み出されたデータは、フリップフロップ６４及び６７により２クロック遅延され、リードデータＲＡＭ＿ＯＵＴとして出力される。また、図１８の時刻Ｔ０７〜Ｔ０９を参照すると、リードアドレスＲ＿ＡＤＤは、フリップフロップ６５及び６６により２クロック遅延され、リードアドレスＲ＿ＡＤＤ＿２Ｔとして読み出し先決定回路２６に供給される。また、例えば、図１８の時刻Ｔ１５、Ｔ１６を参照すると、記憶部２２ｃに同時アクセスが発生した場合であっても、期待通りのデータが記憶部２２ｃから出力されているのが理解される。
【００９３】
以上、第１〜第３の変形例にて説明したように、メモリアレイ２４に含まれるフリップフロップの段数を４段とする場合には、ＲＡＭコア３１の書き込み側のリタイミングの段数を２段、読み出し側のリタイミングの段数を２段とすることができる。さらに、リタイミングの段数を増やす場合には、メモリアレイ２４に含まれるフリップフロップの段数を増やし、読み出し先決定回路２６の構成を増加したフリップフロップの段数に適応させればよい。
【００９４】
［変形例４］
図１９は、第４の変形例に係る記憶部２２ｄの内部構成の一例を示す図である。図１６に示す記憶部２２ｃと図１９に示す記憶部２２ｄの相違点は、記憶回路２３の入力端子にフリップフロップ６８が接続されている点である。
【００９５】
ＲＡＭコア３１は、ＦＰＧＡのハードマクロとして実装されているので、ＦＰＧＡチップ上での物理的位置が予め定まっている。また、演算部２１にて使用される加算器もハードマクロとして実装されているので、演算部２１と記憶部２２の間の距離が短くなるとは限らない。つまり、演算部２１（加算器）と記憶部２２（ＲＡＭコア３１）の間の距離が長くなる可能性があり、データの送受信に問題が生じることがある。
【００９６】
そこで、第４の変形例に係る記憶部２２ｄのように、記憶回路２３の前段にフリップフロップ６８を追加することで、ライトデータＷ＿ＤＡＴＡの波形を整形する。その結果、例えば、システムクロックが３１２．５ＭＨｚのように高速、且つ、演算部２１と記憶部２２の間が離れている場合であっても、確実なデータの授受が実現できる。
【００９７】
また、フリップフロップ６８の追加は、メモリアレイ２４には直列接続された５個のフリップフロップが含まれることと等価である。従って、選択回路２５のポート数及び読み出し先決定回路２６が出力する選択信号ＳＥＬを適宜変更し、記憶部２２ｄに同時アクセスが生じた場合には、フリップフロップ６８が記憶するデータが、リードデータＲ＿ＤＡＴＡとして出力されるように構成する。
【００９８】
［変形例５］
第１の実施形態及び第１〜第４の変形例に係る記憶装置では、メモリアレイ２４に含まれるフリップフロップの個数を４として説明した。しかし、フリップフロップの個数は４に限定されない。例えば、図２０に示すように、メモリアレイ２４に含まれるフリップフロップの数は１でもよい。
【００９９】
この場合には、読み出し先決定回路２６は、図２１（ａ）に示すように構成できる。図２１（ａ）を参照すると、読み出し先決定回路２６は、同時アクセスが発生した場合（ライトアドレスＷ＿ＡＤＤとリードアドレスＲ＿ＡＤＤが一致する場合）に、選択回路２５のポート１を選択するように選択信号ＳＥＬを出力する。選択信号出力回路５４の動作を真理値表として記載すると、図２１（ｂ）のとおりとなる。
【０１００】
第５の変形例に係る記憶部２２ｅは、高速なシステムクロックによる動作が不要ではあるが、同時アクセスに対応したい場合に好適である。記憶部２２ｅでは、メモリアレイ２４に１個のフリップフロップ４１−１が含まれるだけなので、記憶回路２３の内部にリタイミング用のフリップフロップを追加することができない。しかし、演算モジュール１１を実現するＦＰＧＡを高速に動作させる必要が無い場合には、図２０に示す記憶部２２ｅの構成で足り、メモリアレイ２４と読み出し先決定回路２６の構成が簡略化できるという利点がある。
【０１０１】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
【０１０２】
［付記１］
ライトアドレス、ライトデータ及びリードアドレスを受け付け、データの書き込みとデータの読み出しの並列動作が可能な第１の記憶部と、
直列接続された複数の記憶素子からなる記憶部であって、前記ライトデータを受け付けると共に、前記第１の記憶部と並列接続された第２の記憶部と、
少なくとも前記ライトアドレス及び前記リードアドレスに応じて、前記第１の記憶部から読み出されたリードデータ及び前記第２の記憶部をなす前記複数の記憶素子のいずれかに記憶されたデータのいずれかを外部に出力するデータとして決定する決定部と、
前記決定部により外部に出力すると決定されたデータを選択的に出力する選択部と、
を備える半導体装置。
［付記２］
前記第１の記憶部は、ライトイネーブルとリードイネーブルを受け付け、
前記選択部は、前記ライトアドレス、前記リードアドレス、前記ライトイネーブル及び前記リードイネーブルに応じて、外部に出力するデータを選択する、付記１の半導体装置。
［付記３］
前記第１の記憶部に供給される前記ライトデータを保持する第１の保持部と、
前記第１の記憶部に供給される前記ライトアドレスを保持する第２の保持部と、
前記第１の記憶部に供給される前記ライトイネーブルを保持する第３の保持部と、
前記第１の記憶部に供給される前記リードアドレスを保持する第４の保持部と、
前記第１の記憶部に供給される前記リードイネーブルを保持する第５の保持部と、
をさらに備える付記２の半導体装置。
［付記４］
前記決定部は、前記外部に出力するデータを示す選択信号を、前記選択部に向けて出力し、
前記選択信号を保持する第６の保持部をさらに備える、付記３の半導体装置。
［付記５］
前記ライトデータから誤り訂正符号を生成する誤り訂正符号化回路と、
前記誤り訂正符号に応じて、前記第１の記憶部から読み出されたリードデータを訂正する誤り訂正回路と、
をさらに備える、付記１乃至４のいずれか一に記載の半導体装置。
［付記６］
前記決定部は、前記リードアドレスと前記ライトアドレスが一致する際のシステムクロックの遅延数に応じて、前記外部に出力するデータを決定する付記１乃至５のいずれか一に記載の半導体装置。
［付記７］
前記決定部は、
前記ライトアドレスと前記リードアドレスが一致する場合には、前記第２の記憶部をなす複数の記憶素子のうち、初段の記憶素子が記憶するデータを前記外部に出力するデータとして決定し、
前記システムクロックの遅延数が、前記第２の記憶部をなす複数の記憶素子の数以上の場合には、前記第１の記憶部から読み出されたリードデータを前記外部に出力するデータとして決定する、付記６の半導体装置。
［付記８］
前記第１の保持部の前段に配置され、前記ライトデータを保持する第７の保持部と、
前記第２の保持部の前段に配置され、前記ライトアドレスを保持する第８の保持部と、
前記第３の保持部の前段に配置され、前記ライトイネーブルを保持する第９の保持部と、
をさらに備える、付記４の半導体装置。
［付記９］
前記第１の記憶部から読み出されたリードデータを保持する第１０の保持部と、
前記決定部に供給される前記リードアドレスを保持する第１１の保持部と、
をさらに備える、付記８の半導体装置。
［付記１０］
前記第１０の保持部の後段に配置され、前記第１の記憶部から読み出されたリードデータを保持する第１２の保持部と、
前記第１１の保持部の前段に配置され、前記リードアドレスを保持する第１３の保持部と、
をさらに備える、付記９の半導体装置。
［付記１１］
前記第７の保持部の前段に配置され、前記ライトデータを保持する第１４の保持部をさらに備える、付記１０の半導体装置。
［付記１２］
ライトアドレス、ライトデータ及びリードアドレスを受け付け、データの書き込みとデータの読み出しの並列動作が可能な第１の記憶部と、直列接続された複数の記憶素子からなる記憶部であって、前記ライトデータを受け付けると共に、前記第１の記憶部と並列接続された第２の記憶部と、を含む記憶装置からのデータ出力方法であって、
少なくとも前記ライトアドレス及び前記リードアドレスに応じて、前記第１の記憶部から読み出されたリードデータ及び前記第２の記憶部をなす前記複数の記憶素子のいずれかに記憶されたデータのいずれかを外部に出力するデータとして決定するステップと、
前記外部に出力すると決定されたデータを選択的に出力するステップと、
を含む、データ出力方法。
なお、付記１２の形態は、付記１の形態と同様に、付記２の形態〜付記１１の形態に展開することが可能である。
【０１０３】
なお、引用した上記の特許文献の開示は、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【０１０４】
１  通信装置
１０  通信モジュール
１１  演算モジュール
２１、８２  演算部
２２、２２ａ〜２２ｅ  記憶部
２３  記憶回路
２４  メモリアレイ
２５、８４  選択回路
２６  読み出し先決定回路
２７、３３〜３７、４１−１〜４１−４、５３−１〜５３−６、６１〜６８、８３  フリップフロップ（ＦＦ;Flip-Flop）
３１  ＲＡＭ（Random Access Memory）コア
３２  ＥＣＣエンコーダ（ECC Encoder）
３８  ＥＣＣデコーダ（ECC Decoder）
５１−１〜５１−４  アドレス比較回路
５２−１〜５２−４  論理積回路
５４  選択信号出力回路
８０−１〜８０−ｎ  積算カウント回路
８１  グループ選択回路
１００  半導体装置
１０１  第１の記憶部
１０２  第２の記憶部
１０３  決定部
１０４  選択部
【図１】
0006366103.tif 000002
【図２】
0006366103.tif 000003
【図３】
0006366103.tif 000004
【図４】
0006366103.tif 000005
【図５】
0006366103.tif 000006
【図６】
0006366103.tif 000007
【図７】
0006366103.tif 000008
【図８】
0006366103.tif 000009
【図９】
0006366103.tif 000010
【図１０】
0006366103.tif 000011
【図１１】
0006366103.tif 000012
【図１２】
0006366103.tif 000013
【図１３】
0006366103.tif 000014
【図１４】
0006366103.tif 000015
【図１５】
0006366103.tif 000016
【図１６】
0006366103.tif 000017
【図１７】
0006366103.tif 000018
【図１８】
0006366103.tif 000019
【図１９】
0006366103.tif 000020
【図２０】
0006366103.tif 000021
【図２１】
0006366103.tif 000022
【図２２】
0006366103.tif 000023