EXPARTAN-6Tの最終動作確認
開発中のEXPARTAN-6Tですが、ようやく機能検査も最後段階に入りました。
まず、Spartan-6LXTのPCI Express Endpoint Block、つまり内蔵PCIeハードIPを使ってみました。結果は良好。
いままで特電PCIeコアでは、「AtomのWindows7マシンで、CONTECの拡張ボードを使った」場合に調子が悪かったのですが、内蔵PCIeマクロではケーブル接続でも問題なく認識されました。
もちろん、カードエッジ側も問題ありません。ケーブルもカードエッジも快調に動きます。さすが内蔵コア。
さて、Spartan-6LXTの内蔵PCI Expressをいろいろ調べていてわかったことは、これはトランザクション層以下がハードウェア化されたものだということです。トランザクション層パケット(TLP)の組み立ては、ユーザ回路で行わなければなりません。
言い換えると、Spartan-6LXT内蔵コアは、「アドレスとデータと長さを指定して書き込みリクエスト発行!」というような単純なものではありません。PCI Expressのパケット自体はユーザが自分で作らなければならないのです。内蔵コアはCRCの計算やデータリンク層ヘッダの付与、シーケンス番号の付与、バッファなどはハードでやってくれますが、設計者がPCI Expressについて深く理解していないと全く使えないのです。
つまり、Spartan-6LXTには内蔵PCIeコアがあるから、簡単にPCI Expressのデバイスが作れる、というほど簡単なものではないということです。PCI Expressのパケットの構造や特性を理解し、2重3重のステートマシンを自分で作らないと動きません。
ただ、コンフィギュレーションレジスタや割り込み関連はハードで行ってくれるので楽といえば楽かもしれませんが。
Spartan-6LXTコアと比べていて、特電PCI ExpressコアがAtomのマシンで調子悪かった原因の一つがわかりました。このマシンはOSにWindows7を乗せているのですが、Windows7はASPMといって電源を細かく管理する仕組みがあります。その中で、PCI Expressのリンクを自動的に低消費電力モードにするというオプションがあるのです。
このオプションをオフにしないと、ものすごく頻繁にL0s(低消費電力モードの一種)に入ってしまいます。
特電コアはL0sをサポートしていなかったというのも理由です。
それから、SATAのコネクタを通じたループバック通信も検証しました。
この基板、SATA用ポートは2つあって、ひとつがデバイス、ひとつがホスト用になっています。SATAはホストとデバイスでケーブルのTXとRXが入れ替わります。だから、この基板の2つのSATAコネクタを普通のケーブルでつなげばループバックして通信ができます。なお、SATA用のクロック発振器は150MHzのLVDSのを乗せています。1個1000円以上もしました。
検証用のため、CoreGeneratorでSATA用のコアを生成してもよいのですが、正直私はSATAは全くわからないので、PCI ExpressのPIPEを生成しました。でも、入力クロックが150MHzなので、リンクは3Gbpsで動くことになります。
かくしてGTP_X0Y0のチャネル0の送信ポートをチャネル1の受信ポートにつなぎ、チャネル1の送信ポートをチャネル0の受信ポートにつないでみたところ、見事にリンクアップして通信が出来ました。
SATAのプロトコルは詳しくはわからないので、とりあえずは通信の確立ができるというところまでを検証しました。この赤い線に、3Gbpsの通信が流れているのかと思うと、感慨深くなります。
これで約3週間にわたったEXPARTAN-6Tのすべての機能の検証が完了しました。
いよいよ来週から量産を行います。来週中には発売開始できるかもしれません。
ご期待ください!
最近のコメント