2013年7月
開発日記 〜2013年7月 (開発・出荷・FPGAマガジン掲載まで)
日記のリンク
10月(Linuxの起動) 9月(Artix-7冊子とU-Bootの起動)
8月(拡張基板の開発とHDMI出力奮闘) 7月以前(開発・出荷そしてFPGAマガジン掲載)
7月25日(木)
FPGAマガジン Vol2が発行されました。このFPGAマガジンの表紙を飾っているのは、実は特電のArtix-7ボードです。記事も少し書かせていただきました。
ただ、記事がとても長かったのでようで、半分に切られてしまって、残りの半分(FPGAとつなぐインタフェース回路をVHDLで設計し、SlaveFIFOのファームウェアを開発する話)は次号に掲載ということになりました。
7月24日(水)
現在、在庫しているボードのファームウェアをUSB-JTAG書き込み対応版にアップデートしておきました。
7月22日(月)
USB-JTAG書き込みツールのsp6jtagwを改め、s6a7jtagw.exeを作成。
USBを挿してツールを起動すれば、簡単にFPGAにもSPI ROMにも書き込める。
SPI ROMに書き込むときにMCSに変換する必要などない。
これでもうiMPACTとは、おさらばさ!
実はこのツール、Spartan-6にもArtix-7にも、両方対応しているのだ。
7月21日(日)
ついに、JTAG経由のSPI ROMの書き込みができた。
いままでちゃんと動かなかったのは、JTAGE2モジュールから出てくるDRCKというクロックをそのままprocess文に入れていたからではないかと思う。BUFGを1回通すようにしたら、極めて安定して動くようになった。
そういえば、XILINXが純正ボードAC701を値下げしたと聞く。特電ボードに対抗するつもりなのか?
7月20日(土)
EZ-USB FX3に高速なJTAG信号を出力させようと頑張った結果、極度に最適化されたARMのアセンブラを組んで、ようやく4.545MHzを達成。XC7A100Tをわずか8秒でコンフィグできるようになった。MITOUJTAGからバウンダリスキャンできる。
もう、Platform USBなどの外付けUSB-JTAGケーブルはいらない。USB3.0が1本あればいい。
7月19日(金)
本日の出荷は3台。増設したEndPoint2を使って、ホストPCからの指示によってGPIOからJTAG信号らしきものを出すことができた。今夜にはArtix-7の書き込みができるようにしたい。

EndPointはこういう構成になっている。EndPoint1がFPGAとの高速通信用で、EndPoint2をUSB-JTAG用。
USBで高速通信しながら、その様子をバウンダリスキャンで観察できる。
7月17日(水)
本日の出荷は2台。どんどん売れますように・・・
7月16日(火)
初出荷!ご注文をいただいたお客様、本当にありがとうございました。本日の出荷は1台。
USB-JTAGの開発を始めました。EZ-USB FX3のslavififoのサンプルにEndpointを追加して、CPUから自由にアクセスできるようにしました。FX3にEndPointを追加するやり方がわかりました。
7月13日(土)
MicroBlazeを入れていろいろ試してみました。
特に問題なく動いています。ペリフェラルテストやメモリテストなどができるので楽しいですよ。
それから、Q&Aのページと、MicroBlazeの使い方のページを書きました。
7月12日(金)
販売開始しました。どんどん注文が来ると嬉しいな。
7月10日(水)
ホームページをリニューアルしました。
7月9日(火)
マニュアルの執筆を開始
USBのUVCというクラスの実験をしました。Windowsが認識できる汎用のビデオクラスです。これは面白そう。
7月8日(月)
部材一式が実装屋さんに到着。
試作のときから比べて、いくつかの部品の定数を変更しました。
・ JTAG信号(TDI,TCK,TMSの3つ)のプルアップ抵抗を1kΩ→4.7kΩに変更
・ SPI ROMのMISOのプルアップ抵抗を外す
お願いする時間が遅かったためか、納期が1日伸びてしまいました。
当社到着は7月12日になるそうです。
7月7日(日)
Artix-7はまだ出始めなので、正規ルートで購入しようとすると納期2か月くらいかかります。
すると、先の需要を予測しながら定期的にオーダーを入れていかなければならないのですが、これが難しい。
それに、Artix-7にはスピードグレードが-1,-2,-3とあって、現時点では品薄なので1種類で十分な数をそろえることができません。したがって、やむを得ず、出荷するボードは-1のものや-2のもの、-3のものが混在することになります。とりあえず、最初のロットとして、-1を4台、-2を6台、-3を2台で計12台作ることにしました。
7月6日(土)
USB給電の場合、電源投入時にFPGAのコンフィグを延々と繰り返してしまう問題が発生。
原因を調べていくと、
・ SPI ROMからコンフィグする場合で電源投入時のみ発生
・ DDR3 SDRAMが動作するデザインで発生
・ NCP361というUSB用過電圧保護素子は600mAまでしか流せない
・ EZ-USB FX3がRenumeration時に瞬間的にきわめて大きな電流を消費する
・ ACアダプタ給電の場合は問題は発生しない
ということから、「SPI ROMを66MHz Dual」でコンフィグにするとFX3のRenumerationよりも先にコンフィグされてしまい、FX3のRenum時の電流によって電源電圧が低下するため、ということがわかりました。
回避方法は、
・ FPGAのコンフィギュレーションを66MHz 1bitにするか、33MHz以下のDualにして、遅らせる
・ NCP361をバイパスする
・ USBバスパワーではなく、ACアダプタ給電をお願いする
というのが考えられましたが、いずれもデメリットがあるので、100uFのコンデンサを5Vのラインに挿入することにしました。低ESRのコンデンサによってFX3が消費するスパイク状の電流に耐えられるようにします。
7月5日(金)
そろえた部品一式を実装屋さんに送りました。
いよいよ量産版の実装開始です。
7月4日(木)
Artix-7には12bit 1MspsのADコンバータが内蔵されています。これをXADCといいます。今日はXADCの実験をしてみました。内蔵XADCを使ってみました。XADCを使うのはとても簡単です。プリミティブをインスタンシエートしてDCLKに50MHz程度のクロックを与えれば、自動的に温度、コア電源(VCCINT)、AUX電源(VCCAUX)、BRAM電源(VCCBRAM)を測ってくれます。
内蔵シーケンサが勝手にスキャンして、その結果をレジスタファイルに入れてくれるのです。その変換結果は、XADCのDADDRというポートに読み出したいレジスタのアドレスを入れれば、XADCのDOというポートから出てきます。
こうして、読み出しているときのFPGA内部の波形を示します。

