« 2010年6月 | トップページ | 2010年8月 »

2010.07.31

LED光センサ3号機が動作開始

LED光センサ3号機の動作テストを行いました。

実は、この装置は回路設計から基板設計、FPGAまで、ほとんどアルバイト君にまかせっきりで、私が触るのは今日が初めてです。

Ledarray3_2_2Ledarray3_1

基板は3段重ねで、一番裏側にSpartan-6が乗っています。

このパネルのLEDには秋月で売っている3色のLEDを使っています。256個あるので、LEDだけで1万円以上します。
しかもばらつきが大きいため、綺麗な色を出すのになかなか苦労していました。電流制限抵抗を少しずつ変えながら、赤・青・緑の強さバランスを取るというなかなか大変なことをしました。
そして、過去に作ったLED光センサアレイのFPGAソースを移植したところ、それなりに動いたそうです。

そういうわけで、初めて遊んでみたのですが、なかなか眩しくて面白いです。
縦方向の感度の分離が全く出来ていない上に、感度も良くないのですが、これからの楽しいデバッグで何とかなる気がします。


| | コメント (0)

Spartan-6ボードのWebサイトを更新&出荷開始

このたび、特電Spartan-6ボードが新しくなることを機に、Webサイトを思い切って更新しました。
新しいWebサイトはこちらにあります。
http://www.tokudenkairo.co.jp/sp6/

構造がすっきりして、わかりやすくなったと思います。
新基板の回路図や、基板図、マニュアル、MCBを使ったサンプルなどを追加しました。

また、昨日から新ボードの出荷を開始しました。
オンラインショップでも受付を開始しました。
といっても、最初に作った4個はすでに出荷してしまったので、現在は在庫を切らしてしまっている状態です。
来週には20台の実装が上がります。再来週には7台の実装が上がります。

このように、今回のTDKN-SP6-16は全部で31台作る予定ですが、実は、現時点ですでに28個分のご注文をいただいておりますので、オンラインショップで提供できるのは、あと3個となります。
したがって、大変申し訳ございませんが、ご提供できるのは先着3名の方のみとさせていただきます。

現在、オンラインショップでご注文をいただくと、出荷できるのは8月11日ごろになります。
そのため、ご注文はご予約として承ります。
出荷可能となる8月11日までにご連絡いただければ、キャンセルも承ります。

残り台数が少なくなっておりますので、どうかこの機会をお見逃しなく!!

| | コメント (0)

2010.07.30

Spartan-6のODDR2の件、解決

先ほどのISE12.1のバグを発見したかも、の件ですが、早速、XILINXから回答がありました。(早い!)
既知のものだったようで、ISE12.2で直っているとのことです。
すでにアンサーにあるそうです。残念。
http://japan.xilinx.com/support/answers/36221.htm

ISE12.2に以降するとともに、新しいバグ探しの旅にいこうと思います。

| | コメント (0)

ISE12.1のバグを発見した(かも)

ISE12.1のバグを発見したかもしれません。

現象は、
Spartan-6において、特定のピンでODDR2の出力が変化しない
というものです。

具体的にいうと、XC6S16LX CSG324では、G1番ピン、G3番ピン、G16番ピン、G18番ピンのODDR2が動作しません。これらのピンは、MCBを使う際のクロック端子に使われるピンです。

G16_bug1

MCBのクロック出力端子はODDR2で使うなということでしょうか。これでは、自作のDDR2 SDRAMコントローラが作れません。つまり「Spartan-6にはMCBがあるんだから自分でSDRAMコントローラを作るな」ということでしょうか。あんまりです。

ソースコードを公開しますので、お時間のある方は試してみてください。


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VComponents.all;
entity main is
Port ( xtalclk_ip : in STD_LOGIC;
DDR2_CK_P : out std_logic;
DDR2_CK_N : out std_logic
);
end main;
architecture Behavioral of main is
signal clk : std_logic;
signal clkn : std_logic;
begin
clk <= xtalclk_ip;
clkn <= not clk;
ODDR2_inst_p : ODDR2 port map (
Q => DDR2_CK_P,
C0 => clk,
C1 => clkn,
CE => '1',
D0 => '0',
D1 => '1',
R => '0',
S => '0'
);
ODDR2_inst_n : ODDR2 port map (
Q => DDR2_CK_N,
C0 => clk,
C1 => clkn,
CE => '1',
D0 => '1',
D1 => '0',
R => '0',
S => '0'
);
end Behavioral;


