(58)【調査した分野】(Int.Cl.,DB名)
前記決定部は、前記リードアドレスと前記ライトアドレスが一致する際のシステムクロックの遅延数に応じて、前記外部に出力するデータを決定する請求項1乃至5のいずれか一項に記載の半導体装置。
ライトアドレス、ライトデータ及びリードアドレスを受け付け、データの書き込みとデータの読み出しの並列動作が可能な第1の記憶部と、直列接続された複数の記憶素子からなる記憶部であって、前記ライトデータを受け付けると共に、前記第1の記憶部と並列接続された第2の記憶部と、を含む記憶装置からのデータ出力方法であって、
少なくとも前記ライトアドレス及び前記リードアドレスに応じて、前記第1の記憶部から読み出されたリードデータ及び前記第2の記憶部をなす前記複数の記憶素子のいずれかに記憶されたデータのいずれかを外部に出力するデータとして決定するステップと、
前記外部に出力すると決定されたデータを選択的に出力するステップと、
を含む、データ出力方法。
【発明の概要】
【発明が解決しようとする課題】
【0008】
なお、上記先行技術文献の開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。
【0009】
通信装置内部のチップ間通信プロトコルに、インターラーケンインターフェース(512ビットパラレル)が採用され、通信装置内部の各モジュール(例えば、FPGAを用いて実装された演算モジュール)が、1つのパケットを処理するのに許容される時間を考察する。イーサネット上の最小フレームサイズは、64バイト(64×8=512ビット)と規定されている。従って、インターラーケンインターフェースを採用し、パケットの授受を行うFPGA等は、64バイトのパケット(1パケット)を1クロックにて処理する必要がある。上記の例では、1パケット(64バイト)を処理するのに2クロック要したのでは、処理容量は80Gbpsとなり必要な処理容量を確保できないためである。
【0010】
このように、通信装置等に実装されたFPGAは、大容量のデータを高速に処理することが望まれ、1つのパケットを処理するのに許容されるクロック数は1である。以下、1つのパケットを処理するのに許容されるクロック数が1という前提条件の下、FPGAに生じる問題を具体的に説明する。その際、
図22に示すパケットモニタ回路を例に取り、問題点を説明する。パケットモニタ回路とは、通信装置が受信したパケット数を積算カウントする回路である。
【0011】
パケットに複数のグループに振り分けられ、グループ単位にてパケットを積算カウントするための回路が
図22に示されるパケットモニタ回路である。また、各グループのパケットはランダムに入力され、同一のグループに属するパケットが連続して入力される場合も存在する。
図22において、パケットは、グループごとに用意された積算カウント回路80−1〜80−n(nは正の整数、以下同じ)と、グループ選択回路81と、に入力される。
【0012】
積算カウント回路80−1〜80−nのそれぞれは、演算部82と、フリップフロップ(FF;Flip-Flop)83と、を備える。各演算部82は、対応するグループのパケットが入力されると、フリップフロップ83から読み出した値(積算パケット数)に1を加算し、その結果をフリップフロップ83に出力する。グループ選択回路81は、パケットのヘッダに格納されたアドレスに応じて、いずれのグループに対応する積算カウント回路80−1〜80−nを有効にするか決定し、対応するイネーブル信号GRP_ENを活性化する(アクティブとする)。自回路に対応し、且つ、活性化したイネーブル信号GRP_ENを受け取った積算カウント回路80のフリップフロップ83は、演算部82が出力するデータを、選択回路84に出力する。また、グループ選択回路81は、パケットに含まれるアドレスに応じて、選択回路84にグループ選択信号GRP_SELを出力する。選択回路84は、グループ選択信号GRP_SELに応じて、外部に出力するデータを選択する。
【0013】
例えば、積算カウント回路80−1はグループ1(GRP1)に割り当てられているとする。パケットモニタ回路にグループ1に割り当てられたアドレスを含むパケットが入力されると、積算カウント回路80−1の演算部82は、フリップフロップ83が出力する積算カウント値(OLD_DATA)に1を加算する。演算部82は、加算結果をフリップフロップ83に出力する。次に、パケットモニタ回路に入力されるシステムクロック(図示せず)が1クロック進むと、グループ選択回路81は、積算カウント回路80−1に対応するイネーブル信号GRP_ENとグループ選択信号GRP_SELをアクティブにする。イネーブル信号GRP_ENがアクティブとなることで、積算カウント回路80−1のフリップフロップ83は、1クロック前に演算部82が出力するデータをデータ出力端子から出力する。グループ選択信号GRP_SELにより選択回路84のポート1に供給されたデータ(積算カウント回路80−1の出力)が選択され、パケットモニタ回路の出力となる。
【0014】
以上のように、
図22に示す構成により受信パケットの積算カウントが可能となる。しかし、
図22に示す回路構成には、受信パケットを振り分ける際のグループの数が多くなると、回路規模が増大するという問題がある。グループの数と同じだけ積算カウント回路を用意する必要があるためである。
【0015】
そのため、ハードウェアとしてRAMが実装されているFPGAにおいて、多数のグループに対応したパケット積算機能を実現する際には、演算回路(加算回路)を1回路実装し、演算結果はRAMに格納することで回路規模を抑制する対応が取られることが多い。そこで、以下の手順によりパケットの積算カウント回路を実現することが検討された。
(1)受信パケットのグループに相当するアドレスを指定して、積算結果を保持するRAMから、前パケットまでの積算値が読み出される(リード処理)。
(2)加算器にて、読み出した積算値に1が加算される(演算処理)。
(3)グループに相当するアドレスが指定され、演算結果(積算値)がRAMにストアされる(ライト処理)。
【0016】
上記(1)〜(3)の動作を1クロックにて実行可能であれば、FPGAに実装されたRAMを用いてパケットの積算カウントが可能となる。即ち、FPGAにはRAMがハードウェアとしてチップに組み込み済であるので、リソースの有効利用が行える。
【0017】
高速動作を目的とした通常のクロック同期型RAMは、書き込み側(ライト側)において、各信号をフリップフロップによりリタイミングした後にRAMコアに入力する構成を有する。また、上記のクロック同期型RAMは、書き込みアドレスと読み出しアドレスに同じ値を指定してアクセスすることを禁じていることが多い。そのため、クロック同期型RAMは、書き込んだデータを1クロック後に読み出すことができない。即ち、FPGAに組み込まれたクロック同期型RAMにおいては、RAMコアに書き込まれたデータを、1クロック後に読み出すことはできない。
【0018】
従って、近年の通信装置に要求されるような高速動作において、FPGAに予め組み込まれたRAMを有効活用することができず、結果的に
図22に示すような回路構成(演算回路とフリップフロップをグループの数だけ用意する構成)が用いられる。
【0019】
以上のように、例えば、312.5MHzといったシステムクロックを用いる高速回路において、データの書き込み後の読み出しに1クロック処理が要求される場合、FPGAに組み込まれたRAMを有効活用できないという問題がある。
【0020】
上記の問題点は、特許文献1に開示された演算システムにおいても生じ得る。特許文献1が開示する演算システムでは、ライトアドレスとリードアドレスが一致する場合には、フリップフロップ(例えば、特許文献1の
図5や
図6に示される符号24)が保持するライトデータが出力される。換言するならば、ライトデータを一時的に保持するフリップフロップが1つであるため、ライトアドレスやライトデータのリタイミング手段を挿入することができない。そのため、上記のような312.5MHzといった高速なシステムクロックを使用すると、システム全体の動作マージンが低下する等の問題が生じる可能性がある。
【0021】
本発明は、ライトアドレスとリードアドレスが競合するような場合であっても、書き込まれたライトデータをリードデータとして出力すると共に、安定した高速動作を実現することに寄与する半導体装置を提供することを目的とする。
【課題を解決するための手段】
【0022】
本発明の第1の視点によれば、ライトアドレス、ライトデータ及びリードアドレスを受け付け、データの書き込みとデータの読み出しの並列動作が可能な第1の記憶部と、直列接続された複数の記憶素子からなる記憶部であって、前記ライトデータを受け付けると共に、前記第1の記憶部と並列接続された第2の記憶部と、少なくとも前記ライトアドレス及び前記リードアドレスに応じて、前記第1の記憶部から読み出されたリードデータ及び前記第2の記憶部をなす前記複数の記憶素子のいずれかに記憶されたデータのいずれかを外部に出力するデータとして決定する決定部と、前記決定部により外部に出力すると決定されたデータを選択的に出力する選択部と、を備える半導体装置が提供される。
【0023】
本発明の第2の視点によれば、ライトアドレス、ライトデータ及びリードアドレスを受け付け、データの書き込みとデータの読み出しの並列動作が可能な第1の記憶部と、直列接続された複数の記憶素子からなる記憶部であって、前記ライトデータを受け付けると共に、前記第1の記憶部と並列接続された第2の記憶部と、を含む記憶装置からのデータ出力方法であって、少なくとも前記ライトアドレス及び前記リードアドレスに応じて、前記第1の記憶部から読み出されたリードデータ及び前記第2の記憶部をなす前記複数の記憶素子のいずれかに記憶されたデータのいずれかを外部に出力するデータとして決定するステップと、前記外部に出力すると決定されたデータを選択的に出力するステップと、を含む、データ出力方法が提供される。
【発明の効果】
【0024】
本発明の各視点によれば、ライトアドレスとリードアドレスが競合するような場合であっても、書き込まれたライトデータをリードデータとして出力すると共に、安定した高速動作を実現することに寄与する半導体装置及びデータ出力方法が、提供される。
【発明を実施するための形態】
【0026】
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。
【0027】
上述のように、ライトアドレスとリードアドレスが競合するような場合であっても、書き込まれたライトデータをリードデータとして出力すると共に、安定した高速動作を実現する半導体装置が望まれる。
【0028】
そこで、一例として
図1に示す半導体装置100を提供する。半導体装置100は、第1の記憶部101と、第2の記憶部102と、決定部103と、選択部104と、を備える。第1の記憶部101は、ライトアドレス、ライトデータ及びリードアドレスを受け付け、データの書き込みとデータの読み出しの並列動作が可能である。第2の記憶部102は、直列接続された複数の記憶素子からなる記憶部であって、ライトデータを受け付けると共に、第1の記憶部101と並列接続される。決定部103は、少なくともライトアドレス及びリードアドレスに応じて、第1の記憶部101から読み出されたリードデータ及び第2の記憶部102をなす複数の記憶素子のいずれかに記憶されたデータのいずれかを外部に出力するデータとして決定する。選択部104は、決定部103により外部に出力すると決定されたデータを選択的に出力する。
【0029】
半導体装置100は、例えば、FPGAに標準的に搭載されているデュアルポートメモリを第1の記憶部101として用いる。また、半導体装置100は、システムクロックに同期してデータを保持するフリップフロップを複数連結することで、第2の記憶部102とする。半導体装置100は、ライトアドレスとリードアドレスが競合し、第1の記憶部101からデータを読み出すことができない場合には、第2の記憶部102が記憶するデータを、半導体装置100の出力データとして外部に出力する。即ち、半導体装置100は、第1の記憶部101と第2の記憶部102を併用することで、ライトアドレスとリードアドレスの競合による問題点を解決する。
【0030】
また、半導体装置100に使用されるシステムクロックが高速であるため、ライトデータやライトアドレスを伝達するバスにリタイミング手段を挿入することが望まれる場合がある。このような場合であっても、第2の記憶部102は、直列接続された複数の記憶素子から構成されるため、リタイミング手段を挿入することにより生じる必要なデータの消失を回避できる。例えば、
図1において、ライトデータ及びライトアドレスに係るバスに1段のリタイミング手段が挿入されたとする。この場合、ライトデータ及びライトアドレスはリタイミング手段により、1クロック遅延して第1の記憶部101に供給される。そのため、第1の記憶部101において、ライトアドレスとリードアドレスが一致したとしても、実際に半導体装置100に供給されているライトアドレスは1クロック前のものである。従って、第2の記憶部102に含まれる記憶素子が1つの場合には、1クロック前のライトデータを保持することができず、第1の記憶部101にてライトアドレスとリードアドレスが一致した場合に、必要なデータ(ライトデータ)が消滅することになる。対して、上記の例で言えば、第2の記憶部102に2個以上の記憶素子が含まれ1クロック前のライトデータは保持されるので、必要なデータが消失することはない。このように、第2の記憶部102に複数の記憶素子を含ませることで、高速なシステムクロックが使用されたとしても、必要に応じてリタイミング手段を挿入できる余地があるので、半導体装置100の安定動作を実現できる。
【0031】
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
【0032】
[第1の実施形態]
第1の実施形態について、図面を用いてより詳細に説明する。
【0033】
図2は、第1の実施形態に係る通信装置1の内部構成の一例を示す図である。
図2を参照すると、通信装置1は、通信モジュール10と、演算モジュール11と、を含んで構成される。
【0034】
通信モジュール10は、ネットワークを介して他の装置とパケットの送受信を行うインターフェースである。
【0035】
演算モジュール11は、通信モジュール10からパケットを受信し、当該受信パケットに応じた演算処理を行う手段である。少なくとも演算モジュール11は、FPGAを用いて実現される。
【0036】
通信モジュール10と演算モジュール11は、例えば、インターラーケン等のチップ間通信プロトコルを用いてパケットの送受信を行う。
【0037】
図3は、演算モジュール11の内部構成の一例を示す図である。演算モジュール11は、演算部21と、記憶部22と、を含んで構成される。
【0038】
演算部21は、通信モジュール10からパケットを入力する。演算部21は、入力したパケットに対して予め定めた演算処理を行い、演算結果を記憶部22に格納する。例えば、演算部21は、入力パケットのヘッダに格納されたアドレスに応じて、各パケットをグループに振り分け、グループごとに受信したパケットの数を積算カウントする。
【0039】
記憶部22は、2つの入出力ポートを備え、各入出力ポートは独立してアクセス可能に構成される。
【0040】
演算部21は、ライトデータW_DATA、ライトアドレスW_ADD、ライトイネーブルW_ENのそれぞれを記憶部22に出力する。また、演算部21は、リードアドレスR_ADD、リードイネーブルR_ENのそれぞれを記憶部22に出力し、記憶部22からリードデータR_DATAを取得する。なお、ライトイネーブルW_EN及びリードイネーブルR_ENのアクティブはHレベルである。
【0041】
図4は、記憶部22の内部構成の一例を示す図である。
図4を参照すると、記憶部22は、記憶回路23と、メモリアレイ24と、選択回路25と、読み出し先決定回路26と、を含んで構成される。
【0042】
記憶回路23は、演算部21から供給されるライトデータW_DATAを記憶する回路である。記憶回路23は、2つの独立した入出力ポートを有するRAMコア31を含む。
【0043】
RAMコア31は、書き込みと読み出しが並列して行える所謂デュアルポートメモリである。なお、RAMコア31は、ライトアドレスとリードアドレスに同じ値を設定することは禁止されている記憶装置である。RAMコア31は、上述の第1の記憶部101に相当する。
【0044】
ライトデータW_DATAは、ECC(Error Check and Correction)エンコーダ32、フリップフロップ33を介して、RAMコア31のライトデータ入力端子D_IN_RAMに入力される。ライトアドレスW_ADDは、フリップフロップ34を介して、RAMコア31のライトアドレス入力端子W_ADD_RAMに入力される。ライトイネーブルW_ENは、フリップフロップ35を介して、RAMコア31のライトイネーブル入力端子W_EN_RAMに入力される。
【0045】
リードアドレスR_ADDは、フリップフロップ36を介して、RAMコア31のリードアドレス入力端子R_ADD_RAMに入力される。リードイネーブルR_ENは、フリップフロップ37を介して、RAMコア31のリードイネーブル入力端子R_EN_RAMに入力される。RAMコア31は、ECCデコーダ38を介して、リードデータ出力端子D_OUT_RAMから、リードデータRAM_OUTを選択回路25のポート0に出力する。
【0046】
なお、ECCエンコーダ32は、RAMコア31に書き込むデータに対応する誤り訂正符号を生成する手段(誤り訂正符号化回路)であり、ECCデコーダ38は誤り訂正符号のデコードと誤りデータの訂正を行う手段(誤り訂正回路)である。即ち、記憶回路23は、RAMコア31に保持されるデータにソフトエラー(ハードウェアには故障は生じていないが誤ったデータが記憶されるエラー;ビットエラー)が発生した場合に、当該ソフトエラーを訂正する機能を有する。
【0047】
また、記憶回路23は、RAMコア31の各種入力端子にフリップフロップを接続する構成を有し、各種データのリタイミングを実施することで、システムクロックが312.5MHzとなるような高速動作を実現する。具体的には、RAMコア31に供給されるライトデータ、ライトアドレス、ライトイネーブル、リードアドレス、リードイネーブルのそれぞれを、システムクロックに同期して保持するフリップフロップ33〜37がリタイミング手段として機能する。
【0048】
メモリアレイ24は、複数のフリップフロップ(記憶素子)が直列接続された回路である。メモリアレイ24は、内部のフリップフロップによりデータを記憶する回路である。記憶回路23とメモリアレイ24は、並列に接続されている。メモリアレイ24は、上述の第2の記憶部102に相当する。
【0049】
メモリアレイ24は、演算部21から供給されるライトデータW_DATAを、システムクロックに同期して記憶する手段である。
図4に示す構成では、メモリアレイ24は、4つのフリップフロップ41−1〜41−4を有するので、3クロック前までのライトデータW_DATAの記憶が可能である。
【0050】
フリップフロップ41−1〜41−4それぞれのデータ出力端子は、選択回路25の入力端子と接続されている。具体的には、フリップフロップ41−1のデータ出力端子は、選択回路25のポート1に係る入力端子と接続されている。同様に、フリップフロップ41−2のデータ出力端子は選択回路25のポート2、フリップフロップ41−3のデータ出力端子は選択回路25のポート3、フリップフロップ41−4のデータ出力端子は選択回路25のポート4にそれぞれ接続されている。
【0051】
読み出し先決定回路26は、演算部21から供給されるアドレス情報(ライトアドレスW_ADD、リードアドレスR_ADD)と、動作許可情報(ライトイネーブルW_EN、リードイネーブルR_EN)と、に応じて、記憶部22全体の出力データを決定する手段である。より具体的には、読み出し先決定回路26は、アドレス情報と動作許可情報に基づいて、記憶回路23の出力データ及びメモリアレイ24からの出力データのいずれを記憶部22から外部に出力するデータ(リードデータR_DATA)とするかを決定する回路である。即ち、読み出し先決定回路26は、ライトアドレスW_ADDとリードアドレスR_ADDを監視し、これらのアドレス情報と予め定めた所定の規則(ルール)に基づいて、選択回路25によるデータの読み出し先を決定する回路である。読み出し先決定回路26は、上述の決定部103に相当する。
【0052】
読み出し先決定回路26が選択回路25に向けて出力する選択信号SELは、フリップフロップ27により1クロック遅延されて、選択信号SEL_1Tとして選択回路25に供給される。なお、
図4を含む図面において、各フリップフロップは、それぞれが記憶するデータのビット数に応じた数のフリップフロップが並列接続されて構成される。例えば、ライトデータW_DATAが16ビットのデータであれば、フリップフロップ33やフリップフロップ41−1〜41−4のそれぞれは16個のフリップフロップからなる。
【0053】
図5は、読み出し先決定回路26の回路構成の一例を示す図である。
図5を参照すると、読み出し先決定回路26は、アドレス比較回路51−1〜51−4と、論理積回路52−1〜52−4と、フリップフロップ53−1〜53−6と、選択信号出力回路54と、を含んで構成される。
【0054】
フリップフロップ53−1〜53−3はそれぞれ、ライトアドレスW_ADDを遅延させる。フリップフロップ53−4〜53−6はそれぞれ、ライトイネーブルW_ENを遅延させる。なお、以降の説明において、フリップフロップ53−1〜53−3のそれぞれが出力するデータを、WA_1T、WA_2T、WA_3Tと表記する。また、フリップフロップ53−4〜53−6のそれぞれが出力するデータを、WE_1T、WE_2T、WE_3Tと表記する。
【0055】
アドレス比較回路51−1は、現クロック(システムクロックの遅延数=0)におけるライトアドレスW_ADDとリードアドレスR_ADDを比較し、両者が一致する場合にはHレベルを出力する。アドレス比較回路51−1は、ライトアドレスW_ADDとリードアドレスR_ADDが不一致の場合には、Lレベルを出力する。
【0056】
アドレス比較回路51−2は、1クロック前のライトアドレスW_ADD(遅延数=1クロック)と、現クロックのリードアドレスR_ADDと、が一致するか否かを判定する回路である。同様に、アドレス比較回路51−3は2クロック前、アドレス比較回路51−4は3クロック前のライトアドレスW_ADDと現クロックのリードアドレスR_ADDの一致・不一致を判定する回路である。
【0057】
論理積回路52−1は、現クロックにおけるライトイネーブルW_ENとアドレス比較回路51−1の出力信号の論理積演算を行い、演算結果を選択信号出力回路54に出力する。論理積回路52−2は、1クロック前のライトイネーブルW_ENとアドレス比較回路51−2の出力信号の論理積演算を行い、その結果を選択信号出力回路54に出力する。同様に、論理積回路52−3は2クロック前、論理積回路52−4は3クロック前のライトイネーブルW_ENとアドレス比較回路51−3、51−4の出力信号の論理積演算を行い、その結果を選択信号出力回路54に出力する。
【0058】
選択信号出力回路54は、論理積回路52−1〜52−4のそれぞれが出力する演算結果を、入力端子IN_1〜IN_4により取得する。選択信号出力回路54は、入力端子IN_1〜IN_4に印加される論理レベル(Hレベル又はLレベル)に応じて、選択信号SELを決定する回路である。選択信号出力回路54は、ライトイネーブルW_ENがHレベルであるライトアドレスW_ADDに関し、ライトアドレスW_ADDとリードアドレスR_ADDとの間の関係に基づいて、選択信号SELを決定する。具体的には、選択信号出力回路54は、以下の動作を行う。
【0059】
(a)選択信号出力回路54は、ライトアドレスW_ADDとリードアドレスR_ADDが一致する場合(IN_1=Hレベル)、選択回路25がポート1を選択するように選択信号SELを出力する。つまり、ライトアドレスW_ADDとリードアドレスR_ADDが一致する場合、フリップフロップ41−1の出力データが選択回路25から出力される。
(b)選択信号出力回路54は、1クロック前のライトアドレスW_ADDとリードアドレスR_ADDが一致する場合(IN_2=Hレベル)、選択回路25がポート2を選択するように選択信号SELを出力する。つまり、1クロック前のライトアドレスW_ADDとリードアドレスR_ADDが一致する場合、フリップフロップ41−2の出力データが選択回路25から出力される。
(c)選択信号出力回路54は、2クロック前のライトアドレスW_ADDとリードアドレスR_ADDが一致する場合(IN_3=Hレベル)、選択回路25がポート3を選択するように選択信号SELを出力する。つまり、2クロック前のライトアドレスW_ADDとリードアドレスR_ADDが一致する場合、フリップフロップ41−3の出力データが選択回路25から出力される。
(d)選択信号出力回路54は、3クロック前のライトアドレスW_ADDとリードアドレスR_ADDが一致する場合(IN_4=Hレベル)、選択回路25がポート4を選択するように選択信号SELを出力する。つまり、3クロック前のライトアドレスW_ADDとリードアドレスR_ADDが一致する場合、フリップフロップ41−4の出力データが選択回路25から出力される。
(e)選択信号出力回路54は、ライトアドレスW_ADDとリードアドレスR_ADDの関係が上記(a)〜(d)以外の場合には、選択回路25がポート0のデータ(リードデータRAM_OUT)を選択するように選択信号SELを出力する。
【0060】
上記(a)〜(e)に係る選択信号出力回路54の動作を真理値表としてまとめた図が、
図6である。なお、
図6における「×」はドントケアを示す。
【0061】
以上のように、読み出し先決定回路26は、リードアドレスR_ADDとライトアドレスW_ADDが一致する際のシステムクロックの遅延数に応じて、外部に出力するデータを決定する。より具体的には、読み出し先決定回路26は、ライトアドレスW_ADDとリードアドレスR_ADDが一致する場合には、メモリアレイ24をなす複数のフリップフロップのうち、初段のフリップフロップ41−1が記憶するデータを外部に出力するデータに決定する。また、読み出し先決定回路26は、システムクロックの遅延数が、メモリアレイ24を構成するフリップフロップの数(第1の実施形態では4)以上の場合には、RAMコア31から読み出されるデータを外部に出力するデータに決定する。
【0062】
選択回路25は、選択信号SELが1クロック遅延された選択信号SEL_1Tにより、記憶部22の外部に出力するデータを選択的に出力する回路である。選択回路25は、上述の選択部104に相当する。
【0063】
次に、
図7及び
図8に示すタイムチャートを用いて記憶部22の動作を説明する。
【0064】
図7は、RAMコア31単体に関する信号の入出力を示すタイムチャートの一例である。
図8は、記憶部22全体に関する信号の入出力を示すタイムチャートの一例である。
図7及び
図8では、記憶部22からデータを読み出し、当該呼び出したデータに対して演算処理(例えば、パケットの積算カウント処理)を施し、次のクロックにて演算結果を書き込むといった演算部21の動作を想定している。つまり、記憶部22は、リード動作の1クロック後にライト動作することを想定している。
【0065】
また、パケットに含まれるアドレスに応じて、各パケットはグループ分けされるが、
図7及び
図8では、同一のグループに関する処理が連続する場合を想定している。具体的には、時刻T15〜T19にて、RAMコア31のアドレス値1に書き込まれるパケットが5回連続して入力されている。
【0066】
図7を参照すると、時刻T01〜T06の期間は、ライトイネーブルW_ENがHレベルであるためRAMコア31には、ライトデータ値0a〜5aのそれぞれがRAMコア31のアドレス値0〜5に書き込まれる。なお、時刻T01〜T06の期間では、リードイネーブルR_ENはLレベルであるため、RAMコア31からデータが読み出されることはない。
【0067】
次に、時刻T09にて、演算部21によるライトデータW_DATA及びライトアドレスW_ADDの供給に先立ち、RAMコア31からデータの読み出しが行われる。具体的には、ライトアドレスW_ADDにアドレス値0が設定される1クロック前に、リードイネーブルR_ENがHレベル、リードアドレスR_ADDにアドレス値0がそれぞれ設定される。当該リードイネーブルR_EN及びリードアドレスR_ADDは1クロック遅延されてRAMコア31に供給され、時刻T10にて、RAMコア31のアドレス値0からリードデータ値0aがリードデータRAM_OUTとして読み出される。
【0068】
また、時刻T10にて、ライトイネーブルW_ENがHレベルに設定され、アドレス値0、ライトデータ値0bに係る書き込み情報が、記憶部22に供給される。当該書き込み情報(アドレス値0、ライトデータ値0b)は、フリップフロップ34、35により1クロック遅延されてRAMコア31に供給され、時刻T11のタイミングにてRAMコア31に書き込まれる。RAMコア31は、このようなデータの読み出し動作と書き込みに係る動作を、時刻T14まで繰り返す。
【0069】
時刻T15において、ライトアドレスW_ADDとリードアドレスR_ADDに同じアドレス値1が、記憶部22に供給される。従って、時刻T15から1クロック遅れた時刻T16にて、RAMコア31に、同じアドレス値1を持つライトアドレスW_ADDとリードアドレスR_ADDが供給される。この場合、RAMコア31に同時アクセスが発生することとなり、RAMコア31から出力される値(リードデータRAM_OUT)は不定となる。即ち、RAMコア31の動作は、期待動作と異なる。
【0070】
なお、
図7以降の図面において、RAMコア31によるリードデータRAM_OUTが不定の場合の値を「×」を用いて表記する。また、ライトイネーブルW_ENやリードイネーブルR_ENが無効(Lレベル)の場合のデータ値及びアドレス値は無意味であるので、このような場合のデータ値等は「−」を用いて表記する。
【0071】
図8を参照すると、時刻T12にて、1クロック前の時刻T11におけるライトアドレスW_ADD(ライトアドレス値=1)と、リードアドレスR_ADD(リードアドレス値=1)と、が一致する。そのため、読み出し先決定回路26の論理積回路52−2は、Hレベルを出力する。その結果、選択信号出力回路54の入力端子IN_2はHレベルとなる。
図6を参照すると、入力端子IN_2がHレベルであるので、選択信号出力回路54は、選択回路25がポート2を選択するように選択信号SELを出力する。
図8の時刻T13にて、選択信号SELが1クロック遅延された選択信号SEL_1Tが、選択回路25に供給される。選択回路25は、ポート2に供給されているデータ(メモリアレイ24のフリップフロップ41−2の出力データ)である「1b」を、記憶部22からのリードデータR_DATAとして出力する。
【0072】
記憶部22は、このような動作を時刻T14まで行う。
【0073】
次に、時刻T15において、ライトアドレスW_ADDとリードアドレスR_ADDとして同じアドレス値1が、記憶部22に供給される。この場合、ライトアドレス値とリードアドレス値が一致するため、読み出し先決定回路26の論理積回路52−1は、Hレベルを出力する。その結果、選択信号出力回路54の入力端子IN_1にHレベルが供給される。
図6を参照すると、入力端子IN_1がHレベルであるので、選択信号出力回路54は、選択回路25がポート1を選択するように選択信号SELを出力する。時刻T16にて、選択信号SELが1クロック遅延された選択信号SEL_1Tが、選択回路25に供給される。選択回路25は、ポート1に供給されているデータ(メモリアレイ24のフリップフロップ41−1の出力データ)である「1d」を、記憶部22からのリードデータR_DATAとして出力する。
【0074】
このように、同時アクセスが発生するような場合には、読み出し先決定回路26は、フリップフロップ41−1が記憶するライトデータW_DATAを、記憶部22全体の出力データ(リードデータR_DATA)として外部に出力する。その結果、記憶部22は、期待通りのデータ出力を行える。
【0075】
第1の実施形態に係るデータ出力方法をまとめると
図9に示すフローチャートのとおりである。
【0076】
ステップS01において、少なくともライトアドレスW_ADD及びリードアドレスR_ADDに応じて、RAMコア31から読み出されたリードデータRAM_OUT及びメモリアレイ24をなす複数のフリップフロップ41のいずれかに記憶されたデータのいずれかを外部に出力するデータとして決定する。ステップS02において、外部に出力すると決定されたデータを選択的に出力する。
【0077】
以上のように、第1の実施形態に係る記憶部22は、ライトアドレスW_ADDとリードアドレスR_ADDとの間の関係に基づいて、RAMコア31が出力するデータ及びメモリアレイ24が出力するデータのいずれかを、リードデータR_DATAとして出力するか選択する。その結果、記憶部22は、ライトアドレスW_ADDとリードアドレスR_ADDが一致するような場合も含め、これらのアドレス値がどのような値であっても、リード動作の1クロック後にライト動作が可能となる。即ち、第1の実施形態に係る記憶部22は、ライトアドレスW_ADDとリードアドレスR_ADDが一致する場合であっても、ライトされたデータを確実にリードすることが可能である。また、フリップフロップ33〜37は各種データをリタイミングする手段として機能する。そのため、例えば、パケットを100Gbpsといった速度にて処理する必要がある通信装置1の演算モジュール11に記憶部22を組み込むことで、パケットを1クロックで処理することが可能となる。
【0078】
また、演算モジュール11をFPGAにて実現する場合に、フリップフロップに係るリソースを記憶装置として使用する必要がなくなり、汎用的なFPGAのリソースを有効活用できる。即ち、安価な通信装置1を短期間で開発することが可能となる。
【0079】
ここで、一部のFPGAには、同時アクセスが発生した場合に、ライトデータを直接リードできる機能を有するものがある。このようなFPGAを使用すれば、同時アクセスに伴う問題は生じない。しかし、このような機能は、ごく一部のFPGAメーカから供給されるFPGAに限り実装されているものあり一般的ではない。つまり、大半のFPGAにはこのような機能は実装されておらず、上記のような例外的且つ特殊な機能を有するFPGAを採用することはできない。
【0080】
また、100Gbpsといった処理容量が要求される通信装置1では、例えば、312.5MHzにて1クロック処理が必要となるため、ライトデータW_DATAに対するECCが適用できないという問題がある。FPGAにおいて、高速なECC回路を実現するためには、予めFPGAにハードマクロとして組み込まれたECC回路を用いるのが通常である。しかし、ハードマクロに係るECC回路を組み込みつつ、同時アクセス時の出力を保証する記憶装置は存在しないのが現状である。つまり、上記の特殊機能(同時アクセスが発生した場合には、ライトデータを直接リードできる機能)が実装されたFPGAであっても、ECC機能を有効にすることができないという問題がある。即ち、1クロック処理が要求されるような記憶装置では、ECC回路の適用ができずソフトエラーによるRAMのビット反転エラーを回避できない。その結果、信頼性の高い通信装置の実現が困難とある。
【0081】
一方、第1の実施形態に係る記憶部22は、同時アクセス時にはメモリアレイ24のフリップフロップ41−1に格納されたライトデータW_DATAをリードデータR_DATAとして出力するためソフトエラーによるビット反転エラーは生じない。また、RAMコア31に格納されるライトデータW_DATAには、ECC回路(ECCエンコーダ32とECCデコーダ38)による誤り訂正が適用されるため、ソフトエラーによるビット反転エラーは必要に応じて訂正される。その結果、記憶部22を用いる通信装置1の信頼性(品質)を向上させることができる。
【0082】
なお、第1の実施形態にて説明した記憶部22の構成及び動作は例示であって、種々の変形が可能である。以下、第1の実施形態の変形例について説明する。
【0083】
[変形例1]
図10は、第1の変形例に係る記憶部22aの内部構成の一例を示す図である。
図4に示す記憶部22と
図10に示す記憶部22aの相違点は、記憶回路23の内部にフリップフロップ61〜63が追加されている点である。即ち、
図10に示す記憶部22aでは、RAMコア31における書き込み側のリタイミング段数が2段となっている。
【0084】
RAMコア31の書き込み側のリタイミング段数が2段になっているため、ライトアドレスW_ADDやライトデータW_DATAは2クロック遅延してRAMコア31に供給される(例えば、
図11のT01〜T03参照)。また、例えば、
図12の時刻T15、T16を参照すると、同時アクセスが発生した場合であっても、期待通りのデータが記憶部22aから出力されているのが理解される。
【0085】
[変形例2]
図13は、第2の変形例に係る記憶部22bの内部構成の一例を示す図である。
図10に示す記憶部22aと
図13に示す記憶部22bの相違点は、RAMコア31のリードデータ出力端子D_OUT_RAMとECCデコーダ38の間に挿入されるフリップフロップ64と、リードアドレスR_ADDを1クロック遅延させるフリップフロップ65と、が追加されている点である。
【0086】
記憶部22bは、フリップフロップ64が追加されることで、読み出し側のデータ出力をリタイミングする。また、RAMコア31から出力されるリードデータRAM_OUTと、記憶部22bの外部(演算部21)から供給されるリードアドレスR_ADDと、の間の整合を図るためフリップフロップ65が追加される。なお、
図13以降の図面において、フリップフロップ65により1クロック遅延されるリードアドレスR_ADDをリードアドレスR_ADD_1Tと表記する。
【0087】
図14を参照すると、例えば、時刻T09にてRAMコア31から読み出されたデータは、フリップフロップ64により1クロック遅延され、時刻T10にてリードデータRAM_OUTとして出力される。
【0088】
また、
図15を参照すると、例えば、時刻T08にて演算部21から供給されたリードアドレスR_ADDは、フリップフロップ65により1クロック遅延され、時刻T09にてリードアドレスR_ADD_1Tとして読み出し先決定回路26に供給される。
【0089】
さらに、例えば、
図15の時刻T15にて、ライトアドレスW_ADDとリードアドレスR_ADDが一致しているため、同時アクセスが発生している。この場合、時刻T15のリードアドレスR_ADD_1Tのアドレス値と、ライトアドレスW_ADDのアドレス値が一致するので、読み出し先決定回路26の論理積回路52−1は、Hレベルを出力する。その結果、選択信号出力回路54の入力端子IN_1にHレベルが供給される。入力端子IN_1がHレベルであるので、選択信号出力回路54は、選択回路25がポート1を選択するように選択信号SELを出力する。時刻T16にて、選択信号SELが1クロック遅延された選択信号SEL_1Tが、選択回路25に供給され、ポート1に供給されているデータ「1d」が出力される。
【0090】
このように、第2の変形例に係る記憶部22bであっても、同時アクセスが発生した場合には、期待通りのデータが出力される。
【0091】
[変形例3]
図16は、第3の変形例に係る記憶部22cの内部構成の一例を示す図である。
図13に示す記憶部22bと
図16に示す記憶部22cの相違点は、RAMコア31の読み出し側におけるデータ出力に対するリタイミングを2段実施するためのフリップフロップ66、67が追加されている点である。なお、
図16以降の図面において、フリップフロップ65及び66により2クロック遅延されるリードアドレスR_ADDをリードアドレスR_ADD_2Tと表記する。
【0092】
図17の時刻T08〜T10を参照すると、RAMコア31から読み出されたデータは、フリップフロップ64及び67により2クロック遅延され、リードデータRAM_OUTとして出力される。また、
図18の時刻T07〜T09を参照すると、リードアドレスR_ADDは、フリップフロップ65及び66により2クロック遅延され、リードアドレスR_ADD_2Tとして読み出し先決定回路26に供給される。また、例えば、
図18の時刻T15、T16を参照すると、記憶部22cに同時アクセスが発生した場合であっても、期待通りのデータが記憶部22cから出力されているのが理解される。
【0093】
以上、第1〜第3の変形例にて説明したように、メモリアレイ24に含まれるフリップフロップの段数を4段とする場合には、RAMコア31の書き込み側のリタイミングの段数を2段、読み出し側のリタイミングの段数を2段とすることができる。さらに、リタイミングの段数を増やす場合には、メモリアレイ24に含まれるフリップフロップの段数を増やし、読み出し先決定回路26の構成を増加したフリップフロップの段数に適応させればよい。
【0094】
[変形例4]
図19は、第4の変形例に係る記憶部22dの内部構成の一例を示す図である。
図16に示す記憶部22cと
図19に示す記憶部22dの相違点は、記憶回路23の入力端子にフリップフロップ68が接続されている点である。
【0095】
RAMコア31は、FPGAのハードマクロとして実装されているので、FPGAチップ上での物理的位置が予め定まっている。また、演算部21にて使用される加算器もハードマクロとして実装されているので、演算部21と記憶部22の間の距離が短くなるとは限らない。つまり、演算部21(加算器)と記憶部22(RAMコア31)の間の距離が長くなる可能性があり、データの送受信に問題が生じることがある。
【0096】
そこで、第4の変形例に係る記憶部22dのように、記憶回路23の前段にフリップフロップ68を追加することで、ライトデータW_DATAの波形を整形する。その結果、例えば、システムクロックが312.5MHzのように高速、且つ、演算部21と記憶部22の間が離れている場合であっても、確実なデータの授受が実現できる。
【0097】
また、フリップフロップ68の追加は、メモリアレイ24には直列接続された5個のフリップフロップが含まれることと等価である。従って、選択回路25のポート数及び読み出し先決定回路26が出力する選択信号SELを適宜変更し、記憶部22dに同時アクセスが生じた場合には、フリップフロップ68が記憶するデータが、リードデータR_DATAとして出力されるように構成する。
【0098】
[変形例5]
第1の実施形態及び第1〜第4の変形例に係る記憶装置では、メモリアレイ24に含まれるフリップフロップの個数を4として説明した。しかし、フリップフロップの個数は4に限定されない。例えば、
図20に示すように、メモリアレイ24に含まれるフリップフロップの数は1でもよい。
【0099】
この場合には、読み出し先決定回路26は、
図21(a)に示すように構成できる。
図21(a)を参照すると、読み出し先決定回路26は、同時アクセスが発生した場合(ライトアドレスW_ADDとリードアドレスR_ADDが一致する場合)に、選択回路25のポート1を選択するように選択信号SELを出力する。選択信号出力回路54の動作を真理値表として記載すると、
図21(b)のとおりとなる。
【0100】
第5の変形例に係る記憶部22eは、高速なシステムクロックによる動作が不要ではあるが、同時アクセスに対応したい場合に好適である。記憶部22eでは、メモリアレイ24に1個のフリップフロップ41−1が含まれるだけなので、記憶回路23の内部にリタイミング用のフリップフロップを追加することができない。しかし、演算モジュール11を実現するFPGAを高速に動作させる必要が無い場合には、
図20に示す記憶部22eの構成で足り、メモリアレイ24と読み出し先決定回路26の構成が簡略化できるという利点がある。
【0101】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
【0102】
[付記1]
ライトアドレス、ライトデータ及びリードアドレスを受け付け、データの書き込みとデータの読み出しの並列動作が可能な第1の記憶部と、
直列接続された複数の記憶素子からなる記憶部であって、前記ライトデータを受け付けると共に、前記第1の記憶部と並列接続された第2の記憶部と、
少なくとも前記ライトアドレス及び前記リードアドレスに応じて、前記第1の記憶部から読み出されたリードデータ及び前記第2の記憶部をなす前記複数の記憶素子のいずれかに記憶されたデータのいずれかを外部に出力するデータとして決定する決定部と、
前記決定部により外部に出力すると決定されたデータを選択的に出力する選択部と、
を備える半導体装置。
[付記2]
前記第1の記憶部は、ライトイネーブルとリードイネーブルを受け付け、
前記選択部は、前記ライトアドレス、前記リードアドレス、前記ライトイネーブル及び前記リードイネーブルに応じて、外部に出力するデータを選択する、付記1の半導体装置。
[付記3]
前記第1の記憶部に供給される前記ライトデータを保持する第1の保持部と、
前記第1の記憶部に供給される前記ライトアドレスを保持する第2の保持部と、
前記第1の記憶部に供給される前記ライトイネーブルを保持する第3の保持部と、
前記第1の記憶部に供給される前記リードアドレスを保持する第4の保持部と、
前記第1の記憶部に供給される前記リードイネーブルを保持する第5の保持部と、
をさらに備える付記2の半導体装置。
[付記4]
前記決定部は、前記外部に出力するデータを示す選択信号を、前記選択部に向けて出力し、
前記選択信号を保持する第6の保持部をさらに備える、付記3の半導体装置。
[付記5]
前記ライトデータから誤り訂正符号を生成する誤り訂正符号化回路と、
前記誤り訂正符号に応じて、前記第1の記憶部から読み出されたリードデータを訂正する誤り訂正回路と、
をさらに備える、付記1乃至4のいずれか一に記載の半導体装置。
[付記6]
前記決定部は、前記リードアドレスと前記ライトアドレスが一致する際のシステムクロックの遅延数に応じて、前記外部に出力するデータを決定する付記1乃至5のいずれか一に記載の半導体装置。
[付記7]
前記決定部は、
前記ライトアドレスと前記リードアドレスが一致する場合には、前記第2の記憶部をなす複数の記憶素子のうち、初段の記憶素子が記憶するデータを前記外部に出力するデータとして決定し、
前記システムクロックの遅延数が、前記第2の記憶部をなす複数の記憶素子の数以上の場合には、前記第1の記憶部から読み出されたリードデータを前記外部に出力するデータとして決定する、付記6の半導体装置。
[付記8]
前記第1の保持部の前段に配置され、前記ライトデータを保持する第7の保持部と、
前記第2の保持部の前段に配置され、前記ライトアドレスを保持する第8の保持部と、
前記第3の保持部の前段に配置され、前記ライトイネーブルを保持する第9の保持部と、
をさらに備える、付記4の半導体装置。
[付記9]
前記第1の記憶部から読み出されたリードデータを保持する第10の保持部と、
前記決定部に供給される前記リードアドレスを保持する第11の保持部と、
をさらに備える、付記8の半導体装置。
[付記10]
前記第10の保持部の後段に配置され、前記第1の記憶部から読み出されたリードデータを保持する第12の保持部と、
前記第11の保持部の前段に配置され、前記リードアドレスを保持する第13の保持部と、
をさらに備える、付記9の半導体装置。
[付記11]
前記第7の保持部の前段に配置され、前記ライトデータを保持する第14の保持部をさらに備える、付記10の半導体装置。
[付記12]
ライトアドレス、ライトデータ及びリードアドレスを受け付け、データの書き込みとデータの読み出しの並列動作が可能な第1の記憶部と、直列接続された複数の記憶素子からなる記憶部であって、前記ライトデータを受け付けると共に、前記第1の記憶部と並列接続された第2の記憶部と、を含む記憶装置からのデータ出力方法であって、
少なくとも前記ライトアドレス及び前記リードアドレスに応じて、前記第1の記憶部から読み出されたリードデータ及び前記第2の記憶部をなす前記複数の記憶素子のいずれかに記憶されたデータのいずれかを外部に出力するデータとして決定するステップと、
前記外部に出力すると決定されたデータを選択的に出力するステップと、
を含む、データ出力方法。
なお、付記12の形態は、付記1の形態と同様に、付記2の形態〜付記11の形態に展開することが可能である。
【0103】
なお、引用した上記の特許文献の開示は、本書に引用をもって繰り込むものとする。本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素(各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む)の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。