« RasPi Camera V2とFPGAをつないで何らかの信号が出ることを確認 | トップページ | Trenz社の全FPGAボード製品のデータを掲載しました »

2021.05.23

XILINXのPCIe 7x 1.9コアでクラッシュする

2016年ごろに作ったPCI ExperssのボードのFPGAのデザインが、SuperMicroというメーカーのマザーボードを使った特定のPCでクラッシュするという現象がお客様から報告されました。

 

この状況を再現するため、特電の倉庫にSuperMicroのマザーを積んだデスクトップPCを取りに行って、CERN CentOS 7という謎ディストリビューションのLinuxをインストールし(インストール中にいろいろダウンロードするので1日以上かかった)たりしていました。

 

調べてみると、BAR0などのメモリ空間にアクセスしつつ、別のシェルでlspciを実行するとハングアップするという感じでした。

落ちる前にはBARからの読み出しでFFFFFFFFが返って来るので、感触としてはBARにアクセスするトランザクションがcompletionを返す前にコンフィグリクエストが来ると、どちらかのcompletionを忘れてしまうんじゃないかと思える挙動です。

 

使っているXILINXIPコアは2016年ごろのpcie 7x 1.9)です。当時のツールはISE14.7かVivado 2016かという選択でしたが、Vivado 2016は使う気にならなかったので、ISEを使っていました。

Ise

そのため、ISE 14.7に入っていたpcie 7x 1.9コアを使っていたのですが、pcie 7x 1.9はPCI Expressのトランザクション層のほぼ生のパケットが出てくるので、PCI Expressをしばらく触っていないと信号の意味を忘れてしまいます。ISEなので膨大な量の信号がテキストベースでインタフェースされているので、どこがどうつながっているのかを把握するだけでも一苦労です。

 

そう考えるとVivadoってすごいですね。配線がどこがどうつながっているか視覚的にわかります。それになんといっても、

・・・
-- Management Interface
cfg_mgmt_di : in std_logic_vector (31 downto 0);
cfg_mgmt_byte_en : in std_logic_vector (3 downto 0);
cfg_mgmt_dwaddr : in std_logic_vector (9 downto 0);
cfg_mgmt_wr_en : in std_logic;
cfg_mgmt_rd_en : in std_logic;
cfg_mgmt_wr_readonly : in std_logic;
-- Error Reporting Interface
cfg_err_ecrc : in std_logic;
cfg_err_ur : in std_logic;
cfg_err_cpl_timeout : in std_logic;
cfg_err_cpl_unexpect : in std_logic;
cfg_err_cpl_abort : in std_logic;
cfg_err_posted : in std_logic;
・・・ 

みたいな100個以上ある謎の信号を扱わなくていいのですから。

Vivado 2019.2に入っている比較的新しいコア(XDMA 4.1)Vivado 2019.2で作ったサンプルデザインで試したところ、全くハングアップしなくなりました。

Xdma

 

なお、XDMA 4.1は中心にpcie 7x 3.3が入っていて、AXIラッパとDMA回路が入ったものです。

pcie 7x 1.9コア が悪いのか、pcie 7xの周辺回路が悪いのかわかりません。pcie 7xの入出力信号を追いかけるのはとても時間がかかる作業となるので原因究明は行いません。まぁ、おそらく未処理のMemRdコンプリーションとCfgRdが重なるとバグるのでしょう。

 

とにかく、新しいVivadoで再設計するのが最も近道のようです。

 

|

« RasPi Camera V2とFPGAをつないで何らかの信号が出ることを確認 | トップページ | Trenz社の全FPGAボード製品のデータを掲載しました »

コメント

コメントを書く



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




« RasPi Camera V2とFPGAをつないで何らかの信号が出ることを確認 | トップページ | Trenz社の全FPGAボード製品のデータを掲載しました »