« 2010年9月 | トップページ | 2010年11月 »

2010.10.30

ノートPC「Eee PC S101」を自力で修理

私の愛用していたノートパソコン(ネットブック) Asusの「Eee PC S101」が昨日の朝、突如壊れてしまいました。
電車の中で電源を入れようとしたら、画面が真っ白になって映らないのです。
ただ、パソコン自体は動いているようで、しばらくするとWindowsが起動する音が鳴ります。

Eeepc1

ネットで検索しても同じような症状の人はいませんでした。また、バッテリを抜いて電源を落として2時間くらい放置してみましたが、直りません。

メーカーのサポート係に電話してみました。すると、引き取って修理ということで、最大で3万円くらいかかるということでした。もし販売店の延長保証に入っていたら修理代金は安くなるとのことでした。修理に時間がかかるようですし、これがないと移動中に不便するので、自分で直してみることにしました。

以下に述べる記事は、あくまでも私のPCでの場合です。絶対に真似しないでください。真似してどのようなことが起きても、一切責任はとりません。

まず、液晶パネル側をあけます。下の写真で丸をつけたところのクッションの下に隠しネジがあるので、それを外します。
Eeepc2

するとパネルが外れるようになります。ツメを折らないように丁寧に丁寧にパネルを外すと、液晶が剥き出しになります。液晶は固定されていないので、簡単に外れます。裏を見てみましょう。
Eeepc3

Eeepc4

液晶パネルと本体基板をつないでいる青いケーブルが見つかります。ここが怪しい。
Eeepc5

この青いケーブルのコネクタが抜けかかっていたのが原因でした。
Eeepc6

PCの電源を入れると、このとおり、画面が映るようになりました。
Eeepc7_2


今回の修理はあまり難しくありませんでした。原因は、パソコンの中でのケーブルの抜けでした。液晶のパネルを開け閉めしている間にだんだん緩んできたのでしょう。

でもこのケーブル、もしかすると超極細の同軸ケーブルではないでしょうか。他にフレキのケーブルとかないし。シングルエンドの配線ならば1本1本ばらけている必要はないのですから、やっぱり同軸なのでしょう。この1mmにも満たない17本のケーブルに高速LVDSの信号を流しているのでは・・。安いネットブックでもこんなハイテクな部品が使われているなんて、すごすぎる!

| | コメント (10)

2010.10.26

Spartan-6LXTの内蔵PCIe EndPointの使い方を理解した

ついに、Spartan-6LXTの内蔵PCIe EndPointの使い方を理解しました。
うーん、なんていうか非常に複雑で面倒です。

内蔵EndPointは、TLPの組み立てや解読を行うために、ユーザが自分でステートマシンや上位の回路(ソフトウェア層)を作らなければなりません。

確かに、CoreGenで内蔵EndPointのラッパを作ると簡単なサンプルデザインが自動で作られます。XILINXのSP605に付属しているサンプルデザインも基本的にはそれです。このサンプルはメモリ空間の読み書きができるので、一見すると良さそうなのですが、実はそのサンプルデザインには、「1DWのデータ転送しかサポートしていない」という制限があります。

これはかなり重大な問題で、ルートコンプレックス(パソコン)は4バイトを超えるメモリ・リード/ライトのリクエストを発行できないのです。つまり、LONGサイズでしかアクセスできませんから、転送速度は上りも下りも1~2MBytes/sec程度になってしまいます。もし、2DW以上のリードリクエストを発行したら、EndPoingは応答を返さないので、タイムアウトしてしまいます。(パソコンが一瞬固まります)

内蔵EndPointを使ったデザインを作るには、やはりCoreGenの自動生成サンプルではなく、一から作り直さなければなりません。

そこで、今まで作ってきた特電PCIe互換コアを使います。特電PCIe互換コアは、DMA転送や割り込みまでサポートしていて、それなりに高機能で、すぐに使えます。この互換コアは独自のデータリンク層や物理層回路をもっています。

一方、内蔵EndPointは、PCI Expressの規格への準拠や信頼性は優れています。(コンプライアンステストに通っているのですから)。そのため。特電PCIe互換コアのデータリンク層以下をSpartan-6LXT内蔵EndPointに置き換えれば、高機能と高信頼性が両立できるはずです。

今日は、内蔵EndPointの使い方を解明するとともに、そういう移植を行っていました。
少し苦労しましたが、できました。