NET "xtalclk_ip" TNM_NET = "xtalclk_ip";
TIMESPEC "TS_xtalclk_ip" = PERIOD "xtalclk_ip" 20 ns HIGH 50 %;
NET "xtalclk_ip" LOC = "D11";
NET "DDR2_CK_P" LOC = "G3"; # G16 for MCB1 , G1 for MCB1
NET "DDR2_CK_N" LOC = "G1"; # G18 for MCB1 , G3 for MCB3

なお、ISE11では問題ありませんでした。12.2で改善されているといいのですが・・

さらに不思議なことに、この現象は正側のODDR2ではD0に固定値'0'、D1に固定値'1'を入れた場合に起こります。負側のODDR2ではD0に固定値'1'、D1に固定値'0'を入れた場合にのみ起こります。
G16_bug2

さっそく、XILINXのWebCaseに投げてみることにします。

追記:解決しました。アンサーにあるそうです。詳細は次の記事で

| | コメント (0)

2010.07.28

Spartan-6のMCBを使ってみた

Spartan-6にはMCB(メモリ・コントローラ・ブロック)が内蔵されています。
新しくなった特電Spartan-6評価ボードで、この機能を試してみました。

MCBは、SDRAMのコントローラのハードウェアマクロです。
これを実際に使うには、CoreGeneratorでMIGというのを生成します。

MIGの使い方は非常に謎なところはありますが、試行錯誤して実験した結果、下記のようにするとそれなりに動くことが確かめられました。
・c1_sys_clkに、外部ピンからのクロックをつなぐ。
・c1_clk0から逓倍されたクロックが出てくる。
・c1_p0_cmd_instrにコマンドを与えて、mcb_cmd_enを'1'にすると、そのコマンドがコマンドFIFOに送り込まれる。
・コマンドの代表的なものは、"010"プリチャージ付きリード、"011"プリチャージ付きライト。
・書き込みデータは、書き込みFIFOに書き込んでおく
・読み出しデータは、読み出しFIFOにいつのまにかあらわれる

不満な点を挙げてみると、
・コマンドがちゃんと送り込まれたかということと、今どのコマンドを実行しているかを確認するすべがなさそうな感じ。
・ピン配置が固定されてしまい、自由にならない
・CoreGenでMCBを使うと、BRAMが勝手に使われる。
・1回のリード、ライトの長さが64ワード(1ワード=4バイト)に制限される

MCBを動作させてリード・ライトをしてみたときの、FPGAのI/O端子の波形を示します。
WENとかODTとかRASが激しく動いています。
Mcb_1

MCBのコアのユーザ側インタフェースの波形を次の図に示します
Mcb_2

どんなコマンドを送っているかというと、
① 書き込みFIFOにデータを送り込む
② 書き込みFIFOがフルになったら、Writeコマンドを発行する
③ 書き込みFIFOが空になったら(書き込みが完了したら)、Readコマンドを発行する
④ 読み出しFIFOがフルになったら、読み出し開始
⑤ 読み出しFIFOが空になったら、読み出し完了
です。

・256バイトのデータをFIFOに読み書きするに64クロック
・DDR2 SDRAMへの書き込み時間は18クロック程度
・DDR2 SDRAMからの読み出し時間は20クロック程度
でした。

しかし、このSDRAMが何MHzで動作しているのかは、不明です。
MCBのコアのクロックの入出力の関係がいまだ不明です。
おいおい調べていくことにしましょう。

| | コメント (0)

Spartan-6の新基板到着

Spartan-6の新基板が実装業者さんから到着しました。
今回から、ES品でないSpartan-6が載っています。

Np1027a

さっそく、電源を入れてざっと動作確認をしたところ、USB、I/Oピン、DDR2メモリ、SPIメモリはOKでした。

いろいろと新機能を盛り込んでいるので、楽しみです。
これから念入りに動作チェックを行います。

| | コメント (0)

2010.07.26

軽井沢にいってきました

昨日、今日と軽井沢にいってきました。
さすがに、東京よりは涼しかったです。
いろいろな観光名所を見ていたところ、すごい集中豪雨を経験しました。
視界が1メートルくらいしかないときもありました。

東京では品切れ続出の「食べるラー油」が、お土産屋にたくさんありました。
その土地のオリジナルのものだと思われます。
Layou

確かに美味しい。

| | コメント (0)

