高速データ伝送の悩みを解決!OKIアイディエスの「iDMAC®」
こんにちは、小野です。今回は、これまでブログではご紹介していなかったOKIアイディエスの高速データ伝送ソリューションの1つ、「iDMAC」をご紹介します。
はぁはぁ…。
今年の夏は本当に暑くて暑くてたまらないなぁ。
同感だね。まるで熱暴走したサーバールームのようだ…。
エンジニアをヒヤリとさせるような一言はやめてくださいよ、体感温度が2℃くらい下がりましたよ!(笑)
ちょっとしたジョークさ。ところで、たとえばサーバールームの異常事態に気づくためにはセンサも重要だけど、異常を検知したときにそのデータをすぐさま外部へ送信、知らせる仕組みが大切だね。
なんか突然飛躍していますけど…。でも確かに、すぐ異常がわかれば、被害を最小限に抑えられますからね。つまり、高速データ伝送は様々な場面で求められる、ってことですよね。
そう、それが言いたかったんだよね。OKIアイディエスはお客様のニーズに合わせて複数の高速データ伝送ソリューション「iシリーズ」を用意している。たとえば、汎用的なインターフェースで画像を非圧縮のままで高速伝送したい時には…。
「iGiGE」ですよね。GigE Visionという産業用カメラの映像と制御データをイーサネット経由で高速伝送する規格で、イーサネットケーブルによって大容量の画像を高速伝送するソリューションです。
GigE VisionはUDP通信を使用しているんだ。それに対して、TCP/IPで、画像データ、センサのデータ、制御用のデータ、そのほか多様なデータを高速伝送したい場合には、「iTOE」だね。これもイーサネット通信が利用できるんだ。
そして、PCや装置内部の通信に向いているのが“PCI Express”という規格ですが、それに対応しているのが…。
「iDMAC」なんだ。このブログではまだ紹介していなかったんじゃないかな?というわけで、今回は「iDMAC」について詳しく解説していこう。
「PCIe」って?
そこからか。“PCI Express”(Peripheral Component Interconnect Express)は、コンピューターや装置内部で高速にデータをやり取りするためのシリアル通信バス規格だよ。ところで小野君はパソコンでゲームはやるかい?
そうかそうか…。いわゆるゲーミングPCとかだと、PCIeはマザーボードと拡張カード(グラフィックカード、SSD、ネットワークカードなど)を接続するために使われている。装置やPCのCPUやストレージ、その他、各デバイスの高速通信が行われているんだ。
PCIeは装置内部の高速データ伝送の中心的な役割を担っているといえますね。
そうだね。PCIeはPoint-to-Point接続を採用していて、ポイントからポイントへ、双方向に通信が行われるようになっている。双方向通信が複数同時に行えるようになっていて、1つあたりの通信はレーンという単位で呼ばれているんだ。
そういえば、PCIe 3.0とかバージョンの数字がついているものをよく耳にしますね!
2003年に登場して以降、周辺のデバイスや機器が進化するのに合わせて、PCIe規格も合計6回にわたってバージョンアップしているのだよ。
- PCIe 1.0(2003年登場):2.5GT/s、最大帯域250MB/s
- PCIe 2.0(2007年):5GT/s、帯域が2倍に
- PCIe 3.0(2010年):8GT/s、転送効率の向上(約1GB/s/レーン)、エンコーディング効率化
- PCIe 4.0(2017年):16GT/s、さらに倍速
- PCIe 5.0(2019年):32GT/s、サーバー&AI機器向け強化
- PCIe 6.0(2022年):64GT/s、PAM4変調による帯域倍増、レイテンシ削減、マルチタスク強化等
ちなみに、今年6月に最新世代のPCIe 7.0の規格が正式にリリースされたよ。
へぇー、世代を経るごとに進化していて、じゃあ今は第7世代が主流なんですね。
いや、そうでもない。実は今でも第4世代のPCIe 4.0や第3世代のPCIe 3.0がよく使われているんだ。
え、そうなんですか?時代に遅れているじゃないですか。
PCIe 5.0は広まりつつあるけど、新しい世代のPCIeはまだまだハイスペックなゲーミングPCなど、ハイエンドな領域で求められることが多くてね。古くてもPCIe4.0で性能は十分ということが多いんだ。
ふーん。でも最近はデータの大容量、高速データ伝送が求められるじゃないですか、その点はどうなんですか?
確かにね。PCIeを介して高速でデータ伝送するときに、CPUが使われると、処理が煩雑になって遅延の原因になりうる。CPUは他にも色んな処理や制御をしてるし。
じゃあやっぱり、新しい規格を採用すれば解決できるんじゃ…?
甘い甘い。それだと送受信両方の機器を刷新しないといけない。互換性があっても古い世代の規格が優先されるからね。ここでは、データ通信用にFPGAなどのデバイスを用意すれば解決する。DMA(Direct Memory Access)転送といって、CPUでメモリーのライト/リードをするのではなく、代わりにDMAコントローラがメモリー間通信を行うんだ。
なるほど!それなら、CPUの負荷を減らせますね。ん、FPGA?ということは?
そう、FPGAでDMA転送を助けるIPがOKIアイディエスの“iDMAC”なんだよ。
OKIアイディエス PCI Expressソリューション iDMAC®
“iDMAC”は、AMD製FPGA/SoCを用いて、CPUに代わって高速データ伝送を行ってくれるソリューションだ。と、詳しい紹介の前に、もう少しだけPCIeについて説明しておこう。
PCIeのアーキテクチャはいくつかのレイヤによって構成されているんだ。その中でポイントとなるのが、トランザクションレイヤパケット(TLP)。ヘッダーやデータペイロード、オプションのダイジェスト部などから構成されている。データ転送の要求・応答などのパケットを作って、データをどこへ送るのかアドレスの指定やコマンドなどのやりとりを行うんだ。
それってデータ転送のベースとなる部分ってことですよね。
この他のレイヤの処理は、AMD製FPGA/SoCを採用する場合、AMDから提供されているEnd Point IPというIPで行うことができるんだけど、トランザクションレイヤの部分は、ユーザーによる作りこみが必要なんだよね。
そうなんですか?!
開発する上で大きな手間となりそうですね。
そこで!!“iDMAC”では、トランザクションレイヤをあらかじめ作っておきました。デザイン構築に必要な主要な機能をプラットフォーム化してあるのです。
開発期間の短縮にもつながるし、PCIeに詳しくなくても、高速データ伝送を実現できるじゃないですか!主要な機能というのは?
具体的にはプロトコル処理やダイレクトメモリーアクセス機能、ターゲットアクセス機能などをプラットフォーム化しているんだ。End Point IPへ送信するTLPの生成機能と受信するTLPの解析・分解機能を持ったTLP Packet Generatorを内蔵している。でも、ポイントはこれだけじゃないんだ。

