« 2008年11月 | トップページ | 2009年1月 »

2008.12.31

平成20年を振り返って

皆様の暖かいご支援のおかげで、なんとか無事に今年も越すことができそうです。

平成20年をふりかえってみると、多くの時間をMITOUJTAG Proの開発につぎ込んでいたような気がします。MITOUJTAG Proのリリースは、4年間の悲願でもありました。昨年に構想を固め、今年1月から開発を始め、8月に初出荷、12月にようやく安定して動作するようになってきました。

いろいろやってきたつもりなのに、今年1年にできたことを数え上げてみると、あまり多くありません。
トラ技の特集執筆
Interfaceの連載開始
MITOUJTAG Proの開発と発売
MITOUJTAG BASIC 1.5のリリース
CoolRunner2とMAX2のネイティブ書き込み対応(SVFを経由しない!)
PCI Express基板の設計と動作確認
・展示会出展(ボードコンピュータ展、IPAX、FPGAカンファレンス、ET)
JavaScriptからActiveXを介してシリアルポートへアクセスする
インテリジェントJTAGコントローラの開発
トラ技78KマイコンのUSB-JTAG化
・各種受託案件

一方、やりたかったけれども、時間や知識の不足でできなかったことは次のとおりです
トラ技78KマイコンをWindows Mobile機で安定して操作すること
Windows Mobile対応のモバイル回路図エディタの開発
Ajax版JTAGツール「MITOUJTAG/WebScan」のサービス開始
・MITOUJTAG Proの更なる改良
・PCI Express IPコアの整備と、基板の発売開始
・FPGAベンダ各社との提携
・Pocket JTAG Cableの超高速化

やり残したことはたくさんあります。

今年やり残した課題は、来年こそは達成したいと思います。

まだあと22時間ほどあるので、トラ技78Kマイコンを引っ張り出してきて、Windows Mobile機につないでデバイスドライバをデバッグしています。子スレッドの中で動かしているバルクReadがうまくいかないんですよ。これさえなんとかなれば・・・

それでは、皆様、平成21年もよろしくお願いします。

| | コメント (0)

2008.12.24

EeePC S101を購入しました、ほか

ブログの更新が中断してしまっていましたが、この1週間、こんなことをしていました。

① 原稿執筆
 →今回も締め切り過ぎました。ごめんなさい。

② XILINXのFPGAのUCFファイルの書き方とIFDDELAY、DCMの探求
Spartan3EのI/Oを、500MHzクラスの速度で動かしてみたくなって、かなり調べました。

 ・OFFSET_IN_BEFORE、OFFSET_OUT_AFTER制約とは?
 ・IFDを使うとIFDDelayとかIBUFDelayが挿入されてしまう件。
 ・DCMのDESKEW_ADJUST属性について。
  SYSTEM_SYNCHRONOUSとSOURCE_SYNCRONOUS属性では何が違う?
 ・Spartan3Eのグローバル配線の通り方とDCMとの関係
 ・DCMの位相をシフトさせてもTiming Analyzerの解析結果に出てこないのはなぜ?

データシートにはSpartan3EのDCMはチップの半分しか駆動できないみたいなことが書かれていますが、ようやくこの意味がわかってきました。駆動はできるけど、チップの半分の領域しかDCMでホールド時間=0に補正できないよ、ということなのではないかと思います。
いずれブログにも詳しく書いていきたいと思います。 

③SD/MMCカードをSH4で扱うための研究
→ SH-4は、ROMで動作させるよりもSDRAMで動作させたほうが、実感として10倍くらい速いです。
SDRAM上にプログラムを展開して動かせばよいのですが、それなら、オンボードのフラッシュROMには小さなブートローダだけ入れておいて、アプリケーションプログラム本体はMMC/SDカードにプログラムを入れておき、電源ONと同時に、ファイルを読み出して起動するようにすれば便利です。

それを実現するため、Tech-I 「フラッシュ・メモリ・カードの徹底研究」を買ってきて熟読しました。
結論をいうと、Tech-Iの付録CD-ROMの中のFFS_SCIを手直しして使えばOK。
ただし、SCIを使ってもそんなに速くはありませんでした。やはり、SD/MMCカードのアクセスはFPGA化するのが一番いいでしょう。4MBytesのプログラムをロードするのに数分かかります。

