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

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

FPGA ラズベリーパイB

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

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

過去記事では、ラズパイ2のi2s方式での音楽再生について、ラズパイ側がクロックスレーブとなる形式(ラズパイの外部からクロックを供給する形式)で再生するためのi2sのドライバーの改造方法、FPGAを用いたクロックジェネレータ、ラズパイ側がクロックマスターとする形式でi2s方式で再生するためのラズパイとFPGAとの接続方法・再生方法、実際に再生する検証をしたことを説明してきたが、いよいよ、満を持して、ラズパイ側がクロックスレーブとなる形式でi2s方式の音楽再生をするために、ドライバーを実際に改造し、動作を検証していこうと思う。

<sdカードのバックアップ>
ここからは、一応、後戻りできない可能性もあるので、ラズパイのSDカードをバックアップとっておいたほうが良い。
sdカードを取り出して、pcへカードリーダを介して接続し、「win32disk imager」を使って、バックアップを行う。
空のファイル xxxx.imgを作成し、そのファイルを指定したら、readのボタンを押して、バックアップができる。詳しくは、ネットで検索してほしい。

<追加のGPIO>
ラズパイ側がクロックスレーブとなる形式の場合、クロックは外部から供給する必要があるところ、各ファイルのサンプリング周波数に応じて、外部クロックを切り替える必要があり、ラズパイから外部クロックへ通知する必要があることは、前回で説明したとおりである。そのために、GPIOを追加する。
コネクタの番号の対応関係は、例えば、以下の通り。

de0-soc Rapsberry-pi2 内容
33 33 gpio13,クロック系列切り替え
31 31 gpio6,分周比切り替え下位ビット
27 29 gpio5,分周比切り替え上位ビット

以上は、あくまで例に過ぎない。ラズパイ側のgpio番号の選択も、fpga側のgpioの選択も、ほかにも選択の余地がある。
これまで説明してきたラズパイのi2sドライバーは384kHzにも対応しているようなので、
ラズパイから与える2bitの周波数切り替えのビットの[0,0]に、384kHz/376.4kHzを与えることにし、
ほかの周波数は、番号を繰り上げた。具体的には以下の通り。

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

これに伴い、ラズベリーパイのi2s外部クロック、その後3(2018年度版)で説明した、ラズパイの改造部分を修正した。

ここで、slide_switch1の名称を、今後の変更のため、わかりやすく、slide_switch1_gpio0-31へ変更すると、周波数の動作がおかしい。
確認すると、pin plannerに”!”マークが点灯していた。pin plannerは、注意が必要。

以上を反映した、ラズパイ側マスターとなるプロジェクトは以下の通り。相変わらず、タイミングが合わないという警告は直していない。

clock_select _ras_master2
ここでは、すでに紹介したclock_select_ras_masterのプロジェクトを上書きした。

qualtusⅡでは、経路を束ねたバスをout[3..0]のように定義でき、この場合には、4ビットのバスになる。
その一部については、入力側においても出力側においても、out[3..1]だったり、out[0]だったりを、指定したり(入力の場合)、取り出したり(出力の場合)することができる。ここでは、マスタークロックの信号をそのまま取り出してout[0]とし(入力)、これを分周したout[3..1]と合成して、4ビットの1つのバスに束ねた。信号を選択する「MUX」のところは、選択するビット列sel[](2バイト)の整数に直した値(0~3の値)が、そのまま、out[3..0]の引数になり、例えば、sel[]の整数値が2であれば、out[2]を選択して出力することになる。したがって、「MUX」は周波数を4段階に切り替えることができる。

-FPGA, ラズベリーパイB

執筆者:


comment

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

CAPTCHA


関連記事

no image

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

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

no image

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

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

no image

ラズベリーパイ LANクロスケーブル接続を外部ネットへ ネットワークブリッジ 接続トラブル

ラズベリーパイとPCとを直接つないで、かつ、ラズベリーパイを外部ネットワークにつなぐ方法 トラブル対策 ラズベリーパイには、私はvolumioを入れたが、基本はリナックスなので、リナックスベースのプロ …

no image

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

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

no image

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

やっと、外部クロックで、ラズパイを動かすことができました!!! ラズパイからは、GPIOでサンプリング周波数を指示し、これに基づいて、外部ボードであるde0-socが周波数を切り替え、マスタークロック …

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