FPGAのハードウェアARRAY_DRIVER_FIFO8to64.vhdにより合成しました。このハードウェア構成は,FPGA内部にFIFOバッファを構築しています。このとき,PC → USB → FT232H → FPGAという経路でのデータを転送し,出力波形がどうなるかを確認をしました。3MHzのオーディオサンプリングクロックに同期して0, 1の反転を繰り返す波形が出力することを期待しています。
設定と条件
- 送信データ
FWriteToFT232H_Test.cppを使用し,8192×2バイトのデータを送信
送信データは,全てのチャンネルが3MHzのオーディオ信号のサンプリングクロック毎に反転するパターンになっている。
case 1: // 全チャンネルが同じ位相で反転を繰り返す信号
for (int i = 0;i < N_CH * N_BYTE; i++) {
data[i] = 0xFF; // 全てのチャンネルのデータの全ビットを1に
data[N_CH * N_BYTE + i] = ~data[i]; // 半周期経過したら反転
}
break;
- FPGAの設定
ハードウェア記述:ARRAY_DRIVER_FIFO8to64.vhd
内蔵FIFOバッファの容量は16kByte
ピン配置は,以下の図のとおり
- 波形の観測
スピーカ駆動信号のチャンネル0のビット0であるdrive[0][0],FT232Hへのフラグ信号RXFの波形を観測する。
波形の観測にはUSB接続計測モジュールADALM2000とオシロスコープソフトScopyを使用した。
測定
1)CH1:drive[0][0] ,CH2:RXF
観測波形は図のようになりました。これからわかることは
- 出力drive[0][0]の周期は安定している(ようだ)
これは通信過程でのデータ欠落や遅延によるデータ送信間隔のばらつきがFIFOにより吸収されたためと考えられます。ただし,周期が安定しているというのは目視による判断です。観測時間の長さを大きくし,周波数スペクトルを観測する必要がありそうです。 - RXFは,断続的に1,0を繰り返している
RXFは連続して0になっているのではなく,間欠的に1となっています。これは,USBを介するデータ転送が途切れる時間帯があることを示しています。
結論
出力波形のジッタは見られなくなりました。しかし,今回の動作確認で使ったオーディオ信号のデータ量は,8192×2バイトで,これが64ビット・サンプリングクロック周波数3MHzの信号になっている。つまり,時間サンプル数は,
8192×2/64 = 256
であり,時間にしてわずか256/3μs ≒ 85μsにすぎない。
今後は,長時間継続するオーディオ信号を使った動作確認と評価が必要となる。そのためには,テスト信号の発生プログラムを作り直すことになるだろう。
コメント