④年末調整
今年も土壇場になってしまいました。税理士さんごめんなさい。


最近、私の愛用していたノートPC「PC-MM1-H1W」がプチフリーズをするなど、だんだん調子悪くなってきたので、ついにEeePC S101を購入してしまいました。

ヨドバシで、イーモバイルに加入して、24800円でした。

最近のノートPCは、ハードディスクではなくて、SSDなのですね。
調べたところ、SSDは書き換え回数に上限があるとのこと。
ウェアレベリングとかして寿命を延ばしているそうですが、それでも不安。
不安はあるのですが、本当に問題があるのかどうか試したくなって、あえてSSDを採用したEeePC S101にしてしまいました。
このパソコン、画面が1024×600と変な解像度です。ちょっと縦が狭すぎます。

とりあえず、XILINXのWebPACKをインストールしました。
16GBのSSDのうち4GB近くをXILINXが使ってしまいました。
適当なデザインを論理合成してみると、Core2Duo 2.4GHzマシンの4分の1くらいの時間で完了しました。
決して速くはないけど遅くもないという感じです。

MITOUJTAGは意外とさくさく動きました。これなら展示会用に持ち運び便利かも。
が、やはり画面が狭いのが難点。このマシンでも快適に動くように、MITOUJTAGの画面のレイアウトをカスタマイズできるようにしたいです。

EEEPC S101を使ってみた


昨日から、大急ぎで年末納品の大型案件に取り掛かっているのですが、
SH-4のプログラムをコンパイルする環境として、今までアップウィンドテクノロジー・インコーポレイテッドさんのGNU Wingを使わせてもらっていました。
しかし、メインの開発用パソコンが今朝、突然壊れてしまいました。
どうやら冷却ファンがとまったらしく、CPUの温度オーバーでした。
しかたなくPCI Expressのテスト用のマシン(筐体なし・基板むき出し)
ハードディスクだけ取り出してテスト用PCに移して作業続行

で作業を継続しようとしたのですが、Cygwinを新たにインストールして、GNU Wingをインストールしたら、GNU Wingの中のsh-elf-gccが動かないのです。

何をやっても、sh-elf-gccは何のメッセージも出さずに終了してしまいます。
sh-elf-gcc -v
とやっても、バージョン番号さえ出てきません。

WindowsXP SP3が悪いのか、それともXILINXやALTERAのツールの中にあるCygwinが影響しているのか、とかいろいろ悩んだのですが、どうやらCygwinのバージョンが最新(1.5.25-15)のものだとGNU Wingの中のsh-elf-gccが動かないということがわかってきました。
DevelをインストールしないとGNUWingが動かないようだ

と思ったのですが、CygwinのDevelを全部インストールしたら解決しました。
Cygwinは悪くありませんでした。Develも忘れずにインストールしなければなりませんね。

納期まであと36時間、どっぷりSH-4漬けです。

| | コメント (0)

2008.12.15

PCI Express External Cabling接続を試してみた

これまで各社からいろいろなPCI Express評価ボードが発売されてきましたが、それらはみなマザーボード上のスロットに挿して使うタイプでした。そのため、作った回路をデバッグしたくても、基板が縦になっているためオシロのプローブを当てにくいという欠点がありました。
パソコンのマザーボードにささっているということは、デバッグをとても困難にします。

今回、特電が作ったPCI Express基板は、PCI Expressの純正ケーブルも使うことができるようにしました。
いわゆるPCI Express External Cabling仕様というやつです。
下の写真は、ケーブルを用いて接続しているところです。

PCI Express External Cabling

ケーブルを使えば、机の上に平置きできますので、オシロのプローブを当てるのが容易です。
基板上のDIPスイッチを切り換えたり、スイッチを押したりするときもぐらぐらしないので安心です。LEDもよく見えます。パソコンは蓋を閉じることができます。

