2014年11月30日日曜日

ZYBO 11 ( I2S コントローラの作成 2 )

DMA部のコーディングも終了した。 転送するのはオーディオデータであり、転送レートは低いので転送長は1(シングルアクセス)とした。

再生側 DMA

録音側 DMA

外部仕様(レジスタ仕様)は幾つか間違いがあったので修正&変更し、サンプリングレートも変えられるようにした。

コーデイングが終わったのでテストベンチを作成してシミュレーションを開始した。
このI2S IPのデータパスはDMACを使うパスと、ソフトウェアでレジスタアクセスによるパスがある。

以下は、AXI-SLAVEのパスによるDAC出力を見ている。サンプリングレートは48Kにし、データとして133.3Hz相当の正弦波を書いている。最下部のdac_l, dac_rはI2Sのシリアルデータをシリパラ変換したデータをアナログ表示している。 
このシミュレーションのテストベクタは以下のように書いている。
write_to_register()とread_from_register()はタスクで、以下のように書いている。

以下は、I2C I/F部を見ている。
ベクタ

こんな感じで録音側やDMAC側も確認するつもりだが、AXI-SLAVE経由でのDAC出力は出来ているので DFT-IP も接続してシミュレーションしてみた。 再生するデータは1.5KHzの正弦波とした。
以下で、xp1, xp2はDFT IPの入力で、moni_l, moni_rと同一信号である。 pwr_dat1, pwr_dat2は、DFT IPの複素出力の実部と虚部の二乗和の平方根である。このDFT IPは2048点のDFT演算を行っている。データの入力点数が増えるにつれて、スペクトルが段々と線スペクトルになっていく様子が判る。


正弦波印加直後






pwr_idxはスペクトルのインデックスを表しており、48KHzを2048点でDFTしているので、23.4375Hz刻みということになる。線スペクトルに対応するpwr_idxの値は65なので、23.4375 x 65 = 1523.4375 Hzと、ほぼ入力信号の周波数と合っている。



0 件のコメント:

コメントを投稿

自作CPUで遊ぶ 25

まだ制御ソフトが完成していないので今まではスピンドルを移動するために一々簡単なプログラムを書いて移動させていたのだが、非常に面倒なのでCNCペンダント的なものを作ることにした。 右側の縦に2つ並んでいるスイッチ...