EMIO にだした SDIO の CLK_FB
Vivado 推論してくれるのはいいけど、すべての外部端子を自動的に作っちゃう。SD に必要なのは SD の端子だけなんだ。(SD 用のチップというのもあるみたい) あと power とその選択もオープンにしたい。PMOD の SD スロットを使うと、power は PMOD の通常の vcc からのよ。本当は power から供給して on/off をコントロールにすべきみたいだけど。
で、これらの端子をオープンにしたままだと Vivado でエラーになる。実はなんかうまくいくような XDC の書き方があるのかもしれないけど、適当に IO につなげている。ダメな気はするけど。
一番問題なのが結局 CLK_FB 。これは CLK の feedback なので折り返す必要がある。そういうチップもあるみたいだけど、ここは SD スロットじかにさしているので全く必要ない。全く必要ないのに折り返さないとどうやら動かないらしい。っていうか動かない。
しょうがないので wrapper を手で編集。
SDIO_1_clk => sdio_1_clk_out, SDIO_1_clk_fb => sdio_1_clk_out,
これで折り返し。ついでに外に出す
SDIO_1_clk <= sdio_1_clk_out;
SDIO_1_clk_fb は外に出ているけど内部的にはどこにもつながってない。
このパッチでようやく SD うごくようになりました。ついでに書くと、FSBL をちゃんと更新しないと clk 供給されなくて、そもそも SDIO1 がつかえない。SDIO のレジスタに何を書きこんでも0で変える場合はこれ。
SDIO1 が EMIO 経由で使えるようになったけど、そして SDIO から CIS の読み込みもできるようになったけど、wrapper を書き直しているので Vivado で BD 書き直して generate しなおすと消えちゃうよ。tcl で書き直しているというフォーラムの書き込みがあったのだけど、いまのところ、 tcl でうまく書き直す手立てはない。うまくの意味はシグナルとしてね。text として書き直す手立てはありそう。でも、これってパッチですから。post と pre で tcl のプログラムをなんかのきっかけで起動することはできるみたい。でもテキスト編集になっちゃね、、、なんかうまい方法はるのだろうか?
ちょっと脱線するけど XADC の Linux のドライバの作りはXADC にアクセスする毎回クロックを停止しているので、単純にアクセスしてもエラーになるよ。