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

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

FPGA ラズベリーパイB

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

投稿日:2018年3月27日 更新日:

13 ラズパイの信号に応じて、クロックを切り替えるボード
 この点をどのようにするか、基板を起こす方法もあるけれど、試行錯誤が多いと思えるので、
FPGAを用いて、プログラム的に、信号切り替え、分周などの論理回路を作成することを考えた(過去記事の「DE1-SOC(FPGAボード)を買いました」。
このボードには、DACがすでに接続されていて、かつ、40ピンのgpioヘッダが用意されており、内部配線をプログラム的に接続すれば足りる点で、その点でも、試行錯誤がやりやすい。
40ピンのgpioヘッダは、ラズパイと対応するように内部配線をプログラム化することもできる。
その点で、基板の作成能力がなくても、外部クロックの仕組みを体感できる。
また、PLLも用意されているので、最終的な理想からは外れるものの、外部クロックを用意しなくても、クロックの変更の仕組みを動作検証できる。(後でマスタークロックを用意し、配線を修正すればよいだけのことである。)

(クリックすると拡大します。)
<2018.4.13 修正>
現在動作確認を終えた。28.224となっているところは22.5792の誤りで、notの演算子が入っているところは、24.576ではなくて、22.5792のほうに入れる。現在の図だと全く信号が出ない。

 すべてをverilogで作るのではなくて、回路図を構成し、その中のモジュールだけをverilogで作る。
 PIN_AF14は、50mhzのクロックに接続し、PLLにより、22.5792mhz,24.576mhzの周波数を作り出す。これらのマスタークロックの系統をPIN_AC18により、切り替える。
 PIN_AC18により選択されたクロックの系列につき、counter1-3は、2分周、4分周、8分周の方形波を作り出す。
上記ボードで採用しているのは、wm8731なので、11.2896mhz,12.288mhzが必要なので、2分周したクロックを1部で取り出す(PIN_G7)。PIN_Y18は、DACのデータ入力であり、内部的にDACとGPIOとを接続している。

 2分周、4分周、8分周の方形波は、2ビットのPIN_Y17により、MUXで選択し、これを、ビットクロックとしてラズパイへ出力する。また、ビットクロックの出力として、ボード内部のDACにもプログラム的に出力する。
 
 さらに、選択したビットクロックから、counter6により、2の6乗つまり、64分周にしたクロック(LRクロック)取り出す。
 LRクロックは、ビットクロックに基づいて、ラズパイから出力されるが、ラズパイのモードには、カーネルのrpi_dac.cを変更してLRCLOCkも入力できるモードがありそれを試すために用意している。

 FPGAについては、上記のボードを用いたが、使用しているFPGAの型番設定を変え、pin plannerでピンの特性を変更するだけで、ほかのalteraのボードにも容易に移植できる。
 上記のボードでは、my_first_fpgaというpdfがあり、pllで作成したクロックを、分周により周波数を落とし、LEDを点滅させるという初心者向けの文書があり、それを参考にして拡張していけば、pll + MUX + 分周 の組み合わせにより、gpioの信号の組み合わせに応じて、所定の周波数のクロックを、ラズパイに送ることができる。

現状のプロジェクト(バージョン16LITEエディションで作成)は、グラウンド接続や、ラズパイのピン配置には未対応で修正が必要であり、これを修正し、動作検証をしていきたい。

-FPGA, ラズベリーパイB

執筆者:


comment

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

CAPTCHA


関連記事

no image

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

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

no image

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

前回の続きです。過去の記事にも同じようなことを書いているので、そちらも参照願います。 今回は、カーネルをいじることについて触れます。 <2018.4.30 修正:ファイルが大きくなりすぎたので、3つに …

no image

コマンドラインで動く、汎用i2sハイレゾモジュールの作り方(これまでのまとめ)。 (How to make a general i2s hi-resolution play-module with external bck clock using command-line on raspberry pi. And you can use gpio for operation)

これまでののうち、コマンドをまとめました。 <2018.4.28 追記 以下は、24ピンのラズパイBノーマルバージョンかつ当時のカーネルを使うことが前提になります。 今のカーネルには、bcm2708- …

no image

ラズベリーパイ、volumioカーネル環境をmakeなしクロスコンパイルなしで2時間で立ち上げる。クロスLAN接続

私は、ラズベリーパイをリニア電源(スイッチング電源でなくノイズが少ない)で動作するノーマルBモデル、rev2(過去記事「ラズベリーパイモデルBの入手と設定1」)をaliexpressで入手し、あえてこ …

no image

ラズベリーパイ、volumioカーネル環境2 I2Sドライバのコンパイル

前回の「ラズベリーパイ、volumioカーネル環境をmakeなしクロスコンパイルなしで2時間で立ち上げる。クロスLAN接続」に引き続き、ラズベリーパイ、volumioカーネル環境で、I2Sドライバをコ …

[最近の記事]
2018年3月
 123
45678910
11121314151617
18192021222324
25262728293031