2010.07.23

Spartan-6基板の新バージョン

現在品切れしている特電Spartan-6基板ですが、次回のロットから新しくなります。

本日、基板が出来たので、基板屋さんの倉庫に基板を引き取りにいって、その足で南武線の沿線にある実装屋さんに持っていきました。宅配便を使うと時間がかかってしまいます。どうしても1日でも早く欲しかったので、自分の足で運びました。
いやー暑かった。
小田急線や南武線の車内で基板をじーっと眺めていた怪しい人は私です。
# 帰りに武蔵小杉の駅で南武線から総武快速線に乗り替えましたが、あれは遠いですね。

出来上がった基板の写真は、こんな感じです。
10枚面付けしています。
Np1027a_1

ミシン目で分離しているので、割る時にも安心です。

今度の基板は、次のような改良点があります。
① Spartan-6がES品から、プロダクト品に変わります。
② Spartan-6に内蔵されたMCBが使えるようになります。(ただし、FPGAのDDR2まわりのピン配置が全面的に変更されます)
③ I/Oから27組の作動信号ペアが取り出せるようになります。ペア内は等長配線(<10mil)されています。(この変更に伴い、I/OとLEDの一部のピン配置が変更されます)
④ 鉛フリーに対応します。
⑤ 6層基板になりました。
⑥ 現在、極めて入手が難しいATMELのSPIフラッシュROM以外に、ST/Numonyxや、SSTなどのROMが使えるようにしました。
⑦ 他、軽微な変更がいくつかあります。

基板の物理的な外形は変わりません。

1個1個の基板を拡大すると、こんな感じです。
Np1027a_2

あと、基板の欄外にWEEEマークを描いてみました。
Weee_2

このマークは、ヨーロッパでの廃棄物リサイクルと関係あるようなのですが、実は何のマークなのか私自身もよく理解していません。登録業者とか何とか・・・。そういうわけで、基板の製品の部分ではなく欄外に書いてテストしています。

それから、どうでもいいことですが、基板を金メッキ(もしくは金フラッシュ)仕上げにして、ベタパターンの上にレジストマスクを使って文字を書くと、金色の文字が書けます。この方法を編み出してからは、基板に金文字を書くのが常になりました。
Gold

追加のコストなしで見栄えをよくできるテクニックだと思います。いかがでしょうか?
会社のロゴとかデザインしたくなります。

今月の28日ごろに試作品が出来上がってきます。それで問題がなければ量産に入る予定です。ご期待ください。

| | コメント (0)

2010.07.20

MITOUJTAGのSPI ROMライタがSST社のSPI ROMに対応しました

MITOUJTAGのSPI ROMライタがSST社のSPI ROMに対応しました。
本日、書き込みとFPGAの起動が問題なくできることを確認しました。

V5sstrom

SST社のSPI ROMというのは、たとえば、SST25VF032Bといった品種です。

昨今、半導体の供給状況が悪化しており、世界的な規模で半導体不足が起こっています。そんな中、
特に不足しているのが、シリアル・フラッシュ・メモリです。

特にFPGAのコンフィギュレーションにも使える大規模な品種、たとえば、ATMELならばAT45DB081以上のようなものが、世界的に全滅しています。商社がメーカーにバックオーダーを出しても納期の目途が立たないようで、21週間待ちとか100週間待ちといった状況です。
avnet.comでは「144週」なんて表示が平気で出ます。それって3年弱!?おそらく「目途が立たない」という意味なのでしょうが。

このように、ATMELや、ST/Numonyxといったメジャー2強は軒並み全滅です。
(16ピンとかの巨大なパッケージのものは、稀に売れ残っているものがありますが、8ピンは形状を問わず、まずありません)

つまり、このままの状況が続くと、世界中で誰もFPGAのコンフィギュレーション回路が作れなくなってしまうのです!!!おそらく、半年はROMが手に入らないでしょう。

そんな状況の中、Digikeyに一筋の希望を見つけました。
Microchip/SST社のSPI ROMで、型番はSST25VF016BやSST25VF032Bです。

SST社のSPI ROMは、ST社のものとピン配置の互換性があります。

Sst25vf032b

しかし、コマンドの互換性がありません。
そのため、iMPACTでは書けません。

だから、MITOUJTAGが対応しました。
Jspisst

SST社のSPI ROMに、JTAG-SPI経由で間接的に書き込むことができるようにしました。
ATMELやSTほど高速ではありませんが、それなりの速度で書き込めます。