下の図は、2DWのメモリ・リード・リクエストを受け取ったときの挙動です。
Sp6pciememrd2dw2
「00000002 000016FF FCFF6808」というのがメモリ・リード・リクエストのTLPです。
それに対して
「4A000002 02000008 00001608 F43D85EE 8526871B」というコンプリーションを返しています。
最後の2DWのF43D85EE 8526871Bというのが応答したパケットに含まれるデータです。

このように、2DWのコンプリーションも返せます。

また、ルートコンプレックスからCombied Writeで送られてきた16DWのデータの塊も、問題なく受け入れられています。
Sp6pciememwr64

このような感じで、長いデータ転送ができるようになったので、FPGA内に64kバイトのメモリを実装し、メモリ空間の読み書きテストを行いました。
Sp6_pcie_test

エラーなく転送できていることが確かめられ、Writeは約120MBytes、Readは約1.8MBytesという結果が出ました。Readが遅いのはPIOモードであるためです。
あと2~3日じっくり取り組めば、DMAや割り込みまで移植できそうです。

PCI Expressが自由自在に使えるようになるまで、あと少しです。

| | コメント (0)

2010.10.25

PCI Express転送テストアプリとデバイスドライバを更新

PCI Expressの転送テストアプリケーションを新しく作ってリリースしました。
また、デバイスドライバについても、軽微だけれども重要な変更を行いました。

さて、今までは、特電PCI ExpressボードにはDOS版のよくわからない転送実験ツールや、GUI版の粗末なツールを提供してきましたが、ようやくWindows版のわかりやすいツールを提供できるようになりました。

DMA転送の実験を行う場合は、こんな感じで
Tkpetestwin1

PIO転送の実験を行う場合は、こんな感じで
Tkpetestwin2

やりたいことが簡単に選べます。

このツールは速度も計測することができ、DMA転送はIN方向約110MB/sec、OUT方向約160MB/secが出ています。やはりUSBに比べると段違いに速いですね。
一方、PIO転送+CombinedWrだと、IN方向約7MB/sec、OUT方向約170MB/secが出ています。やはりDMAを使わないと遅いです。

さて、今提供しているPCIeのサンプルデザインでは、FPGAの内蔵メモリのBRAMを8kbyteしか実装していないので、8kバイト以上の転送を行うと、入出力データを比較したときにエラーとなります。でもエラーチェックをしなければBAR1のサイズ(65536バイト)までの転送ができます。

また、DMAの最大転送サイズは4Mバイトに制限しています。これ以上のサイズの転送をしようとするとエラーとなります。なぜこのサイズに制限したかというと、DMAを行うためにデバイスドライバの中で「共有バッファ」というのを取得していますが、このサイズがあまり大きいとシステムリソースを圧迫するからです。また、カーネルモードに入るときにあまり大きなサイズのバッファをぶらさげて入ることができないからです(巨大なサイズのページのロックができない)。そのため、1回の転送のサイズは4MBytesくらいが現実的だろうと判断しました。
使わないような巨大なサイズのDMA転送ができるようにしておくと、システムに負担がかかるので小さくしたというわけです。128MBytesとかのDMA転送は4MBytesを小分けにして実行すればよいのですから。

また、PCI Expressは転送の方向にINとかOUTという呼び方はしないのですが、本アプリケーションではUSBに倣ってこう呼ぶことにしました。もちろん、INというのはアドインカード→パソコン方向の転送、OUTというのはパソコン→アドインカード方向の転送です。

あと、おまけですが、デバッグに便利な各種の情報を見れるようにしました。
Tkpetestwin3


このツールはソースも公開しているので、汎用PCI Expressドライバの使い方のサンプルとしてもご利用いただけるかと思います。

ダウンロードはこちらからできます。

これからしばらくの間は、Sparatn-6の内蔵PCI Expressを開拓するつもりです。
ご期待ください。

| | コメント (0)

2010.10.23

Spartan-6ボードをExcelから操作

ExcelのVBAマクロを使って、Spartan-6ボードを操作できるようにしました。
まずは次の画面をご覧ください。

Sp6excel_1

Excelのシートに置かれたボタンを押すと、Spartan6ボードからUSBを通じてデータを取りだしたり、書き込んだりできます。取得したデータはExcelのシート上に数字で書かれるだけでなく、その場ですぐにグラフ化されます。
入出力するデータは8bitとして扱うことも、16bitとして扱うこともできます。
Excel 2000でも動くように、データ長は最大で32000に制限しました。(グラフの描画とセルへの書き込みのため)

使い方を簡単に説明します。

