やまちゃんのオーディオブログ

真空管アンプ、最近は資金調達のためのFX,MetaTrader4ネタもやっています。

FPGA ラズベリーパイB

ラズベリーパイのi2s外部クロック、その後5(2018年度版)

投稿日:2018年4月15日 更新日:

とりあえず、デバイス:de0-soc、DAC:wm8731用のクロックジェネレータのプロジェクトを公開。de0-socの開発CDに含まれているmy first fpgaを参考にした。

(図をクリックすると拡大します。)
clock_select_test0.pdf

clock_select _test0.zip(約16MB)
レベルスイッチの0,1,2を用いて、マニュアル的に周波数を切り替える。
スイッチ0が22.5792MHZ,24.576MHZの切り替え。
レベルスイッチの1,2が2ビットを構成していて、周波数の分周比のセレクタにつながる。
レベルスイッチ1がセレクタの2ビットのうちの1桁目、レベルスイッチ2が2桁目。

とりあえず、出力ピンは、以下のように設定した。マイコンと違って出力ピンを自由に設定できる。
サンプリング周波数は、gpio0-4から、bitclockは、gpio0-8から、LRclockは、gpio0-12から出力されるように設定している(いずれもgpio0のコネクタのピンを用いた)。

各スイッチの状態に応じた、サンプリング周波数、bitclock、LRclockの組み合わせは、以下の通り。

switch0 switch2 switch1 gpio4 gpio8 gpio12
0 0 0 12.228MHz 12.228MHz 192kHz
0 0 1 12.228MHz 6.1442MHz 96kHz
0 1 0 12.228MHz 3.07MHz? 48kHz
1 0 0 11.291MHz 11.291MHz 176.4kHz
1 0 1 11.291MHz 5.643MHz 88.2kHz
1 1 0 11.291MHz 2.28226MHz 44.1kHz

<2018.4.22 修正:kHzのところ、MHzとなっていたので修正。>
なお、3.07MHzのところは、記録がなく、取り直すやる気がなく、おそらくこうなるだろうという値。
PLLを使っており、周波数を厳密に設定することができないので、若干ずれている。

今のところ、手動で周波数を切り替えるしかないが、ラズパイのカーネルを改造し、前述した3つのgpioの出力を入力すれば、サンプリング周波数に応じて、自動的に変更できるはずである。その改造は、現在、スイッチの入力としているところを、pinplannerでgpioに変えるだけでよい。ただし、その前に、その動作を、スイッチを用いて、確認する必要があった。

また、gpioのヘッダー40ピンのうち、電源ピン2本、グラウンドピン2本が設けられており、
それらのピンの位置は、de0-socのマニュアルには記載がないが、de0-soc用のCD(私のバージョンでは”DE1-SoC_v.4.0.3_HWrevE_SystemCD”)をダウンロードしたときに含まれる回路図(Schematic)に含まれている。



(上記回路図から引用)

電源ピンの位置が中ほどにあるので、注意が必要。
当初これに気付かず、40ピンのケーブルを購入してラズベリーパイと接続しようとしたが、
ラズパイのbckが、de0-socのgpioのグラウンドピンに対応しており、ケーブルを切断するのも慎重を要し、断念した。

<クロックジェネレータの動作チェックその後・・・>
次は、もちろん、ラズベリーパイとの接続を考えていくことになる。
結局、中国のalliexpressで入手した、20ピンのコネクタ4つと、秋月電子で入手した10ピンフラットケーブルで接続することにした。右がde0-socのgpio(de0-socは透明ケースに覆われている),左がラズパイ2のgpio(当該透明ケースの上に乗せている)で、いずれも左上が1ピン、右下側が40ピンとなっている(gpioの番号ではなく、コネクタのピンの番号)。 <2018.4.22 訂正:10ピンのコネクタ→20ピンのコネクタ>


方針としては、bck、LRCK、dataclockは、当然ながら、すべてつなぐ、他は、グラウンドピンはできる限りつなぐ。使わないピンは、接続しない。
デジタルでは、グラウンドピンをたくさんつなげばつなぐほど、ノイズが減る。ラズパイの40ピンから順に、同じ番号のピン(gpioの番号ではない)に接続していくが、de0-soc側は、電源ピンのあるところは、1つ上にシフトする。ラズパイで、14以下のピンのところは、de0-soc側を2つ上にシフトする。ただし、de0-socの30ピン、12ピンはグラウンドなので、グラウンドピンが対応するように接続する。対応関係は以下の通り。

de0-soc Rapsberry-pi2 内容
40 40 i2sdata
39 39 gnd
35 35 LRCK
34 34 gnd
30 30 gnd
23 25 gnd
18 20 gnd
12 14 gnd
8 12 i2sBCK
5 9 gnd

