« EXPARTAN-6Tのコアとサンプルデザイン、諸々をアップデート | トップページ | MITOUJTAGがi.MX25のバウンダリスキャンに成功! »

2011.11.29

Spartan-6内蔵EndPointBlockのフローコントロール

Spartan-6のPCI Express内蔵EndPoint Block(以下、ハードマクロ)を使って作るデザインで、メモリライト時のフローコントロールの機能を作っています。

ハードマクロは受信したデータがあるとtrn_rsof_nをLにアサートして最初のDWを出力します。これに対してラッパがtrn_rsof_nをLにすれば続きのデータが出力されてくるのですが、ハードマクロのtrn_rdst_nという信号をHにするとWAITをかけることができます。

こうすると、ハードマクロ(とセットになったBlockRAM)の中に受信パケットがどんどんたまっていくようになるので、ユーザ回路に対する出力をWAITすることができます。なお、PCI Expressの仕様上のフローコントロールはハードマクロでやってくれているので、ラッパがWAITをかけた場合でも実際には受信は行われていると思われます。そして、BlockRAMがいっぱいになると、PCIeの仕様上のフローコントロールが効いて、データの送出がとまるのでしょう。

実際にやってみました。
まずは、通常時のWAITなしの波形です。
Wrfc1

SOF→EOF・・SOF→EOFの繰り返しが見えています。
パケットの継ぎ目を拡大するとこのようになっています。

Wrfc2

フローコントロールを効かせた場合はこうなります。
SOFがアサートされたフレームが伸びるのがややこしいですが、最初の1DWだけ出て後続のDWの出力が待たされています。
Wrfc3


つなぎ目の部分を拡大すると、こんな感じです。
Wrfc4

trn_rdst_rdy_nというのは、ハードマクロから見たユーザ回路(つまりラッパ)の準備ができていないことを示す信号です。これがあがっていると、ハードマクロは次のデータを送ってこれなくなります。

このようにtrn_rdst_rdy_nを制御するのですが、trn_rdst_rdy_nの遷移するタイミングはハードマクロの動作する62.5MHzに同期していなければなりません。また、パケットを受信している期間を避けなければなりません。パケットの受信期間中にtrn_rdst_rdy_nをアサートすると、いろいろあってブルー画面に至り、危険です。

書き込みに時間がかかるメモリへのインタフェースなどができるようになります。

|

« EXPARTAN-6Tのコアとサンプルデザイン、諸々をアップデート | トップページ | MITOUJTAGがi.MX25のバウンダリスキャンに成功! »

コメント

コメントを書く



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




« EXPARTAN-6Tのコアとサンプルデザイン、諸々をアップデート | トップページ | MITOUJTAGがi.MX25のバウンダリスキャンに成功! »