① まず、サンプル・リファレンス・デザインをFPGAに書き込んでおいてください。

② シートを立ち上げたときには、このとおり、データもグラフも何もありません。
Sp6excel_default

③ 「USB Read」と書かれたボタンを押すと、選択されたソースからデータがキャプチャされ、このように数値とグラフが表示されます。グラフがない場合は新しくグラフを作成し、グラフがある場合はそのグラフの内容を書き換えます。
Sp6excel_captured

④ 「USB Write」と書かれたボタンを押すと、シート上の数値がSpartan-6ボードへ送られます。

⑤ 取得するデータのソースや、送信するデータのターゲットには、FPGA内で作りだすテストパターンのほか、ブロックRAMの内容や、DDR2 SDRAMの内容、GPIOが選択できます。
Sp6excel_source_2

とても簡単です。
このアプリケーションのうれしいところは、エクセルだからデータのコピーやレポートの作成が簡単にできるということに尽きるでしょう。

例えば、OV7670のCMOSイメージセンサをつないでみたら、640周期で繰り返しの波形が見えました。これは画像の輝度データをラインごとになぞっているのです。グラフの場所を変え、タイトルや軸のタイトルを変更してみました。
Sp6excel_ov7670

今回、はじめて、VBAマクロというものに触れました。いつもCとVHDLばっかりやっているので、普段とは違うことができてとても面白かったです。ハマってしまいました。
千個、数万個のセルに高速に値を読み書きするために、For文で回すのではなく、二次元配列を作ってRangeのValueを使って一括で書き込んだりとか、グラフを自動で作成したりとか、ちょっとした工夫をしています。

このExcelのマクロは、ソース公開のうえ無償でリリースします。
ぜひとも、いろいろな用途に組み込んでみたり、遊んでみてください。
皆様がExcelを計測・制御用途に使う際のお役にたてていただければ幸いです。

Excelのシート(マクロ入り)は、こちらからダウンロードできます

どうぞお楽しみください。

| | コメント (0)

2010.10.22

はじめてのブラケット製造

EXPARTAN-6T用の専用ブラケットを作成しました。

さすが板金屋さんというべき綺麗な仕上がり。自分でドリルとやすりで削ったのでは、こう上手くはいきません。それにニッケルメッキの特有の触感で肌触りもよいです。

今回はロープロファイル用とフルサイズ用の2つを作りました。

●ロープロファイル用
省スペースのスリムなPCにもぴったりおさまります。
これで安心してPCI Expressボードが使えます。
Bracket1

●ロープロファイルの基板なのにフルサイズのブラケット
これはフルタワーやミドルタワーなど、大きいPCに挿すときに使います。
Bracket2
ロープロファイルと標準サイズでは、切り欠きの向きが逆になるのですね。

●正面から見た図
Bracket3

●背面から見た図
Bracket4

反省点としては、基板を作る時点でもう少しコネクタ類を外側に出したほうがよかったかなという点です。そうすればブラケットの穴にコネクタの先がぴったりと入るので、見た目が良くなります。

ところで、なんで「汎用のブラケット」って世界中を探しても売っていないのでしょう。汎用というのは、PCI規格で定められたサイズで、標準の位置に穴が開いていて、パネルの全面に大きな角穴が開いていてどんなコネクタがあっても大丈夫というようなもの。

本日以降の出荷分では、EXPARTAN-6Tにこの2つのブラケットを同梱して送りたいと思います。
本日までにお買い上げいただいた方には、2つのブラケットを郵送します。

| | コメント (0)

2010.10.20

MATLABとSpartan-6ボードで音声キャプチャ

特電Spartan-6ボードに、ADコンバータをつないで、音声をキャプチャしてみました。
キャプチャした音声データは基板のDDR2 SDRAM上に格納しています。
Addac

これをUSBを経由してMATLABに取り込み、波形を表示させたり、スペクトルを表示させたりします。
作ったMATLABのスクリプトは以下のとおりです。

USBOpen();
len = 131072;
flag = 2;
axes('YScale','log');

while(1)
read_data = zeros(len,1);
[read_data,s] = USBReadData16(len,flag);
plot(read_data);
pause(0.0001);

y = fft(read_data,len);
f = (0:len-1)*(1/len);
power = y.*conj(y)/len/2048;
% loglog(power);
pause(0.0001);
end;

取り込んだ「ア」の声の波形。
Matlab_8

Matlab_9

スペクトルで表示すると、こんな感じ。
Matlab_10