自社製の機器に組み込んでお使いいただくような場合でも、パソコンから離して自由な角度で設置していただくことができます。これがまさにケーブル接続のメリットです。

さて、ケーブル接続を使うには、パソコンのマザーボードからPCI Expressの信号をケーブルで引っ張りださなければなりませんが、そのようなコネクタのついたマザーボードは現在のところありません。
そこで、マザーボードのスロットにPCI Express基板の生基板を挿して、パソコンのPCI Expressスロットの信号をそのままケーブルに取り出しすようにしました。シグナルインテグリティーとかを考えればあまりよくないのでしょうが、これでも動きました。
Pcie_cable2


ところで、今回作ったPCI Express基板は、PCI Expressケーブルでもカードエッジでもどちらでも動きます。
つまり、どこかで信号を1:2に切り換えているのですが、2.5Gbpsの高速信号を切り替えるのは容易ではありません。単純なT型分岐ができないからです。配線が曲がりくねるとインピーダンスも乱れるし、スタブもできてしまい、信号の品質が劣化するからです。
できるだけ波形を乱さずに信号の切り換えができるようにするため、下の図のような方法を用いました。
Pcie_sw1

立体的に描くと次の図のようになります。
Pcie_sw2

PCI Expressで送信する信号はコンデンサを入れてどこかでカップリングしなければなりません。
そこで、このコンデンサを基板の裏面の表面の両方に用意しておきます。ビアはPHYチップの側に入れます。
そして、どちらか一方を実装し、どちらか一方を実装しないというふうにします。

こうすると、表面の配線を使うときにはスタブの長さは、基板の厚さ+ビアとパッド間の距離、となるので、2.1mm程度にできます。裏面の配線を使うときにはスタブは0.5mm程度で済みます。
また、差動信号の+と-のラインは平行したままなので、インピーダンスの乱れも少なくでき、差動信号の経路長にも差が生じません。

要するにT型分岐なのですが、使わないほうの枝を極力短くすることができるようにしたというわけです。

なお、受信信号とクロック入力には、0Ω抵抗を同じように入れて、どちらか一方を切り替えられるようにします。
この方法が見事に上手くいき、カードエッジとPCI Expressケーブルのどちらでも動作する基板が出来上がりました。

ただし、PCI Express External Cablingにも欠点があります。
それは、ケーブルが高いということ!

PCI Express External Cabling用ケーブルを作っているメーカーがそもそも少なく、探してもMolexのしか見つかりません。
Molexのケーブルは1mの長さ(型番74576-0001)がDigikeyで入手できますが、値段は3,622円もします。
chip1stopで購入するなら、なんと6,300円です。3m品になるとchip1stopで12,551円です。
パソコンのマザーボードから取り出すならば、1mだとちょっと短いので、3mくらいは欲しいところです。

Express External Cablingに対応した機器をほとんどみかけないのも、ケーブルの値段が原因ではないかと思ってしまいます。

| | コメント (0)

AjaxでJTAGバウンダリスキャンに成功

ついにAjaxなJTAGバウンダリスキャンに成功しました。
誠に勝手ながら、世界初の成果ではないかと思います。

Webscan

「サーバ起動」というボタンを押すと、サーバ上でJTAGデーモンが起動して、ローカルPCにつながったトラ技78Kマイコンを操作するためのコマンドが送られてきます。
そして、78KマイコンからJTAG信号が出力され、JTAGデバイスの自動認識が行われます。今回は、Spartan3ANとXCF04Sを認識しました。
その後、SAMPLEというボタンを押すと、バウンダリスキャンが行われ、その結果のビット列が画面に表示されます。文字列のかわりに画像ファイルを送るようにすれば、視覚的なバウンダリスキャンになるでしょう。

気になる動作速度ですが、トラ技78KマイコンをJTAGケーブルとして使った場合、毎秒2スキャンくらいでした。
まだまだ改善の余地はありそうです。

どうぞご期待ください!


| | コメント (0)

2008.12.12

Ajax版JTAGツールのつづき

12月上旬にリリースすると言っていましたAjax版JTAGツールですが、計画が遅れています。