要約すると、
これから半年くらいの間に、XILINX FPGAのコンフィグにSPI ROMを使うならば、入手できるのはSST社のROMしか選択肢がありません。SST社のROMはiMPACTからは書き込めませんが、MITOUJTAGからなら書き込めます。

ATMELやSTといったメジャーどころの供給が回復することを願ってやみませんが、どうしても数か月以内にコンフィギュレーション用のROMが必要なのに入手できないという場合は、SST社のROMを検討してみるのも良いかと思います。

やはり、ATMELやSTのROMのほうが書き心地は良いし、一意なIDCODEが付いているなど付加価値も大きいのですが、どこを探しても手に入りません。(頑張れば手に入るけど、とても高くなる)

一応、次のSpartan-6ボードを作れるだけはATMELを備蓄していますが、その次のロットで備蓄が尽きて何も作れなくなってしまうことを避けるためにも、SSTのROMを数百個くらい備蓄しようと思っています。備えあれば憂いなしです。

追記:
ISE12のiMPACTが対応していないことからもわかるとおり、SST社のROMは、現時点ではXILINXが標準で対応しているものではないようです。(過去に対応していた時期はありました)

そのため、SST社のROMからXILINX FPGAをコンフィギュレーションする際には、原則として自己責任でお願いします。もちろん、お客様のためなら、私はできるだけサポートします。

| | コメント (0)

2010.07.16

MITOUJTAGのSPI ROMライタがVirtex-5や、ST/NumonyxのROMに対応しました

MITOUJTAGのSPI ROMライタがVirtex-5に対応しました。

iMPACTはMCSファイルをあらかじめ作っておかないと何もできませんが、このROMライタはMCSファイルを作る必要はりません。MCSがなくてもROMのIDCODEが見れたり、先頭領域をダンプができます。
また、書き込みはBITファイルから直接書き込めます。格段に便利になっています。

下の図はSPI ROMライタの画面です。XC5VLX50のJTAG経由でATMELのSPI ROMにつなぎ、先頭の領域をメモリダンプしています。
Jspi_v5

JTAG経由でSPI ROMを自由自在に操れます。

それから、ST/NumonyxのROMにも対応しました。STのROMは、DEVICE IDの後ろに16バイトのユニークなIDがつくそうです。
Jspi_st

また、ATMELのは書き込み前の消去を自動でやってくれますが、STのROMはセクタを消去してからでないと書き込みできません。その辺は自動的にやるようにしました。

ISE12のiMPACTではなぜかこのROMに書き込もうとすると27%くらいのところでFailしてしまうのですが、MITOUJTAGではFailせずに最後まで書き込めます。もちろん、SPI ROMからVirtex-5は問題なく起動します。

実験用ボードはこれまで空中配線だったのですが、さすがにまずいので万能基板に乗せました。ソケットでICを取り換えられるようにしたので、ATMELやST以外のいろんなベンダーのROMも試していきたいと思います。

Jspi_v5evl


今回対応したVirtex-5は、XC5VLX30、XC5VLX50、XC5VLX85、XC5VLX110、XC5VLX155、XC5VLX220、XC5VLX330、XC5VLX20T、XC5VLX30T、XC5VLX50T、XC5VLX85T、XC5VLX110T、XC5VLX155T、XC5VLX220T、XC5VLX330T、XC5VSX35T、XC5VSX50T、XC5VSX95T、XC5VSX240T、XC5VFX30T、XC5VFX70T、XC5VFX100T、XC5VFX130T、XC5VFX200T、XC5VTX150T、XC5VTX240T、つまり全種類です。
Virtex-5の全種類のBitStreamを生成すると100MBytesを超えます。しかし、圧縮すると数百kバイトくらいになります。BitStreamってのはものすごく密度が薄そうですね。

Virtex-5でのハマりどころは、BSCAN_VIRTEX5プリミティブが出すTDIのタイミングが、BSCAN_SPARTAN3EやBSCAN_SPARTAN6のものと違いそうだという点と、CCLKやDINがユーザI/Oではなく、STARTUP_VIRTEX5プリミティブを使ってアクセスするという点でした。

最新版はこちらのページ
http://www.tokudenkairo.co.jp/jtag/sp.html
からダウンロードできます。

| | コメント (0)

2010.07.14

Virtex-5でJTAG SPIするのは中々難しい

