2012/11/14

ZedBoardのDDR3 SDRAMチップ

 ふと気づいたのですが、ZedBoardの2012/08/24版の回路図にはDDR3 SDRAMチップは
MT41K128M16HA-187E
となっています。 ですが、Hardware User's Guideには
MT41J128M16HA-15E
と書かれています。 Board Definition Filesのzedboard_RevC_v2.xmlにも
MT41J128M16HA-15E
と書かれています。

 結局、-187Eなのか、-15Eなのかどっちだよ。

 実物は……、直接の型番は刻印されてないんですよね。これに限らず、最近は小さい部品が多くて、刻印見ても型番分かりづらいですよね。

 でも、調べてみると、MicronはWebページにFBGA Decoderというのがあって、FBGAのチップ刻印とパーツ型番の対応を調べられます。

 結論としては、FBGAの刻印 D9LGQ は -15E と対応するので、搭載チップは-15Eの方でした。

 さらに、ZedBoardのサイトをチェックすると、2012/11/08版の回路図が提供されていて、それでは、型番が直っていました。ボードにも色々Errataがあるらしく、赤字でいろいろ書かれていて不安になる回路図です。

 ところで、-187E-15Eで何が違うのかというと、主には最大動作周波数みたいです。PCパーツ風に言えば、DDR3-1066かDDR3-1333かということですね。-15Eを666MHzで動かす場合はCL=9ですが、-187Eを533MHzで動かす場合はCL=7になるとのこと。-15Eは533MHzで動かせば-187EとコンパチになりCL=7で動かせるみたいです。

 ということで、ZedBoard開発では実物が-15Eでも、533MHz動作なのでCL=7にセッティングするのが、CL=9に比べて、ホンのわずかアクセスが速くてお得そうです。実際にSDKにExportされるhw_platformのサマリを見た限りでは、-15E設定でもCL=7になっているので、デフォルトで大丈夫みたいです。

Xilinx ISE 14.3

 これまでZedBoard用にはXilinx ISE 14.2を使っていましたが、14.3をインストールしてみました。

 WebPackライセンスでXPS立ち上がるときにラインセスエラーのダイアログ出るのは相変わらずでした。

 とはいえ良くなっている点はあって、まず、新規プロジェクト作成時のボード選択にZedBoardが追加されていました。


 これまではZC702で進めていって、後でZedBoardの情報をImportさせる、としていたので、一手間減りました。

 他にもPlanAheadでも見た目など微妙には変わっているようです。ですが、大きな落とし穴が……。

 BitGenまで進むと、
ERROR:Bitstream:188 - Bad time stamp "MON 29 OCT 10:2:52 2012". Expected "YYYY/MM/DD HH:MM:SS".
といったエラーが出ます。 既にXilinxのサポート情報にも載っていて、「ISE 14.3 - 「ERROR:Bitstream:188 - Bad time stamp"」というエラー メッセージが表示される」によると、

  • エラーと出てもbitファイルは生成される
  • LANGUAGE環境変数がJapaneseだと発生する
  • 14.4で修正予定

だそうです。エラー内容自体がどやねん、って感じですが、エラーと言っておきながらbitファイルは生成されるって……。

 それでも、発生条件が分かったので、回避できるか試してみました。
PlanAheadはバッチファイル(私の場合C:\Xilinx\14.3\ISE_DS\PlanAhead\bin\planAhead.bat)から起動しているので、それの最初の方に
set LANGUAGE=usenglish
と追記してみると、エラー出なくなったみたいです。

 Linuxでは試していないですが、同様の状況なら、LANG環境変数をCかen_USあたりにすれば回避できるように想像できます。

 長く使っている人ならCADツールのロケール周りの問題は珍しくはないですね。

 最近は、よく海外に行く人と話していると「シリコンバレーとか中国系とインド系の人ばっかり」とか聞きますので、ツール開発には英語ネイティブじゃない人が多く加わっていそうですが、それでもソフトウェアのインターナショナル対応は進まないものですね。

2012/11/13

ZedBoard未使用ピン

 ZedBoardというかZynqについてなのですが、PL部分の未使用ピンはどうなるのかな?と思ったので調べました。

 Xilinxの開発フローでは未使用ピンの状態はBitGenの時点で決まります。
BitGenはフローの最後に.bitファイルを生成するステップです。

 「コマンドラインツールユーザーガイド」のBitGenの章によると-gオプションで、サブオプションUnusedPinというところになります。

 Version 14.1については、Pulldown, Pullup, Pullnoneのいずれかが設定でき、デフォルトはPulldownだそうです。(デフォルト値はツールバージョンによって変わったことがあった気がします。XilinxじゃなくてAlteraの話だったかもしれませんが…)

 ZedBoardのチュートリアルなどでは、特にBitGenにオプション指定していないので、デフォルトのPulldownになっているのだと思います。

 ZedBoardのような開発ボードでは、FPGA外にいろいろ繋がっているけど全部は使わない、ということが多いので (例えば、SSRAM繋がっているけど使わない、とか)、変なことにならないようにしておきたいです。
 まぁ、気になるなら、使ってないデバイスについてもポート宣言キッチリしてCS#なんかをHigh固定でネゲートするとかすればいいんですが。

 DC特性によれば、Zynq側でのプルアップ/プルダウンは10kΩ以上の抵抗値みたいです。ということで、それより十分に小さい抵抗でプルアップ/プルダウンしている分には外付けのプルアップ/プルダウンが優先されそうです。うーん、でも、それはそれで、電流消費が増えたり、プルアップ/プルダウンに逆らってドライブするのが大変とか、相手のVILとVIHの範囲が云々…、と色々悩ましい感じもしますが。

 ま、ともかく、簡単にZedBoard回路図を見てみると……、

  • スライドスイッチ、プッシュスイッチ、LEDは変に電流流れたりすることは無さそう
  • Audio Codec、HDMI Transmitterは細かくは見てない。I2Cの外付けプルアップとZynq内部のプルダウンがぶつかっていて少し気持ち悪いかも
  • OLED(信号部分)も細かくは見てない
  • OLEDの電源スイッチのN-MOSのゲート信号が外付けプルアップ 10kΩとZynq内部プルダウンがぶつかっていて、上のI2Cより気持ち悪い気が

――というので、実はむしろPullup設定の方がいいのでは?という気も。

 とはいえ、ZedBoardのForumとかでも話題に出てないみたいだし。うーん、調べだしたはいいけどスッキリしない感じです……。