Linux上にサーバを用意し、PerlのCGIと、Cで書かれたデーモン間を名前付きパイプで通信しようとしていました。

78Kマイコン
 ↑
 ActiveX
 ↓
インターネットエクスプローラ
 ↑
 JavaScript
 |
 XML
 ↓
Perlで書いたスクリプト (サーバ上のCGI)
 ↑↓
 名前付きパイプ
 ↑↓
デーモン(JTAGアルゴリズムサーバ)

CGIとデーモンを接続する箇所で名前付きパイプを使ったのが間違いでした。

名前付きパイプは両端が同時にオープンしないとオープンできません。オープンしようとしてもブロックされてしまうからです。(非同期オプションとかいろいろ回避策はあるのですが、これもあまり上手くいきませんでした)

上の図のシステムでは、CGIはXMLのデータを返しますが、JavaScriptから呼ばれて起動してすぐに終了するので、パイプを開けたままにできません。
いろいろ試してみましたが、名前付きパイプでやるにはどうしても都合が悪いということがわかってきました。
手順を間違えるとすぐに不安定になってしまいます。

今度はメッセージキューで試してみることにしましょう。

| | コメント (0)

2008.12.11

PCI Express基板の動画

PCI Express基板に特電IPコアを入れて動作させた時のムービーをアップロードします。 面白いものではないのですが、LEDがチカチカします。

PCI Expressでもやっぱり最初はLEDチカチカです。 パソコンを起動するとTLP番号(パケットの通し番号)でチカチカします。 コントロールアプリケーションを立ち上げると、マウスクリックや擬似乱数でLEDをチカチカできます。

Controlsoft
コントロールソフト

今年の1月7日付けのコアは動いたものの、12日付けのコアがうまく動きません。
両者の違いはDMA機能の有無ですが、コントロールアプリケーションも何か変えなければいけないのでしょう。もうどれが最新版だかわからない状態で、久しぶりに見たソースコードは自分でも何がなんだかさっぱりです。
さて、連載に向けてこのぐちゃぐちゃなソースを解きほぐさないといけませんね・・

ちょっと嬉しいのはこの論理合成結果。
Ds

XC3S1200EのSliceを13%しか使っていません。

また、論理合成にかかる時間は、
・開始時刻が 2時05分39秒
・Transration完了が 2時06分33秒
・Place and Route完了が 2時07分03秒
・Bitファイル生成が 2時07分19秒

1分40秒で完了しました。

WebPACKを動かしているパソコンは、Intel Core2 6600@2.4GHzのですから1年くらい前の普及型パソコンです。1分40秒くらいならFPGAの論理合成を待つのは苦になりません。

| | コメント (0)

2008.12.09

MITOUJTAG Pro体験版もアップデートできるようになりました

展示会などでMITOUJTAG Proの体験版を配布してまいりましたが、配布したバージョンは2.03a(9月9日ごろのバージョン)となっていて、動作に不具合が多く見られます。

そこで、体験版も最新版(2.0.4c)にアップデートしていただけるよう、体験版用サービスパックをリリースしました。体験版も製品版も機能に差はございません。30日の使用期限のみです。

2.0.4cにアップデートしていただくことで、格段に操作性と機能が向上します。
MITOUJTAG Pro体験版をご利用のお客様はぜひともアップデートをご検討ください。

サービスパックの入手は、まず下記のURLへアクセスし、サービスパックのページにジャンプしてください。

http://www.tokudenkairo.co.jp/jtag/

Update

MITOUJTAG Pro 2.0(体験版)用 サービスパック(2.04c)と書かれたリンクをクリックし、サービスパックをダウンロードします。

ダウンロードしたらLZH形式で圧縮されているので展開し、mptupd.exeを実行します。
Update2

次のような画面が出たらアップデートは成功です。
Update3

ぜひとも、格段に使いやすくなったMITOUJTAG Pro(体験版)を思う存分ご堪能ください。


| | コメント (0)

2008.12.08

PCI Expressが認識されました