MITOUJTAGのJTAG SPIプログラマを、Virtex-5に対応させようとしていますが、なかなか苦労しています。
ISE12のiMPACTでできるというご報告をいただいているので、MITOUJTAGにできないはずはありません。

Spartan-3や6では、FPGAのコンフィギュレーション後にユーザ回路でCCLKを操作できるのですが、Virtex-5ではそうはいかないのです。CCLKは専用ピンに割り当てられていて、UCFファイルでそのピンを指定することができないからです。
しかし、CCLKはバウンダリスキャンで操作できるので、きっと何か中から信号を出力する方法があるはず・・・

どうやら、Virtex-5のデザインでSPI ROMにアクセスするため、CCLKやDINをユーザ回路から操作するにはSTARTUP_VIRTEX5というプリミティブを使うそうです。このSTARTUP_VIRTEX5に入れた信号が、FPGAのCCLKやDINにつながるそうです。
なるほど、やはりそういうものがありましたか。では、今夜試してみることにしましょう。

次の写真のように、市販の評価ボードにATMELのSPI ROMを空中配線してつないで実験しています。

Xc5vjspi

| | コメント (0)

2010.07.13

ある基板が届いた

今日、ある基板が届きました。

Fls256_1

さて、何の基板でしょう。
裏面は縦に配線がたくさん走ってます。

Fls256_2

動かすのが楽しみです。

| | コメント (3)

2010.07.11

MITOUJTAGがSPI ROMの書き換えに対応しました

大変お待たせいたしました!
MITOUJTAGが、SPI ROMの書き換えに対応しました。

書き換え方はとても簡単です。
まず、普通にMITOUJTAGからFPGAの書き込みを行うための画面を出します。
今回のバージョンから、「間接SPI」というボタンが登場しました。
これを押すと・・

Mjspi1_2


SPI ROMの操作パネルが開きます。
Mjspi2

このパネルを操作すれば、SPI ROMのIDCODEやセキュリティコードを読んだり、読み書き消去、メモリダンプ、なんでも自由自在です。

そのやり方の一部始終を、ムービーにしました。
ただ単にビデオに収めただけではなく、編集して字幕やBGMを入れるなど、ノリを良くしております。ぜひともご覧ください。(ちょっと音が出ますのでご注意ください。)

対応パッチは、MITOUJTAGのサポートページにアップロードしました。
http://www.tokudenkairo.co.jp/jtag/sp.html

ぜひとも、快適なFPGA環境を。

| | コメント (0)

2010.07.09

J-WriterがSPI ROMの書き込みに対応しました

J-Writerのバージョンが1.09βとなり、SPI ROMの間接的書き込みに対応しました。

現在のところ間接書き込みに対応しているFPGAは、Spartan3Eの全品種、Spartan3ANのXC3S700AとXC3S700AN、Spartan-6のXC6SLX16とXC6SLX45とXC6SLX45Tです。
対応しているROMは、ATMELのAT45DB011D、AT45DB041D、AT45DB081D、AT45DB161Dおよび、Spartan-3ANの内蔵ROMです。

これらのFPGAとROMの組み合わせであれば、書き込みができます。
だから、Spartan-3ANスタータキットなどは、自由自在です。

また、MITOUJTAGをお使いの方は、J-WriterのソフトウェアとPocket JTAG Cableを使って書き込みすることもできます。Pocket JTAG Cableのほうが、J-Writerケーブルよりも3~10倍高速です。

最新版ソフトウェアのダウンロードは下記のページから行えます。
・J-Writerの製品説明ページ
http://www.tokudenkairo.co.jp/jwriter.html

■使い方
・最初のFPGAにつながったSPI ROMのIDCODEを読む
jwriter -spi-getid any
 ※特電PCI Expressボードなどの場合

・2番目のFPGAにつながったSPI ROMのIDCODEを読む
jwriter -bypass any -spi-getid any

・2個のJTAGデバイスがチェーン接続されている場合に、最初のFPGAにつながったSPI ROMにデータを書き込む
jwriter -spi-auto ファイル名.bit -bypass any
 ※XILINX Spartan-3ANスタータキットなどの場合

Jwriter109

要は、従来のJ-Writerのコマンドの頭に-spiをつければ、そのデバイスにつながったSPI ROMを制御できるというわけです。

ただ、このような複雑な処理をコマンドラインで記述するのは大変なので、次はMITOUJTAG本体をSPI ROM書き込みに対応させたいと思いますご期待ください。