レジスタファイルは全部で128個あって、中には温度や電圧の最大値や最小値を記録するものもあります。
測定結果をExcelのシートに入れて、人間が読める形にしてみると、

なんとなく妥当な値になりました。
ただ、デフォルトでは、温度(チャネル0)とVCCINT(チャネル1)、VCCAUX(チャネル2)、VCCBRAM(チャネル6)しか測ってくれません。ユーザ用のVP入力を測りたい場合にはシーケンサに有効ビットを立てる必要があります。
XADC_inst : XADC generic map ( -- INIT_40 - INIT_42: XADC configuration registers INIT_40 => X"0000", INIT_41 => X"2000", INIT_42 => X"0800", -- INIT_48 - INIT_4F: Sequence Registers INIT_48 => X"7f01",
これで、チャネル3(VP/VN入力),4(VREFP),5(VREFN)も変換されるようになります。
いわゆるシステムモニターができるわけです。
それから、特電Artix-7ボードにはDPとAGNDいう端子がピンヘッダの横に出ています。ここにポテンショメータをつけて電圧を測ってみました。

FPGAの中にはXADCの結果出力をピンヘッダに出すだけの簡単なデザインを入れておきます。そして、ピンヘッダに出てきたピンの値を、MITOUJTAGのバウンダリスキャンを使って読み取り、MITOUJTAGをロジアナモードにしてアナログ表示させるというわけです。
まずは、コア電圧の1.0Vをポテンショメータで分圧した電圧を測ってみます。
すると、こんな感じ。

うーん。5bitか6bit程度の精度しか出ていません。
次に、アナログ用の1.8V(デジタル1.8VからLCフィルタで綺麗にしたやつ)をポテンショメータに入れ、アナログ入力の端子に47pFのコンデンサをつけてみます。

辛うじて8bit程度の性能が出ているような気がします。
ポテンショメータまでのリード線が長いためか、外部からのアナログ入力はノイズまみれになります。
もう少しリード線を短くしたり、コンデンサをつけたりしたほうがいいのかもしれません。
結果は、
- VREFN=VREFP=AGNDにすれば内蔵リファレンスが使用されるようになりますが、精度を期待するなら専用のADCとVREFを外部に付けたほうがいいということです。
- 外部リファレンスを使うには、XADCの端子はBGAの内側すぎるので簡単には使えません。無理してまでXADCを使うメリットはないと思います。
- Artix-7にはVP/VNというアナログ入力専用端子と、汎用のGPIOと兼用のアナログ入力端子があります。前者のほうがインピーダンスが低いので、高速かつ正確に測定できるそうです。VP/VNを使いましょう。
- MIGを使ってDDR3を使うと、温度を監視するためXADCが使われるので、ユーザ回路でもXADCを使えるかどうか不明です。つまり、FPGA内のXADCを使って何かを計測してDDR3 SDRAMに蓄えるような回路は簡単には作れないということではないかと思います。
- そもそもノイズまみれのディジタル回路の中心で高精度AD変換を期待するほうが間違っていると思います。XADCは電源・温度監視用と割り切って、計測用の本格的なAD変換をしたいなら専用のチップを外付けしたほうがいいんじゃないかと思います。
- ZED Boardでも同じことをしてみたけれどやはり12bitの精度は出ていなかった。ZED BoardではVREFに専用のリファレンスICを使っているけど、特電Artix-7と同じくらいノイジーであった。
結論を一言でいうと、
XADCは温度・電源モニタくらいにしか使えない
計測制御をしたいなら外部にADCをつけるべき
7月3日(水)
DDR3メモリにアクセスすることができました。Spartan-6とちがって、Artix-7にはMCBがありません。そのため、ソフトコアを使ってアクセスしなければなりません。Artix-7でDDR3にアクセスするにはMIGを使うことになります。ただ、MIGの使い方を理解するのがとても大変なのです。MIGで困った点は、
- MCBとはポートがまるで違う
- 大きなFIFOが入っていない
- シングルポート
- パラメータでは自由に設定できるけれども、入力クロックの周波数をある範囲内にしないとタイミングエラーが収束しない
- アドレスバスのビット幅が1bit大きくなっている
などがあります。そこで、下記の図のような構造を作って、DDR3メモリ全域に読み書きすることに成功しました。

6月21日(金)
最初の2台の製造が上がってきました。早速動作確認しています。このボードは0.75V,1.0V,1.2V,1.5V,1.8V,3.3Vと実に多彩な電源を必要としますが、オンボードのスイッチング電源で作り出しているので、5V(または3.3V)単一電源で動作します。
USB3.0とFPGA間の通信が確認できました。OUT:260MB/sec、IN:330MB/secと、USB3.0ならではの速度が出ています。これはUSB2.0 HighSpeedの約8倍に相当します。
6月18日(火)
生基板が出来上がってきました。早速実装を開始しました。