P板.comで作ったPCI Expressの自作基板が、ようやく動作を開始しました。
特電PCI Expressコアを組み込むと、ごらんのとおり、ベンダID 5678、プロダクトID 1234で認識されました。
(もちろん、PCI SIGからもらった正式なIDではありません。テスト用の適当なIDです)
Detected

RootComplexから送られてくるパケットも、このように見えます。
Packet


・・・
と、さらっと簡単に書いてしまいましたが、実はここまで動くのにかなり苦労しました。

まず、最初パソコンにはじめて接続したとき、ちゃんとパソコンのマザーボードに挿しているはずなのに、いつまでたってもパソコン側がデータ送信状態にならず、電気的IDLE状態のままだったのです。
基板の設計を間違えていて、TxとRxを逆に作っていたことに気がつくまでに3日かかりました。
マザーボード上のコネクタにRx+/Rx-とかかれていたら、マザーボードが受信であって、アドインカードは送信なのです。そんな単純なミスでした。

ということで、受信ラインと送信ラインを入れ替えるジャンパを施したら、上手く動いたというわけです。
Jumper

これは2.5Gbpsの高速差動配線で、電気的特性などが非常にシビアなはずですが、実はこのくらいのジャンパは大丈夫なようです。
手元にジュンフロン線しかなかったので、太くて硬い配線になっています。応力で割れないかどうか配です。近々UEW線で綺麗に配線しなおしたいと思います。

| | コメント (0)

Spartan3Eの内蔵プルアップ/ダウン抵抗

Spartan3EのI/Oには、プルアップ抵抗やプルダウン抵抗が内蔵されています。

これらの抵抗はコンフィギュレーションした後はユーザが使用するか否かを設定できますが、コンフィギュレーション前ではどうなるのか調べてみました。

Spartan3以降ではHSWAP_ENという端子があります。
この端子をHにすると、コンフィギュレーション前にI/Oの内蔵プルアップ抵抗がOFFになり、各端子はハイインピーダンスになります。
この状態はバウンダリスキャンで見ることができます。
各ピンが入力状態のときには、自然にLが読み出されます。
HSWAPENがHの場合、Spartan3EのI/Oはハイインピーダンスになる

HSWAP_ENをLにした場合や、HSWAP_ENをHにしていても未コンフィギュレーション状態でJTAGでEXTESTモードにした場合、全てのピンがHレベルにプルアップされます。
HSWAPENがLまたはEXTESTモードの場合、Spartan3EのI/Oはプルアップになる

なお、コンフィギュレーションされた後ではEXTESTモードにしてもプルアップはされません。この件は、データシートには記載されていないマイナーな事項でややこしいです。

さて、HSWAPEN = 1 にしておくと、全ピンがHI-Zになると書きましたが、どうやらM0,M1,M2はプルダウンされるようです。このときのプルダウン抵抗はかなり強く、10kΩ程度の外付けプルアップ抵抗をつけていても負けてしまいます。

10kΩでプルアップした場合、M0端子の電圧は558mVとなり、 5kΩでプルアップした場合は1.91Vでした。
つまり、10kΩでプルアップしてもHと認識されません。
Ipulldown

一方、HSWAPEN = 0 にすると、(もしくは未コンフィグ状態でEXTESTモードにすると)、全ピンはプルアップされるのですが、M0,M1,M2もプルアップされます。このときのプルアップ抵抗はさらに強いようです。
10kΩでプルダウンした場合は2.84Vとなり、5kΩでプルダウンした場合は2.43Vでした。5kΩや10kΩでプルダウンしても、Lとは認識されません。
Ipullup

この件はデータシート(ds312)をよく見ると71ページに書いてありました、要約すると、M0,M1,M2をプルアップする時には4.7kΩ以下に、プルダウンのときには560Ω以下にしなければならないようです。
Xil
また、VS[2:0]も同様に、強力なプルアップ/プルダウンが入っているかもしれません。

これまでプルアップやプルダウン抵抗には余り考えずに10kΩや4.7kΩを使ってきましたが、今後は少々気を使わなければならないようです。


| | コメント (0)

2008.12.05

PCI Expressの基板実装完了。即座に動作確認!

PCI Expressの基板が実装完了しました!!