| | コメント (0)

2010.07.08

Spartan-3EのSPI ROMにもJTAG書き込み

Spartan-3EのSPI ROMにもJTAG書き込みができるようになりました。

Spartan-3Eの乗ったボードのJTAGポートに、JTAGケーブルをつなぎます。
Sp3e_jspi

そして、おもむろにコマンドを打ちます。
jwriter -pockj -spi-auto ファイル名.bit

Sp3e_jspi_2

これだけで外付けSPI ROMに書き込み&ベリファイができます。
XC3S1200EのコンフィグデータをROMに書き込む場合、トータルで15秒程度でした。

もちろん、BitファイルをMCSファイルを変換する必要はありません。
BITファイルのまま直接書き込めます。
変換がいらないということは、とても快適です。

このツールは、明日か明後日ごろにはリリースできるでしょう。

| | コメント (0)

2010.07.07

Spartan-3ANの内蔵フラッシュへの書き込み

Spartan-3ANはフラッシュROMを内蔵しています。

このフラッシュROMはInternal Serial Flash(ISF)と呼ばれるもので、SPI方式のシリアルフラッシュROMです。

現時点では、このROMに書き込むためにはiMPACTを使わざるを得ないので、そのやり方はとても複雑で面倒です。
iMPACTでやる方法を簡単に説明すると、まずiMPACTをPROMファイルモードで立ち上げてBitファイルからMCSファイルに変換し、再度iMPACTを初期化してバウンダリスキャンモードにしてデバイスを認識させ、FPGAに先ほど作ったMCSを追加して書き込むというものなのですが、この手順はとても大変です。
FPGA初心者には「???」の連続となるでしょう。

だから、MITOUJTAGや、J-Writerで、手軽に書き込みができるようにしたいと思っています。bitファイルをわざわざMCSに変換することなく、コマンド一発で直接ROMに書き込めるのが理想です。

ターゲットボードは、「Spartan-3AN スタータキット」。このボードは、XC3S700AN FG484のほか、ATMELのSPI ROMと、STのSPI ROMが載っています。

まず、このボードのJTAGコネクタに、JTAGケーブルをつなぎます。
Sp3anspi

先日、Spartan-6の外付けSPI ROMにJTAG経由で書き込むツールを開発したので、そのテクノロジをJ-Writerに移植したツールを作りました。

JTAG経由でSPI ROMに書き込むための原理を簡単に説明すると、最初にFPGAにあるデザインを書き込みます。そのデザインとは、JTAGポートとSPIのポートをつなぐもので、JTAGのポートを通じてSPIの信号をやりとりできるようになるというものです。
最初にそのようなデザインでFPGAをコンフィギュレーションした後、FPGAに用意されたJTAG通信機能を使って、ソフトウェアからFPGA内部に信号を送り込み、SPIのポートを叩くというわけです。

まずは、外付けのシリアルROMからです。
jwriter -pockj -spi -getid any -bypass any
とコマンドを入力すると・・

Sp3anspi_1

SPI ROMのIDCODEである
1F 26 00 00 00 00
やステータスレジスタ、セキュリティレジスタの内容が読めました。
このボードの外付けATMELフラッシュになら、書き込みやベリファイがOKで、FPGAも起動でした。

では、内蔵フラッシュ(ISF)を読んでみましょう。
このISFはSPI互換のようです。

まず、IDCODE。

Sp3anspi_2

「1F 25 00 00 00 00」
おおっ、それらしきものが読めているではないですか!!
しかもATMELと同じようなセキュリティレジスタまである!?

次に、iMPACTでISFに書き込んだデータをこのツールで読んで、先頭をダンプしてみると、
Sp3anspi_3

おおっ、コンフィギュレーションデータが読めているではないですか!!

どうやら、メモリアレイのリードや、IDCODEのリード、チップ消去はできるようです。書き込みはできませんでした。

今日の成果をまとめると、Spartan-3ANスタータキットに対して

・外付SPI(ALTEL) 書き込み…○ 読みだし…○ 消去…○
・外付SPI(ST)  書き込み…× 読みだし…○ 消去…×
・内蔵ISF 書き込み…× 読みだし…○ 消去…○

でした。
きっと、書き込みや消去ではSPIのコマンドが違うのでしょう。