de0-socのgpioのピンは、上記にかかわらず、自由に設定してよい。
また、de0-socでなくても、40ピンのgpioが付属していれば、MAX10などの安価なボードで接続することも可能である(その場合、pin-plannerでピンの設定を変える)。

コネクタは、QIコネクタといい、国内でも簡単に見つかると思う。圧着端子で接続するので、圧着工具、ストリッパが必要。

その他、接続方法として、1ピン対1ピンのケーブルが売っているのでそれを使うこともできるが、外した時、付け直すのが面倒。
10ピンのケーブル2本、16ピン1本が市販されていれば、それを使うこともできるが、ケーブルの外側の突起があるかについては十分な注意が必要。また、使わないピンがあればアンテナになり、ノイズを拾うような気がしたので、この方法は今回は採用していない。

なお、上記の図では、上記で説明した自動的に周波数を切り替えるための、3つのgpioピンの接続を忘れていた。
これから接続することを考える。

<以下、qualtusの利用をする場合、上記プロジェクトを使うときの注意点。>
プロジェクト名の変更につき、プロジェクトを別名で保存なるコマンドは用意されていないので、
フォルダ名称を変え、プロジェクト名称を変え、トップの回路図の名称を変える。旧トップの回路図と同じ名称のファイルは、拡張子を除き全部新しいものに変える。旧トップの回路図のファイルの、プロジェクトへの登録されたものについては、project editerを用いて、プロジェクトから除去する。新トップの回路図は、プロジェクトに入れる。<2018.4.22 追記>
新規プロジェクトを作った時にトップの回路図と同じ名称にしていれば、認識してくれるが、
プロジェクト名称を変えただけでは、トップの回路図を認識してくれないので、
トップの回路図に設定すべきものを表示させ、projectタブ内の一番下のset as top entityを押すと、
その回路図が、トップの回路図に設定される。

また、gpioが当初動かなくて、参ったので、以下の通りコメント。
まず、前回の記事で追記した通り、notを入れる場所を間違ったので、信号が出なかったので困った(汗汗;)。
加えて、pin plannerでは、ピンの修正などをすると、”!”マークが出ることがあるが、
この項目は全部消して新しい項目を設定する。”!”マークが設定されたまま、コンパイルをしてコンパイルが通ったとしても、全く動作が保証できない。
my first fpgaは、上記CDに説明がある入門用のプロジェクトであってledの点滅の動作をするが、
これに加えて別の回路図を追加したとき、”!”マークがついたままコンパイルすると、ledではなく8セグのほうが点滅したりして、暴走ではないかというような動作をする。
その他、使用する機能に応じて、初期プロジェクトを設定する機能が、確かに用意されているが、使わないピンは、設定項目からできるだけ削除していたほうが良い。ピン設定は、かなり注意を払わなければならないことが分かった。

<2018.4.21修正>
de0-cvではなくて、de0-socでした。修正いたします。de0-cvには、dacは搭載されていません。

-FPGA, ラズベリーパイB

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

no image

ラズベリーパイのi2s外部クロック、その後3-3(2018年度版)

(以下、コンパイルの説明をする。コンパイルをしてしまうと後で戻ることは難しくなる。  ここで、パソコンにSDカードのデータをセーブする必要がある。セーブするにはsdformatterを使う(後の回に説 …

no image

ラズベリーパイDAC、I2S完全外部クロック、スレーブ入力のめどが立ちました!

ラズベリーパイ、I2S、完全外部クロック、スレーブ入力のめどが立ちました! 現在、I2Sという形式でデジタル音声データをラズベリーパイからDACへ送ることが流行っています。 I2Sは、従来のUSB経由 …

no image

ラズベリーパイ nanoでの行番号の表示の仕方

find / -name “nano*”で、nanorcを探す。 私のラズベリーパイの場合、 /etc/nanorcで発見できた。 nano /etc/nanorcで、設定ファ …

no image

ラズベリーパイのi2s外部クロック、その後3-2(2018年度版)

11 カーネルソースの編集 編集すべきは、以下の3つ。 (1) rpi-dac.c  (snd_soc_rpi_dac) (2) bcm2835-i2s.c (snd_soc_bcm2835_i2s) …

no image

DE1-SOC(FPGAボード)を買いました

前回の記事で紹介したように、ラズベリーパイから、44.1k系列、192k系列のオシレータを切り替え、かつ分周比を切り替えるよう、gpioでビットを出力し、それに基づいて、64倍fsのサンプリング周波数 …

[最近の記事]
2018年4月
1234567
891011121314
15161718192021
22232425262728
2930