とりあえず、デバイス: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は搭載されていません。