あと1~2日でJ-Writerが、内蔵・外付けSPIに対応できるでしょう。
その2~3日後に、MITOUTJAGが、内蔵・外付けSPIに対応できるでしょう。

快適なFPGA開発環境を目指して、鋭意開発中です。

--

追記

Spartan-3ANの内蔵フラッシュへの書き込みも正常にできるようになりました。AT45DB081Dと全く同一の手順で書き込みができました。

| | コメント (0)

2010.07.05

FPGAへの信号注入でメモリのデバッグ

BLOGANAモジュールを使って、FPGA内部にJTAG経由で信号を送り込むデバッグ方法は、こんな場合にも使えます。

まず、BLOGANAモジュールをインスタンシエートします。


inst_blogana : blogana port map
(
clk => clk,
trig => blogana_trig,
din => blogana_din,
USER_OP => blogana_user,
SAMPLE_EN => '1',
samp_freq => 200000000,
width72 => '1',
length1024 => '1',
busy => blogana_busy
);

トリガ条件を、DDR2メモリコアの、メモリリードのACKとメモリライトのACKに仕掛けます。


blogana_trig <= (mem_rdack_a and blogana_user(19)) or
(mem_wrack_a and blogana_user(18));

BLOGANA_USER(19)が'1'になっていればリード、BLOGANA_USER(18)が'1'になっていればライトに応答したときにトリガがかかるようになります。

これを使って、開発中のSpartan-6LXT PCIeボードのDDR2メモリをテストしてみます。

まずはライト時。128MBytesの乱数データを書き込んでいます。
Ddr2_wr

次にリード時。書き込んだ乱数データを読みだしています。
Ddr2_rd

こういったトリガ条件の切り替えが、パソコンのGUI上からポチポチやってできます。

他には、ステートマシンの遷移条件の中に仕込めば、パソコンのGUI上からステートマシンの動作を変えられます。


case gen_state is
when "000" =>
if(pushsw = '1') then -- WR TEST
gen_state <= "100";
elsif(timer_pulse = '1') or (blogana_user(16) = '1') then
gen_state <= "001";
end if;
・・・

DIPスイッチを触らなくていいので便利です。

| | コメント (0)

2010.07.04

FPGA内へ信号を注入するデバッグ

PCI Expressで、CombinedWriteで書き込んだデータをDMA Readで読みだすと、稀にデータが化けるという現象が発生します。CombinedWriteで書き込んだデータをPIO Readで読みだしたり、DMA Writeで書き込んだりしたデータをDMA Readで読み込んだりした場合は大丈夫です。

要するに非常に不可解で難しそうな問題なのですが、今回は、MITOUJTAGのBLOGANA機能に内蔵された「FPGA内部へのデータ出力機能」を使って、そのデバッグを行ってみたいと思います。この機能をつかうと、MITOUJTAGの画面からマウスでポチポチすることで、JTAGを介してFPGAの内部のロジックへデータを送り込むことができます。実は、この機能は数年前から用意されていました。

MITOUJTAGを使ってFPGAの中にロジアナを埋め込むには、BLOGANAというコアを埋め込みます。現在はXILINXのFPGAのみ対応しています。

BLOGANAのポートは次のようになっています。


entity blogana is
Port ( CLK : in std_logic;
TRIG : in std_logic;
USER_OP : out std_logic_vector(19 downto 0);
SAMPLE_EN : in std_logic;
DIN : in std_logic_vector(71 downto 0); -- 必ず72本
SAMP_FREQ : in integer range 0 to 2147483647; -- サンプリング周波数
WIDTH72 : in std_logic; -- 1:72ビット 0:36ビット
LENGTH1024 : in std_logic; -- 1:1024ワード 0:512ワード
BUSY : out std_logic -- 必ずどこかに出力すること
);
end blogana;

このうち、USER_OPという20ビットの端子が、FPGAの内部に信号を送り込むためのポートです。
任意の信号を送り込むことができますが、主にトリガ条件の指定に使います。

BLOGANAでは、トリガの条件をユーザがHDLを使って記述します。
たとえば、


BLOGANA_TRIG <= dma_wr_req_i
when (BLOGANA_USEROP(19) = '1')
and (dma_addr(15 downto 0) = BLOGANA_USEROP(15 downto 0)) else
rcvd_cfgrd or rcvd_cfgwr or rcvd_mrd or rcvd_mwr
when (BLOGANA_USEROP(18) = '1') else
'0';

のようにします。

すると、