Spartan3E & XIO1100 PCI Express evaluation board

新しく基板を作ったときって、やっぱり火入れはドキドキします。

ACアダプタから電源(5V)を供給し、JTAGをつなげるとSpartan3Eが認識されました。
まずは一安心。ちゃんと生きているようです。
Xc3s1200e

そして、基板上の3.3V、2.5V、1.8V、1.5V、1.2V、0.9V(VREF)、0.9V(VTT)の各電圧を確認。
OK。電圧はちゃんと出ているようです。

次に、バウンダリスキャンでLEDを点灯
 if(SW_IP[0] == 1) { for(int i = 0 ; i < 256; i++) LED_OP <= ~i; Sleep(100); }
とやれば、タクトスイッチが押されたときにLEDが点滅します。
ここまで動けばかなり安心。

そして最後に、バウンダリスキャンでPCI ExpressのPHYチップを操作してみます。

まず、簡単な治具を作って、2.5Gbpsの高速シリアル信号のループバックと、リファレンスクロックを供給を行うようにします。これでPHYチップが動作する環境が整いました。
Jigu


今回使ったPHYチップは、Texas Instruments社のXIO1100です。

データシートによれば、このICを動作させるには、FPGAからPHYへ出力するTX_ELECIDLEとTX_DET_LOOPBACKをHに、POWERDOWNを"10"にしてリセットを解除すればよさそうです。
その後、POWERDOWNを"00"にし、TX_ELECIDLEとTX_DET_LOOPBACKをLにします。
そしてTX_CLKとTX_DATAとTX_DATAKを送信すれば、高速シリアルラインにデータが現れ、上の写真の治具でループバックして戻ってきます。PHYはその信号をデコードしてRX_DATAとRX_DATAKを出力し、それがFPGAの端子から読み出されるというわけです。

FPGAにこういう動作をさせるJTAGスクリプトを組んで、実験してみました。
スクリプトは下のリンクからダウンロードできます。
■「phytest.cpp」をダウンロード

Bscan_phy

TXDATAにCOMシンボルと、電気的アイドル(D0.0)を送信すると、ちゃんと受信から読み出されました。

今までの常識で考えれば、FPGAにこういう波形を作らせてPHYチップなどの応答を調べたいと思ったとき、FPGAにテスト回路みたいなものを入れて試さなければなりませんでした。しかし、FPGAを毎度毎度論理合成して実験するとなると、そのたびに何分もかかってしまい、時間の無駄です。

上の波形はMITOUJTAG Proのバウンダリスキャンを使っているので、FPGAの中身は空のまま論理合成しないで動いています。論理合成していないので、ソースコードを変更してから実際に動作するまでの待ち時間は5秒くらいで済みます。

したがって、COMのあとに、D0.0ではなく、COM、COM・・と送ったらどうなるだろうか、とか、TX_ELECIDLEをHにしたままだとどうなるだろうか、といったことを思いつくまま気軽に実験してみることができました。
上の波形は綺麗に取れていますが、実は、この波形をとるまでにいろんな信号を入れて試しているのです。

この評価ボードの動作が確認でき次第、PCI Express IPコア(この評価ボード上のみで動くバージョン)とセットで販売する予定です。来年早々の販売開始が目標です。

| | コメント (0)

2008.12.04

FPGAをステップ実行させて、波形を観る

ついに、JTAGスクリプトと、JTAGロジックアナライザがつながりました!

FPGAのクロックと入力信号を、パソコン上の簡単なスクリプトで作れるので、FPGAの動作が手にとるように見えます。FPGAをすごくゆっくりと動かし、その入出力信号をパソコンで操作するというわけです。
論より証拠。次の図をご覧下さい。

次の図は、Spartan3ANにバイナリカウンタをつくり、そのSpartan3ANをINTESTモードにし、JTAGを通じてクロックを注入しています。ついでに100サイクルごとにリセットパルスを与えています。

JTAG INTEST

(クリックで拡大します)