さすがMATLABといいたいところですが、苦労しました。
対数グラフを描くにはplotは使えないのですね、きっと。(追記:つかえるらしい)
片対数グラフを描くにはsemilogyを、両対数はloglogを使ってうまくいきました。
そういうものなのでしょう。

今回は音声帯域でデモしましたが、実はここで作ったFPGAのデザインは、400MHzくらいまでの汎用データキャプチャができるものなのです。任意のタイミングでキャプチャしたデータをいったんFIFOに入れてからSDRAMに書き込み、USBで読み出しています。
だから、なんでもキャプチャしてグラフにできるはずです。

このアプリケーションの問題点は、DDR2 SDRAMがかなり熱くなること。SDRAMが頑張っているな~と思いたいのですが、ちょっと熱すぎるかも。SDRAMまわりのデザインを見直してみることにしましょう。

| | コメント (3)

2010.10.19

特電Spartan-6ボードとMATLABとの接続

MATLABから特電Spartan-6ボードを操作できるようにしました。
Matlab_sp6

MATLABワークスペース(プロジェクトのディレクトリ)に、tkusb.dll、USBOpen.mexw32,USBClose.mexw32,USBReadData8.mexw32, USBReadData16.mexw32, USBWriteData8.mexw32, USBWriteData16.mexw32の7つのファイルをコピーするだけで、特電Spartan-6ボードを制御することができるような、そういう拡張コマンドを作りました。

Matlab_0_3

これで、MATLABのコマンドから、以下の関数が使えるようになり、特電Spartan-6ボードを制御できるようになります。
 ・USBOpen
 ・USBClose
 ・USBReadData8
 ・USBReadData16
 ・USBWriteData8
 ・USBWriteData16
機能は名前のとおりです。説明の必要もないくらい簡単な仕様だと思います。

実際にやってみましょう。
まず、Spartan-6ボードにサンプル・リファレンス・デザインを書き込んでおきます。

MATLABで以下のようにコマンドを打ち込みます。


USBOpen();
len = 4096;
flag = 0;
read_data = zeros(4096,1);
[read_data,s] = USBReadData8(len,flag);
USBClose();
plot(read_data);

USBReadData8というのが、Spartan-6ボードからデータを8ビット形式で受け取るコマンドです。サンプル・リファレンス・デザインでは、flag=0にしてデータを読み出すと、シーケンシャルにカウントアップするデータが受け取れます。

flagというのは、FPGAの中につくったいろいろなモジュールのうち、どのモジュールにデータを送ったり、受け取ったりするかを指定するものです。flag=0だとテストパターン、flag=1だと内蔵BlockRAM、flag=2だとDDR2 SDRAM、flag=3だとピンヘッダにつながります。

その結果、テストパターンが読みだされ、以下のようなのこぎり波形が表示されます。
Matlab_2

次に、flag=2にして同じことをやってみると、SDRAMの中身が読みだされます。
Matlab_3
これがSDRAMの中身のデータ(の初期値)の、最初の100000バイトです。

さて、OV7670で作るCMOSデジカメのデザインを書き込んで、CMOSイメージセンサをつないで、先頭10ライン(の輝度データ)を読み込んで表示してみましょう。DDR2 SDRAMにはカメラの画像が書き込まれるので、意味のあるデータが読みだされます。
Matlab_4

二次元プロットを行うと、MATLABの中でデジカメのようなアプリが動くようになります。
Matlab_5

USBWriteData8関数を呼び出せばFPGAボードにデータを送ることもできるので、カメラのI2Cレジスタの書き換えなどもできます。

スクリプトを作って.mファイルにしてまとめておくと便利です。
Matlab_6

MATLABなので、MATLABらしく、数値計算してみましょう。
以下のような式でラプラシアンフィルタを作って適用してみます。


f=[1,1,1;1,-8,1;1,1,1];
Zf=filter2(f,Z,'same');
Zf = uint8(Zf);

Matlab_7

上の画像は、パソコンのキーボードと私の手です。輪郭が抽出されて見えるようになりました。
これは静止画ではなくて、MATLABのプロット画面の中でリアルタイムに動いて表示されます。
(画像が縮小されているので、みづらいです。クリックして拡大してください)

こんな感じで、FPGAを通じた計測やその後のデータ処理が、MATLAB上でできるようになりました。
このような用途に使うMATLABの拡張ファイルと、サンプルスクリプト、および説明書はのちほどアップロードします。


clear all;
close all;