・BLOGANA_USEROP(19)という信号が'1'で、かつ、dma_addrの下位16bitがBLOGANA_USEROPの下位16bitと一致し、dma_wr_req_iが'1'の場合
という条件と、
・BLOGANA_USEROP(18)という信号が'1'で、かつ、rcvd_cfgrdか、rcvd_cfgwrか、rcvd_mrdか、rcvd_mwrのいずれかの信号が'1'になった場合
というトリガ条件が作れます。

このBLOGANA_USEROPから出す信号は、MITOUJTAGのロジアナ画面の以下の部分から操作することができます。

BLOGANAから信号を注入する方法

つまり、MITOUJTAGの画面上でチェックボックスをON/OFFしたり、テキストボックスに値を書き込めば、その値がFPGAの中に出力されるというわけです。

さて、ここでCombined Writeのデバッグに入りましょう。
まず、Combied Writeで書き込んだデータが化けて読みだされるのは、毎回0x300か0x380番地あたりと決まっています。そこで、BLOGANA_USEROPの下位16bitに0x300を指定して、キャプチャをスタートさせます。
こうすると、再コンパイルすることなしにロジアナでトリガしたい条件が変えられます。

すると、DMAアドレスが0x300になったときにトリガがかかります。
実験したところ、アドレス0x380で読みだし不一致エラーが発生しました。

トリガ点から少し右を見ていくと、アドレス0x380用のデータを送信している場所が見つかります。
受信エラーになった部分のデータ転送。バス上は正しく流れている

このデータは、80 B3 30 CA BB 6E ・・と読むことができ、書き込んだデータ(下の画面)と同じです。
Wdata

つまり、Combined Writeで書き込んだデータをDMA Readで読みだしても、PCI Expressのバス上には正しく流れていました。FPGAの中のコアの問題ではなく、RootComplexが受け取れていないか、Windowsのメモリ管理の問題であるということになります。問題があるとしたらドライバの中か、キャッシュの扱い方などなのでしょう。

結局のところ、Combied Writeの謎は解決していませんが、パケットの送る順番とかプロトコルの問題ではなさそうだということはわかりました。


このBLOGANAからのデータ出力機能はかなり便利で、たとえば、DMAの最後のアドレスにトリガをかけてキャプチャをすると、DMA後の割り込みの部分に焦点を合わせることもできます。
DMA長が8192バイトの場合、DMAアドレス = 0x1F80というトリガ条件を設定します。

DMAの最後で割り込みを発生させているところにトリガを合わせる

BLOGANA_USEROPの機能は、トリガのためだけに使うのではなく、もっと積極的にFPGA内部へのデータ出力を行うのにも使えます。

たとえば、リセット信号を出したり、テスト用の回路を起動させるための信号として使うと便利です。
次の図は、PCI ExpresのLTSSM(リンク・トレーニング・ステートマシン)をリカバリステートに入れてみたときの波形です。FPGA内のIPコアに、リカバリステートに入るようなトリガをBLOGANA_USEROP(16)経由で与えています。

Force_recovery

MITOUJTAGの画面上で □16 と書かれたチェックボックスをON/OFFすれば、物理層が強制的にリカバリステートに入れられるわけで、エラー状態などのデバッグに役立ちます。

今回紹介した、BLOGANAからの信号出力機能はいかがでしたでしょうか?
BLOGANAはユーザにオープンにされていて、かつ自由度が高いので、
手軽で便利に使えるのではないかと思っています。

今月は、さらにBLOGANA機能を強化していきたいと思います。

| | コメント (0)

2010.07.01

AtomのマシンでISE

今夜は、先日のミニデスクトップPCを持ち帰ってきて遊んでます。

本当は明日のPCIeセミナーのためのデモの練習用なのですが、パソコンをいじってたら面白くて・・

Atomise

このマシンのAtomは、調べたらAtom D510というもので、1.66GHzで動いています。
2コアなのに、HyperThreadingが使うと4コアになります。

コアが4つもあるのか速そうじゃん、ってことで、ISEを起動してあるデザインを論理合成してみることにしました。

結果は、
・HyperThreading OFF(2コア)・・ 7分32秒
・HyperThreading ON(擬似4コア)・・ 7分30秒
全然変わりませんでした。

やはり擬似的にコアを増やしても実際のアプリで劇的に変わるわけではなさそうですね。

| | コメント (4)

« 2010年6月 | トップページ | 2010年8月 »