(57)【特許請求の範囲】
【請求項１】
ＭＤＩＯインターフェースを介して外部のホスト装置と通信可能な光送受信器であって、
回路情報に基づいて内部の回路の構成が変更可能なロジックデバイスと、
前記回路情報を格納する第１のメモリと、
前記第１のメモリと第１の通信バスを介して接続されるとともに、前記ロジックデバイスと第２の通信バスを介して接続され、前記光送受信器が起動するときに、前記第１のメモリに格納されている前記回路情報を前記第１の通信バスを介して読み出して、読み出した前記回路情報を前記第２の通信バスを介して前記ロジックデバイスに送信し、前記回路情報を更新するときに、更新用回路情報を前記ＭＤＩＯインターフェースを介して前記ホスト装置から受信して、受信した前記更新用回路情報を前記第１の通信バスを介して前記第１のメモリに書き込み、前記回路情報を前記更新用回路情報に書き換えるマイクロコントローラと、
を備え、
前記マイクロコントローラは、第２のメモリと、第１のＤＭＡコントローラと、を有し、
前記第１のＤＭＡコントローラは、前記光送受信器が起動するときに、前記第１のメモリに格納されている前記回路情報を前記第１の通信バスを介して読み出して、読み出した前記回路情報を前記第２のメモリに書き込み、
前記マイクロコントローラは、前記第２のメモリに書き込まれた前記回路情報を前記第２の通信バスを介して前記ロジックデバイスに送信する、光送受信器。
【請求項２】
前記第２のメモリは、前記第１のメモリに格納されている前記回路情報を読み出すための送信データを格納しており、
前記第１のＤＭＡコントローラは、前記第２のメモリに格納されている前記送信データを読み出して、読み出した前記送信データを前記第１のメモリに送信する処理と、前記第１のメモリに格納されている前記回路情報を、所定のデータサイズの分割データごとに読み出して、読み出した前記分割データを前記第２のメモリに書き込む処理と、を前記第１の通信バスを介して並行して行う、請求項１に記載の光送受信器。
【請求項３】
前記第１のＤＭＡコントローラは、前記第１のメモリに送信済みの前記送信データが格納されている前記第２のメモリの格納場所に、前記分割データを格納する、請求項２に記載の光送受信器。
【請求項４】
前記送信データは、前記第１のメモリの前記回路情報が格納されている格納場所を示すアドレス情報を含む、請求項２又は請求項３に記載の光送受信器。
【請求項５】
前記マイクロコントローラは、第２のＤＭＡコントローラをさらに有し、
前記第２のＤＭＡコントローラは、前記第１のＤＭＡコントローラが前記第１のメモリに格納されている前記回路情報を前記第２のメモリに書き込む処理と並行して、前記第２のメモリに書き込まれた前記回路情報を前記第２の通信バスを介して前記ロジックデバイスに送信する、請求項１に記載の光送受信器。
【請求項６】
前記第２のメモリは、前記第１のメモリに格納されている前記回路情報を読み出すための送信データを格納しており、
前記第１のＤＭＡコントローラは、前記第２のメモリに格納されている前記送信データを読み出して、読み出した前記送信データを前記第１のメモリに送信する処理と、前記第１のメモリに格納されている前記回路情報を、所定のデータサイズの分割データごとに読み出して、読み出した前記分割データを前記第２のメモリに書き込む処理と、を前記第１の通信バスを介して並行して行い、
前記第２のＤＭＡコントローラは、前記第１のＤＭＡコントローラによって前記第２のメモリに書き込まれた前記分割データを前記第２の通信バスを介して前記ロジックデバイスに送信する、請求項５に記載の光送受信器。
【請求項７】
前記第１のＤＭＡコントローラは、前記第１のメモリに送信済みの前記送信データが格納されている前記第２のメモリの格納場所に、前記分割データを格納し、
前記第２のＤＭＡコントローラは、前記格納場所に前記分割データが格納された後、前記格納場所から前記分割データを読み出して、読み出した前記分割データを前記ロジックデバイスに送信する、請求項６に記載の光送受信器。
【請求項８】
前記送信データは、前記第１のメモリの前記回路情報が格納されている格納場所を示すアドレス情報を含む、請求項６又は請求項７に記載の光送受信器。
【請求項９】
前記マイクロコントローラは、第３のメモリをさらに有し、
前記第３のメモリは、ファームウェアを格納し、
前記マイクロコントローラは、前記ファームウェアを実行することによって、前記第１のメモリに格納されている前記回路情報を読み出す処理と、読み出した前記回路情報を前記ロジックデバイスに送信する処理と、前記更新用回路情報を前記ホスト装置から受信する処理と、前記更新用回路情報を前記第１のメモリに書き込む処理と、を行う、請求項１〜請求項８のいずれか一項に記載の光送受信器。
【請求項１０】
ＭＤＩＯインターフェースを介して外部のホスト装置と通信可能な光送受信器に搭載されるマイクロコントローラであって、
ファームウェアを格納する不揮発性メモリと、第２のメモリと、第１のＤＭＡコントローラと、を備え、
前記光送受信器に搭載されているロジックデバイスの内部の回路の構成を指定する回路情報を格納する第１のメモリと第１の通信バスを介して接続されるとともに、前記ロジックデバイスと第２の通信バスを介して接続され、
前記ファームウェアを実行することによって、前記光送受信器が起動するときに、前記第１のメモリに格納されている前記回路情報が前記第１のＤＭＡコントローラによって前記第１の通信バスを介して読み出されて前記第２のメモリに書き込まれ、前記第２のメモリに書き込まれた前記回路情報を前記第２の通信バスを介して前記ロジックデバイスに送信する、マイクロコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、光送受信器及びマイクロコントローラに関する。
【背景技術】
【０００２】
近年、光通信システムにおいて用いられる光トランシーバ等の光送受信器には、高機能化及び小型化が要求されている。このような要求に対し、プログラム可能なマイクロコントローラを備える光送受信器がある。例えば、特許文献１には、ＯＳＩ（Open Systems Interconnection）参照モデルにおける上位レイヤ（ホスト装置）による監視及び制御のための通信を行う監視制御系のロジックデバイスと、光トランシーバの制御を行うＣＰＵ（Central Processing Unit）と、を備える光トランシーバが記載されている。さらに、特許文献２に記載されているように、プログラム可能なＦＰＧＡ（Field Programmable Gate Array）で構成されたデジタル信号処理回路を備える光トランシーバがある。デジタル信号処理回路は、光送受信器が送信又は受信する伝送信号（主信号）のディジタル信号処理を行う。このように、光送受信器は、マイクロコントローラだけでなく、主信号を伝達する経路（主信号系）にＦＰＧＡを備えることによって、高機能化されることがある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１４−１６５７８０号公報
【特許文献２】国際公開第２０１３／０１２０１５号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、ＦＰＧＡのように回路情報（コンフィグレーションデータ）に基づいて回路構成が変更可能なロジックデバイスでは、起動直後には回路情報が書き込まれていない状態であるので、光送受信器の起動時に、ロジックデバイス内部の所定の場所（揮発性メモリ）に回路情報を書き込むこと（この処理を「コンフィグレーション」ともいう）が行われる。この回路情報は、通常、ロジックデバイスに外付けされた不揮発性メモリに格納されている。また、マイクロコントローラ及びロジックデバイスを備える光送受信器をアップグレードするためには、マイクロコントローラによって、ロジックデバイスの回路情報を更新する必要がある。特に、主信号系で使用されるロジックデバイスに関しては、更新のための回路情報を監視制御系を介してホスト装置から受信して、光送受信器をホスト装置に組み込んだ状態でアップグレードできるようにすることで伝送システムの利便性が向上する。
【０００５】
このため、ロジックデバイス及びマイクロコントローラの両方が、回路情報が格納されている不揮発性メモリに接続可能とする必要がある。例えば、切替回路等の追加の部品を設けることによって、ロジックデバイス及びマイクロコントローラが不揮発性メモリに接続可能な構成とすることが考えられる。しかしながら、光送受信器には小型化が要求されているので、部品数の増加を回避することが望まれる。
【０００６】
本発明の一態様は、部品数の増加を抑えつつ、ロジックデバイスの回路情報を更新可能な光送受信器及びマイクロコントローラを提供する。
【課題を解決するための手段】
【０００７】
本発明の一態様に係る光送受信器は、ＭＤＩＯインターフェースを介して外部のホスト装置と通信可能な光送受信器である。この光送受信器は、回路情報に基づいて内部の回路の構成が変更可能なロジックデバイスと、回路情報を格納する第１のメモリと、第１のメモリと第１の通信バスを介して接続されるとともに、ロジックデバイスと第２の通信バスを介して接続され、光送受信器が起動するときに、第１のメモリに格納されている回路情報を第１の通信バスを介して読み出して、読み出した回路情報を第２の通信バスを介してロジックデバイスに送信し、回路情報を更新するときに、更新用回路情報をＭＤＩＯインターフェースを介してホスト装置から受信して、受信した更新用回路情報を第１の通信バスを介して第１のメモリに書き込み、回路情報を更新用回路情報に書き換えるマイクロコントローラと、を備える。
【発明の効果】
【０００８】
本発明の一態様によれば、部品数の増加を抑えつつ、ロジックデバイスの回路情報を更新できる。
【図面の簡単な説明】
【０００９】
【図１】本発明の一実施形態に係る光送受信器を模式的に示す構成図である。
【図２】メモリ（不揮発性メモリ）に格納されるデータの構成を示す図である。
【図３】図１のマイクロコントローラのハードウェア構成図である。
【図４】ＤＭＡ（Direct Memory Access）ディスクリプタの一例を示す図である。
【図５】図１のマイクロコントローラがメモリからデータを読み出す動作を説明するための図である。
【図６】図３のＳＰＩ（Serial Peripheral Interface）回路のハードウェア構成図である。
【図７】図３のＳＰＩ回路の動作を示すタイミングチャートである。
【図８】ＤＭＡＣ（Direct Memory Access Controller）によるデータの送受信を説明するための図である。
【図９】共用ＤＭＡバッファを用いたＤＭＡＣによるデータの送受信を説明するための図である。
【図１０】共用ＤＭＡバッファを用いたＤＭＡＣによるデータの送受信を説明するための図である。
【図１１】共用ＤＭＡバッファを用いたＤＭＡＣによるデータの送受信を説明するための図である。
【図１２】共用ＤＭＡバッファを用いたＤＭＡＣによるデータの送受信を説明するための図である。
【図１３】共用ＤＭＡバッファを用いたＤＭＡＣによるデータの送受信を説明するための図である。
【図１４】図１のマイクロコントローラの変形例のハードウェア構成を示す図である。
【図１５】共用ＤＭＡバッファを用いた２つのＤＭＡＣによるデータの送受信を説明するための図である。
【図１６】共用ＤＭＡバッファを用いた２つのＤＭＡＣによるデータの送受信を説明するための図である。
【図１７】図１４のマイクロコントローラにおけるデータの送受信を説明するためのシーケンス図である。
【発明を実施するための形態】
【００１０】
［本願発明の実施形態の説明］
最初に本発明の実施形態の内容を列記して説明する。
【００１１】
本発明の一態様に係る光送受信器は、ＭＤＩＯインターフェースを介して外部のホスト装置と通信可能な光送受信器である。この光送受信器は、回路情報に基づいて内部の回路の構成が変更可能なロジックデバイスと、回路情報を格納する第１のメモリと、第１のメモリと第１の通信バスを介して接続されるとともに、ロジックデバイスと第２の通信バスを介して接続され、光送受信器が起動するときに、第１のメモリに格納されている回路情報を第１の通信バスを介して読み出して、読み出した回路情報を第２の通信バスを介してロジックデバイスに送信し、回路情報を更新するときに、更新用回路情報をＭＤＩＯインターフェースを介してホスト装置から受信して、受信した更新用回路情報を第１の通信バスを介して第１のメモリに書き込み、回路情報を更新用回路情報に書き換えるマイクロコントローラと、を備える。
【００１２】
この光送受信器では、光送受信器が起動するときに、第１のメモリに格納されている回路情報が、マイクロコントローラによって、第１の通信バスを介して読み出されて、第２の通信バスを介してロジックデバイスに送信される。また、回路情報を更新するときに、マイクロコントローラによって、更新用回路情報がＭＤＩＯインターフェースを介してホスト装置から受信され、第１の通信バスを介して第１のメモリに書き込まれる。このように、マイクロコントローラが、第１のメモリに格納されている回路情報を更新用回路情報に書き換えるだけでなく、第１のメモリに格納されている回路情報を読み出してロジックデバイスに送信するので、ロジックデバイスが第１のメモリに接続されている必要が無い。このため、切替回路等を設ける必要が無いので、部品数の増加を抑えつつ、ロジックデバイスの回路情報を更新することが可能となる。
【００１３】
マイクロコントローラは、第２のメモリと、第１のＤＭＡコントローラと、をさらに有してもよい。第１のＤＭＡコントローラは、光送受信器が起動するときに、第１のメモリに格納されている回路情報を第１の通信バスを介して読み出して、読み出した回路情報を第２のメモリに書き込んでもよい。マイクロコントローラは、第２のメモリに書き込まれた回路情報を第２の通信バスを介してロジックデバイスに送信してもよい。この場合、第１のメモリに格納されている回路情報の読み出しに要する時間を短縮できる。
【００１４】
第２のメモリは、第１のメモリに格納されている回路情報を読み出すための送信データを格納していてもよい。第１のＤＭＡコントローラは、第２のメモリに格納されている送信データを読み出して、読み出した送信データを第１のメモリに送信する処理と、第１のメモリに格納されている回路情報を、所定のデータサイズの分割データごとに読み出して、読み出した分割データを第２のメモリに書き込む処理と、を第１の通信バスを介して並行して行ってもよい。この場合、第１のメモリへの送信データの送信と、第１のメモリからの分割データの読み出しとが、第１のＤＭＡコントローラによって並列して行われるので、マイクロコントローラと第１のメモリとの間のデータの送受信に要する時間をさらに短縮できる。
【００１５】
第１のＤＭＡコントローラは、第１のメモリに送信済みの送信データが格納されている第２のメモリの格納場所に、分割データを格納してもよい。この場合、第２のメモリ内の格納場所が、送信データ用と受信データ用とで共通に用いられる。このため、送信データ用及び受信データ用にそれぞれ別の格納場所を設ける場合と比較して、第２のメモリの容量を低減することが可能となる。
【００１６】
送信データは、第１のメモリの回路情報が格納されている格納場所を示すアドレス情報を含んでもよい。この場合、アドレス情報によって示される格納場所から、回路情報を読み出すことができる。
【００１７】
マイクロコントローラは、第２のＤＭＡコントローラをさらに有してもよい。第２のＤＭＡコントローラは、第１のＤＭＡコントローラが第１のメモリに格納されている回路情報を第２のメモリに書き込む処理と並行して、第２のメモリに書き込まれた回路情報を第２の通信バスを介してロジックデバイスに送信してもよい。この場合、回路情報を第２のメモリから読み出してロジックデバイスに送信するのに要する時間を短縮することができる。また、第１のＤＭＡコントローラと第２のＤＭＡコントローラとによって、第２のメモリが共通に使用されているので、ロジックデバイスに送信するデータの格納場所を、さらに設ける必要が無い。このため、第２のメモリの容量を低減することが可能となる。
【００１８】
第２のメモリは、第１のメモリに格納されている回路情報を読み出すための送信データを格納していてもよい。第１のＤＭＡコントローラは、第２のメモリに格納されている送信データを読み出して、読み出した送信データを第１のメモリに送信する処理と、第１のメモリに格納されている回路情報を、所定のデータサイズの分割データごとに読み出して、読み出した分割データを第２のメモリに書き込む処理と、を第１の通信バスを介して並行して行ってもよい。第２のＤＭＡコントローラは、第１のＤＭＡコントローラによって第２のメモリに書き込まれた分割データを第２の通信バスを介してロジックデバイスに送信してもよい。この場合、第１のメモリへの送信データの送信と、第１のメモリからの分割データの読み出しとが、第１のＤＭＡコントローラによって並列して行われるので、マイクロコントローラと第１のメモリとの間のデータの送受信に要する時間をさらに短縮できる。
【００１９】
第１のＤＭＡコントローラは、第１のメモリに送信済みの送信データが格納されている第２のメモリの格納場所に、分割データを格納してもよい。第２のＤＭＡコントローラは、格納場所に分割データが格納された後、格納場所から分割データを読み出して、読み出した分割データをロジックデバイスに送信してもよい。この場合、第２のメモリ内の格納場所が、第１のＤＭＡコントローラの送信データ用及び受信データ用と、第２のＤＭＡコントローラの送信データ用と、で共通に用いられる。このため、第１のＤＭＡコントローラの送信データ用、受信データ用、及び第２のＤＭＡコントローラの送信データ用にそれぞれ別の格納場所を設ける場合と比較して、第２のメモリの容量を低減することが可能となる。
【００２０】
送信データは、第１のメモリの回路情報が格納されている格納場所を示すアドレス情報を含んでもよい。この場合、アドレス情報によって示される格納場所から、回路情報を読み出すことができる。
【００２１】
マイクロコントローラは、第３のメモリをさらに有してもよい。第３のメモリは、ファームウェアを格納してもよい。マイクロコントローラは、ファームウェアを実行することによって、第１のメモリに格納されている回路情報を読み出す処理と、読み出した回路情報をロジックデバイスに送信する処理と、更新用回路情報をホスト装置から受信する処理と、更新用回路情報を第１のメモリに書き込む処理と、を行ってもよい。この場合、ホスト装置が光送受信器に指示を行うことなく、マイクロコントローラのファームウェアによって、第１のメモリに格納されている回路情報を読み出す処理と、読み出した回路情報をロジックデバイスに送信する処理と、更新用回路情報をホスト装置から受信する処理と、更新用回路情報を第１のメモリに書き込む処理とを行うことができる。
【００２２】
本発明の別の態様に係るマイクロコントローラは、ＭＤＩＯインターフェースを介して外部のホスト装置と通信可能な光送受信器に搭載されるマイクロコントローラである。このマイクロコントローラは、ファームウェアを格納する不揮発性メモリを備え、光送受信器に搭載されているロジックデバイスの内部の回路の構成を指定する回路情報を格納する第１のメモリと第１の通信バスを介して接続されるとともに、ロジックデバイスと第２の通信バスを介して接続され、ファームウェアを実行することによって、第１のメモリに格納されている回路情報を第１の通信バスを介して読み出して、読み出した回路情報を第２の通信バスを介してロジックデバイスに送信する。
【００２３】
このマイクロコントローラでは、ファームウェアが実行されることによって、第１のメモリに格納されている回路情報が、第１の通信バスを介して読み出されて、第２の通信バスを介してロジックデバイスに送信される。このように、マイクロコントローラが、第１のメモリに格納されている回路情報を読み出してロジックデバイスに送信するので、ロジックデバイスが第１のメモリに接続されている必要が無い。このため、切替回路等を設ける必要が無いので、部品数の増加を抑えつつ、ロジックデバイスの回路情報を更新することが可能となる。
【００２４】
［本願発明の実施形態の詳細］
本発明の実施形態に係る光送受信器及びマイクロコントローラの具体例を、以下に図面を参照しつつ説明する。なお、本発明はこれらの例示に限定されるものではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
【００２５】
図１は、本発明の一実施形態に係る光送受信器である光トランシーバを模式的に示す構成図である。図１に示される光トランシーバ１は、ＭＤＩＯ（Management Data Input/Output）インターフェースを介して外部のホスト装置と通信可能な装置である。光トランシーバ１は、例えば、１００Ｇｂｐｓのフォームファクタの一つであるＣＦＰ  ＭＳＡ（100G Form-factor Pluggable Multi-Source Agreement）に準拠した光トランシーバである。ホスト装置は、上位監視装置であり、光トランシーバ１の監視及び制御を行う。光トランシーバ１は、不図示の光ファイバを介して別の光トランシーバと接続されている。光トランシーバ１は、コネクタ１１と、光送受信部１２と、ＦＰＧＡ１３（ロジックデバイス）と、マイクロコントローラ１４と、マイクロコントローラ１５と、メモリ１６（第１のメモリ）と、を備える。
【００２６】
コネクタ１１は、ホスト装置と電源線及び信号線等を相互に電気的に接続するためのコネクタである。コネクタ１１は、例えば、ＣＦＰ  ＭＳＡによって形状及び端子配置等の仕様が定められているコネクタである。光送受信部１２は、光トランシーバ１に接続された光ファイバを介して、別の光トランシーバと光信号を送受信する。光送受信部１２は、光源２１と、光分岐器２２と、光変調器２３と、光復調器２４と、を備えている。
【００２７】
光源２１は、例えばレーザダイオードである。光源２１は、光トランシーバ１が受信する光信号のキャリア周波数と略同じ周波数のローカル光を生成し、ローカル光を光分岐器２２に供給する。光分岐器２２は、例えばビームスプリッタであって、光源２１から供給されたローカル光を分岐し、分岐したローカル光を光変調器２３及び光復調器２４にそれぞれ供給する。なお、このような構成とは別に、２つの光源２１を用意して、それぞれの光源２１が光変調器２３と光復調器２４とに別々にローカル光を供給する構成としてもよい。
【００２８】
光変調器２３は、ＦＰＧＡ１３から受け取った電気信号を光信号に変換する。光変調器２３は、光分岐器２２から供給されたローカル光を電気信号に応じて変調することにより、電気信号を光信号に変換する。光変調器２３は、光信号を光ファイバを介して別の光トランシーバに送信する。光復調器２４は、光ファイバを介して受信した光信号を復調して電気信号に変換する。光復調器２４は、光分岐器２２から供給されたローカル光を、光信号と干渉させ、干渉によって生成された光信号を電気信号に変換する。光復調器２４は、変換した電気信号をＦＰＧＡ１３に出力する。送信光に変換される電気信号及び受信光から変換される電気信号のそれぞれがコネクタ１１と光送受信部１２との間をＦＰＧＡ１３を介して伝達する経路を、ここでは主信号系と呼ぶ。
【００２９】
ＦＰＧＡ１３は、コンフィグレーションデータ（回路情報）に基づいて内部の回路の構成が変更可能なロジックデバイスである。コンフィグレーションデータは、ＦＰＧＡ１３の内部の回路構成を指定するデータである。ＦＰＧＡ１３は、光トランシーバ１の起動時にマイクロコントローラ１４からコンフィグレーションデータを受信し、コンフィグレーションデータに基づいてコンフィグレーションを行う。このときに、ＦＰＧＡ１３は、受信したコンフィグレーションデータを内部の所定の場所（揮発性メモリ）に格納する。光トランシーバ１の電源が遮断されると、内部に格納したコンフィグレーションデータは消失するので、コンフィグレーションデータの受信はＦＰＧＡ１３が起動する度に毎回行われる。ＦＰＧＡ１３は、例えば、ＳＥＲＤＥＳ（SERializer/DESerializer）の機能を有している。ＦＰＧＡ１３は、ホスト装置からパラレルデータである送信データを受信し、シリアルデータに変換して電気信号として光変調器２３に出力する。ＦＰＧＡ１３は、光復調器２４からシリアルデータの電気信号を受信し、パラレルデータに変換して受信データとしてホスト装置に送信する。なお、ここでいうパラレルデータとシリアルデータとは、信号線の本数と信号線１本当たりの伝送速度との相対的な違いを表している。詳細には、パラレルデータの信号線の本数がＭ（Ｍは２以上の整数）で信号線１本当たりの伝送速度をＰ（ｂｐｓ）とした場合に、シリアルデータの信号線の本数はＮ（Ｎは１≦Ｎ＜Ｍの整数）で信号線１本当たりの伝送速度はＱ＝Ｐ×（Ｍ／Ｎ）（ｂｐｓ）という関係を満たす。
【００３０】
ＦＰＧＡ１３のコンフィグレーションデータは、更新されることがある。例えば、ＦＰＧＡ１３がデジタルコヒーレント伝送方式におけるデジタル信号処理を行う場合、性能向上を目的とした信号処理アルゴリズムの変更のためにコンフィグレーションデータが更新される。また、光トランシーバ１の高機能化を目的として、ＦＰＧＡ１３に機能を付加するためにコンフィグレーションデータが更新されることがある。更新のためのコンフィグレーションデータは、光トランシーバ１がホスト装置に組み込まれた状態で監視制御系を介してホスト装置から受信できるようにすることで、光トランシーバ１の利便性が向上する。
【００３１】
ホスト装置による光トランシーバ１の監視及び制御を可能にするために、マイクロコントローラ１４は、ホスト装置とＭＤＩＯ通信を行う。マイクロコントローラ１４は、メモリ１６と通信バスＳＢ１（第１の通信バス）を介して接続されるとともに、ＦＰＧＡ１３と通信バスＳＢ２（第２の通信バス）を介して接続されている。通信バスＳＢ１は、ＳＰＩバスである。通信バスＳＢ２は、ＦＰＧＡ１３をコンフィグレーションすることが可能な専用バスである。通信バスＳＢ２は、例えば、クロック信号線及びデータ信号線を有する。マイクロコントローラ１４の通信バスＳＢ２に接続されるインターフェース回路としては、例えば、標準的なＳＰＩ回路が用いられる。この場合、例えば、ＣＳ（Chip Select）信号線、ＳＣＫ（Serial Clock）信号線、ＭＯＳＩ（Master Out Slave In）信号線、及びＭＩＳＯ（Master InSlave Out）信号線のＳＰＩバスを構成する４つの信号線のうち、ＳＣＫ信号線及びＭＯＳＩ信号線がＦＰＧＡ１３に接続される。通信インターフェースの電気的な仕様、及びプロトコル等がＦＰＧＡ１３とマイクロコントローラ１４との間で予め定められていれば、通信バスＳＢ２として他のシリアル通信方式が用いられてもよい。
【００３２】
マイクロコントローラ１４は、光トランシーバ１が起動するときに、メモリ１６に格納されているコンフィグレーションデータを通信バスＳＢ１を介して読み出し、読み出したコンフィグレーションデータを通信バスＳＢ２を介してＦＰＧＡ１３に送信する。具体的には、光トランシーバ１の電源がオンになり、光トランシーバ１の起動処理中にマイクロコントローラ１４はクロック信号及びコンフィグレーションデータ（シリアル通信データ）をＦＰＧＡ１３に出力し、ＦＰＧＡ１３がクロック信号に同期してデータ信号線を介してシリアル通信データを読み込む。これにより、ＦＰＧＡ１３は、初期化される。
【００３３】
マイクロコントローラ１４は、光トランシーバ１をアップグレードするときに、アップグレードデータをＭＤＩＯインターフェースを介してホスト装置から受信し、受信したアップグレードデータを通信バスＳＢ１を介してメモリ１６に書き込む。アップグレードデータは、更新用のコンフィグレーションデータ及び更新用のファームウェアを含む。マイクロコントローラ１４は、メモリ１６に格納された更新用のファームウェアを通信バスＳＢ１を介して読み出し、マイクロコントローラ１４のファームウェアを書き換える。マイクロコントローラ１４は、メモリ１６に格納された更新用のコンフィグレーションデータを通信バスＳＢ１を介して読み出し、読み出したコンフィグレーションデータを通信バスＳＢ２を介してＦＰＧＡ１３に送信する。これにより、ＦＰＧＡ１３は再コンフィグレーションされる。マイクロコントローラ１４は、ＤＭＡ機能を有し、上述のデータの送受信をＤＭＡ転送によって行う。また、メモリ１６は、光トランシーバ１の電源が遮断されている間も書き込まれたアップグレードデータを保持し続ける。メモリ１６の作用の詳細については後述する。
【００３４】
なお、ＦＰＧＡ１３のコンフィグレーションデータだけが更新されることもある。この場合には、マイクロコントローラ１４は、更新用のコンフィグレーションデータをＭＤＩＯインターフェースを介してホスト装置から受信し、受信した更新用のコンフィグレーションデータを通信バスＳＢ１を介してメモリ１６に書き込むことによって、コンフィグレーションデータを更新用のコンフィグレーションデータに書き換える。
【００３５】
マイクロコントローラ１４は、ファームウェアで動作する。つまり、マイクロコントローラ１４は、ファームウェアを実行することによって、メモリ１６に格納されているコンフィグレーションデータを読み出す処理と、読み出したコンフィグレーションデータをＦＰＧＡ１３に送信する処理と、更新用のコンフィグレーションデータを含むアップグレードデータをホスト装置から受信する処理と、アップグレードデータをメモリ１６に書き込む処理と、を行う。マイクロコントローラ１４の詳細構成は後述する。
【００３６】
マイクロコントローラ１５は、光ファイバを介した光通信を監視及び制御する。具体的には、マイクロコントローラ１５は、ＦＰＧＡ１３、光源２１、光変調器２３、及び光復調器２４を監視及び制御する。なお、光通信の監視及び制御を行いつつ並行して光トランシーバ１と接続されるホスト装置とのＭＤＩＯ通信に応答するために、マイクロコントローラ１４及びマイクロコントローラ１５が設けられているが、マイクロコントローラ１４及びマイクロコントローラ１５は、１つのマイクロコントローラであってもよい。
【００３７】
メモリ１６は、格納されているデータの書き換えが可能な不揮発性の記憶素子であり、例えば、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read-Only Memory）及びフラッシュＲＯＭ（Read Only Memory）等の不揮発性メモリである。メモリ１６は、ＦＰＧＡ１３のコンフィグレーションデータと、光トランシーバ１のアップグレードデータと、を格納する。マイクロコントローラ１４，１５、及びメモリ１６は、ＦＰＧＡ１３及び光送受信部１２によって構成される主信号系の監視及び制御を行うための監視制御部（監視制御系）を構成する。なお、図１には示されていないが、内部電源電圧の生成及び制御、並びに温度を監視するためのアナログ回路等も監視制御系に含まれる場合がある。
【００３８】
図２は、メモリ１６（第１のメモリ）に格納されるデータの構成を示す図である。図２に示されるように、メモリ１６は、領域Ｒ１と、領域Ｒ２と、領域Ｒ３と、を有している。領域Ｒ１は、ＦＰＧＡ１３の更新用のコンフィグレーションデータを格納するための領域である。領域Ｒ２は、ＦＰＧＡ１３の更新前のコンフィグレーションデータを格納するための領域である。領域Ｒ３は、マイクロコントローラ１４の更新用のファームウェアを格納するための領域である。なお、ここでは説明を簡易化するために領域Ｒ１〜Ｒ３についてのみ図示しているが、メモリ１６はさらに別の領域を含んでいてもよい。
【００３９】
光トランシーバ１のアップグレード時に、マイクロコントローラ１４によってホスト装置から受信されたアップグレードデータは、メモリ１６に格納される。具体的には、アップグレードデータのうちの更新用のコンフィグレーションデータは、領域Ｒ１に格納され、アップグレードデータのうちの更新用のファームウェアは、領域Ｒ３に格納される。このとき、領域Ｒ１にコンフィグレーションデータが格納される前に、更新前のコンフィグレーションデータが領域Ｒ２に格納される。
【００４０】
光トランシーバ１を起動するごとに、ＦＰＧＡ１３にコンフィグレーションデータが書き込まれる必要があるので、領域Ｒ１又は領域Ｒ２の少なくともいずれかには、更新中を除いて常に完全な状態のコンフィグレーションデータが格納されている。例えば、光トランシーバ１が高速大容量の基幹通信に使用される場合等には、更新後のコンフィグレーションデータに何らかの問題が生じた場合に備えて、領域Ｒ２に更新前のコンフィグレーションデータが格納されている。領域Ｒ１に格納されている更新用のコンフィグレーションデータと領域Ｒ２に格納されている更新前のコンフィグレーションデータとは、必要に応じて切り替えて用いられる。これにより、光トランシーバ１が通信不能となることが低減される。領域Ｒ３は、マイクロコントローラ１４のファームウェアを更新する際に一時的に更新用のファームウェアを格納するために使用されるが、光トランシーバ１の通常動作時には使用されない。なお、コンフィグレーションデータはある程度の大きさ（データサイズ）を持っているので、マイクロコントローラ１４がホスト装置からコンフィグレーションデータの全部を受信するまでにはある程度の時間を必要とする。例えば、マイクロコントローラ１４がホスト装置からコンフィグレーションデータを受信している間に、光トランシーバ１の電源が遮断されると、領域Ｒ１に格納されているコンフィグレーションデータは途中まで書き換えられた不完全な状態となる場合がある。上記の完全な状態のコンフィグレーションデータとは、コンフィグレーションデータの全部が正常に正しく書き換えられた状態にあることを意味する。
【００４１】
続いて、マイクロコントローラ１４の詳細構成について説明する。図３は、マイクロコントローラ１４のハードウェア構成図である。図３に示されるように、マイクロコントローラ１４は、ＣＰＵコア４１と、ＲＡＭ（Random Access Memory）４２（第２のメモリ）と、フラッシュＲＯＭ４３（第３のメモリ、不揮発性メモリ）と、ＤＭＡＣ４４（第１のＤＭＡコントローラ）と、ＳＰＩ回路４５と、Ｉ２Ｃ（Inter-Integrated Circuit）回路４６と、その他の周辺インターフェース回路４７と、を備えている。
【００４２】
ＣＰＵコア４１は、プログラムを実行する命令実行ユニットである。ＲＡＭ４２は、格納されているデータの書き換えが可能であって、処理中のデータを一時的に格納する記憶素子である。ＲＡＭ４２は、ＤＭＡバッファとしても機能する。ＲＡＭ４２では、送信用の送信ＤＭＡバッファ及び受信用の受信ＤＭＡバッファにそれぞれ記憶領域が割り当てられてもよく、送信ＤＭＡバッファ及び受信ＤＭＡバッファに共通の記憶領域が割り当てられてもよい。メモリ１６からコンフィグレーションデータを読み出す前に、ＣＰＵコア４１によって、ＲＡＭ４２の送信ＤＭＡバッファに、メモリ１６に格納されているコンフィグレーションデータを読み出すためのデータ（送信データ）が格納される。このデータは、メモリ１６のコンフィグレーションデータが格納されている格納場所を示すアドレス情報を含んでいる。送信ＤＭＡバッファ及び受信ＤＭＡバッファは、コンフィグレーションデータのデータサイズより小さくてもよい。
【００４３】
フラッシュＲＯＭ４３は、格納されているデータの書き換えが可能な不揮発性の記憶素子であり、マイクロコントローラ１４のファームウェアを格納している。
【００４４】
ＤＭＡＣ４４は、ＣＰＵコア４１が介在することなく、ＲＡＭ４２とＳＰＩ回路４５との間のデータの送受信（ＤＭＡ転送）を直接行うコントローラである。ＤＭＡＣ４４は、光トランシーバ１が起動するときに、メモリ１６に格納されているコンフィグレーションデータを通信バスＳＢ１を介して読み出して、読み出したコンフィグレーションデータをＲＡＭ４２に書き込む。具体的には、ＤＭＡＣ４４は、ＲＡＭ４２に格納されている送信データを読み出して、読み出した送信データをメモリ１６に送信する処理と、メモリ１６に格納されているコンフィグレーションデータを、所定のデータサイズの分割データごとに読み出して、読み出した分割データをＲＡＭ４２に書き込む処理と、を通信バスＳＢ１を介して並行して行う。
【００４５】
ＲＡＭ４２において、送信ＤＭＡバッファ及び受信ＤＭＡバッファに共通の領域が割り当てられている場合、ＤＭＡＣ４４は、メモリ１６に送信済みの送信データが格納されているＲＡＭ４２のアドレスに、分割データを格納する。ＤＭＡＣ４４は、ＤＭＡディスクリプタに基づいて、ＤＭＡ転送を行う。ＤＭＡディスクリプタは、ＣＰＵコア４１によって設定される。
【００４６】
図４は、ＤＭＡディスクリプタの一例を示す図である。図４に示されるように、ＤＭＡディスクリプタ３０は、送信側の設定項目３１と、受信側の設定項目３２と、を含む。設定項目３１は、転送元アドレス３１１と、転送元アドレスの増加有無情報３１２と、転送先アドレス３１３と、転送先アドレスの増加有無情報３１４と、転送データ長３１５と、ＤＭＡ有効情報３１６と、を含む。
【００４７】
転送元アドレス３１１は、ＤＭＡＣ４４がデータを読み出す格納場所を示すアドレスである。増加有無情報３１２は、１回のＤＭＡ転送ごとに転送元アドレスを増加させるかどうかを示す情報である。転送先アドレス３１３は、読み出したデータをＤＭＡＣ４４が書き込む格納場所を示すアドレスである。増加有無情報３１４は、１回のＤＭＡ転送ごとに転送先アドレスを増加させるかどうかを示す情報である。転送データ長３１５は、ＤＭＡ転送の総データ長であり、ＤＭＡ転送を繰り返す回数ともいえる。ＤＭＡ有効情報３１６は、設定項目３１でＤＭＡ転送を行うか否かを示す情報である。設定項目３２も同様に、転送元アドレス３２１、転送元アドレスの増加有無情報３２２、転送先アドレス３２３、転送先アドレスの増加有無情報３２４、転送データ長３２５及びＤＭＡ有効情報３２６を含む。
【００４８】
ＳＰＩ回路４５は、通信バスＳＢ１を介してメモリ１６に接続されており、ＳＰＩ通信によってメモリ１６とデータの送受信を行う回路である。図５に示されるように、ＳＰＩ回路４５は、ＣＳ信号をアサートして（ＳＰＩ通信の開始をメモリ１６に知らせるためにＣＳ信号の信号レベルをローレベルにする）から、ＳＣＫ信号のクロックパルスに同期して、１バイト（８ビット）のコマンドと、３バイト（２４ビット）のアドレスと、を順にＭＯＳＩ信号としてメモリ１６に送信する。そして、ＳＰＩ回路４５は、さらにＳＣＫ信号を出力し続けることにより、ＳＣＫ信号のクロックパルスに同期して、メモリ１６の指定したアドレスからデータを読み出す。ＳＰＩ回路４５は、所望のバイト数のデータを読み出すとＳＣＫ信号を停止し、ＣＳ信号をデアサートする（ＳＰＩ通信を終了するためにＣＳ信号の信号レベルをハイレベルにする）。
【００４９】
例えば、１０バイトのデータをメモリ１６から読み出す場合、ＳＰＩ回路４５は、１バイトのコマンド及び３バイトのアドレスを送信し、続けて１０バイトのデータを受信する。ＳＰＩバスでは、データの送受信が同時に行われるので、全体で１４バイトのデータが送受信される。このとき、送信データの５バイト目以降はメモリ１６において無視されるので、任意の値でよい。同様に、受信データの４バイト目までは、ＳＰＩ回路４５において破棄されるので、ダミーの受信データとなる。
【００５０】
Ｉ２Ｃ回路４６は、Ｉ２Ｃ通信によって他のＩＣ等とデータの送受信を行う回路である。周辺インターフェース回路４７は、所定の通信によって他のＩＣ等とデータの送受信を行う回路である。なお、本実施形態では、周辺インターフェース回路４７は、通信バスＳＢ２を介してＦＰＧＡ１３に接続されている。周辺インターフェース回路４７は、ＤＭＡＣ４４によってＲＡＭ４２に書き込まれたコンフィグレーションデータを、通信バスＳＢ２を介してＦＰＧＡ１３に送信する。周辺インターフェース回路４７は、ＳＰＩ回路であってもよい。
【００５１】
ＣＰＵコア４１、ＲＡＭ４２、フラッシュＲＯＭ４３、ＤＭＡＣ４４、ＳＰＩ回路４５、Ｉ２Ｃ回路４６、及びその他の周辺インターフェース回路４７は、内部バスＢに接続されており、内部バスＢを介して互いに通信可能である。より具体的には、内部バスＢに接続されたそれぞれのユニット（構成要素）には内部バスＢ上で指定可能な各ユニットに固有のアドレス領域が割り当てられており、アドレスを指定することでそのアドレスを含むアドレス領域が割り当てられたユニットと特定のデータの読み出し又は書き込みを行うことができる。
【００５２】
続いて、ＳＰＩ回路４５の詳細構成について説明する。図６は、ＳＰＩ回路４５のハードウェア構成図である。図６に示されるように、ＳＰＩ回路４５は、制御回路５１と、送信データレジスタ５２と、送信シフトレジスタ５３と、受信データレジスタ５４と、受信シフトレジスタ５５と、を備えている。
【００５３】
制御回路５１は、ＳＰＩ通信を制御する回路であり、ＣＳ信号及びＳＣＫ信号を出力する。制御回路５１は、ＣＳ信号及びＳＣＫ信号を通信バスＳＢ１に出力し、ＳＣＫ信号を送信シフトレジスタ５３及び受信シフトレジスタ５５に出力する。
【００５４】
送信データレジスタ５２は、送信データを格納するレジスタである。送信データレジスタ５２は、内部バスＢに接続されており、内部バスＢを介して送信データレジスタ５２への送信データの書き込みが行われ得る。送信データレジスタ５２には、予め設定された内部バスＢ上のアドレスが割り当てられている。ＣＰＵコア４１及びＤＭＡＣ４４は、内部バスＢ上で送信データレジスタ５２に割り当てられているアドレスを指定することにより、送信データレジスタ５２にデータを書き込む。
【００５５】
送信データレジスタ５２は、送信データなし通知信号をＤＭＡＣ４４に出力している。送信データレジスタ５２は、送信シフトレジスタ５３に格納されている有効な送信データを送信シフトレジスタ５３に出力すると、送信データなし通知信号を送信データがないことを示す状態にセット（アサート）する。これにより、送信データレジスタ５２に送信データを書き込むことが可能であることがＤＭＡＣ４４に通知される。送信データレジスタ５２は、送信データが書き込まれると、送信データなし通知信号を送信データがあることを示す状態にセット（デアサート）する。送信シフトレジスタ５３は、ＳＣＫ信号に基づいて、格納している送信データを１ビットずつＭＯＳＩ信号として通信バスＳＢ１に出力する。
【００５６】
受信シフトレジスタ５５は、ＳＣＫ信号に基づいて、通信バスＳＢ１を介してＭＩＳＯデータを受信データとして１ビットずつ受信し、受信データを格納する。受信シフトレジスタ５５は、所定のビット数の受信データを受信すると、格納している受信データを受信データレジスタ５４に出力する。受信データレジスタ５４は、受信データを格納するレジスタである。受信データレジスタ５４は、内部バスＢに接続されており、内部バスＢを介して受信データレジスタ５４から受信データの読み出しが行われ得る。受信データレジスタ５４には、予め設定された内部バスＢ上のアドレスが割り当てられている。ＣＰＵコア４１及びＤＭＡＣ４４は、内部バスＢ上で受信データレジスタ５４に割り当てられているアドレスを指定することにより、受信データレジスタ５４からデータを読み出す。
【００５７】
受信データレジスタ５４は、受信データあり通知信号をＤＭＡＣ４４に出力している。受信データレジスタ５４は、受信シフトレジスタ５５から受信データを受け取ると、受信データあり通知信号を受信データがあることを示す状態にセット（アサート）する。これにより、受信データレジスタ５４から受信データを読み出すことが可能であることがＤＭＡＣ４４に通知される。受信データレジスタ５４は、格納している受信データが読み出されると、受信データあり通知信号を受信データがないことを示す状態にセット（デアサート）する。
【００５８】
ＳＰＩ回路４５では、マイクロコントローラ１４が起動した直後には、送信データレジスタ５２、送信シフトレジスタ５３、受信データレジスタ５４及び受信シフトレジスタ５５は有効なデータを格納していない。この状態では、送信データレジスタ５２は、送信データなし通知信号をアサートし、受信データレジスタ５４は、受信データあり通知信号をデアサートしている。
【００５９】
続いて、図４、及び図６〜図８を参照して、マイクロコントローラ１４がＤＭＡ転送によってメモリ１６からデータを読み出す動作について説明する。図７は、ＳＰＩ回路４５の動作を示すタイミングチャートであり、図７の（ａ）は通信バスＳＢ１上の信号のタイミングチャート、図７の（ｂ）はデータ送信に関するタイミングチャート、図７の（ｃ）はデータ受信に関するタイミングチャートである。図８は、ＤＭＡＣによるデータの送受信を説明するための図である。メモリ１６から読み出されるデータとしては、例えば、コンフィグレーションデータ及びファームウェアがある。これらのデータは、所定のデータサイズに分割されて、分割データとしてメモリ１６から順に読み出される。
【００６０】
この読み出し動作において、マイクロコントローラ１４の内部では、１つのＤＭＡＣ４４が、ＲＡＭ４２の送信ＤＭＡバッファ６１から送信データレジスタ５２に送信データを転送するとともに、受信データレジスタ５４からＲＡＭ４２の受信ＤＭＡバッファ６２に受信データを転送する。なお、送信ＤＭＡバッファ６１には、データの格納場所を示すアドレスＡｓ０，Ａｓ１，…が割り当てられている。受信ＤＭＡバッファ６２には、データの格納場所を示すアドレスＡｒ０，Ａｒ１，…が割り当てられている。
【００６１】
このＤＭＡ転送を行うために、ＣＰＵコア４１は、送信ＤＭＡバッファ６１のアドレスＡｓ０にコマンド「０ｘ０３」（送信データＤＴ１）、続くアドレスＡｓ１〜Ａｓ３にメモリ１６のアドレス「０ｘ０１」、「０ｘ２３」、「０ｘ４５」（送信データＤＴ２〜ＤＴ４）を格納する。なお、送信ＤＭＡバッファ６１のアドレスＡｓ４以降には、無効なデータである「０ｘＦＦ」が格納されている。そして、ＣＰＵコア４１は、ＤＭＡディスクリプタ３０を準備する。ＣＰＵコア４１は、ＲＡＭ４２の送信ＤＭＡバッファ６１から送信データレジスタ５２に送信データを転送するために、設定項目３１を設定し、受信データレジスタ５４からＲＡＭ４２の受信ＤＭＡバッファ６２に受信データを転送するために、設定項目３２を設定する。
【００６２】
具体的には、ＣＰＵコア４１は、転送元アドレス３１１に送信ＤＭＡバッファ６１のアドレスＡｓ０を設定し、増加有無情報３１２に「増加有」を示す値を設定し、転送先アドレス３１３に送信データレジスタ５２のアドレスを設定し、増加有無情報３１４に「増加無」を示す値を設定し、転送データ長３１５に送受信するデータのデータ長を設定する。ＣＰＵコア４１は、転送元アドレス３２１に受信データレジスタ５４のアドレスを設定し、増加有無情報３２２に「増加無」を示す値を設定し、転送先アドレス３２３に受信ＤＭＡバッファ６２のアドレスＡｒ０を設定し、増加有無情報３２４に「増加有」を示す値を設定し、転送データ長３２５に送受信するデータのデータ長を設定する。
【００６３】
ＣＰＵコア４１は、上記設定を行った後、ＤＭＡ有効情報３１６及びＤＭＡ有効情報３２６に「有効」を示す値を設定する。ＤＭＡ転送が有効になると、ＤＭＡＣ４４は、送信データなし通知信号がアサートされているので、転送元アドレス３１１で指定されたＲＡＭ４２上の送信ＤＭＡバッファ６１のアドレスＡｓ０から１バイトの送信データＤＴ１を読み出す。増加有無情報３１２が「増加有」を示す値に設定されているので、転送元アドレスは１バイト分増加され、アドレスＡｓ１となる。
【００６４】
そして、ＤＭＡＣ４４は、読み出した送信データＤＴ１を、転送先アドレス３１３で指定された送信データレジスタ５２に書き込む。増加有無情報３１４は「増加無」を示す値に設定されているので、転送先アドレスは増加されず、次のＤＭＡ転送でも送信データレジスタ５２が転送先に指定される。そして、送信データレジスタ５２に送信データＤＴ１が書き込まれると、送信データなし通知信号がデアサートされ、その後、送信データレジスタ５２に書き込まれた送信データＤＴ１は送信シフトレジスタ５３に転送される。これにより、送信データレジスタ５２には有効なデータが無くなる（空になる）ので、送信データレジスタ５２は、送信データなし通知信号を再びアサートする。これにより、次の送信データを送信データレジスタ５２に書き込み可能であることがＤＭＡＣ４４に通知される。
【００６５】
また、送信シフトレジスタ５３に送信データＤＴ１が転送されることによって、制御回路５１は、ＣＳ信号をアサートし、ＳＣＫ信号の出力を開始する。このＳＣＫ信号に同期して、送信シフトレジスタ５３から送信データＤＴ１が１ビットずつＭＯＳＩ信号として出力され、メモリ１６に送信される。送信データＤＴ１が通信バスＳＢ１を介してメモリ１６に送信されることと並行して、受信シフトレジスタ５５には、通信バスＳＢ１を介してメモリ１６から受信データＤＲ１が読み出される。具体的には、通信バスＳＢ１のＭＩＳＯ信号が受信データＤＲ１として受信シフトレジスタ５５に取り込まれる。
【００６６】
このとき、ＤＭＡＣ４４によって、送信データレジスタ５２に次の送信データＤＴ２が書き込まれると、送信データレジスタ５２は、送信データなし通知信号をデアサートする。しかし、送信シフトレジスタ５３は、前回の送信データＤＴ１を出力している途中であるので、送信データレジスタ５２に書き込まれた送信データＤＴ２は、送信シフトレジスタ５３には転送されない。
【００６７】
そして、メモリ１６に１バイトの送信データＤＴ１が送信されると、受信シフトレジスタ５５には１バイトの受信データＤＲ１が取り込まれているので、受信シフトレジスタ５５に取り込まれた受信データＤＲ１が受信データレジスタ５４に転送され、受信データレジスタ５４は、受信データあり通知信号をアサートする。このとき、送信シフトレジスタ５３には有効なデータが無いので、送信データレジスタ５２に書き込まれた送信データＤＴ２は、送信シフトレジスタ５３に転送される。送信シフトレジスタ５３に送信データが転送されることによって、制御回路５１は、さらにＳＣＫ信号を出力する。このＳＣＫ信号に同期して、送信シフトレジスタ５３から送信データＤＴ２が１ビットずつＳＰＩバスのＭＯＳＩ信号として出力され、並行してＳＰＩバスのＭＩＳＯ信号が次の受信データＤＲ２として受信シフトレジスタ５５に取り込まれる。
【００６８】
ＤＭＡＣ４４は、受信データあり通知信号がアサートされると、転送元アドレス３２１で指定された受信データレジスタ５４から１バイトの受信データＤＲ１を読み出す。増加有無情報３２２が「増加無」を示す値に設定されているので、転送元アドレスは増加されず、次のＤＭＡ転送でも受信データレジスタ５４が転送元に指定される。そして、ＤＭＡＣ４４は、読み出した受信データＤＲ１を、転送先アドレス３２３で指定されたＲＡＭ４２上の受信ＤＭＡバッファ６２のアドレスＡｒ０に書き込む。増加有無情報３２４が「増加有」を示す値に設定されているので、転送先アドレスは１バイト分増加され、アドレスＡｒ１となる。
【００６９】
このようにして、ＲＡＭ４２上の送信ＤＭＡバッファ６１から１バイトずつ送信データがメモリ１６に送信され、転送データ長３１５で指定された転送データ長だけＤＭＡ転送が繰り返される。同様に、メモリ１６から１バイトずつ受信データが読み出されて、ＲＡＭ４２上の受信ＤＭＡバッファ６２に送信され、転送データ長３２５で指定された転送データ長だけＤＭＡ転送が繰り返される。
【００７０】
そして、転送データ長３１５で指定された転送データ長の送信データを送信し、転送データ長３２５で指定された転送データ長の受信データを受信し終わると、制御回路５１は、ＳＣＫ信号の出力を停止し、ＣＳ信号をデアサートする。これにより、マイクロコントローラ１４がＤＭＡ転送を用いてメモリ１６からデータを読み出す動作が終了する。このようにして、ＣＰＵコア４１が介在することなく、メモリ１６からデータが読み出される。
【００７１】
なお、送信ＤＭＡバッファ６１から読み出したデータ（送信データ）の送信データレジスタ５２への書き込みは、内部バスＢを介して行われる。送信シフトレジスタ５３からメモリ１６への送信データの送信は、通信バスＳＢ１を介して行われる。ここで、例えば、通信バスＳＢ１の最大データ伝送速度が２０Ｍｂｐｓで、内部バスＢの最大データ伝送速度が３２０Ｍｂｐｓ（１６ビットのパラレルデータ伝送をクロック周波数２０ＭＨｚで行うことを想定）であるとすると、送信シフトレジスタ５３からメモリ１６への送信データの送信よりも送信ＤＭＡバッファ６１から読み出したデータの送信データレジスタ５２への書き込みの方が速いので、送信データレジスタ５２から送信シフトレジスタ５３への次の送信データの転送は、その前の送信シフトレジスタ５３からメモリ１６への送信データの送信が終わるまで待たされる。
【００７２】
したがって、送信シフトレジスタ５３からメモリ１６への送信データの送信を行っている間に、ＤＭＡＣ４４は、送信ＤＭＡバッファ６１から送信データを読み出し、送信データレジスタ５２に書き込む処理と、受信データレジスタ５４から受信データを読み出し、受信ＤＭＡバッファ６２に書き込む処理と、を順に行うことができる。内部バスＢを介したデータ転送は、通信バスＳＢ１を介したデータ転送よりも高速に行われるので、送信ＤＭＡバッファ６１から送信データを読み出し、送信データレジスタ５２に書き込む処理と、受信データレジスタ５４から受信データを読み出し、受信ＤＭＡバッファ６２に書き込む処理と、は並行して行われると説明することがある。
【００７３】
ＳＰＩ通信ではデータの送受信が同時に行われるが、送信データは、ＳＰＩ回路４５から送信される前に送信ＤＭＡバッファ６１から読み出される。一方、受信データは、ＳＰＩ回路４５によって受信されてから受信ＤＭＡバッファ６２に格納される。このため、送信ＤＭＡバッファ６１と受信ＤＭＡバッファ６２とを１つの共用ＤＭＡバッファとすることが可能である。次に、図９〜図１３を参照して、共用ＤＭＡバッファを用いて、マイクロコントローラ１４がＤＭＡ転送によってメモリ１６からデータを読み出す動作について説明する。なお、データの流れに着目して説明し、送信データなし通知信号及び受信データあり通知信号等の説明は省略している。メモリ１６は、１〜４バイト目までダミーデータとして「０ｘＡＢ」、「０ｘＣＤ」、「０ｘＡＢ」、及び「０ｘＣＤ」を送信することとする。共用ＤＭＡバッファ６０には、データの格納場所を示すアドレスＡ０，Ａ１，…が割り当てられている。
【００７４】
ＤＭＡ転送を行うために、ＣＰＵコア４１は、共用ＤＭＡバッファ６０のアドレスＡ０にコマンド「０ｘ０３」、続くアドレスＡ１〜Ａ３にメモリ１６のアドレスを示す「０ｘ０１」、「０ｘ２３」、「０ｘ４５」を格納する。なお、共用ＤＭＡバッファ６０のアドレスＡ４以降には、無効なデータである「０ｘＦＦ」が格納されている。そして、ＣＰＵコア４１は、ＤＭＡディスクリプタ３０を準備する。
【００７５】
具体的には、ＣＰＵコア４１は、転送元アドレス３１１に共用ＤＭＡバッファ６０のアドレスＡ０を設定し、増加有無情報３１２に「増加有」を示す値を設定し、転送先アドレス３１３に送信データレジスタ５２のアドレスを設定し、増加有無情報３１４に「増加無」を示す値を設定し、転送データ長３１５に送受信するデータのデータ長を設定する。ＣＰＵコア４１は、転送元アドレス３２１に受信データレジスタ５４のアドレスを設定し、増加有無情報３２２に「増加無」を示す値を設定し、転送先アドレス３２３に共用ＤＭＡバッファ６０のアドレスＡ０を設定し、増加有無情報３２４に「増加有」を示す値を設定し、転送データ長３２５に送受信するデータのデータ長を設定する。
【００７６】
ＣＰＵコア４１は、上記設定を行った後、ＤＭＡ有効情報３１６及びＤＭＡ有効情報３２６に「有効」を示す値を設定する。
【００７７】
そして、図９に示されるように、ＤＭＡＣ４４は、共用ＤＭＡバッファ６０のアドレスＡ０から１バイトの送信データ「０ｘ０３」を読み出し、送信データ「０ｘ０３」を送信データレジスタ５２に書き込む。送信データレジスタ５２に送信データ「０ｘ０３」が書き込まれると、送信データレジスタ５２は、送信シフトレジスタ５３に送信データ「０ｘ０３」を転送する。そして、図１０に示されるように、制御回路５１はＣＳ信号をアサートしてから、ＳＣＫ信号を出力することによって、送信シフトレジスタ５３からＭＯＳＩ信号として送信データ「０ｘ０３」が出力されるとともに、ＭＩＳＯ信号から受信データ「０ｘＡＢ」が受信シフトレジスタ５５に取り込まれる。
【００７８】
そして、図１１に示されるように、１バイトの通信が完了した時点で、受信シフトレジスタ５５に取り込まれた受信データ「０ｘＡＢ」を受信データレジスタ５４に転送する。そして、ＤＭＡＣ４４は、受信データレジスタ５４から受信データ「０ｘＡＢ」を読み出して、共用ＤＭＡバッファ６０のアドレスＡ０に書き込み、続いて共用ＤＭＡバッファ６０のアドレスＡ１から次の送信データ「０ｘ０１」を読み出して、送信データレジスタ５２に書き込む。このとき、共用ＤＭＡバッファ６０のアドレスＡ０には、送信済みの送信データが格納されていたので、受信データを書き込んでも未送信データが上書きされることはない。
【００７９】
送信データレジスタ５２に送信データ「０ｘ０１」が書き込まれると、送信データレジスタ５２は、送信シフトレジスタ５３に送信データ「０ｘ０１」を転送する。そして、図１２に示されるように、制御回路５１はＣＳ信号をアサートした状態で、ＳＣＫ信号をさらに出力することによって、送信シフトレジスタ５３からＭＯＳＩ信号として送信データ「０ｘ０１」が出力されるとともに、ＭＩＳＯ信号から受信データ「０ｘＣＤ」が受信シフトレジスタ５５に取り込まれる。
【００８０】
そして、図１３に示されるように、１バイトの通信が完了した時点で、受信シフトレジスタ５５に取り込まれた受信データ「０ｘＣＤ」を受信データレジスタ５４に転送する。そして、ＤＭＡＣ４４は、受信データレジスタ５４から受信データ「０ｘＣＤ」を読み出して、共用ＤＭＡバッファ６０のアドレスＡ１に書き込み、続いて共用ＤＭＡバッファ６０のアドレスＡ２から次の送信データ「０ｘ２３」を読み出して、送信データレジスタ５２に書き込む。
【００８１】
以上のように、ＲＡＭ４２の同一の格納領域を送信ＤＭＡバッファ及び受信ＤＭＡバッファとして共用しても、受信データは送信済みの送信データが格納されているアドレスに書き込まれる。このため、送信データは全て正しく送信され、受信データも正しく格納される。
【００８２】
この光トランシーバ１では、光トランシーバ１が起動するときに、メモリ１６に格納されているコンフィグレーションデータが、マイクロコントローラ１４によって、通信バスＳＢ１を介して読み出されて、通信バスＳＢ２を介してＦＰＧＡ１３に送信される。また、コンフィグレーションデータを更新するときに、マイクロコントローラ１４によって、更新用のコンフィグレーションデータがＭＤＩＯインターフェースを介してホスト装置から受信され、通信バスＳＢ１を介してメモリ１６に書き込まれる。このように、マイクロコントローラ１４が、メモリ１６に格納されているコンフィグレーションデータを更新用のコンフィグレーションデータに書き換えるだけでなく、メモリ１６に格納されているコンフィグレーションデータを読み出してＦＰＧＡ１３に送信するので、ＦＰＧＡ１３がメモリ１６に接続されている必要が無い。このため、切替回路等を設ける必要が無いので、部品数の増加を抑えつつ、ＦＰＧＡ１３のコンフィグレーションデータを更新することが可能となる。
【００８３】
マイクロコントローラ１４のファームウェアが格納されているフラッシュＲＯＭ４３では、書き換え時間が長く、書き換え処理中にはフラッシュＲＯＭ４３からデータの読み出しができない。このため、ＭＤＩＯインターフェースを介して受信したアップグレードデータをフラッシュＲＯＭ４３に格納する場合には、フラッシュＲＯＭ４３の書き換え処理中にマイクロコントローラ１４のプログラムが停止し、ホスト装置に対してＭＤＩＯ応答ができなくなる。一方、光トランシーバ１は、アップグレードデータを、マイクロコントローラ１４のフラッシュＲＯＭ４３ではなくメモリ１６に格納する。これにより、光トランシーバ１の動作を停止することなく、アップグレードデータをメモリ１６に格納することが可能となる。つまり、ＭＤＩＯ応答に求められる高速応答を実現しつつ、アップグレードデータを受信することが可能となる。
【００８４】
アップグレードデータは、更新用のコンフィグレーションデータだけでなく、ファームウェアの一部を更新するための更新用のファームウェアを含む。このため、コンフィグレーションデータと同様に、更新用のファームウェアをホスト装置から受信する処理、受信した更新用のファームウェアをメモリ１６に格納する処理、及びメモリ１６に格納された更新用のファームウェアを読み出してフラッシュＲＯＭ４３に格納する処理を介して、ファームウェアが更新される。そのようなファームウェアの更新によって、上述のコンフィグレーションデータの更新に関する処理を、光トランシーバ１をホスト装置に装着したままの状態で行うことができる。したがって、例えば、ホスト装置と光トランシーバ１との間の通信に関する仕様が変更になった場合でも該当するファームウェアの部分を更新することによって、光トランシーバ１をホスト装置から取り外すことなくコンフィグレーションデータの更新を継続して行わせることができる。
【００８５】
また、メモリ１６への送信データの送信と、メモリ１６からのコンフィグレーションデータの読み出しとが、ＤＭＡＣ４４によって並列して行われるので、マイクロコントローラ１４とメモリ１６との間のデータの送受信に要する時間を短縮できる。
【００８６】
共用ＤＭＡバッファ６０が用いられる場合、ＲＡＭ４２内の格納場所が、送信データ用と受信データ用とで共通に用いられる。このため、送信データ用及び受信データ用にそれぞれ別の格納場所を設ける場合と比較して、ＤＭＡ転送用のバッファ容量を半分にすることができ、ＲＡＭ４２の容量を低減することが可能となる。
【００８７】
（変形例）
図１４は、変形例のマイクロコントローラ１４Ａのハードウェア構成を示す図である。図１４に示されるように、図３のマイクロコントローラ１４と比較して、マイクロコントローラ１４Ａは、ＤＭＡＣ４４Ａ（第２のＤＭＡコントローラ）及びＳＰＩ回路４５Ａをさらに備える点で相違する。
【００８８】
ＤＭＡＣ４４Ａは、ＣＰＵコア４１が介在することなく、ＲＡＭ４２とＳＰＩ回路４５Ａとの間のデータの送受信（ＤＭＡ転送）を直接行うコントローラである。ＤＭＡＣ４４Ａは、ＤＭＡＣ４４がメモリ１６に格納されているコンフィグレーションデータをＲＡＭ４２に書き込む処理と並行して、ＲＡＭ４２に書き込まれたコンフィグレーションデータを通信バスＳＢ２を介してＦＰＧＡ１３に送信する。具体的には、ＤＭＡＣ４４Ａは、ＤＭＡＣ４４によってＲＡＭ４２の所定のアドレスにコンフィグレーションデータの分割データが書き込まれた後、当該アドレスから分割データを読み出して、読み出した分割データを通信バスＳＢ２を介してＦＰＧＡ１３に送信する。つまり、ＲＡＭ４２では、メモリ１６から受信した受信データを格納するための受信ＤＭＡバッファと、ＦＰＧＡ１３にデータを送信するための送信ＤＭＡバッファと、に共通の領域が割り当てられている。
【００８９】
ＳＰＩ回路４５Ａは、通信バスＳＢ２を介してＦＰＧＡ１３に接続されており、クロック信号とデータとを用いた同期シリアル転送によってＦＰＧＡ１３にデータを送信する。つまり、ＳＰＩ回路４５Ａは、ＣＳ信号、ＳＣＫ信号、ＭＯＳＩ信号、及びＭＩＳＯ信号を送受信可能であるが、ＣＳ信号線、ＳＣＫ信号線、ＭＯＳＩ信号線、及びＭＩＳＯ信号線のＳＰＩバスを構成する４つの信号線のうち、ＳＣＫ信号線及びＭＯＳＩ信号線がＦＰＧＡ１３に接続される。
【００９０】
ＤＭＡＣ４４は、メモリ１６に格納されているコンフィグレーションデータをＳＰＩ回路４５を介して読み出して、共用ＤＭＡバッファ６０に格納する。ＤＭＡＣ４４Ａは、共用ＤＭＡバッファ６０に格納されたコンフィグレーションデータを読み出して、ＳＰＩ回路４５Ａを介してＦＰＧＡ１３に送信する。
【００９１】
続いて、図１５及び図１６を参照して、マイクロコントローラ１４ＡがＤＭＡ転送によってメモリ１６からコンフィグレーションデータを読み出し、ＦＰＧＡ１３に送信する動作について説明する。この例では、共用ＤＭＡバッファ６０が用いられる。なお、メモリ１６は、１〜４バイト目までダミーデータとして「０ｘＡＢ」、「０ｘＣＤ」、「０ｘＡＢ」、及び「０ｘＣＤ」を送信することとする。また、メモリ１６は、コンフィグレーションデータの分割データとして、「０ｘ９８」、「０ｘ７６」、「０ｘ５４」、…を送信することとする。
【００９２】
ＤＭＡ転送を行うために、ＣＰＵコア４１は、共用ＤＭＡバッファ６０のアドレスＡ０にコマンド「０ｘ０３」、続くアドレスＡ１〜Ａ３にメモリ１６のアドレスを示す「０ｘ０１」、「０ｘ２３」、「０ｘ４５」を格納する。なお、共用ＤＭＡバッファ６０のアドレスＡ４以降には、無効なデータである「０ｘＦＦ」が格納されている。そして、ＣＰＵコア４１は、ＤＭＡＣ４４用のＤＭＡディスクリプタ３０及びＤＭＡＣ４４Ａ用のＤＭＡディスクリプタ３０をそれぞれ準備する。
【００９３】
具体的には、ＣＰＵコア４１は、ＤＭＡＣ４４用の設定項目３１として、転送元アドレス３１１に共用ＤＭＡバッファ６０のアドレスＡ０を設定し、増加有無情報３１２に「増加有」を示す値を設定し、転送先アドレス３１３に送信データレジスタ５２のアドレスを設定し、増加有無情報３１４に「増加無」を示す値を設定し、転送データ長３１５に送受信するデータのデータ長を設定する。ＣＰＵコア４１は、ＤＭＡＣ４４用の設定項目３２として、転送元アドレス３２１に受信データレジスタ５４のアドレスを設定し、増加有無情報３２２に「増加無」を示す値を設定し、転送先アドレス３２３に共用ＤＭＡバッファ６０のアドレスＡ０を設定し、増加有無情報３２４に「増加有」を示す値を設定し、転送データ長３２５に送受信するデータのデータ長を設定する。
【００９４】
さらに、ＣＰＵコア４１は、ＤＭＡＣ４４Ａ用の設定項目３１として、転送元アドレス３１１に共用ＤＭＡバッファ６０のアドレスＡ４を設定し、増加有無情報３１２に「増加有」を示す値を設定し、転送先アドレス３１３に送信データレジスタ５２Ａのアドレスを設定し、増加有無情報３１４に「増加無」を示す値を設定し、転送データ長３１５に送受信するデータのデータ長を設定する。ＦＰＧＡ１３からデータを受信しないので、ＣＰＵコア４１は、ＤＭＡＣ４４Ａ用の設定項目３２の設定を行わない。
【００９５】
ＣＰＵコア４１は、上記設定を行った後、ＤＭＡＣ４４用の設定項目３１のＤＭＡ有効情報３１６、及びＤＭＡＣ４４用の設定項目３２のＤＭＡ有効情報３２６に「有効」を示す値を設定する。
【００９６】
そして、ＤＭＡＣ４４によって、図９〜図１３と同様にして、マイクロコントローラ１４Ａとメモリ１６との間で５バイト分のデータの送受信が行われる。そして、図１５に示されるように、通信バスＳＢ１を介して５バイト目のデータの通信が完了した時点で、受信シフトレジスタ５５に取り込まれた受信データ「０ｘ７６」が受信データレジスタ５４に転送される。そして、ＤＭＡＣ４４は、受信データレジスタ５４から受信データ「０ｘ７６」を読み出して、共用ＤＭＡバッファ６０のアドレスＡ５に書き込み、続いて共用ＤＭＡバッファ６０のアドレスＡ６から次の送信データ「０ｘＦＦ」を読み出して、送信データレジスタ５２に書き込む。
【００９７】
このとき、ＣＰＵコア４１は、ＤＭＡＣ４４Ａ用の設定項目３１のＤＭＡ有効情報３１６、及びＤＭＡＣ４４Ａ用の設定項目３２のＤＭＡ有効情報３２６に「有効」を示す値を設定する。これにより、ＤＭＡＣ４４Ａは、共用ＤＭＡバッファ６０のアドレスＡ４から受信データ「０ｘ９８」を読み出して、ＳＰＩ回路４５Ａの送信データレジスタ５２Ａに書き込む。
【００９８】
送信データレジスタ５２に送信データ「０ｘＦＦ」が書き込まれると、送信データレジスタ５２は、送信シフトレジスタ５３に送信データ「０ｘＦＦ」を転送する。また、送信データレジスタ５２Ａに受信データ「０ｘ９８」が書き込まれると、送信データレジスタ５２Ａは、送信シフトレジスタ５３Ａに送信データ「０ｘ９８」を転送する。そして、図１６に示されるように、制御回路５１はＣＳ信号をアサートした状態で、ＳＣＫ信号をさらに出力することによって、送信シフトレジスタ５３からＭＯＳＩ信号として送信データ「０ｘＦＦ」が出力されるとともに、ＭＩＳＯ信号から受信データ「０ｘ５４」が受信シフトレジスタ５５に取り込まれる。このとき、制御回路５１ＡはＳＣＫ信号を出力することによって、送信シフトレジスタ５３ＡからＭＯＳＩ信号として受信データ「０ｘ９８」が出力される。
【００９９】
このように、ＤＭＡＣ４４によって、１バイト以上の受信データがメモリ１６から読み出されて、共用ＤＭＡバッファ６０に格納された時以降に、ＤＭＡＣ４４Ａによって、共用ＤＭＡバッファ６０に格納された受信データが読み出され、ＦＰＧＡ１３に送信される。
【０１００】
つまり、図１７に示されるように、まず、ＤＭＡＣ４４が、共用ＤＭＡバッファ６０のアドレスＡｎ−１に格納されているｎバイト目の送信データを読み出して、ＳＰＩ回路４５を介してメモリ１６に送信するとともに、ＳＰＩ回路４５がメモリ１６からｎバイト目の受信データを取得する。そして、ＤＭＡＣ４４は、ｎバイト目の受信データを共用ＤＭＡバッファ６０のアドレスＡｎ−１に格納する。続いて、ＤＭＡＣ４４Ａは、アドレスＡｎ−１に格納されたｎバイト目の受信データを読み出し、ＳＰＩ回路４５Ａを介してＦＰＧＡ１３に送信する。このとき、ＤＭＡＣ４４は、共用ＤＭＡバッファ６０のアドレスＡｎに格納されているｎ＋１バイト目の送信データを読み出して、ＳＰＩ回路４５を介してメモリ１６に送信するとともに、ＳＰＩ回路４５がメモリ１６からｎ＋１バイト目の受信データを取得する。
【０１０１】
このように、ＤＭＡＣ４４及びＤＭＡＣ４４Ａは、共用ＤＭＡバッファ６０の同じアドレスに同時にアクセスすることはない。また、アクセスするアドレスが異なっていても、ＤＭＡＣ４４とＤＭＡＣ４４Ａとが内部バスＢを同時に使用することはできないので、実際にはＤＭＡＣ４４及びＤＭＡＣ４４Ａのいずれかが共用ＤＭＡバッファ６０に先にアクセスし、他方がその後でアクセスする。しかし、内部バスＢのデータ転送速度が通信バスＳＢ１及び通信バスＳＢ２のデータ転送速度よりも大幅に速いので、ＤＭＡＣ４４の動作とＤＭＡＣ４４Ａの動作とは、ほとんど並行して行われる。
【０１０２】
また、ＣＰＵコア４１がＤＭＡＣ４４のＤＭＡ転送を有効にし、その後所定の時間が経過してからＤＭＡＣ４４ＡのＤＭＡ転送を有効にしている。これにより、ＣＰＵコア４１は、ＤＭＡＣ４４の動作の開始タイミングと、ＤＭＡＣ４４Ａの動作の開始タイミングとを制御している。ＣＰＵコア４１は、例えば、共用ＤＭＡバッファ６０の所定のアドレスに無効なデータを書き込んでおき、ＤＭＡＣ４４のＤＭＡ転送を有効にした後でそのデータが有効なデータに書き替えられたことを確認することによって、ＤＭＡＣ４４ＡのＤＭＡ転送を有効にしてもよい。
【０１０３】
次に、図１４の構成において、ＤＭＡ転送を用いてコンフィグレーションを行う場合とソフトウェアによってＣＰＵコア４１がコンフィグレーションを行う場合との処理速度を比較する。例えばＦＰＧＡ１３として、Ｘｉｌｉｎｘ社製ＸＣ６ＳＬＸ１６を用い、マイクロコントローラ１４ＡとしてＡｎａｌｏｇ  Ｄｅｖｉｃｅｓ社製ＡＤｕＣＭ３２０を用いる。このとき、コンフィグレーションデータのデータサイズは、約４７３．６ｋＢｙｔｅである。なお、ＳＰＩ回路４５及びＳＰＩ回路４５ＡのＳＣＫ信号のクロック周波数は、２０ＭＨｚとする。内部バスＢのクロック周波数は、最大２０ＭＨｚとする。つまり、通信バスＳＢ１及び通信バスＳＢ２の最大データ伝送速度は２０Ｍｂｐｓで、内部バスＢ（１６ビットパラレル伝送）の最大データ伝送速度は３２０Ｍｂｐｓである。
【０１０４】
ソフトウェアによってＣＰＵコア４１がコンフィグレーションを行う場合には、送信データレジスタ５２に有効なデータが格納されていないことを確認してから、送信データレジスタ５２にデータを書き込む。また、受信データレジスタ５４に有効なデータが格納されていることを確認してから、受信データレジスタ５４からデータを読み出す。すなわち、ＣＰＵコア４１は、ＳＰＩ回路４５を介して、メモリ１６から１バイトのデータの読み出しを行う場合、少なくとも送信データレジスタ５２に有効なデータが格納されていないことを確認し、送信データレジスタ５２にデータを書き込み、ＳＰＩ回路４５によってメモリ１６とデータを送受信し、受信データレジスタ５４に有効なデータが格納されていることを確認し、受信データレジスタ５４からデータを読み出す必要がある。同様に、ＣＰＵコア４１は、ＳＰＩ回路４５Ａを介して、ＦＰＧＡ１３に１バイトのデータの書き込みを行う場合、少なくとも送信データレジスタ５２Ａに有効なデータが格納されていないことを確認し、送信データレジスタ５２Ａにデータを書き込み、ＳＰＩ回路４５ＡによってＦＰＧＡ１３にデータを送信する必要がある。
【０１０５】
通信バスＳＢ１では、１回のアクセスに２クロック必要であるとすると、アクセスごとに少なくとも０．１μ秒必要である。また、ＳＰＩ回路４５，４５Ａが１バイトのデータを送受信するには、８クロック（＝０．４μ秒）必要である。したがって、ソフトウェアでＳＰＩ回路４５を介して、メモリ１６から１バイトのデータの読み出しを行うためには、少なくとも０．８μ秒（＝０．１＋０．１＋０．４＋０．１＋０．１）の時間が必要であり、ＳＰＩ回路４５Ａを介して、ＦＰＧＡ１３に１バイトのデータの書き込みを行うためには、０．６μ秒（＝０．１＋０．４＋０．１）の時間が必要である。このため、全てのコンフィグレーションデータをメモリ１６から読み出して、ＦＰＧＡ１３に書き込むためには、６６３ｍ秒（＝（０．６＋０．８）×４７３．６ｋ）の時間が必要となる。この間、ＣＰＵコア４１は、コンフィグレーションデータの転送以外の処理を行うことは困難である。
【０１０６】
一方、ＤＭＡ転送を用いてコンフィグレーションを行う場合、送信データレジスタ５２に有効なデータが格納されていないことの確認、及び受信データレジスタ５４に有効なデータが格納されていることの確認は、ハードウェアで行われる。このため、ＣＰＵコア４１による内部バスＢのアクセスは不要となる。また、メモリ１６からの読み出し処理と、ＦＰＧＡ１３への書き込み処理とは、並行して実行され得る。なお、ＤＭＡＣ４４，４４Ａが１回あたり最大２０４８バイトの転送を行うものとすると、ＣＰＵコア４１は、ＤＭＡ転送ごとにＤＭＡディスクリプタ３０の設定を行う必要がある。このＤＭＡディスクリプタ３０の設定には、１０μ秒程度の時間を要する。
【０１０７】
したがって、１回のＤＭＡ転送には、ＤＭＡディスクリプタ３０の設定時間と、２０４８バイトのデータ転送時間との合計８２９．２μ秒の時間を要する。全てのコンフィグレーションデータをメモリ１６から読み出して、ＦＰＧＡ１３に書き込むためには、４７３．６ｋバイト分の２３７回のＤＭＡ転送が繰り返されるので、１９６．５ｍ秒の時間が必要となる。また、ＤＭＡ転送中には、ＣＰＵコア４１は、コンフィグレーションデータの転送以外の処理を行うことができる。
【０１０８】
このように、ソフトウェアによってＣＰＵコア４１がコンフィグレーションを行う場合と比較して、ＤＭＡ転送を用いてコンフィグレーションを行う場合には、処理時間の短縮が可能となり、さらに処理中にＣＰＵコア４１が他の処理を行うことも可能となる。なお、マイクロコントローラ１４Ａの内部バスＢは、最大２０ＭＨｚで動作し、２クロックで１６ビットのデータを転送できるので、内部バスＢの転送速度は２０Ｍバイト／秒となる。また、ＳＰＩ回路４５，４５ＡのＳＣＫ信号は、最大２０ＭＨｚで動作できるので、通信バスＳＢ１及び通信バスＳＢ２の転送速度は、最大１．２５Ｍバイト／秒となる。よって、通信バスＳＢ１及び通信バスＳＢ２でデータの送受信を行っている間に、ＤＭＡＣ４４がＳＰＩ回路４５とデータの送受信を行い、ＤＭＡＣ４４ＡがＳＰＩ回路４５Ａにデータを送信するのに十分な余裕がある。
【０１０９】
以上のように、変形例のマイクロコントローラ１４Ａにおいても、マイクロコントローラ１４と同様の作用効果が奏される。また、変形例のマイクロコントローラ１４Ａでは、ＤＭＡＣ４４Ａは、ＤＭＡＣ４４がメモリ１６に格納されているコンフィグレーションデータをＲＡＭ４２に書き込む処理と並行して、ＲＡＭ４２に書き込まれたコンフィグレーションデータを通信バスＳＢ２を介してＦＰＧＡ１３に送信している。このため、コンフィグレーションデータをメモリ１６から読み出して、ＦＰＧＡ１３に送信するのに要する時間を短縮することができる。また、ＤＭＡＣ４４とＤＭＡＣ４４Ａとによって、ＲＡＭ４２の共用ＤＭＡバッファ６０が共通に使用されているので、ＦＰＧＡ１３に送信するデータの格納場所をさらに設ける必要が無い。このため、ＲＡＭ４２の容量を低減することが可能となる。
【０１１０】
なお、本発明に係る光送受信器及びマイクロコントローラは上記実施形態に限定されない。例えば、マイクロコントローラ１４，１４Ａは、ＤＭＡＣ４４に代えて、送信ＤＭＡバッファ６１から送信データを読み出し、送信データレジスタ５２に書き込む処理を行うＤＭＡＣと、受信データレジスタ５４から受信データを読み出し、受信ＤＭＡバッファ６２に書き込む処理を行うＤＭＡＣと、を備えてもよい。
【０１１１】
また、共用ＤＭＡバッファ６０は、リングバッファとして用いられてもよい。
【符号の説明】
【０１１２】
１…光トランシーバ（光送受信器）、１３…ＦＰＧＡ（ロジックデバイス）、１４，１４Ａ…マイクロコントローラ、１６…メモリ（第１のメモリ）、ＳＢ１…通信バス（第１の通信バス）、ＳＢ２…通信バス（第２の通信バス）、４２…ＲＡＭ（第２のメモリ）、４３…フラッシュＲＯＭ（第３のメモリ）、４４…ＤＭＡＣ（第１のＤＭＡコントローラ）、４４Ａ…ＤＭＡＣ（第２のＤＭＡコントローラ）、４５…ＳＰＩ回路、４５Ａ…ＳＰＩ回路、６０…共用ＤＭＡバッファ、６１…送信ＤＭＡバッファ、６２…受信ＤＭＡバッファ。
【図１】
0006657907.tif 000002
【図２】
0006657907.tif 000003
【図３】
0006657907.tif 000004
【図４】
0006657907.tif 000005
【図５】
0006657907.tif 000006
【図６】
0006657907.tif 000007
【図７】
0006657907.tif 000008
【図８】
0006657907.tif 000009
【図９】
0006657907.tif 000010
【図１０】
0006657907.tif 000011
【図１１】
0006657907.tif 000012
【図１２】
0006657907.tif 000013
【図１３】
0006657907.tif 000014
【図１４】
0006657907.tif 000015
【図１５】
0006657907.tif 000016
【図１６】
0006657907.tif 000017
【図１７】
0006657907.tif 000018