USBOpen();
row = 480;
col = 640;
len = row*col;
flag = 2;
Z = zeros(row,col);
Z = uint8(Z);
Zf = zeros(row,col);
Zf = uint8(Zf);
tmpdata = zeros(len,1);
s = 0;
gwe = 4997;
hh = 1792;
h = 4121;
l = 1024;
g1 = 124;
g2 = 832;

% カメラのI2Cレジスタの制御
USBWriteData8(gwe,2,7);
USBWriteData8(hh,2,7);
USBWriteData8(h,2,7);
USBWriteData8(l,2,7);
USBWriteData8(g1,2,7);
USBWriteData8(g2,2,7);

while 1
[tmpdata,s] = USBReadData8(len, flag);
for index=1:480
Z(index,:) = tmpdata((index-1)*col+1:index*col,1);
end
f=[1,1,1;1,-8,1;1,1,1];
Zf=filter2(f,Z,'same');
Zf = uint8(Zf);
C = Zf;
C(:,:,2) = Zf;
C(:,:,3) = Zf;
image(C);
pause(0.01);
end

どうでしょうか。こんな簡単なスクリプトでリアルタイムなエッジ抽出カメラが作れます。

MATLABとFPGAボードをつないでみたいとお考えの方、ぜひともお問い合わせください。

| | コメント (0)

2010.10.12

SP6JTAG for WinでSPI ROMの書き込み

SP6JTAG for WindowsでSPI ROMの書き込みもできるようにしました。
Sp6jtagw_5

このSPI ROMライタは、ATMEL、ST、SSTなど各社のROMに対応しています。

また、今回の改良で、「ファイルが更新されるまで書き込みを待つ」モードを実装しました。このツールで書き込み予約をセットしておけば、ISEで論理合成してBitStreamファイルが出来上がったら自動的に書き込みが開始するようになります。

つまり、時間のかかる論理合成の間じゅう、ずっとパソコンの前に張り付いている必要はなく、その場を離れてコーヒー飲んだり、別のことができるわけです。

Sp6jtagw_6

このツールは下記のアドレスで無償で公開しています。
sp6jtagw.lzhのダウンロード

◆追記
詳しい使い方を製品ページの中に書きました。こちらです。
http://www.tokudenkairo.co.jp/sp6/sp6jtag.html

| | コメント (0)

2010.10.11

Spartan-6の新しいJTAG書き込みツール

特電Spartan-6ボード(TKDN-SP6-16,TKDN-SP6-45)と、EXPARTAN-6T用に、
JTAG書き込みツールを新しく作っています。

というのも、現在公開しているものは、DOSプロンプトから操作するものでした。
いまどきバッチファイルに組み込んだり、DOSプロンプトから操作という時代でもないので、いささか使いにくかったかもしれません。

そこで、Windows化を行っています。
画面のスクリーンショットはこんな感じです。

たとえばEXPARTAN-6TとパソコンをUSBをつないで起動すると、それが認識されて、写真が出ます。ラジオボタンをFPGA側にすると、写真の中のFPGAが矢印で指し示されます。

Sp6jtagw_1

そして、ファイルオープンボタンを押すと、「最近使ったファイル」がプルダウンに表示されるようになっています。
Sp6jtagw_4

「AUTO」と書かれたボタンを押すと、書き込み開始です。
10秒ほどで書き込みが行われます。

それから、TKDN-SP6-16を接続して起動(あるいはCONNECTボタンを押す)すると、認識されて、次のように表示されます。

Sp6jtagw_2

同じように、ファイルを開いて、AUTOボタンでFPGAに書き込めます。
Spartan-6のXC6SLX16なら約3秒、XC6SLX45なら約10秒です。


さて、ラジオボタンをSPI ROM側にすると、
Sp6jtagw_3
基板の写真が裏返って、SPI ROMが指し示されます。

このツールなら、DOSプロンプトに慣れていない方でも、簡単に使えると思います。

このツールは下記のアドレスで無償で公開します。
sp6jtagw.lzhのダウンロード

まだβ版です。今日一日で即興で作ったのでバグとかあるかもしれません。ですが、XC6SLX16,45,45Tへの書き込みは問題ないでしょう。まだSPI ROMの書き込みはできませんが、あと2~3日でSPI ROM対応もできるでしょう。


| | コメント (0)

2010.10.09

EXPARTAN-6T出荷開始!

昨日、EXPARTAN-6Tを出荷開始しました。
http://www.tokudenkairo.co.jp/sp6/expartan-6t.html

ここまでたどり着くのに、4か月ほどかかりました。

Expartan6t2