一般のDMAでは、「連続したメモリー領域」に対して一括で転送を行うんだけど…。
Windows OS(x86, x64アーキテクチャ)の場合は、メインメモリーのアドレス空間は、4kB単位(ページ単位)で不連続に管理されていているんだ。
そんな。データが不連続に保存されるなんて面倒くさい仕組みですね。せっかくのDMA方式なのに、それが原因で転送速度が落ちちゃったら意味ないじゃないですか。
そこで、iDMACでは、「スキャッタギャザーDMA」(Scatter-Gather DMA)という方式を採用したんだ。
スキャッタというと、分散するという意味がありますよね。ギャザーは集めるという意味です。CPUのメインメモリーに分散して格納したデータを、集めるってことですか?
そういうことだよ。データを集めて一括で送信するんだ。データを集めるための秘密が、「スキャッタギャザーリスト」だよ。iDMACでは、 “CDT List” (Command Descriptor Table List)と呼んでいるんだ。ここにCPUのメインメモリーのバッファ情報を格納してあるんだ。

“CDT List”に整理して管理しているというイメージでしょうか。メインメモリーのバッファ情報についてもう少し知りたいです。具体的に何の情報なのでしょうか?
さっきも触れたけど、メインメモリーのデータは不連続に4kBのページ単位で保存される。ページ単位のアドレス情報を“CDT List”に登録しておいて、FPGAに搭載したDMAコントローラが、この“CDT List”に登録されたアドレス情報をもとに、メインメモリーとローカルメモリー間の転送を行うんだ。
ああ、データの転送先と転送元を“CDT List”で管理しているのか!
なるほど、FPGAがメインメモリーとローカルメモリー間のデータ転送を行うことで、CPUはデータ転送が完了するまで、他の処理を行うこともできるし、他の処理に影響されない安定した高速転送が実現できるんですね。
対応デバイス
質問です、PCIeの規格とレーン数に対して、iDMACに適切なFPGAってどうやって選んだらいいんですか?
iDMACはPCIe2.0×4レーンからPCIe4.0×8レーンまで対応している。AMD製のデバイスごとにそれぞれどこまで対応できるか表にしてみたよ。
AMDデバイス |
PCIE Gen × Lane数 |
Versal |
PCIe 4.0 × 8
PCIe 3.0 × 16
|
Virtex Ultrascale+ |
PCIe 4.0 × 8
PCIe 3.0 × 16
|
Kintex Ultrascale+ |
PCIe 4.0 × 8
PCIe 3.0 × 16
|
Artix Ultrascale+ |
PCIe 4.0 × 4
PCIe 3.0 × 8
|
Spartan Ultrascale+ |
PCIe 4.0 × 8 |
Zynq Ultrascale+ MPSoC |
PCIe 3.0 × 16 |
Virtex Ultrascale |
PCIe 3.0 × 8 |
Kintex Ultrascale |
PCIe 3.0 × 8 |
Zynq-7000 |
PCIe 2.0 × 8 |
Virtex-7 |
PCIe 3.0 × 8 |
Kintex-7 |
PCIe 2.0 × 8 |
Artix-7 |
PCIe 2.0 × 4 |
こうしてみると結構幅広く対応しているんですね。お客様のご要望に応じたカスタムの対応もできるんですか?
もちろんできます!たとえば、DMA転送部分をマルチチャネル化したり、IP周辺のデザイン、設計開発も可能なのでぜひご相談ください。
最後に
これで、“iシリーズ”の高速データ伝送ソリューションがすべて紹介できましたね。
ずっと紹介していなくて、小野君が忘れているのかと思ったよ。
そんなことはないですよ!実はどうやって紹介するか、ずっと温めてきたんですよ。
記事のネタを温めすぎて、この時期はこんなに暑いのかな?
ネタを考えるのをやめて、ちょっとブログ更新をサボれば涼しくなりますか…?
小野君のボスから冷ややかな視線を浴びせられて涼しくなりそうだな。
ともあれ、OKIアイディエスは、様々なニーズにお応えできるよう様々な高速伝送ソリューション“iシリーズ”を用意しています。「高速データ伝送したいけど通信手段どうしよう…」「遅延やデータ欠損のないデータ転送を実現したい…」と悩みの方はぜひご相談くださいね!
下記製品ページでも紹介していますので、気になる方はこちらもチェックしてくださいね。
次回のブログ更新は9月を予定しています。
お楽しみに!
- ※記載されている会社名、製品名は、各社の商標または登録商標です。
- ※ここに記載されている仕様、デザインなどは予告なしに変更する場合があります。