【MEMSマイクアレイ】 データ収集システム 同期信号の追加

FPGA

多数のマイクロフォンを並べた「マイクロフォンアレイ」のデータを収集するシステムで,送信データに同期用信号を追加できるように変更しました。また,FIFOメモリの使用効率を考えて,内蔵FIFOの形式を,スピーカアレイ駆動システム VHDLコード (2) (FIFO内蔵版)で採用していた64ビット入力8ビット出力から,8ビット入力8ビット出力に変更しました。

さらに,今回のシステムでは,L/R切り替え機能を利用してマイクロフォンの入力数を2倍に増やす仕組みを組み込み,接続可能なマイクロフォンの個数は96としています。

注意:

<注意を読む>

この投稿は,未完成のシステムの開発過程の備忘録として書かれたものです。紹介されているコードにはバグや冗長な部分が含まれています。このコードを参考にする場合は注意をお願いします。また,解説の文章などに誤りや意味不明の箇所が含まれていることにも配慮してください。

<閉じる>

同期信号の必要性

データ送信の過程では,通信が途切れたり,送信していないデータが付加されたりするなど,エラーが避けられません。エラーのため送信したデータと受信したデータでデータの開始時点がずれてしまうと,全く異なるデータが受け取られてしまいます。

このようなデータの同期のずれを防ぐため,データを“フレーム”と呼ぶ単位に分割して送信し,フレームとフレームの間に同期用の信号を挿入します。

マイクの個数が64と異なる場合の問題

64ビット入力8ビット出力のFIFOを使ったシステムは,入力マイク数が64の場合は,シンプルな構成でデータ収集が可能でした。しかし,マイク数が64より大きくなると対応できません。また,マイク数が64より少ない場合,FIFOメモリの中で使わない領域ができてしまいます。

<詳しく読む>

実はFIFOを使うシステムは早い時期に試していました。しかし,送信データが「文字化け」するという問題がありました。この原因はFPGA基板内部で特定の信号ピンがプルアップされているためであることが後で明らかになりました(【MEMSマイクアレイ】 MachXO2評価基板信号ピンのプルアップ)。しかし,当初はそれが不明だったため,チャンネルセレクタの切り替えタイミングの問題を疑って,構成がシンプルな64ビット入力8ビット出力FIFOを使うシステムを試してみました。

文字化けの原因が明らかになったので,チャンネル数を可変にできるチャンネルセレクタと8ビット入力8ビット出力FIFOを使う構成で開発を進めることにしました。

<閉じる>

システムの変更点

今回の変更は,以下のようなことを目指しています。

  • 同期信号の追加
    指定されたチャンネル数のデータに1バイトの同期信号を付加して送信するようにした。
  • チャンネル数の変更を容易にする
    FIFOを8ビット入力にすることで,チャンネル数を変更しやすくした。
  • ピン配置を固定にする
    これまでのシステムは,マイクのチャンネル数を変えるとハードウェア構成も変更されピンの再割り当てが必要だった。今回は,完全なハードウェア固定まではできていないが,ピン割り当ては固定できるようにVHDLコードを修正した。

ハードウェアの構成

データ収集システムのハードウェアの概略の構成を以下の図に示します。接続可能なMEMSマイクの最大個数は96としてあります。細かな制御信号は略しています。

ハードウェアの構成

MEMSマイクの出力は8ビットごとに1つにまとめて1チャンネルとして扱います。MEMSマイクのL/R切り替え機能を利用するためマイクの出力2つを1つの入力ピンに接続します。したがって入力ピンは1チャンネルあたり4つになります。またこの構成図では,MEMSマイクのL/R制御入力は,偶数番目のマイクにはVdd,奇数番目のマイクにはGNDを接続することにしています。

この入力信号は,3MHzのクロックの立上りエッジで偶数番号,立下りエッジで奇数番号のマイクの出力がサンプルされたものになります。この信号をコンポーネントMEMS_INで処理することで,3MHzクロックの立上りエッジに同期した1チャンネル当たり8ビットのマイク信号に復元します。復元した信号の名前を,これまでのVHDLコードのマイク入力と同じmic_inにしておけば,コードの変更箇所は少なくなります。

復元されたmic_inは複数(最大12)チャンネルの信号なので,チャンネルセレクタを介して8ビット幅のFIFO入力ポートに接続します。

チャンネルセレクタの入力にはマイクロフォンのための信号チャンネルに加え同期用に1チャンネルを追加しました。マイクロフォンのチャンネル数をCh_nとすると,インデックスが0番からCh_n-1番のチャンネルがマイクロフォン用,インデックス-1のチャンネルが同期用になります。

チャンネルセレクタにより,初めにチャンネル-1の同期用データが,その後に0~Ch_n-1のデータが,順に8ビット幅のFIFO入力に書き込まれます。FIFO出力ポートも8ビット幅で,これをUSBインタフェースICのFT232Hの入力ポートに接続しています。

コメント