ホームページ上にマニュアル、サンプルデザイン(USB、DDR2、PCIe(特電コア)、PCIe(内蔵EP)、SATAコネクタなど)、アプリケーションソフトウェアなどをアップロードしました。

SATAは、プロトコルなど全くわからないので、コネクタを通じたループバック試験のソースをアップロードしました。

とりあえずは、「特電PCI Express互換コア」で動かすようなサンプルデザインを添付していますが、いずれXILINXの内蔵EndPointの使い方が解明できたら置き換えていきたいと思います。

また、サンプルアプリやドライバなども、これから徐々に更新していきます。お楽しみに。
それに、このEXPARTAN-6Tは、特電Spartan-6評価ボードの上位互換なので、USBまわりは全く同じように動きます。

それから、先日説明したとおり、PCI Expressボードにはブラケットがないと危険なことがわかったのですが、専用のブラケットを作るのにはなかなか時間がかかります。この基板専用のブラケットはすでに国内の業者に発注していますが、納品までにあと2週間ほどかかる見込みです。
それまでの間は、私がハンドニブラとヤスリで加工した下手なブラケットを添付することにしました。綺麗なブラケットが業者から送られて来たら、すぐに発送させていただきます。でも、それまでは下手な加工のブラケットを添付します。
「下手なブラケット」の在庫は、あと4つです。それ以上の数はなかなか手に入りませんでした。悪しからずご了承ください。

| | コメント (0)

2010.10.07

PCI Expressのケーブル延長ボード

PCI ExpressのExternal Cablingで延長するためのボードには、CONTECさん(日本)のBYS-AD1C-LPEや、ONE STOP SYSTEMSさん(米国)のOSS-HIB2-PE1x1といったボードがあります。

これらのボードは、どちらもPericom社のPI2EQXという、PCI Express用のバッファICを使っています。

今日、OneStopSystemsさんのボードを購入したので、さっそく試してみました。

Extboards

結果は上々。

EXPARTAN-6Tに特電PCI Express互換コアを乗せて、AtomのWindows7マシンでPCIe延長ケーブルを使って動かすことができました。ただ、起動時にちょっと難ありで、PCが起動しないことがあります。XILINXのハードマクロなら完璧に起動するので、特電コアには何かが足りないのでしょう。

ところが、Spartan-3EとXIO1100を使ったPCI Expressボードでは、このONE STOP SYSTEMSさんのボードで動きませんでした。

原因はこれ。
Onestop
(ちょっと半田のヤニで汚れていますが、私が半田付けしたり外したりしたたためです。)

このコンデンサにはPCI Expressのクロック信号が流れていますが、コンデンサなので直流分がカットされます。

つまり、
・CONTECさんのボードは、PI2EQXのクロック出力が直接ケーブルに行く
・ONESTOPSYSTEMSさんのボードは、PI2EQXのクロック出力をコンデンサで直流分をカットして出力
という違いがあります。

一方、PCI ExpressのPHYチップであるXIO1100は、どうやら直流バイアスがないとクロックを全く受け取れません。全く動きません。
逆に、Spartan-6のGTPは直流バイアス分があるとダメです。全く動きません。

つまり、
・ONE STOP SYSTEMSさんのボード + Spartan-6 → ◎
・ONE STOP SYSTEMSさんのボード + XIO1100 → ×
・CONTECさんのボード + Spartan-6 → × (コンデンサで切る必要あり)
・CONTECさんのボード + XIO1100 → ○
という結果になりました。

ややこしいですね。

結論をいうと、ONE STOP SYSTEMSさんのOSS-HIB2-PE1x1は、C13とC20のコンデンサを0Ω抵抗か何かでジャンパして、Spartan-6の基板のほうでは、REFCLKにコンデンサを入れると、どの組み合わせでも動くようになります。

どうやら、FPGAやPHYチップの要求するREFCLKやRX信号の品質は、みな少しずつ違います。

一番ベストなのは、アドインカード上のFPGAのギガビット信号の端子には、PCIeのエッジやケーブルコネクタに直接つながずに、PI2EQXなどのバッファICを介して出すことなのでしょう。こうすれば、どのようなケーブル延長ボードを使われても、ベストな振幅とバイアスの乗ったREFCLKとRXをGTPに与えられるようになります。かなりコストアップになりますので、そこまでやる人はあまりいないと思いますが・・

| | コメント (0)

2010.10.05

PCI Expressの基板が燃えた!

ちょっと過激なタイトルですが、その名のとおりです。