これはシミュレーションの結果ではありません。
実機です。
FPGAでバイナリカウンタを作って、JTAG INTESTを通じてクロックとリセットを与えて、FPGAが出力する波形をJTAGでキャプチャしたものです。
まぎれもなく、実際のFPGAの中の回路から出力されている波形です。

上の波形の元になる「FPGAの入力信号」は、


 for(int i=0;i<1000;i++)
 {
     if((i % 100) == 0) RESET = 1;
     else        RESET = 0;
     CLK <= 1;
     CLK <= 0;
 }
 

という、ごく簡単なスクリプトで作り出しています。

次の波形はもっと衝撃的で、Spartan3ANスタータキットのデフォルトの回路でINTESTを行って、数千サイクルのクロックを与えた際の波形(の一部)です。

Spartan3AN スタータキットの波形を解析

(クリックで拡大します)

INTESTは、FPGAが持っているJTAGのネイティブ機能なので、IPコアを埋め込まなくても、何もしなくても使えます。入手したFPGAボードのJTAG端子にJTAGケーブルをつなぎ、MITOUJTAGを起動すればよいのです。

自分で作った回路でなくても、このようにステップ実行できてしまい、全ての端子の波形が1サイクルごとに完璧に見えてしまいます。我ながら、非常に危険なものを作ったと思います。
もちろん、DCMとか使っていたらダメでしょうが、そのときはDCMで生成された波形もソフトウェアでエミュレートして与えればよさそうです。

つまり、DCMが使われておらず、なおかつ、特別な防御策も取られていないXILINX FPGAの動作は、どんなものでもデスクトップ上で簡単に解析できてしまうからです。
(なお、A社のFPGAはINTEST非対応なので勝手に解析はできません)

INTESTは、自分で作ったFPGAに対しては極めて強力なデバッグツールとなるはずです。INTESTが今後どのようなデバッグ手段として発展していくかはまだ未知数ですが、ここまで簡単かつインタラクティブにINTESTができるツールは他にはないでしょう。
この機能は、MITOUJTAG Pro 2.04b以降でご利用いただけます。MITOUJTAG Proを、MITOUJTAG Pro 2.04bへのバージョンアップするパッチは、本日、ダウンロードできるようにました。

ますます進化するMITOUJTAGをどうぞよろしくお願いします。

| | コメント (0)

2008.12.02

INTESTを使ってFPGAをステップ実行させる

FPGAがCPUと比べて難しい理由のひとつとして、デバッグ時にステップ実行ができない、ということが挙げられます。CPUならばデバッガを使って1命令ずつステップ実行させて様子を見ることができますが、FPGAではそうはいきません。HDLで記述した回路が論理合成されたら、何百MHzという速度で動いてしまい、途中で止めたり操作することはできません。
このことが、FPGAのデバッグを難しくしている原因と考え、JTAGを使って解決する方法をいくつか考えています。

まずは、JTAGバウンダリスキャンのINTESTを使う方法。

JTAGのバウンダリスキャンには、EXTESTとINTESTという2つのモードがあります。
EXTESTは次の図に示すように、FPGAの端子を操作して外向きに信号を作り出し、基板上にあるFPGA外のデバイスへアクセスします。これは、いままで何度もこのブログで紹介してきた方法で、強力な回路デバッグ方法です。

Extestとは

それに対して、INTESTというのは、FPGAの端子を操作して、その操作結果を内向きに出すモードです。端子を操作してFPGAの中のコアを操作し、コアが出力する信号をJTAGで取り出すというものです。

Intestとは

つまり、FPGAから見た外界(プリント基板上の各種信号)の状況をパソコンを使ってエミュレートして作り出してやれば、FPGAの動作を、まるでクロックを1個1個与えるように止めて見ることができるはずです。

そこで、Spartan3ANを使ってバイナリカウンタを組み、LEDの端子へ出力する回路を作って実験することにしました。FPGAは次の図のようなピン配置になりました。このデザインでは50MHzの速度でカウントアップするので、通常動作時のLEDの点滅は早すぎて目に見えません。
Fpgaのピン配置

MITOUJTAG BASICを使って、FPGAをINTESTモードに入れます。
この時点でFPGAの動作は停止します。
Step1

