« Kintex-7のPCI Express EndPointを使う方法 | トップページ | ET2016に向けて、着々と準備 »

2016.11.10

Kintex-7のPCI Expressリンク幅と速度

Kintex-7のPCI Expressリンク幅と速度がどうなっているのかを調べました。

XILINXのユーザガイド「7 Series FPGAs Integrated Block for PCI Express v3.0」によれば、物理層インターフェイスの出力信号にそれらを示す信号が出ているようで

  • pl_sel_lnk_rateが現在のリンク速度を示す。'0'なら2.5G、'1'なら5G
  • pl_sel_lnk_width[1:0]が現在のリンク幅を示す。"00"ならx1、"01"ならx2、"10"ならx4、"11"ならx8
  • pl_initial_link_width[2:0]は、初期のリンク幅を示す。つまり、最大のリンク幅になっている

あと、通信の相手がGen2に対応しているかを示すpl_link_gen2_capや、リンクがアップコンフィギュレーションに対応しているかを示すpl_link_upcfg_capなどの信号があります。

Cosmo-Kで、これらの信号を見てみると、pl_sel_lnk_rateは'1'、pl_sel_lnk_width[1:0]は"10"なので、Gen2のx4でリンクアップしていることがわかります。

では、この幅をいろいろ変えてみましょう。

まず、(需要があるのかどうかはわかりませんが)リンク速度のスピードダウンを行ってみます。pl_directed_link_speedを'0'にして、pl_directed_link_changeを"10"あるいは"11"にすると、スピードが下がります。

Spddwn

pl_sel_lnk_rateが'0'に変わるのが見えました。

そうしたら、次に速度を戻します。pl_directed_link_speedを'1'にして、pl_directed_link_changeを"10"あるいは"11"にします。

377_3

このとおり、リンク速度が戻りました。簡単ですね。

sun

リンク幅を減らすことも簡単です。リンク幅を減らすには、pl_sel_lnk_width[1:0] に"01"や"00"を指定して、pl_directed_link_changeを"01"あるいは"11"にします。

お気づきのとおり、pl_directed_link_change(0)はリンク幅の変更、pl_directed_link_change(1)はスピードの変更を指示する信号です。

X4x1

幅・速度変更の最後には、pl_directed_change_doneが'1'になって完了を示してくれるので、そうしたらpl_directed_link_changeを"00"を戻します。pl_directed_link_changeが != "00"でない状態で放置すると、何度も何度もリンク変更を繰り返してしまいます。

リンク幅を減らすのは4μ秒程度の短い時間で完了します。しかし、リンク幅を増やすのは、うまくいかない場合があるようです。

また、当然ですがx4のリンク幅で作られたボードをx8にしようとしてもx8にはなりません。

わかったことは、

  • Cosmo-Kは、デフォルトでは、設計したとおり、Gen2のx4でリンクアップした
  • x1にもx2にも変更できるが、x8にはならない
  • リンク速度と幅を変更するには、pl_directed_link_speedとpl_directed_link_widthに新しい値を設定して、pl_directed_link_changeに"11"を与える。pl_directed_change_doneが来たら"00"に戻すこと。

ということです。

|

« Kintex-7のPCI Express EndPointを使う方法 | トップページ | ET2016に向けて、着々と準備 »

コメント

コメントを書く



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


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



« Kintex-7のPCI Express EndPointを使う方法 | トップページ | ET2016に向けて、着々と準備 »