新製品のPCI Expressボード「EXPARTAN-6T」の試験方法を確立しようとしてデモ機をパソコンに抜き差しして試験していたら、突然煙が・・・

どうやらコネクタを浅く斜めに挿してしまったときに、電源がショートしたらしいのです。どういうメカニズムかはわかりませんが、パターンが焼き切れていました。こういうことはいままでなかったのですが、パソコンで使われているソケットの品番とかにもよるのかもしれません。

やはり、ブラケットは必要だなと痛感しました。

しかし、ブラケットって結構高いのです。専門の業者にお願いすると1個1500円~2000円くらいで、納期もかかります。
かといって、なかなか単体では売っていなく、秋葉原でも「生のブラケットだけ」というのはなかなか見かけません。基板が取り付けられるようなL字の足が出たものは、今まで何度も探したけど見つからなかったので、どうしようかと悩んでいました。

そんな中、今日、うちのバイト君が秋葉原を探し回って見つけてきてくれました。それがこれ、
Henkanmeijin

USB3用の何かのボードのアクセサリらしいのですが、真ん中のつっかえ棒を削ると、EXPARTAN-6Tにぴったりでした。
Bracket

横から見ると、こんな感じ。
Side

SATAのコネクタは使えなくなってしまいますが、安全になりました。
とりあえずはこの状態で使うことにしましょう。
さすがに見栄えの問題もありますので、このボード専用のブラケットを業者さんに手配中です。
専用のブラケットができあがったら後から送ることにします。

◆おまけ

ブラケットがあると安心して挿せます。2台乗っけてみました。
Exp6t_x2_1Exp6t_x2_2

デバイスマネージャでも2個見えました。
Exp6t_x2_3

言葉ではうまく説明できないのですが、安心感が全然違うのです。


| | コメント (0)

USBを使うチュートリアルを書きました

特電Spartan-6ボードでUSBを使うためのチュートリアルを書きました

チュートリアルでは、FPGA内に作ったレジスタやBlockRAMを、USB経由で読み書きするものを作ります。
FPGAの内部構成はこんな感じです。
Usb11_2

動作のようすを動画にすると、こんな感じです。

簡単なものですが、いろいろなアプリに応用できると思います。

チュートリアルはこちらのページに用意いたしました。
http://www.tokudenkairo.co.jp/sp6/usbdesign.html

どうぞご覧ください。

| | コメント (0)

2010.10.04

Spartan-6ボードのリファレンスデザインを更新

Spartan-6ボードのリファレンスデザインを更新しました。

Newapp

主な更新点は以下のとおりです。
■FPGAに関すること
(1) 低温時に、USBの通信データにエラーが出る現象を改善
(2) 16MBytesを超えるUSBの通信も正常に動作するようにした
(3) SDRAMコントローラをマルチポート化した
(4) USBからSDRAMの任意のアドレスを読み書きできるようにした
(5) SDRAMコントローラのソースコードをリリースの中に含めた
(6) uif_addr_opの幅を25ビットから27ビットに増やした
■DLLに関すること
(1) タイムアウト機能の追加。Read/Writeが5秒でタイムアウトするようにした。
(2) USBReset()関数を追加し、フリーズした転送を中断できるようにした。
(3) 16MBytes以上の転送も実行できるようにした
(4) 起動時にSmartJTAGモードではなく、ユーザ通信モードになるようにした
(5) 2つ以上のスレッドが同時にRead/Writeしないよう排他ロックをかけた
(6) DLL内での動的なメモリの割り当てを最適化し、IN/OUT転送を高速化した
(7) 小さなOUT転送で無駄なデータを転送せず、必要最少量のサイズで転送するようにした
■サンプルアプリに関すること
(1) 16MBytesを超えるデータの読み書きも正常にできるようにした
(2) テストパターンの種類を増やした
(3) 最大128MBytesまでのIN/OUTテストが行えるようにした
(4) SDRAMの読み書きアドレスを変更できるようにした
(5) INOUTテストでエラーが出た場合に、INのリトライを行うようにした
(6) マルチスレッド化した
(7) リセットボタンを追加した

この中で、FPGAの最初に挙げた項目の「低温時の安定動作」はたいへん重要です。最近、Spartan-6のデバイスを高速な-3グレードに変更したら、通信エラーが出るようになったのです。何かがおかしいと思い、暖めたり冷やしたりして実験していると、従来の-2のデバイスでもギンギンに冷やすとエラーが出ることが確認されたのです。しかも、それが100%いつも起こるのではなく、温度が低い場合やFPGAが高速グレードの場合に起こるのです。

