Avalon-MMでreadをしようとして嵌っている。。
DE0-nano-SoCボードというARMコアにFPGAが付いたものを使っているのだが、そこにはFPGAからSDRAMにアクセス可能なバスがありこれをFPGA2HPSという。
このバスはAXIインターフェイスなのだが、Qsysで合成する時にAvalon-MMとAXIの変換器を自動で入れてくれるのでごちゃまぜにして利用することが可能なのだ。
Avalon-MMインターフェイスは信号線の選択によって色々なインターフェイスを作ることが可能なのだが、自分は基本的にwaitrequestという信号がアサートされたら待つというだけでそれ以外はシンプルなメモリインターフェイスのように使っている。
しかしこれがいけないのだろうか。readをしようとしてもいつまで経ってもwaitrequestがアサートされたままで前に進むことが出来ない。
byteenableやreaddatavalidなどを有効にして試していきたいが、何しろコンパイル時間がかかりすぎてそのやる気が出ない。
困ったものだ。
追記5/13
結局、h2fからAddress Span Expanderを介してf2hに向かう信号をロジアナで解析することでこの問題は解決した。
使った信号線はaddress, read, readdatavalid, readdata, write, writedata, burstcount, waitrequest, byteenableだ。
このうちbyteenableは全ビット1固定、burstcountは1で固定しておけば良い。
実際的に追加したのはreaddatavalidだけで、pipelinedな形式でないと読めないのだと考えられる。
追記5/16
恐らくこれは非同期なメモリインターフェイスと同期なメモリインターフェイスを自動変換してくれないということなのだろう。