« Vivadoでソースファイルを秘密にしたIPを作る方法 | トップページ | XVCサーバを作る(1) »

2017.07.08

「AWS EC2 F1について、みんなでワイワイ調べる会」に参加した

「AWS EC2 F1について、みんなでワイワイ調べる会」に参加してワイワイ調べてきました。

EC2 F1というのは、Amazonが、FPGAボードがついた仮想サーバを貸し出すというサービスです。

私はデバッグの仕組みであるVirtual JTAGについて調べてきました。Virtual JTAGを使うとVivadoでOpen Hardwareをすれば、ボード上のJTAGを介してChipScopeが使えたりメモリが見れたりといったデバッグができるはずなのですが、どういった仕組みで動いているかを解析するのが班の役割です。

簡単に言うと、XILINXにはネットワーク経由でターゲットボードをデバッグする抽象度の高い「hw_server」というプロトコルと、抽象度の低い「Xilinx Virtual Cable(XVC)」というプロトコルがあります。

hw_serverは「書き込め」とか「ChipScopeで波形をとれ」みたいな抽象度のことを高いことをやっていて、ネットワークの先にあるマシンがhw_serverのコマンドを解読して、JTAGの1001010101みたいなビット列を作ります。そのビット列をTCP/IP経由でJTAG端子をもったマシンのGPIOに出力するのがXVCというわけです。

Vjtag1

XVCはshift:、getingo:、settck:というコマンドくらいしか用意されていない単純なものです。shift:コマンドでTMSとTDIにデータを送ったら、TDOから受け取ったデータをテキストにして返すだけです。

XVCのサーバは仕様も公開されているので、誰でも作れますし、もちろんAmazonのサーバで動かすこともできますし、Zynqで動かすことだってできます。debug bridgeという標準IPも用意されていて、AXI-JTAGまで作れるのでZYNQにすぐに実装できます。

Vjtag3

AmazonのF1サーバの場合は、PCIe to JTAGというIP(おそらくPCI-AXIとAXI-JTAG)が使われていて、PCIeのどこかのBARにpeek/pokeして書き込むとJTAGの信号がテケテケ動くというものになっています。

だいたいの仕組みは以下の図のようになります。

Vjtag2_2

さて、JTAGでは何かのコマンドを送って、帰ってきたデータを見て次のコマンドを送る(例えば書き込み完了フラグを見る)ことがよくあります。書いて読んでをするとTCPのパケットが往復するのですが、XVCプロトコルでは読み書きのたびにTCPを送りあうので、遅延があるとスループットが遅くなることが容易に予見されます。

したがって、高位のコマンドを解析するhw_serverマシンと、低レベルなXVCを実行するターゲットマシンはネットワーク的に近いところにあったほうが良いでしょう。

実際にやってみようとしたのですが、AmazonのF1サーバを借りるには手続きに1日程度かかります。勉強会の時間内には借りられなかったので、すでにF1サーバを借りている人のを使わせてもらって試しました。ですが、その方のサーバにはhw_serverが入っていなかったので、XVCで接続しました。

そのさいの結果をパワーポイントにまとめて、発表しました。

下においておきます。

Vjtag_top

よくよく考えてみれば、PCI ExpressのGPIOからFPGA内部のBSCANにつなぐわけなので、JTAGが出てこなくてもいいですよね。PCI ExpressからChipScopeのDebugインタフェースにつなげばいいわけだから、仮想的にJTAGを経由しなくてもいいんじゃないだろうか・・いずれそうなるかもしれません。

はまったこと

・リージョンを北米バージニアにしないとF1のインスタンスは借りられない

・FPGAの論理合成だけなら東京のサーバでもできる。AMIとかいうのをXilinxにすれば、Vivadoの2017.1のフル版が入っているサーバが借りられて、UltraScale+の論理合成もできる。これは便利かも。

・デフォルトでは借りられるF1インスタンスの上限がlimit=0になっているので、AWSのサービス窓口にコンタクト(Webフォームからlimitを上げる要求)して、limit=1にしてもらわないといけない。これには1日程度かかるから、試したいと思ってもすぐにはできない

感想

  • 巨大なFPGAだから、hellow worldの論理合成に60分以上かかった。
  • UltraScale+じゃなくていいから、Kintex-7の小さなものを借りられるようにして練習できればいいのに。
  • これまでにもXILINXは組み込みマイコンでJTAGを動かすXSVFや、TCP/IP経由でJTAGを動かすCSE_SERVERなどの仕組みを用意してきたが、今回のXVCは本物かもしれない!?

時間内にVirtual JTAGの全貌が解明できてよかったです。

この成果を使って、特電のAritx-7ボードやKintex-7ボードもVivado対応にしようと思います。

|

« Vivadoでソースファイルを秘密にしたIPを作る方法 | トップページ | XVCサーバを作る(1) »

コメント

練習用の小規模版、あると確かによさそうですね。

投稿: aokit | 2017.07.10 17:09

あ、あと、chipscopeだけじゃなく、HAPSの total recall も使えると、便利じゃないでしょうかね。クラウドの特徴を生かせるし。

投稿: | 2017.07.10 17:56

コメントを書く



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




« Vivadoでソースファイルを秘密にしたIPを作る方法 | トップページ | XVCサーバを作る(1) »