それからというもの、徹夜でUSBのインタフェースを見直しました。その結果、EZ-USB FX2が出すbit9とbit10が同時に遷移する際にFPGAが誤った値を取り込む確率が高いことがわかってきました。どうやら、FPGAとUSBとの通信のタイミング、おそらくFPGAがデータをサンプリングする際のホールドタイムに問題があったようです。
このエラーの出方が厄介で、FPGAの論理合成オプションの設定(I/Oレジスタをパッキングするか否か)というマイナーなオプションよっても変わる可能性があります。

そこで、設計をいったん見直し、FPGAがデータバスを取り込むタイミングを半クロック早めました。その結果、氷点下(コールドスプレーで冷却)から高温(ドライヤーで加熱)まで、広い温度範囲で安定に動作するようにしました。

こんな凍りついた状態でもエラーなく転送できるようになりました。
Cold1

凍っている間は動作します。
Cold2

逆にいえば、いままでのUSBコアは秋・冬と寒くなるにつれて問題が生じる可能性があるので、できるだけ早く更新してください。

ezusbfx2_ctrl.ngcを新しいものに置き換えて再度論理合成すれば、安定して動作するデザインが出来上がります。

またそれから、今回のバージョンアップでは、USBコアが出力するuif_addr_op[24:0]という出力信号のビット幅を、[26:0]に変えたので、それも忘れずに更新しておいてください。(この変更により64MBytesのDDR2 SDRAMのメモリ空間を自由にアクセスできるようになります)


ついでに、Windows用のDLLも更新しました。何が変わったかというと、主に、高速化タイムアウトの実装SDRAM転送関数の実装です。

いままでは、転送のたびにmallocで一時的なバッファを確保していました。このオーバーヘッドによって、長大なデータを転送する際の速度が低下していたので、直しました。
また、DLLの中でEndPointのBuldRead/Writeする部分をマルチスレッド化して、通信の応答がない場合にはタイムアウトをするようにしました。
SDRAM転送関数は、従来のデータ送受信関数に「開始アドレス」というパラメータを追加したものです。広大なDDR2 SDRAMのメモリ空間の好きなところを読み書きできます。

それから、サンプルアプリケーションもマルチスレッド化して、操作性を向上しました。リセットボタンを付けたり、様々なバグも解消しました。

詳しいことは下記のページをご覧ください。
http://www.tokudenkairo.co.jp/sp6/download.html#sampledesign

では皆様、よろしくお願いします。

| | コメント (0)

2010.10.01

EXPARTAN-6T予約開始へ

特電の悲願だったSpartan-6LXTを搭載したPCI Expressボード「EXPARTAN-6T」の実装が上がってきました。
Expartan6t2

これから1台1台念入りに動作チェックを行って、来週半ばには出荷します。
それから、簡単ではありますが、紹介ページを作りました。
このボードにどんな機能があるかわかりやすく書いたつもりです。
http://www.tokudenkairo.co.jp/sp6/expartan-6t.html

最初のロットは10台だけ製造しました。
Expartan6t_10

輸出用に4台は確保しているので、国内向けは6台です。
しかし既に2名ほどメールで予約をいただいておりますので、残りは4台となります。

このボードは本日、10月1日よりオンラインショップでの予約受付を開始しました。
http://www.tokudenkairo.co.jp/shop/shop.cgi

さて、気になるPCI ExpressのIPコアですが、Spartan-6の内蔵EndPointをしらべたところ、内蔵EndPointを使うにはPCI Expressのことをかなり深く理解して高度なラッパを作らなければならないことがわかってきました。こういうラッパは作るのが大変です。
とりあえずはCoreGenが生成するラッパを使えば、GPIOまでは簡単に作れます。

DMAとかをやりたい方のために、とりあえずは特電コアの評価版を同梱することにします。

XILINXの内蔵EndPointを使ってDMAとかができるすごいラッパは、10月~11月にゆっくりと時間をかけて作ろうと思います。その時のライセンス形態は未定ですが、やはり評価版は時間制限(つまり60分で停止する)になるかと思います。ですが、早めにこのボードをご注文いただいた方には、お礼として、いろいろとおまけできるかもしれません。


特電Spartan-6評価ボード45(名刺サイズのほう)の出荷も再開しました。このボードも本日、実装が上がってきました。予約分を出荷したので、残り7台です。

| | コメント (0)

« 2010年9月 | トップページ | 2010年11月 »