XILINX FPGAとDDR3メモリを使った1GHzを超えるデータレートの基板を設計するとき、DDR3メモリの配線はどこまで等長配線にする必要があるのでしょうか?
次のうち、正しいものを選んでみてください。
① アドレス線とデータ線の配線長の差は10mm以内にしなければならない
② すべてのデータ線は誤差1mm以下になるよう等長配線する
③ クロックが一番最後に到着するように、一番長くする
④ FPGAのBGAの端子から、メモリの端子まで等長配線する
答えは全部✖です。
等長配線にはミアンダ配線という「ナスカの地上絵みたいなやつ」を描きますが、その分面積を使ってしまうし配線がまがりくねるのでインピーダンスも乱れて品質は下がります。一方、FPGAからDDR3メモリの端子まで最短で引けば、消費する面積は少なくて済み、波形の品質も最高になりますが、到着時間に差が生じてしまいます。
信号の品質を考えれば、等長配線なんてしないほうがいいのです。
そういえば、XILINXのMIGはIDELAYを使ってキャリブレーションをしてくれるので、メモリからリードするときの信号の到達時間に差があっても吸収してくれるはず・・・それならライト時もやってくれるのかな?🤔
残念ながらODELAYはありません。FPGAとDDR3メモリ間の配線長の差がライト時の性能に影響してしまうとは思いますが、どの程度まで配線長に差が許されるのでしょうか。どの程度まで等長配線を頑張ればよいかというのが今回のブログのテーマです。
次の図は、特電Artix-7ボードのDDR3メモリの配線です。



このようにくねくねとした配線が行われていますが、この配線長を調べてみると次の表のようになりました。

光は1nsで30cm進みますが、プリント基板上の電気信号はだいたい半分ですから1nsで15cm。電気信号が1mm進むのに要する時間は6ps~7psくらいです。(インピーダンスによって少し変わる)
さて、この特電Artix-7ボードではアドレス・コントロール信号の到達時間の差がクロックを基準にして-27ps~+47psであり、データの到達時間がDQSを基準にして-13ps~+33psであることがわかります。アドレス・コントロール信号は終端抵抗まで含めた信号の時間なのであまり意味がありませんが、データレート半分なので十分に遅いので考えなくてもいいでしょう。
DDR3メモリのデータラインは、DQSに対してセットアップやホールドタイムが規定されています。データバスが2バイト以上の場合は個々のバイトのグループに対してDQSがそれぞれ用意されています。それはDQSはキャリブレーション時にWrite levelingという仕組みで調整されるからです。
データレート1GHzの場合、FPGAが出す信号の安定している時間が800ps、遷移している時間が200psと仮定します。本当はオシロで見ればいいのですが、高速オシロで測ったときの画像ファイルがどこかへ行ってしまったので、記憶を頼りに仮定の話でいきます。

FPGAが出力する信号はデータ(DQ)の遷移の中央でDQSが遷移するように位相が90°ずれているので、メモリで受信したときにもDQSがこの安定の800psの中心にいれば、セットアップ400ps、ホールド400psが得られるので最大の安定性が得られます。
しかし、配線長に差があるため、実際にはDQSはデータの遷移の中心からずれてしまうでしょう。

DQが遅いビットもあれば早いビットもあるので、全てのビットが揃って安定している時間は400ps+Tmin~400ps+Tmaxまでとなります。
一方、DDR3メモリのデータに対するセットアップとホールドは、必要とするスピードやスレッショルドの深さにもよりますが、1GHz動作時には110psくらいです。800MHz動作時の最大でも165psです。

表の見方が難しいのですが、1066MHz動作時にはDQSが遷移する前後115psの間、すべてのDQが動かずに安定していればOKということがわかります。そうすると、配線長による到達時間の差は±285psまで許されることになり、DQSに対して±約40mmまでの配線長の差は許されることになります。
さすがに40mmもずれたら気持ち悪いし、反射でバタつくので常識的には±4mm程度にとどめるべきだと思います。
もちろんこの計算はクロック速度や、立ち上がり時間・立下り時間によっても変わってくるので一概には言えませんが、意外とマージンが広いことがわかります。それはDQとDQSの位相が半分ずれているため、デフォルトで500psものマージンがあるからなのです。
「配線長の差は1mm以内にしなきゃいけない」とか「アドレス線と全部合わせなきゃいけない」というのは嘘です。
大事なことですが、セットアップタイムもホールドタイムも必要です。TTLとは違ってホールドタイムも必要ですからクロックが最後に到着すればよいというものではありません。そのために90°ずらしているのですからね。
そうそう、FPGAのダイからBGAのピンまでの配線長は各ピンでバラバラです。Kintex-7の場合で調べたら60ps~200psくらいでバラついていました。基板の配線長の差よりもFPGAのパッケージの中の配線長の差のほうが大きいかもしれませんね。その調べ方はまた別の機会にしましょう。
😀
そういえば、Virtex-4で頑張っていたころはもっと等長配線が厳しかった気がしますが、最近はあまり苦労している気がしないなあ。こんな事情があるのかもしれませんね。
最近のコメント