ようやくPCIっぽくなってきた
引き続きPCI Expressの開発の続きを行っています。
前回は、最初のコンフィギュレーション・リード・リクエストパケットが見えたところまでいっていて、このリクエストに応答するパケットを送信することができれば、次の段階に進めるだろう、という予測で終わっていました。
というわけで、任意のパケットを送受信できるよう、さらにIPコアの開発を進めました。

言葉で書くのは簡単ですが、やってみると意外と大変です。
まず、PCI Expressは、すべてのTLPパケットが32bit CRCでがっちりガードされています。自作の回路で作ったパケットが、パソコンのチップセットで認識されるためには、このCRCを作る回路がどうしても必要になります。そして、Ack/Nackプロトコルを実装しなければなりません。Nackが帰ってくると再送処理をしなければならないので、まじめに実装するとなるとFPGA内のブロックRAMを消費してしまいます。フロー制御もそれなりにだましだまし実装することが必要です。
こういったデータリンク層回路の上に、トランザクション層のパケットの組み立てと分解の回路を作ります。
回路を作るというのは、具体的にはステートマシンを作ることになります。
このあたりを作りこんでいくと、「PCI Expressは、16ステート程度のステートマシンが数十個あって、それらが密に連携しながら動いているシステムである」ということがだんだんわかってきます。
そういった回路を作り上げることで、ようやくパケットを送受信する基盤ができあがります。
パケットを送受信する回路が出来上がったら、受信したパケットがコンフィギュレーションレジスタへの読み出しであることを判定する回路や、読み出し要求に対して答えを返す回路を作ってやらねばなりません。また、ステートマシンです。
こういったものは、第4層になります。
第4層になると、コンフィギュレーションレジスタがどうのこうのといった議論になるので、ようやくPCIっぽい話が登場します。このあたりからCPUが動いて、起動時になにやらPCIバスを叩いているのが見えてきます。
逆にいえば、PCI Expressって、コンフィギュレーション空間とかそういう概念はPCIを継承しているけれども、通信方式はまったくPCIと関係がないんです。DEVSELとかIRDYとかそういう信号は一切出てきません。
| 固定リンク


コメント