そして、画面上に表示されたクロックの端子をマウスでクリックし、H→L→H→L→・・・という信号を与えます。
すると、なんと!!
LEDの端子がカウントアップしていく様子が

1ステップずつ観察できるではありませんか!!

Step2
 ↓
Step3
 ↓
Step4
 ↓
Step5
 ↓
Step6
 ↓
Step7
 ↓
Step8
 ↓
・・・

マウスがクロックをカチカチすることで、FPGAをステップ実行させることができました。
INTESTは今まで本気でやったことがなかったので、この動きには驚きました。
もちろん、クロック端子をクリックしなければ、FPGAは止まったままです。

今回説明した方法だとマウスクリックを何十回あるいは何万回とやらなけばならないので実用的ではありませんが、JTAGスクリプトを使ってクロックを作り出せば、FPGAの強力な実機デバッグができるでしょう。

次はMITOUJTAG Proを使ってクロックを自動生成させてみます。(続く)

| | コメント (0)

2008.12.01

VerilogでBLOGANAを使う

MITOUJTAGのユーザ様からVerilogでもBLOGANAを使いたいとのご要望があったので、今日はVerilogの勉強をしました。

「入門 Verilog HDL記述 CQ出版社 小林優 著」という本を買って読みました。
FPGAの設計をするにあたって、
 process ⇔ always、 代入文 ⇔ assign文、  & ⇔ { }
のように、VHDLとだいたい1対1に対応するので、頭の中ではVHDLで書きながら、逐次翻訳していく感じで書いていけばよさそうだということがわかりました。

VHDLよりもVerilogのほうが楽な点として、
 ・enrtityとarchitectureを分けなくて良い
 ・変数宣言と記述の本文との間の境目(begin)がない
   しかも、wireやregの宣言を好きなところに書ける
 ・条件判断の結果がそのまま1bitの信号になる
 ・代入でビットの幅が合わなければ勝手に切り捨てられる
というところが衝撃的でした。
型やビット幅のチェックがVHDLほど厳密ではないようです。

さて、現在のBLOGANAのモジュールはVHDLで記述されていますが、これをVerilogに書き直そうかと思ったのですが、ISE9.1iではVHDLで作った下位モジュールを上位のVerilogのモジュールから呼び出せるようでした。

つまり、



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);

  SAMP_FREQ : in integer range 0 to 2147483647;

  WIDTH72 : in std_logic;

  LENGTH1024 : in std_logic;

  BUSY : out std_logic

);

end blogana;


のようにVHDLで宣言したモジュールが、


・・・
assign blogana_trig = trig;

assign blogana_din[31 : 0] = lfsr[31 : 0];

assign blogana_din[32] = blogana_trig;

assign blogana_din[40 : 33] = counter[7 : 0];

assign vcc = 1;

wire [19:0] blogana_user;

blogana blogana_1( .CLK(clk) ,

 .TRIG(blogana_trig) ,

 .DIN(blogana_din) ,

 .USER_OP(blogana_user) ,

 .SAMPLE_EN(vcc) ,

 .SAMP_FREQ(50000000) ,

 .WIDTH72(vcc) ,

 .LENGTH1024(vcc) ,

 .BUSY(blogana_busy));



assign blogana_busy_op = blogana_busy;

・・・


と、Verilogからそのまま呼び出せました。

出来上がったFPGAをBLOGANAでサンプリングしてみると、ちゃんと見れました。
この波形は、50MHzで動作する32ビットのLFSRがあって、その下位6ビットが6b'000000ならばトリガがかかり、バイナリカウンタがカウントアップするという、簡単なサンプルです。

Blogana

ただし、MITOUJTAGに内蔵されたHDLソース解析ツールはVHDLしか解析してくれないので、Verilogで書かれたソースの場合は信号名を自動は設定することができません。
(上の図で信号名が(undefined)になっていますが、VHDLならば自動的にソースを解析して、lfsr[31 : 0]や、trigといった名前が設定されます)
これは今後の課題にしたいと思います。

| | コメント (0)

« 2008年11月 | トップページ | 2009年1月 »