[本願発明の実施形態の説明]
最初に本発明の実施形態の内容を列記して説明する。
本発明の一態様に係る光送受信器は、MDIOインターフェースを介して外部のホスト装置と通信可能な光送受信器である。この光送受信器は、回路情報に基づいて内部の回路の構成が変更可能なロジックデバイスと、回路情報を格納する第1のメモリと、第1のメモリと第1の通信バスを介して接続されるとともに、ロジックデバイスと第2の通信バスを介して接続され、光送受信器が起動するときに、第1のメモリに格納されている回路情報を第1の通信バスを介して読み出して、読み出した回路情報を第2の通信バスを介してロジックデバイスに送信し、回路情報を更新するときに、更新用回路情報をMDIOインターフェースを介してホスト装置から受信して、受信した更新用回路情報を第1の通信バスを介して第1のメモリに書き込み、回路情報を更新用回路情報に書き換えるマイクロコントローラと、を備える。
この光送受信器では、光送受信器が起動するときに、第1のメモリに格納されている回路情報が、マイクロコントローラによって、第1の通信バスを介して読み出されて、第2の通信バスを介してロジックデバイスに送信される。また、回路情報を更新するときに、マイクロコントローラによって、更新用回路情報がMDIOインターフェースを介してホスト装置から受信され、第1の通信バスを介して第1のメモリに書き込まれる。このように、マイクロコントローラが、第1のメモリに格納されている回路情報を更新用回路情報に書き換えるだけでなく、第1のメモリに格納されている回路情報を読み出してロジックデバイスに送信するので、ロジックデバイスが第1のメモリに接続されている必要が無い。このため、切替回路等を設ける必要が無いので、部品数の増加を抑えつつ、ロジックデバイスの回路情報を更新することが可能となる。
マイクロコントローラは、第2のメモリと、第1のDMAコントローラと、をさらに有してもよい。第1のDMAコントローラは、光送受信器が起動するときに、第1のメモリに格納されている回路情報を第1の通信バスを介して読み出して、読み出した回路情報を第2のメモリに書き込んでもよい。マイクロコントローラは、第2のメモリに書き込まれた回路情報を第2の通信バスを介してロジックデバイスに送信してもよい。この場合、第1のメモリに格納されている回路情報の読み出しに要する時間を短縮できる。
第2のメモリは、第1のメモリに格納されている回路情報を読み出すための送信データを格納していてもよい。第1のDMAコントローラは、第2のメモリに格納されている送信データを読み出して、読み出した送信データを第1のメモリに送信する処理と、第1のメモリに格納されている回路情報を、所定のデータサイズの分割データごとに読み出して、読み出した分割データを第2のメモリに書き込む処理と、を第1の通信バスを介して並行して行ってもよい。この場合、第1のメモリへの送信データの送信と、第1のメモリからの分割データの読み出しとが、第1のDMAコントローラによって並列して行われるので、マイクロコントローラと第1のメモリとの間のデータの送受信に要する時間をさらに短縮できる。
第1のDMAコントローラは、第1のメモリに送信済みの送信データが格納されている第2のメモリの格納場所に、分割データを格納してもよい。この場合、第2のメモリ内の格納場所が、送信データ用と受信データ用とで共通に用いられる。このため、送信データ用及び受信データ用にそれぞれ別の格納場所を設ける場合と比較して、第2のメモリの容量を低減することが可能となる。
送信データは、第1のメモリの回路情報が格納されている格納場所を示すアドレス情報を含んでもよい。この場合、アドレス情報によって示される格納場所から、回路情報を読み出すことができる。
マイクロコントローラは、第2のDMAコントローラをさらに有してもよい。第2のDMAコントローラは、第1のDMAコントローラが第1のメモリに格納されている回路情報を第2のメモリに書き込む処理と並行して、第2のメモリに書き込まれた回路情報を第2の通信バスを介してロジックデバイスに送信してもよい。この場合、回路情報を第2のメモリから読み出してロジックデバイスに送信するのに要する時間を短縮することができる。また、第1のDMAコントローラと第2のDMAコントローラとによって、第2のメモリが共通に使用されているので、ロジックデバイスに送信するデータの格納場所を、さらに設ける必要が無い。このため、第2のメモリの容量を低減することが可能となる。
第2のメモリは、第1のメモリに格納されている回路情報を読み出すための送信データを格納していてもよい。第1のDMAコントローラは、第2のメモリに格納されている送信データを読み出して、読み出した送信データを第1のメモリに送信する処理と、第1のメモリに格納されている回路情報を、所定のデータサイズの分割データごとに読み出して、読み出した分割データを第2のメモリに書き込む処理と、を第1の通信バスを介して並行して行ってもよい。第2のDMAコントローラは、第1のDMAコントローラによって第2のメモリに書き込まれた分割データを第2の通信バスを介してロジックデバイスに送信してもよい。この場合、第1のメモリへの送信データの送信と、第1のメモリからの分割データの読み出しとが、第1のDMAコントローラによって並列して行われるので、マイクロコントローラと第1のメモリとの間のデータの送受信に要する時間をさらに短縮できる。
第1のDMAコントローラは、第1のメモリに送信済みの送信データが格納されている第2のメモリの格納場所に、分割データを格納してもよい。第2のDMAコントローラは、格納場所に分割データが格納された後、格納場所から分割データを読み出して、読み出した分割データをロジックデバイスに送信してもよい。この場合、第2のメモリ内の格納場所が、第1のDMAコントローラの送信データ用及び受信データ用と、第2のDMAコントローラの送信データ用と、で共通に用いられる。このため、第1のDMAコントローラの送信データ用、受信データ用、及び第2のDMAコントローラの送信データ用にそれぞれ別の格納場所を設ける場合と比較して、第2のメモリの容量を低減することが可能となる。
送信データは、第1のメモリの回路情報が格納されている格納場所を示すアドレス情報を含んでもよい。この場合、アドレス情報によって示される格納場所から、回路情報を読み出すことができる。
マイクロコントローラは、第3のメモリをさらに有してもよい。第3のメモリは、ファームウェアを格納してもよい。マイクロコントローラは、ファームウェアを実行することによって、第1のメモリに格納されている回路情報を読み出す処理と、読み出した回路情報をロジックデバイスに送信する処理と、更新用回路情報をホスト装置から受信する処理と、更新用回路情報を第1のメモリに書き込む処理と、を行ってもよい。この場合、ホスト装置が光送受信器に指示を行うことなく、マイクロコントローラのファームウェアによって、第1のメモリに格納されている回路情報を読み出す処理と、読み出した回路情報をロジックデバイスに送信する処理と、更新用回路情報をホスト装置から受信する処理と、更新用回路情報を第1のメモリに書き込む処理とを行うことができる。
本発明の別の態様に係るマイクロコントローラは、MDIOインターフェースを介して外部のホスト装置と通信可能な光送受信器に搭載されるマイクロコントローラである。このマイクロコントローラは、ファームウェアを格納する不揮発性メモリを備え、光送受信器に搭載されているロジックデバイスの内部の回路の構成を指定する回路情報を格納する第1のメモリと第1の通信バスを介して接続されるとともに、ロジックデバイスと第2の通信バスを介して接続され、ファームウェアを実行することによって、第1のメモリに格納されている回路情報を第1の通信バスを介して読み出して、読み出した回路情報を第2の通信バスを介してロジックデバイスに送信する。
このマイクロコントローラでは、ファームウェアが実行されることによって、第1のメモリに格納されている回路情報が、第1の通信バスを介して読み出されて、第2の通信バスを介してロジックデバイスに送信される。このように、マイクロコントローラが、第1のメモリに格納されている回路情報を読み出してロジックデバイスに送信するので、ロジックデバイスが第1のメモリに接続されている必要が無い。このため、切替回路等を設ける必要が無いので、部品数の増加を抑えつつ、ロジックデバイスの回路情報を更新することが可能となる。
[本願発明の実施形態の詳細]
本発明の実施形態に係る光送受信器及びマイクロコントローラの具体例を、以下に図面を参照しつつ説明する。なお、本発明はこれらの例示に限定されるものではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
図1は、本発明の一実施形態に係る光送受信器である光トランシーバを模式的に示す構成図である。図1に示される光トランシーバ1は、MDIO(Management Data Input/Output)インターフェースを介して外部のホスト装置と通信可能な装置である。光トランシーバ1は、例えば、100Gbpsのフォームファクタの一つであるCFP MSA(100G Form-factor Pluggable Multi-Source Agreement)に準拠した光トランシーバである。ホスト装置は、上位監視装置であり、光トランシーバ1の監視及び制御を行う。光トランシーバ1は、不図示の光ファイバを介して別の光トランシーバと接続されている。光トランシーバ1は、コネクタ11と、光送受信部12と、FPGA13(ロジックデバイス)と、マイクロコントローラ14と、マイクロコントローラ15と、メモリ16(第1のメモリ)と、を備える。
コネクタ11は、ホスト装置と電源線及び信号線等を相互に電気的に接続するためのコネクタである。コネクタ11は、例えば、CFP MSAによって形状及び端子配置等の仕様が定められているコネクタである。光送受信部12は、光トランシーバ1に接続された光ファイバを介して、別の光トランシーバと光信号を送受信する。光送受信部12は、光源21と、光分岐器22と、光変調器23と、光復調器24と、を備えている。
光源21は、例えばレーザダイオードである。光源21は、光トランシーバ1が受信する光信号のキャリア周波数と略同じ周波数のローカル光を生成し、ローカル光を光分岐器22に供給する。光分岐器22は、例えばビームスプリッタであって、光源21から供給されたローカル光を分岐し、分岐したローカル光を光変調器23及び光復調器24にそれぞれ供給する。なお、このような構成とは別に、2つの光源21を用意して、それぞれの光源21が光変調器23と光復調器24とに別々にローカル光を供給する構成としてもよい。
光変調器23は、FPGA13から受け取った電気信号を光信号に変換する。光変調器23は、光分岐器22から供給されたローカル光を電気信号に応じて変調することにより、電気信号を光信号に変換する。光変調器23は、光信号を光ファイバを介して別の光トランシーバに送信する。光復調器24は、光ファイバを介して受信した光信号を復調して電気信号に変換する。光復調器24は、光分岐器22から供給されたローカル光を、光信号と干渉させ、干渉によって生成された光信号を電気信号に変換する。光復調器24は、変換した電気信号をFPGA13に出力する。送信光に変換される電気信号及び受信光から変換される電気信号のそれぞれがコネクタ11と光送受信部12との間をFPGA13を介して伝達する経路を、ここでは主信号系と呼ぶ。
FPGA13は、コンフィグレーションデータ(回路情報)に基づいて内部の回路の構成が変更可能なロジックデバイスである。コンフィグレーションデータは、FPGA13の内部の回路構成を指定するデータである。FPGA13は、光トランシーバ1の起動時にマイクロコントローラ14からコンフィグレーションデータを受信し、コンフィグレーションデータに基づいてコンフィグレーションを行う。このときに、FPGA13は、受信したコンフィグレーションデータを内部の所定の場所(揮発性メモリ)に格納する。光トランシーバ1の電源が遮断されると、内部に格納したコンフィグレーションデータは消失するので、コンフィグレーションデータの受信はFPGA13が起動する度に毎回行われる。FPGA13は、例えば、SERDES(SERializer/DESerializer)の機能を有している。FPGA13は、ホスト装置からパラレルデータである送信データを受信し、シリアルデータに変換して電気信号として光変調器23に出力する。FPGA13は、光復調器24からシリアルデータの電気信号を受信し、パラレルデータに変換して受信データとしてホスト装置に送信する。なお、ここでいうパラレルデータとシリアルデータとは、信号線の本数と信号線1本当たりの伝送速度との相対的な違いを表している。詳細には、パラレルデータの信号線の本数がM(Mは2以上の整数)で信号線1本当たりの伝送速度をP(bps)とした場合に、シリアルデータの信号線の本数はN(Nは1≦N<Mの整数)で信号線1本当たりの伝送速度はQ=P×(M/N)(bps)という関係を満たす。
FPGA13のコンフィグレーションデータは、更新されることがある。例えば、FPGA13がデジタルコヒーレント伝送方式におけるデジタル信号処理を行う場合、性能向上を目的とした信号処理アルゴリズムの変更のためにコンフィグレーションデータが更新される。また、光トランシーバ1の高機能化を目的として、FPGA13に機能を付加するためにコンフィグレーションデータが更新されることがある。更新のためのコンフィグレーションデータは、光トランシーバ1がホスト装置に組み込まれた状態で監視制御系を介してホスト装置から受信できるようにすることで、光トランシーバ1の利便性が向上する。
ホスト装置による光トランシーバ1の監視及び制御を可能にするために、マイクロコントローラ14は、ホスト装置とMDIO通信を行う。マイクロコントローラ14は、メモリ16と通信バスSB1(第1の通信バス)を介して接続されるとともに、FPGA13と通信バスSB2(第2の通信バス)を介して接続されている。通信バスSB1は、SPIバスである。通信バスSB2は、FPGA13をコンフィグレーションすることが可能な専用バスである。通信バスSB2は、例えば、クロック信号線及びデータ信号線を有する。マイクロコントローラ14の通信バスSB2に接続されるインターフェース回路としては、例えば、標準的なSPI回路が用いられる。この場合、例えば、CS(Chip Select)信号線、SCK(Serial Clock)信号線、MOSI(Master Out Slave In)信号線、及びMISO(Master InSlave Out)信号線のSPIバスを構成する4つの信号線のうち、SCK信号線及びMOSI信号線がFPGA13に接続される。通信インターフェースの電気的な仕様、及びプロトコル等がFPGA13とマイクロコントローラ14との間で予め定められていれば、通信バスSB2として他のシリアル通信方式が用いられてもよい。
マイクロコントローラ14は、光トランシーバ1が起動するときに、メモリ16に格納されているコンフィグレーションデータを通信バスSB1を介して読み出し、読み出したコンフィグレーションデータを通信バスSB2を介してFPGA13に送信する。具体的には、光トランシーバ1の電源がオンになり、光トランシーバ1の起動処理中にマイクロコントローラ14はクロック信号及びコンフィグレーションデータ(シリアル通信データ)をFPGA13に出力し、FPGA13がクロック信号に同期してデータ信号線を介してシリアル通信データを読み込む。これにより、FPGA13は、初期化される。
マイクロコントローラ14は、光トランシーバ1をアップグレードするときに、アップグレードデータをMDIOインターフェースを介してホスト装置から受信し、受信したアップグレードデータを通信バスSB1を介してメモリ16に書き込む。アップグレードデータは、更新用のコンフィグレーションデータ及び更新用のファームウェアを含む。マイクロコントローラ14は、メモリ16に格納された更新用のファームウェアを通信バスSB1を介して読み出し、マイクロコントローラ14のファームウェアを書き換える。マイクロコントローラ14は、メモリ16に格納された更新用のコンフィグレーションデータを通信バスSB1を介して読み出し、読み出したコンフィグレーションデータを通信バスSB2を介してFPGA13に送信する。これにより、FPGA13は再コンフィグレーションされる。マイクロコントローラ14は、DMA機能を有し、上述のデータの送受信をDMA転送によって行う。また、メモリ16は、光トランシーバ1の電源が遮断されている間も書き込まれたアップグレードデータを保持し続ける。メモリ16の作用の詳細については後述する。
なお、FPGA13のコンフィグレーションデータだけが更新されることもある。この場合には、マイクロコントローラ14は、更新用のコンフィグレーションデータをMDIOインターフェースを介してホスト装置から受信し、受信した更新用のコンフィグレーションデータを通信バスSB1を介してメモリ16に書き込むことによって、コンフィグレーションデータを更新用のコンフィグレーションデータに書き換える。
マイクロコントローラ14は、ファームウェアで動作する。つまり、マイクロコントローラ14は、ファームウェアを実行することによって、メモリ16に格納されているコンフィグレーションデータを読み出す処理と、読み出したコンフィグレーションデータをFPGA13に送信する処理と、更新用のコンフィグレーションデータを含むアップグレードデータをホスト装置から受信する処理と、アップグレードデータをメモリ16に書き込む処理と、を行う。マイクロコントローラ14の詳細構成は後述する。
マイクロコントローラ15は、光ファイバを介した光通信を監視及び制御する。具体的には、マイクロコントローラ15は、FPGA13、光源21、光変調器23、及び光復調器24を監視及び制御する。なお、光通信の監視及び制御を行いつつ並行して光トランシーバ1と接続されるホスト装置とのMDIO通信に応答するために、マイクロコントローラ14及びマイクロコントローラ15が設けられているが、マイクロコントローラ14及びマイクロコントローラ15は、1つのマイクロコントローラであってもよい。
メモリ16は、格納されているデータの書き換えが可能な不揮発性の記憶素子であり、例えば、EEPROM(Electrically Erasable Programmable Read-Only Memory)及びフラッシュROM(Read Only Memory)等の不揮発性メモリである。メモリ16は、FPGA13のコンフィグレーションデータと、光トランシーバ1のアップグレードデータと、を格納する。マイクロコントローラ14,15、及びメモリ16は、FPGA13及び光送受信部12によって構成される主信号系の監視及び制御を行うための監視制御部(監視制御系)を構成する。なお、図1には示されていないが、内部電源電圧の生成及び制御、並びに温度を監視するためのアナログ回路等も監視制御系に含まれる場合がある。
図2は、メモリ16(第1のメモリ)に格納されるデータの構成を示す図である。図2に示されるように、メモリ16は、領域R1と、領域R2と、領域R3と、を有している。領域R1は、FPGA13の更新用のコンフィグレーションデータを格納するための領域である。領域R2は、FPGA13の更新前のコンフィグレーションデータを格納するための領域である。領域R3は、マイクロコントローラ14の更新用のファームウェアを格納するための領域である。なお、ここでは説明を簡易化するために領域R1〜R3についてのみ図示しているが、メモリ16はさらに別の領域を含んでいてもよい。
光トランシーバ1のアップグレード時に、マイクロコントローラ14によってホスト装置から受信されたアップグレードデータは、メモリ16に格納される。具体的には、アップグレードデータのうちの更新用のコンフィグレーションデータは、領域R1に格納され、アップグレードデータのうちの更新用のファームウェアは、領域R3に格納される。このとき、領域R1にコンフィグレーションデータが格納される前に、更新前のコンフィグレーションデータが領域R2に格納される。
光トランシーバ1を起動するごとに、FPGA13にコンフィグレーションデータが書き込まれる必要があるので、領域R1又は領域R2の少なくともいずれかには、更新中を除いて常に完全な状態のコンフィグレーションデータが格納されている。例えば、光トランシーバ1が高速大容量の基幹通信に使用される場合等には、更新後のコンフィグレーションデータに何らかの問題が生じた場合に備えて、領域R2に更新前のコンフィグレーションデータが格納されている。領域R1に格納されている更新用のコンフィグレーションデータと領域R2に格納されている更新前のコンフィグレーションデータとは、必要に応じて切り替えて用いられる。これにより、光トランシーバ1が通信不能となることが低減される。領域R3は、マイクロコントローラ14のファームウェアを更新する際に一時的に更新用のファームウェアを格納するために使用されるが、光トランシーバ1の通常動作時には使用されない。なお、コンフィグレーションデータはある程度の大きさ(データサイズ)を持っているので、マイクロコントローラ14がホスト装置からコンフィグレーションデータの全部を受信するまでにはある程度の時間を必要とする。例えば、マイクロコントローラ14がホスト装置からコンフィグレーションデータを受信している間に、光トランシーバ1の電源が遮断されると、領域R1に格納されているコンフィグレーションデータは途中まで書き換えられた不完全な状態となる場合がある。上記の完全な状態のコンフィグレーションデータとは、コンフィグレーションデータの全部が正常に正しく書き換えられた状態にあることを意味する。
続いて、マイクロコントローラ14の詳細構成について説明する。図3は、マイクロコントローラ14のハードウェア構成図である。図3に示されるように、マイクロコントローラ14は、CPUコア41と、RAM(Random Access Memory)42(第2のメモリ)と、フラッシュROM43(第3のメモリ、不揮発性メモリ)と、DMAC44(第1のDMAコントローラ)と、SPI回路45と、I2C(Inter-Integrated Circuit)回路46と、その他の周辺インターフェース回路47と、を備えている。
CPUコア41は、プログラムを実行する命令実行ユニットである。RAM42は、格納されているデータの書き換えが可能であって、処理中のデータを一時的に格納する記憶素子である。RAM42は、DMAバッファとしても機能する。RAM42では、送信用の送信DMAバッファ及び受信用の受信DMAバッファにそれぞれ記憶領域が割り当てられてもよく、送信DMAバッファ及び受信DMAバッファに共通の記憶領域が割り当てられてもよい。メモリ16からコンフィグレーションデータを読み出す前に、CPUコア41によって、RAM42の送信DMAバッファに、メモリ16に格納されているコンフィグレーションデータを読み出すためのデータ(送信データ)が格納される。このデータは、メモリ16のコンフィグレーションデータが格納されている格納場所を示すアドレス情報を含んでいる。送信DMAバッファ及び受信DMAバッファは、コンフィグレーションデータのデータサイズより小さくてもよい。
フラッシュROM43は、格納されているデータの書き換えが可能な不揮発性の記憶素子であり、マイクロコントローラ14のファームウェアを格納している。
DMAC44は、CPUコア41が介在することなく、RAM42とSPI回路45との間のデータの送受信(DMA転送)を直接行うコントローラである。DMAC44は、光トランシーバ1が起動するときに、メモリ16に格納されているコンフィグレーションデータを通信バスSB1を介して読み出して、読み出したコンフィグレーションデータをRAM42に書き込む。具体的には、DMAC44は、RAM42に格納されている送信データを読み出して、読み出した送信データをメモリ16に送信する処理と、メモリ16に格納されているコンフィグレーションデータを、所定のデータサイズの分割データごとに読み出して、読み出した分割データをRAM42に書き込む処理と、を通信バスSB1を介して並行して行う。
RAM42において、送信DMAバッファ及び受信DMAバッファに共通の領域が割り当てられている場合、DMAC44は、メモリ16に送信済みの送信データが格納されているRAM42のアドレスに、分割データを格納する。DMAC44は、DMAディスクリプタに基づいて、DMA転送を行う。DMAディスクリプタは、CPUコア41によって設定される。
図4は、DMAディスクリプタの一例を示す図である。図4に示されるように、DMAディスクリプタ30は、送信側の設定項目31と、受信側の設定項目32と、を含む。設定項目31は、転送元アドレス311と、転送元アドレスの増加有無情報312と、転送先アドレス313と、転送先アドレスの増加有無情報314と、転送データ長315と、DMA有効情報316と、を含む。
転送元アドレス311は、DMAC44がデータを読み出す格納場所を示すアドレスである。増加有無情報312は、1回のDMA転送ごとに転送元アドレスを増加させるかどうかを示す情報である。転送先アドレス313は、読み出したデータをDMAC44が書き込む格納場所を示すアドレスである。増加有無情報314は、1回のDMA転送ごとに転送先アドレスを増加させるかどうかを示す情報である。転送データ長315は、DMA転送の総データ長であり、DMA転送を繰り返す回数ともいえる。DMA有効情報316は、設定項目31でDMA転送を行うか否かを示す情報である。設定項目32も同様に、転送元アドレス321、転送元アドレスの増加有無情報322、転送先アドレス323、転送先アドレスの増加有無情報324、転送データ長325及びDMA有効情報326を含む。
SPI回路45は、通信バスSB1を介してメモリ16に接続されており、SPI通信によってメモリ16とデータの送受信を行う回路である。図5に示されるように、SPI回路45は、CS信号をアサートして(SPI通信の開始をメモリ16に知らせるためにCS信号の信号レベルをローレベルにする)から、SCK信号のクロックパルスに同期して、1バイト(8ビット)のコマンドと、3バイト(24ビット)のアドレスと、を順にMOSI信号としてメモリ16に送信する。そして、SPI回路45は、さらにSCK信号を出力し続けることにより、SCK信号のクロックパルスに同期して、メモリ16の指定したアドレスからデータを読み出す。SPI回路45は、所望のバイト数のデータを読み出すとSCK信号を停止し、CS信号をデアサートする(SPI通信を終了するためにCS信号の信号レベルをハイレベルにする)。
例えば、10バイトのデータをメモリ16から読み出す場合、SPI回路45は、1バイトのコマンド及び3バイトのアドレスを送信し、続けて10バイトのデータを受信する。SPIバスでは、データの送受信が同時に行われるので、全体で14バイトのデータが送受信される。このとき、送信データの5バイト目以降はメモリ16において無視されるので、任意の値でよい。同様に、受信データの4バイト目までは、SPI回路45において破棄されるので、ダミーの受信データとなる。
I2C回路46は、I2C通信によって他のIC等とデータの送受信を行う回路である。周辺インターフェース回路47は、所定の通信によって他のIC等とデータの送受信を行う回路である。なお、本実施形態では、周辺インターフェース回路47は、通信バスSB2を介してFPGA13に接続されている。周辺インターフェース回路47は、DMAC44によってRAM42に書き込まれたコンフィグレーションデータを、通信バスSB2を介してFPGA13に送信する。周辺インターフェース回路47は、SPI回路であってもよい。
CPUコア41、RAM42、フラッシュROM43、DMAC44、SPI回路45、I2C回路46、及びその他の周辺インターフェース回路47は、内部バスBに接続されており、内部バスBを介して互いに通信可能である。より具体的には、内部バスBに接続されたそれぞれのユニット(構成要素)には内部バスB上で指定可能な各ユニットに固有のアドレス領域が割り当てられており、アドレスを指定することでそのアドレスを含むアドレス領域が割り当てられたユニットと特定のデータの読み出し又は書き込みを行うことができる。
続いて、SPI回路45の詳細構成について説明する。図6は、SPI回路45のハードウェア構成図である。図6に示されるように、SPI回路45は、制御回路51と、送信データレジスタ52と、送信シフトレジスタ53と、受信データレジスタ54と、受信シフトレジスタ55と、を備えている。
制御回路51は、SPI通信を制御する回路であり、CS信号及びSCK信号を出力する。制御回路51は、CS信号及びSCK信号を通信バスSB1に出力し、SCK信号を送信シフトレジスタ53及び受信シフトレジスタ55に出力する。
送信データレジスタ52は、送信データを格納するレジスタである。送信データレジスタ52は、内部バスBに接続されており、内部バスBを介して送信データレジスタ52への送信データの書き込みが行われ得る。送信データレジスタ52には、予め設定された内部バスB上のアドレスが割り当てられている。CPUコア41及びDMAC44は、内部バスB上で送信データレジスタ52に割り当てられているアドレスを指定することにより、送信データレジスタ52にデータを書き込む。
送信データレジスタ52は、送信データなし通知信号をDMAC44に出力している。送信データレジスタ52は、送信シフトレジスタ53に格納されている有効な送信データを送信シフトレジスタ53に出力すると、送信データなし通知信号を送信データがないことを示す状態にセット(アサート)する。これにより、送信データレジスタ52に送信データを書き込むことが可能であることがDMAC44に通知される。送信データレジスタ52は、送信データが書き込まれると、送信データなし通知信号を送信データがあることを示す状態にセット(デアサート)する。送信シフトレジスタ53は、SCK信号に基づいて、格納している送信データを1ビットずつMOSI信号として通信バスSB1に出力する。
受信シフトレジスタ55は、SCK信号に基づいて、通信バスSB1を介してMISOデータを受信データとして1ビットずつ受信し、受信データを格納する。受信シフトレジスタ55は、所定のビット数の受信データを受信すると、格納している受信データを受信データレジスタ54に出力する。受信データレジスタ54は、受信データを格納するレジスタである。受信データレジスタ54は、内部バスBに接続されており、内部バスBを介して受信データレジスタ54から受信データの読み出しが行われ得る。受信データレジスタ54には、予め設定された内部バスB上のアドレスが割り当てられている。CPUコア41及びDMAC44は、内部バスB上で受信データレジスタ54に割り当てられているアドレスを指定することにより、受信データレジスタ54からデータを読み出す。
受信データレジスタ54は、受信データあり通知信号をDMAC44に出力している。受信データレジスタ54は、受信シフトレジスタ55から受信データを受け取ると、受信データあり通知信号を受信データがあることを示す状態にセット(アサート)する。これにより、受信データレジスタ54から受信データを読み出すことが可能であることがDMAC44に通知される。受信データレジスタ54は、格納している受信データが読み出されると、受信データあり通知信号を受信データがないことを示す状態にセット(デアサート)する。
SPI回路45では、マイクロコントローラ14が起動した直後には、送信データレジスタ52、送信シフトレジスタ53、受信データレジスタ54及び受信シフトレジスタ55は有効なデータを格納していない。この状態では、送信データレジスタ52は、送信データなし通知信号をアサートし、受信データレジスタ54は、受信データあり通知信号をデアサートしている。
続いて、図4、及び図6〜図8を参照して、マイクロコントローラ14がDMA転送によってメモリ16からデータを読み出す動作について説明する。図7は、SPI回路45の動作を示すタイミングチャートであり、図7の(a)は通信バスSB1上の信号のタイミングチャート、図7の(b)はデータ送信に関するタイミングチャート、図7の(c)はデータ受信に関するタイミングチャートである。図8は、DMACによるデータの送受信を説明するための図である。メモリ16から読み出されるデータとしては、例えば、コンフィグレーションデータ及びファームウェアがある。これらのデータは、所定のデータサイズに分割されて、分割データとしてメモリ16から順に読み出される。
この読み出し動作において、マイクロコントローラ14の内部では、1つのDMAC44が、RAM42の送信DMAバッファ61から送信データレジスタ52に送信データを転送するとともに、受信データレジスタ54からRAM42の受信DMAバッファ62に受信データを転送する。なお、送信DMAバッファ61には、データの格納場所を示すアドレスAs0,As1,…が割り当てられている。受信DMAバッファ62には、データの格納場所を示すアドレスAr0,Ar1,…が割り当てられている。
このDMA転送を行うために、CPUコア41は、送信DMAバッファ61のアドレスAs0にコマンド「0x03」(送信データDT1)、続くアドレスAs1〜As3にメモリ16のアドレス「0x01」、「0x23」、「0x45」(送信データDT2〜DT4)を格納する。なお、送信DMAバッファ61のアドレスAs4以降には、無効なデータである「0xFF」が格納されている。そして、CPUコア41は、DMAディスクリプタ30を準備する。CPUコア41は、RAM42の送信DMAバッファ61から送信データレジスタ52に送信データを転送するために、設定項目31を設定し、受信データレジスタ54からRAM42の受信DMAバッファ62に受信データを転送するために、設定項目32を設定する。
具体的には、CPUコア41は、転送元アドレス311に送信DMAバッファ61のアドレスAs0を設定し、増加有無情報312に「増加有」を示す値を設定し、転送先アドレス313に送信データレジスタ52のアドレスを設定し、増加有無情報314に「増加無」を示す値を設定し、転送データ長315に送受信するデータのデータ長を設定する。CPUコア41は、転送元アドレス321に受信データレジスタ54のアドレスを設定し、増加有無情報322に「増加無」を示す値を設定し、転送先アドレス323に受信DMAバッファ62のアドレスAr0を設定し、増加有無情報324に「増加有」を示す値を設定し、転送データ長325に送受信するデータのデータ長を設定する。
CPUコア41は、上記設定を行った後、DMA有効情報316及びDMA有効情報326に「有効」を示す値を設定する。DMA転送が有効になると、DMAC44は、送信データなし通知信号がアサートされているので、転送元アドレス311で指定されたRAM42上の送信DMAバッファ61のアドレスAs0から1バイトの送信データDT1を読み出す。増加有無情報312が「増加有」を示す値に設定されているので、転送元アドレスは1バイト分増加され、アドレスAs1となる。
そして、DMAC44は、読み出した送信データDT1を、転送先アドレス313で指定された送信データレジスタ52に書き込む。増加有無情報314は「増加無」を示す値に設定されているので、転送先アドレスは増加されず、次のDMA転送でも送信データレジスタ52が転送先に指定される。そして、送信データレジスタ52に送信データDT1が書き込まれると、送信データなし通知信号がデアサートされ、その後、送信データレジスタ52に書き込まれた送信データDT1は送信シフトレジスタ53に転送される。これにより、送信データレジスタ52には有効なデータが無くなる(空になる)ので、送信データレジスタ52は、送信データなし通知信号を再びアサートする。これにより、次の送信データを送信データレジスタ52に書き込み可能であることがDMAC44に通知される。
また、送信シフトレジスタ53に送信データDT1が転送されることによって、制御回路51は、CS信号をアサートし、SCK信号の出力を開始する。このSCK信号に同期して、送信シフトレジスタ53から送信データDT1が1ビットずつMOSI信号として出力され、メモリ16に送信される。送信データDT1が通信バスSB1を介してメモリ16に送信されることと並行して、受信シフトレジスタ55には、通信バスSB1を介してメモリ16から受信データDR1が読み出される。具体的には、通信バスSB1のMISO信号が受信データDR1として受信シフトレジスタ55に取り込まれる。
このとき、DMAC44によって、送信データレジスタ52に次の送信データDT2が書き込まれると、送信データレジスタ52は、送信データなし通知信号をデアサートする。しかし、送信シフトレジスタ53は、前回の送信データDT1を出力している途中であるので、送信データレジスタ52に書き込まれた送信データDT2は、送信シフトレジスタ53には転送されない。
そして、メモリ16に1バイトの送信データDT1が送信されると、受信シフトレジスタ55には1バイトの受信データDR1が取り込まれているので、受信シフトレジスタ55に取り込まれた受信データDR1が受信データレジスタ54に転送され、受信データレジスタ54は、受信データあり通知信号をアサートする。このとき、送信シフトレジスタ53には有効なデータが無いので、送信データレジスタ52に書き込まれた送信データDT2は、送信シフトレジスタ53に転送される。送信シフトレジスタ53に送信データが転送されることによって、制御回路51は、さらにSCK信号を出力する。このSCK信号に同期して、送信シフトレジスタ53から送信データDT2が1ビットずつSPIバスのMOSI信号として出力され、並行してSPIバスのMISO信号が次の受信データDR2として受信シフトレジスタ55に取り込まれる。
DMAC44は、受信データあり通知信号がアサートされると、転送元アドレス321で指定された受信データレジスタ54から1バイトの受信データDR1を読み出す。増加有無情報322が「増加無」を示す値に設定されているので、転送元アドレスは増加されず、次のDMA転送でも受信データレジスタ54が転送元に指定される。そして、DMAC44は、読み出した受信データDR1を、転送先アドレス323で指定されたRAM42上の受信DMAバッファ62のアドレスAr0に書き込む。増加有無情報324が「増加有」を示す値に設定されているので、転送先アドレスは1バイト分増加され、アドレスAr1となる。
このようにして、RAM42上の送信DMAバッファ61から1バイトずつ送信データがメモリ16に送信され、転送データ長315で指定された転送データ長だけDMA転送が繰り返される。同様に、メモリ16から1バイトずつ受信データが読み出されて、RAM42上の受信DMAバッファ62に送信され、転送データ長325で指定された転送データ長だけDMA転送が繰り返される。
そして、転送データ長315で指定された転送データ長の送信データを送信し、転送データ長325で指定された転送データ長の受信データを受信し終わると、制御回路51は、SCK信号の出力を停止し、CS信号をデアサートする。これにより、マイクロコントローラ14がDMA転送を用いてメモリ16からデータを読み出す動作が終了する。このようにして、CPUコア41が介在することなく、メモリ16からデータが読み出される。
なお、送信DMAバッファ61から読み出したデータ(送信データ)の送信データレジスタ52への書き込みは、内部バスBを介して行われる。送信シフトレジスタ53からメモリ16への送信データの送信は、通信バスSB1を介して行われる。ここで、例えば、通信バスSB1の最大データ伝送速度が20Mbpsで、内部バスBの最大データ伝送速度が320Mbps(16ビットのパラレルデータ伝送をクロック周波数20MHzで行うことを想定)であるとすると、送信シフトレジスタ53からメモリ16への送信データの送信よりも送信DMAバッファ61から読み出したデータの送信データレジスタ52への書き込みの方が速いので、送信データレジスタ52から送信シフトレジスタ53への次の送信データの転送は、その前の送信シフトレジスタ53からメモリ16への送信データの送信が終わるまで待たされる。
したがって、送信シフトレジスタ53からメモリ16への送信データの送信を行っている間に、DMAC44は、送信DMAバッファ61から送信データを読み出し、送信データレジスタ52に書き込む処理と、受信データレジスタ54から受信データを読み出し、受信DMAバッファ62に書き込む処理と、を順に行うことができる。内部バスBを介したデータ転送は、通信バスSB1を介したデータ転送よりも高速に行われるので、送信DMAバッファ61から送信データを読み出し、送信データレジスタ52に書き込む処理と、受信データレジスタ54から受信データを読み出し、受信DMAバッファ62に書き込む処理と、は並行して行われると説明することがある。
SPI通信ではデータの送受信が同時に行われるが、送信データは、SPI回路45から送信される前に送信DMAバッファ61から読み出される。一方、受信データは、SPI回路45によって受信されてから受信DMAバッファ62に格納される。このため、送信DMAバッファ61と受信DMAバッファ62とを1つの共用DMAバッファとすることが可能である。次に、図9〜図13を参照して、共用DMAバッファを用いて、マイクロコントローラ14がDMA転送によってメモリ16からデータを読み出す動作について説明する。なお、データの流れに着目して説明し、送信データなし通知信号及び受信データあり通知信号等の説明は省略している。メモリ16は、1〜4バイト目までダミーデータとして「0xAB」、「0xCD」、「0xAB」、及び「0xCD」を送信することとする。共用DMAバッファ60には、データの格納場所を示すアドレスA0,A1,…が割り当てられている。
DMA転送を行うために、CPUコア41は、共用DMAバッファ60のアドレスA0にコマンド「0x03」、続くアドレスA1〜A3にメモリ16のアドレスを示す「0x01」、「0x23」、「0x45」を格納する。なお、共用DMAバッファ60のアドレスA4以降には、無効なデータである「0xFF」が格納されている。そして、CPUコア41は、DMAディスクリプタ30を準備する。
具体的には、CPUコア41は、転送元アドレス311に共用DMAバッファ60のアドレスA0を設定し、増加有無情報312に「増加有」を示す値を設定し、転送先アドレス313に送信データレジスタ52のアドレスを設定し、増加有無情報314に「増加無」を示す値を設定し、転送データ長315に送受信するデータのデータ長を設定する。CPUコア41は、転送元アドレス321に受信データレジスタ54のアドレスを設定し、増加有無情報322に「増加無」を示す値を設定し、転送先アドレス323に共用DMAバッファ60のアドレスA0を設定し、増加有無情報324に「増加有」を示す値を設定し、転送データ長325に送受信するデータのデータ長を設定する。
CPUコア41は、上記設定を行った後、DMA有効情報316及びDMA有効情報326に「有効」を示す値を設定する。
そして、図9に示されるように、DMAC44は、共用DMAバッファ60のアドレスA0から1バイトの送信データ「0x03」を読み出し、送信データ「0x03」を送信データレジスタ52に書き込む。送信データレジスタ52に送信データ「0x03」が書き込まれると、送信データレジスタ52は、送信シフトレジスタ53に送信データ「0x03」を転送する。そして、図10に示されるように、制御回路51はCS信号をアサートしてから、SCK信号を出力することによって、送信シフトレジスタ53からMOSI信号として送信データ「0x03」が出力されるとともに、MISO信号から受信データ「0xAB」が受信シフトレジスタ55に取り込まれる。
そして、図11に示されるように、1バイトの通信が完了した時点で、受信シフトレジスタ55に取り込まれた受信データ「0xAB」を受信データレジスタ54に転送する。そして、DMAC44は、受信データレジスタ54から受信データ「0xAB」を読み出して、共用DMAバッファ60のアドレスA0に書き込み、続いて共用DMAバッファ60のアドレスA1から次の送信データ「0x01」を読み出して、送信データレジスタ52に書き込む。このとき、共用DMAバッファ60のアドレスA0には、送信済みの送信データが格納されていたので、受信データを書き込んでも未送信データが上書きされることはない。
送信データレジスタ52に送信データ「0x01」が書き込まれると、送信データレジスタ52は、送信シフトレジスタ53に送信データ「0x01」を転送する。そして、図12に示されるように、制御回路51はCS信号をアサートした状態で、SCK信号をさらに出力することによって、送信シフトレジスタ53からMOSI信号として送信データ「0x01」が出力されるとともに、MISO信号から受信データ「0xCD」が受信シフトレジスタ55に取り込まれる。
そして、図13に示されるように、1バイトの通信が完了した時点で、受信シフトレジスタ55に取り込まれた受信データ「0xCD」を受信データレジスタ54に転送する。そして、DMAC44は、受信データレジスタ54から受信データ「0xCD」を読み出して、共用DMAバッファ60のアドレスA1に書き込み、続いて共用DMAバッファ60のアドレスA2から次の送信データ「0x23」を読み出して、送信データレジスタ52に書き込む。
以上のように、RAM42の同一の格納領域を送信DMAバッファ及び受信DMAバッファとして共用しても、受信データは送信済みの送信データが格納されているアドレスに書き込まれる。このため、送信データは全て正しく送信され、受信データも正しく格納される。
この光トランシーバ1では、光トランシーバ1が起動するときに、メモリ16に格納されているコンフィグレーションデータが、マイクロコントローラ14によって、通信バスSB1を介して読み出されて、通信バスSB2を介してFPGA13に送信される。また、コンフィグレーションデータを更新するときに、マイクロコントローラ14によって、更新用のコンフィグレーションデータがMDIOインターフェースを介してホスト装置から受信され、通信バスSB1を介してメモリ16に書き込まれる。このように、マイクロコントローラ14が、メモリ16に格納されているコンフィグレーションデータを更新用のコンフィグレーションデータに書き換えるだけでなく、メモリ16に格納されているコンフィグレーションデータを読み出してFPGA13に送信するので、FPGA13がメモリ16に接続されている必要が無い。このため、切替回路等を設ける必要が無いので、部品数の増加を抑えつつ、FPGA13のコンフィグレーションデータを更新することが可能となる。
マイクロコントローラ14のファームウェアが格納されているフラッシュROM43では、書き換え時間が長く、書き換え処理中にはフラッシュROM43からデータの読み出しができない。このため、MDIOインターフェースを介して受信したアップグレードデータをフラッシュROM43に格納する場合には、フラッシュROM43の書き換え処理中にマイクロコントローラ14のプログラムが停止し、ホスト装置に対してMDIO応答ができなくなる。一方、光トランシーバ1は、アップグレードデータを、マイクロコントローラ14のフラッシュROM43ではなくメモリ16に格納する。これにより、光トランシーバ1の動作を停止することなく、アップグレードデータをメモリ16に格納することが可能となる。つまり、MDIO応答に求められる高速応答を実現しつつ、アップグレードデータを受信することが可能となる。
アップグレードデータは、更新用のコンフィグレーションデータだけでなく、ファームウェアの一部を更新するための更新用のファームウェアを含む。このため、コンフィグレーションデータと同様に、更新用のファームウェアをホスト装置から受信する処理、受信した更新用のファームウェアをメモリ16に格納する処理、及びメモリ16に格納された更新用のファームウェアを読み出してフラッシュROM43に格納する処理を介して、ファームウェアが更新される。そのようなファームウェアの更新によって、上述のコンフィグレーションデータの更新に関する処理を、光トランシーバ1をホスト装置に装着したままの状態で行うことができる。したがって、例えば、ホスト装置と光トランシーバ1との間の通信に関する仕様が変更になった場合でも該当するファームウェアの部分を更新することによって、光トランシーバ1をホスト装置から取り外すことなくコンフィグレーションデータの更新を継続して行わせることができる。
また、メモリ16への送信データの送信と、メモリ16からのコンフィグレーションデータの読み出しとが、DMAC44によって並列して行われるので、マイクロコントローラ14とメモリ16との間のデータの送受信に要する時間を短縮できる。
共用DMAバッファ60が用いられる場合、RAM42内の格納場所が、送信データ用と受信データ用とで共通に用いられる。このため、送信データ用及び受信データ用にそれぞれ別の格納場所を設ける場合と比較して、DMA転送用のバッファ容量を半分にすることができ、RAM42の容量を低減することが可能となる。
(変形例)
図14は、変形例のマイクロコントローラ14Aのハードウェア構成を示す図である。図14に示されるように、図3のマイクロコントローラ14と比較して、マイクロコントローラ14Aは、DMAC44A(第2のDMAコントローラ)及びSPI回路45Aをさらに備える点で相違する。
DMAC44Aは、CPUコア41が介在することなく、RAM42とSPI回路45Aとの間のデータの送受信(DMA転送)を直接行うコントローラである。DMAC44Aは、DMAC44がメモリ16に格納されているコンフィグレーションデータをRAM42に書き込む処理と並行して、RAM42に書き込まれたコンフィグレーションデータを通信バスSB2を介してFPGA13に送信する。具体的には、DMAC44Aは、DMAC44によってRAM42の所定のアドレスにコンフィグレーションデータの分割データが書き込まれた後、当該アドレスから分割データを読み出して、読み出した分割データを通信バスSB2を介してFPGA13に送信する。つまり、RAM42では、メモリ16から受信した受信データを格納するための受信DMAバッファと、FPGA13にデータを送信するための送信DMAバッファと、に共通の領域が割り当てられている。
SPI回路45Aは、通信バスSB2を介してFPGA13に接続されており、クロック信号とデータとを用いた同期シリアル転送によってFPGA13にデータを送信する。つまり、SPI回路45Aは、CS信号、SCK信号、MOSI信号、及びMISO信号を送受信可能であるが、CS信号線、SCK信号線、MOSI信号線、及びMISO信号線のSPIバスを構成する4つの信号線のうち、SCK信号線及びMOSI信号線がFPGA13に接続される。
DMAC44は、メモリ16に格納されているコンフィグレーションデータをSPI回路45を介して読み出して、共用DMAバッファ60に格納する。DMAC44Aは、共用DMAバッファ60に格納されたコンフィグレーションデータを読み出して、SPI回路45Aを介してFPGA13に送信する。
続いて、図15及び図16を参照して、マイクロコントローラ14AがDMA転送によってメモリ16からコンフィグレーションデータを読み出し、FPGA13に送信する動作について説明する。この例では、共用DMAバッファ60が用いられる。なお、メモリ16は、1〜4バイト目までダミーデータとして「0xAB」、「0xCD」、「0xAB」、及び「0xCD」を送信することとする。また、メモリ16は、コンフィグレーションデータの分割データとして、「0x98」、「0x76」、「0x54」、…を送信することとする。
DMA転送を行うために、CPUコア41は、共用DMAバッファ60のアドレスA0にコマンド「0x03」、続くアドレスA1〜A3にメモリ16のアドレスを示す「0x01」、「0x23」、「0x45」を格納する。なお、共用DMAバッファ60のアドレスA4以降には、無効なデータである「0xFF」が格納されている。そして、CPUコア41は、DMAC44用のDMAディスクリプタ30及びDMAC44A用のDMAディスクリプタ30をそれぞれ準備する。
具体的には、CPUコア41は、DMAC44用の設定項目31として、転送元アドレス311に共用DMAバッファ60のアドレスA0を設定し、増加有無情報312に「増加有」を示す値を設定し、転送先アドレス313に送信データレジスタ52のアドレスを設定し、増加有無情報314に「増加無」を示す値を設定し、転送データ長315に送受信するデータのデータ長を設定する。CPUコア41は、DMAC44用の設定項目32として、転送元アドレス321に受信データレジスタ54のアドレスを設定し、増加有無情報322に「増加無」を示す値を設定し、転送先アドレス323に共用DMAバッファ60のアドレスA0を設定し、増加有無情報324に「増加有」を示す値を設定し、転送データ長325に送受信するデータのデータ長を設定する。
さらに、CPUコア41は、DMAC44A用の設定項目31として、転送元アドレス311に共用DMAバッファ60のアドレスA4を設定し、増加有無情報312に「増加有」を示す値を設定し、転送先アドレス313に送信データレジスタ52Aのアドレスを設定し、増加有無情報314に「増加無」を示す値を設定し、転送データ長315に送受信するデータのデータ長を設定する。FPGA13からデータを受信しないので、CPUコア41は、DMAC44A用の設定項目32の設定を行わない。
CPUコア41は、上記設定を行った後、DMAC44用の設定項目31のDMA有効情報316、及びDMAC44用の設定項目32のDMA有効情報326に「有効」を示す値を設定する。
そして、DMAC44によって、図9〜図13と同様にして、マイクロコントローラ14Aとメモリ16との間で5バイト分のデータの送受信が行われる。そして、図15に示されるように、通信バスSB1を介して5バイト目のデータの通信が完了した時点で、受信シフトレジスタ55に取り込まれた受信データ「0x76」が受信データレジスタ54に転送される。そして、DMAC44は、受信データレジスタ54から受信データ「0x76」を読み出して、共用DMAバッファ60のアドレスA5に書き込み、続いて共用DMAバッファ60のアドレスA6から次の送信データ「0xFF」を読み出して、送信データレジスタ52に書き込む。
このとき、CPUコア41は、DMAC44A用の設定項目31のDMA有効情報316、及びDMAC44A用の設定項目32のDMA有効情報326に「有効」を示す値を設定する。これにより、DMAC44Aは、共用DMAバッファ60のアドレスA4から受信データ「0x98」を読み出して、SPI回路45Aの送信データレジスタ52Aに書き込む。
送信データレジスタ52に送信データ「0xFF」が書き込まれると、送信データレジスタ52は、送信シフトレジスタ53に送信データ「0xFF」を転送する。また、送信データレジスタ52Aに受信データ「0x98」が書き込まれると、送信データレジスタ52Aは、送信シフトレジスタ53Aに送信データ「0x98」を転送する。そして、図16に示されるように、制御回路51はCS信号をアサートした状態で、SCK信号をさらに出力することによって、送信シフトレジスタ53からMOSI信号として送信データ「0xFF」が出力されるとともに、MISO信号から受信データ「0x54」が受信シフトレジスタ55に取り込まれる。このとき、制御回路51AはSCK信号を出力することによって、送信シフトレジスタ53AからMOSI信号として受信データ「0x98」が出力される。
このように、DMAC44によって、1バイト以上の受信データがメモリ16から読み出されて、共用DMAバッファ60に格納された時以降に、DMAC44Aによって、共用DMAバッファ60に格納された受信データが読み出され、FPGA13に送信される。
つまり、図17に示されるように、まず、DMAC44が、共用DMAバッファ60のアドレスAn−1に格納されているnバイト目の送信データを読み出して、SPI回路45を介してメモリ16に送信するとともに、SPI回路45がメモリ16からnバイト目の受信データを取得する。そして、DMAC44は、nバイト目の受信データを共用DMAバッファ60のアドレスAn−1に格納する。続いて、DMAC44Aは、アドレスAn−1に格納されたnバイト目の受信データを読み出し、SPI回路45Aを介してFPGA13に送信する。このとき、DMAC44は、共用DMAバッファ60のアドレスAnに格納されているn+1バイト目の送信データを読み出して、SPI回路45を介してメモリ16に送信するとともに、SPI回路45がメモリ16からn+1バイト目の受信データを取得する。
このように、DMAC44及びDMAC44Aは、共用DMAバッファ60の同じアドレスに同時にアクセスすることはない。また、アクセスするアドレスが異なっていても、DMAC44とDMAC44Aとが内部バスBを同時に使用することはできないので、実際にはDMAC44及びDMAC44Aのいずれかが共用DMAバッファ60に先にアクセスし、他方がその後でアクセスする。しかし、内部バスBのデータ転送速度が通信バスSB1及び通信バスSB2のデータ転送速度よりも大幅に速いので、DMAC44の動作とDMAC44Aの動作とは、ほとんど並行して行われる。
また、CPUコア41がDMAC44のDMA転送を有効にし、その後所定の時間が経過してからDMAC44AのDMA転送を有効にしている。これにより、CPUコア41は、DMAC44の動作の開始タイミングと、DMAC44Aの動作の開始タイミングとを制御している。CPUコア41は、例えば、共用DMAバッファ60の所定のアドレスに無効なデータを書き込んでおき、DMAC44のDMA転送を有効にした後でそのデータが有効なデータに書き替えられたことを確認することによって、DMAC44AのDMA転送を有効にしてもよい。
次に、図14の構成において、DMA転送を用いてコンフィグレーションを行う場合とソフトウェアによってCPUコア41がコンフィグレーションを行う場合との処理速度を比較する。例えばFPGA13として、Xilinx社製XC6SLX16を用い、マイクロコントローラ14AとしてAnalog Devices社製ADuCM320を用いる。このとき、コンフィグレーションデータのデータサイズは、約473.6kByteである。なお、SPI回路45及びSPI回路45AのSCK信号のクロック周波数は、20MHzとする。内部バスBのクロック周波数は、最大20MHzとする。つまり、通信バスSB1及び通信バスSB2の最大データ伝送速度は20Mbpsで、内部バスB(16ビットパラレル伝送)の最大データ伝送速度は320Mbpsである。
ソフトウェアによってCPUコア41がコンフィグレーションを行う場合には、送信データレジスタ52に有効なデータが格納されていないことを確認してから、送信データレジスタ52にデータを書き込む。また、受信データレジスタ54に有効なデータが格納されていることを確認してから、受信データレジスタ54からデータを読み出す。すなわち、CPUコア41は、SPI回路45を介して、メモリ16から1バイトのデータの読み出しを行う場合、少なくとも送信データレジスタ52に有効なデータが格納されていないことを確認し、送信データレジスタ52にデータを書き込み、SPI回路45によってメモリ16とデータを送受信し、受信データレジスタ54に有効なデータが格納されていることを確認し、受信データレジスタ54からデータを読み出す必要がある。同様に、CPUコア41は、SPI回路45Aを介して、FPGA13に1バイトのデータの書き込みを行う場合、少なくとも送信データレジスタ52Aに有効なデータが格納されていないことを確認し、送信データレジスタ52Aにデータを書き込み、SPI回路45AによってFPGA13にデータを送信する必要がある。
通信バスSB1では、1回のアクセスに2クロック必要であるとすると、アクセスごとに少なくとも0.1μ秒必要である。また、SPI回路45,45Aが1バイトのデータを送受信するには、8クロック(=0.4μ秒)必要である。したがって、ソフトウェアでSPI回路45を介して、メモリ16から1バイトのデータの読み出しを行うためには、少なくとも0.8μ秒(=0.1+0.1+0.4+0.1+0.1)の時間が必要であり、SPI回路45Aを介して、FPGA13に1バイトのデータの書き込みを行うためには、0.6μ秒(=0.1+0.4+0.1)の時間が必要である。このため、全てのコンフィグレーションデータをメモリ16から読み出して、FPGA13に書き込むためには、663m秒(=(0.6+0.8)×473.6k)の時間が必要となる。この間、CPUコア41は、コンフィグレーションデータの転送以外の処理を行うことは困難である。
一方、DMA転送を用いてコンフィグレーションを行う場合、送信データレジスタ52に有効なデータが格納されていないことの確認、及び受信データレジスタ54に有効なデータが格納されていることの確認は、ハードウェアで行われる。このため、CPUコア41による内部バスBのアクセスは不要となる。また、メモリ16からの読み出し処理と、FPGA13への書き込み処理とは、並行して実行され得る。なお、DMAC44,44Aが1回あたり最大2048バイトの転送を行うものとすると、CPUコア41は、DMA転送ごとにDMAディスクリプタ30の設定を行う必要がある。このDMAディスクリプタ30の設定には、10μ秒程度の時間を要する。
したがって、1回のDMA転送には、DMAディスクリプタ30の設定時間と、2048バイトのデータ転送時間との合計829.2μ秒の時間を要する。全てのコンフィグレーションデータをメモリ16から読み出して、FPGA13に書き込むためには、473.6kバイト分の237回のDMA転送が繰り返されるので、196.5m秒の時間が必要となる。また、DMA転送中には、CPUコア41は、コンフィグレーションデータの転送以外の処理を行うことができる。
このように、ソフトウェアによってCPUコア41がコンフィグレーションを行う場合と比較して、DMA転送を用いてコンフィグレーションを行う場合には、処理時間の短縮が可能となり、さらに処理中にCPUコア41が他の処理を行うことも可能となる。なお、マイクロコントローラ14Aの内部バスBは、最大20MHzで動作し、2クロックで16ビットのデータを転送できるので、内部バスBの転送速度は20Mバイト/秒となる。また、SPI回路45,45AのSCK信号は、最大20MHzで動作できるので、通信バスSB1及び通信バスSB2の転送速度は、最大1.25Mバイト/秒となる。よって、通信バスSB1及び通信バスSB2でデータの送受信を行っている間に、DMAC44がSPI回路45とデータの送受信を行い、DMAC44AがSPI回路45Aにデータを送信するのに十分な余裕がある。
以上のように、変形例のマイクロコントローラ14Aにおいても、マイクロコントローラ14と同様の作用効果が奏される。また、変形例のマイクロコントローラ14Aでは、DMAC44Aは、DMAC44がメモリ16に格納されているコンフィグレーションデータをRAM42に書き込む処理と並行して、RAM42に書き込まれたコンフィグレーションデータを通信バスSB2を介してFPGA13に送信している。このため、コンフィグレーションデータをメモリ16から読み出して、FPGA13に送信するのに要する時間を短縮することができる。また、DMAC44とDMAC44Aとによって、RAM42の共用DMAバッファ60が共通に使用されているので、FPGA13に送信するデータの格納場所をさらに設ける必要が無い。このため、RAM42の容量を低減することが可能となる。
なお、本発明に係る光送受信器及びマイクロコントローラは上記実施形態に限定されない。例えば、マイクロコントローラ14,14Aは、DMAC44に代えて、送信DMAバッファ61から送信データを読み出し、送信データレジスタ52に書き込む処理を行うDMACと、受信データレジスタ54から受信データを読み出し、受信DMAバッファ62に書き込む処理を行うDMACと、を備えてもよい。
また、共用DMAバッファ60は、リングバッファとして用いられてもよい。