« Kintex-7でのPCI Express DMA | トップページ | 1GADCボードの設計 »

2017.05.20

自社のベンダIDでXDMAに成功

Kintex-7のFPGAボード『Cosmo-K』にXILINXのPCI Express DMAコアを入れて、さらに自社ベンダIDに変更して動作させることができるようになりました。

まず、VivadoでXDMAのコアをIPカタログから持ってきて、置きます。

Xdma2_3

これだけでも動作しそうなのですが、PCI Expressのクロックは差動クロックでGTXに入ってくるので、IBUF_GTE2というプリミティブで普通のクロックに直してやらねばならないなど、いろいろあるので、RTLのモジュールを作ってそのなかに細かいロジックを入れます。

また、DMAを行うには、M_AXIのポートに何かのAXIスレーブがつながっていなければなりません。

そこで、AXI Block RAMをつなぐことにしました。私のVivadoではなぜかAXI Block RAMを直接置くことができなかったので、AXI BRAM Controllerを介して普通のBlock RAMを置きました。

最終的な出来上がったブロックデザインは下の図のとおりです。Xdma10_2

ここまでBRAMのサイズを指定する箇所がなかったのですが、Vivadoのアドレスエディタというツールで「0番地から1MByteに配置する」と書いてValidate Designを行うと、自動的にBRAMのサイズが1M Bytes(256個使用)と推論されるようです。

Xdma11_2

また、XDMAのコアでは、ベンダIDとデバイスID、それからクラスを変更しました。1BC8というのは特殊電子回路㈱のベンダIDで、110000というクラスは汎用のデジタル入出力装置を意味します。

Xdma12_2

できあがったBit Streamの書き込みはMITOUJTAGを使うと便利です。Cosmo-KにはUSB-JTAGが搭載されているので、MITOUJTAGをつなぐとすぐに認識されます。また、MITOUJTAGにはBit Streamが更新されたら書き込みを行うという機能があるので、論理合成が終了したら自動的に書き込まれます。

Xdma13_2

ベンダIDを変えたので今まで見たことのないデバイスとして認識されますが、XILINXのxdma.infの中を書き換えて、デジタル署名を施しただけのドライバでうまく認識されました。

Xdma14

xdma_info.exeツールを使えば内部のレジスタなどが見えるし、

Xdma9

もちろん、DMA転送のテストプログラムも動きました。

Xdma1

8MByteを0.004952秒で転送しているので、1.6GByte/sec出ている計算になります。

あと、割り込みも動きました。

Xdma6

しかし問題はDMA以外に何かやりたいと思って、AXI LiteやAXI Bytessの、いわば予備の通信チャネルを有効にすると、途端にドライバがうまく動かなくなります。

下の図は、XDMAの設定画面ですが、BARsというところでAXI LiteやAXI Bytessを有効にできます。

Xdma5

AXI Liteを使えば、パソコンから1ワード単位でFPGA内に小さなトランザクションを発生させられるのでしょう。AXI Bypassを使えばFull AXIなトランザクションを発生させられるのでしょう。

しかし、これらを有効にすると、

Xdma7

このように、xdma_関係のツールは調子が悪くなります。

XILINXのXDMAは、デフォルトの状態ではBAR0にDMA用のコントロールレジスタが並んでいますが、Liteを有効にするとBAR1に移動してしまうからでしょうか。

Xdma8

というわけで、自社ベンダIDのPCI Expressデザインで、XILINXのXDMAを使うことには成功しました。

|

« Kintex-7でのPCI Express DMA | トップページ | 1GADCボードの設計 »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« Kintex-7でのPCI Express DMA | トップページ | 1GADCボードの設計 »