« 2008年8月 | トップページ | 2008年10月 »

2008.09.25

モバイル回路図エディタを作りたい!

電車の中で回路図が描けたり、回路シミュレーションができたらどんなに素晴らしいでしょう。

今日は他の仕事がいっぱいあって忙しいのに、どうしてもそのアイデアを試してみたくなって、そんなものを作りはじめてしまいました。

Visual Studio 205とC#を使って、1日でここまでできました。
Sched1
エミュレータでは画面が狭くなってしまいます。


Sched2

このソフトはAdvanced/W-ZERO3 [es]で動かすことを前提としています。
他の携帯できちんと表示されるかどうかはわかりません。

ソフトを起動するとランダムにトランジスタやら抵抗が画面上に表れます。それをタッチパネルでドラッグアンドドロップして動かすことができます。真中の丸いボタンを押すと回転させることができます。
現在はまだ配線を引いたり、部品の定数を変えたりすることはできません。ただ部品をぼーっと眺めるだけです。
ツールボタンも飾りです。

部品を20個くらい表示しても、サクサク動くので驚きました。
PHSに載っているCPUって意外とパワーあるのですね。

回路図が描けて、簡単なシミュレーションが動いて、応答が解析できて、スミスチャートが描けるようにするのが目標です。

難しいのは片手でも最低限の操作ができるようなユーザインタフェースにすること。
キーボードを開いたり、スタイラスで細かい操作をしなければならないようなユーザインタフェースだと、片手で操作できないのでNGです。部品を回転させたり、プロパティを開いたり、線をつないだり・・・。
片手でできるような操作体系にできるでしょうか。

試してみたいかたは↓からダウンロードできます。
.NETアプリなので、PCでも携帯でも動きます。

Sched「Sched.exe」をダウンロード

今後、週に2~3時間くらい時間をとってこのプロジェクトもコツコツ進めて行きたいです。
ああ、やりたいことが多すぎる。


| | コメント (4)

2008.09.21

MicroBlazeのデバッグプロトコルを解析

XILINXのSpartan3AN評価ボードでMicroBlazeを動かしてみようと思い、FoundationとEDKの評価版をインストールしました。バージョンは10.1です。

EDKを触るは6か7の頃以来なので、全く使い方がわかりません。
PlatformStudioとPlatformStudio SDKのどちらを起動したらよいかが分からないくらいです。

PlatformStudioを起動すると新規プロジェクトの作成画面になりました。どうやらEDKにはSpartan3AN評価ボード用のサンプルがあらかじめ用意されているようなので、マウスでOK、OKと押していくだけで、なにやらBitStreamファイルが生成されました。
とにかく、凄そうなツールなので、どこをどうやって触ったらよいかさっぱりわかりません。
Edk1

さて、MicroBlazeには、XMD( XILINX Microprocessor Debugger )というJTAGデバッグ用の機能があります。
これを使うとJTAG-ICEができるのですが、その詳細仕様は公開されていません。(たぶん)
XMDのプロトコルは解析可能か、そしてMicroBlaze用のJTAG-ICEを自作できるかどうかを探るのが今回の実験の目的です。

昔作ったJTAG信号解析装置を引っ張り出してきて、Spartan3AN評価ボードにつないでみます。
Jana

Spartan3AN評価ボードには、XC3S700AとXCF04Sが載っています。
まずは、手始めにiMPACTを使ってIDCODEとUSERCODEを取得したときの波形を解析してみます。
Jana_1
良い感じでJTAGの命令が見えました。

次に、iMAPCTを使って、コンフィグROMのERASEを行ってみます。
Jana_2

なるほど。まずはISPEN命令を送ってからデータに0x37を送り、次にFADDR命令を送ってからデータに0001を送り、5秒ほど待つ。そして、ISCTESTSTATUS命令を送って、最後にNORMRST命令を送るというわけですね。
消すのは簡単です。

では、本題のXMDのデバッグプロトコルの解析を行います。まずメインメニューのDebugから「Launch XMD」を起動します。
Edk2
DOSプロンプトらしきものが立ち上がります。
Edk3

このとき早速JTAGの通信が行われ、JTAG解析装置は信号を解析してくれました。
Jana_3

GDBのコンソールから、ステップ実行させたりレジスタを書き換えたりする際のデータを読むうちに、だいたいの感触がつかめてきました。今しばらくはやるつもりはありませんが、2日間くらいかけて本気で解析すればMicroBlaze用のシンプルなJTAG-ICEが作れるかもしれないというレベルです。(実際にやるつもりはありません)

CPUに任意の命令を送り込む方法や、CPUの実行・停止設定、データ読み出しポートなどの使い方は簡単にわかってしまいました。さすがに公開するとやばそうなので、本日のレポートはここまでにしておきます。

| | コメント (2)

2008.09.19

MITOUJTAG BASIC版のロジアナもトリガ対応にバージョンアップ

MITOUJTAG BASIC Version1.5 サービスパック3(β版)をリリースしました。
BASIC版のJTAGロジックアナライザでもトリガがご利用いただけるようになります。

MITOUJTAGサービスパックのダウンロードは、下記のページから行えます。
■MITUOJTAGソフトウェアアップデート
(上のパッチを当てていただくと、ロジアナ画面でのバージョンが2.04(B01)と表示されます。)

★使い方
1.目的の信号にカーソルを合わせて、Tボタンを押すと、その信号でトリガをかけられるようになります。
2.Tボタンを連打すると、トリガレベルの「HとL」が交互に切り替わります。
3.トリガ対象の信号には、次の図のように小さなアイコンが表示されます。このアイコンをクリックするとメニューが開いて、トリガ条件を変えられるようになります。
すべての信号のトリガを一括で解除したい場合などに便利です。
Trig_icon

4.バス信号の場合は数値でトリガをかけることもできます。(但し、ウォッチモードのみ)
下の図は、NF_Aという信号が0x55になった場合にトリガとしました。
Trig_byval

5.全体のトリガ条件は、画面上方にある次のラジオボタンで設定します。
Trig_cond_2
トリガ位置は、トリガより前の時刻の信号を見るための設定です。
・条件をANDにすると、設定したすべてのトリガが一致するまでサンプリングが開始されません。
・条件をORにすると、設定したいずれかのトリガが一致するとサンプリングが開始されます。

6.複数の信号をまとめてトリガ対象にしたり、トリガを解除する場合には、目的の信号を選択して、右クリックしてください。次のようなプルダウンメニューが開きます。
Trig_menu

■まだ出来ていない機能
1. キャプチャモード時にトリガ条件を数値で指定する機能 (ウォッチモードでは対応済み)
2. BLOGANAモードでのトリガ機能

ぜひとも、使いやすく快適になった
JTAGロジックアナライザをご堪能ください。

Bas_logiana
(クリックで拡大)

Let's enjoy JTAG with MITOUJTAG !!

| | コメント (0)

ANDでもトリガ、ORでもトリガ

JTAGロジックアナライザのトリガモードですが、ANDでもORでも条件を設定できるようにしてみました。

MITOUJTAG Pro 2.0でこのトリガ機能をすぐにでもご利用いただけるよう、サービスパックをリリースしました。
製品版でも体験版でも、アップデートしていただくことができます。
http://www.tokudenkairo.co.jp/jtag/sp.html

今回、トリガを設定したい信号をクリックして、Tボタンを押すとトリガを設定できるようにしました。Tを連打するとHトリガとLトリガが交互に切り替わります。また、ANDとORの条件切り換えは、画面の上部にあるラジオボタンで切り換えられるようにしました。これなら操作は面倒ではありません。
Trig_cond

●ANDでトリガ
SW<3>='L' and SW<2>='L' and SW<1>='L' and SW<0>='L' and ROT_CENTER='H'の条件、すなわち5つの条件のすべてが一致したらトリガがかかります。
↓の図はSW<1>がH→Lと遷移したタイミングでトリガがかかっています。
Trig_and
(クリックで拡大)

●ORでトリガ
SW<3>='L' or SW<2>='L' or SW<1>='L' or SW<0>='L' or ROT_CENTER='H'の条件、すなわち5つの条件の一つでも一致したらトリガがかかります。
Trig_or
(クリックで拡大)

細かいことですが、トリガより前の時刻はちゃんとマイナスの時刻で表示されます。
この機能、確かに便利かもしれません。
もう、トリガなしには戻れません。

| | コメント (2)

2008.09.18

トリガの位置を変えられるようにする

バウンダリスキャンモード時のJTAGロジックアナライザで、トリガ位置を変えられるようにしてみました。
いわゆるプリトリガ機能です。

まずは6%。
主にトリガが入ってから後の波形を見たいときに使います。
JTAGでロジアナ 6%トリガ
(クリックで拡大します)

次は25%。
先ほどのよりもう少し前の部分がたくさん見えます。
JTAGでロジアナ 25%トリガ
(クリックで拡大します)

その次は50%。
トリガより前の部分と後ろの部分を半々で見たいときに使います。
JTAGでロジアナ 50%トリガ
(クリックで拡大します)

最後は94%トリガ。
トリガが入ると少しだけサンプリングして、終了します。
JTAGでロジアナ 94%トリガ
(クリックで拡大します)

こんな感じで開発を進めています。

| | コメント (0)

2008.09.17

JTAGロジアナでトリガを使えるようにする

今まで多くの方からご要望をいただいておりました、
バウンダリスキャンモードでのJTAGロジックアナライザのトリガ
機能ですが、ようやく開発に着手しました。

任意の信号が指定した値に一致した場合に、波形の表示が開始されるようにしてみました。トリガはいくつでも仕掛けることができ、すべての条件がANDで一致した場合に、トリガ開始となります。

トリガを仕掛けるには、信号名のところで右クリックして、[トリガ設定]→[●●でキャプチャ開始]の操作を行います。トリガが仕掛けられると、波形の表示のところに小さなアイコンが出て、どのようなトリガがかけられているかが表示されます。
Logana_trig1

そのアイコンをクリックすると、トリガ条件を変更したり、削除することができます。
Logana_trig2

このようにして、何個でもトリガを仕掛けることができます。

下の図は、VGA_Bという信号が0x02に一致し、SW<1>という信号がLで、ROT_CENTERという信号がHの場合をトリガ条件としています。

JTAGロジックアナライザのトリガ

トリガがかかる前の波形を少しだけ取っておいて見られるようにする(いわゆるプリトリガ)とか、信号がバスの場合には「以上」「以下」でも指定できるようにしたりとか、そういった設計のポリシーについて決めなければならないことが多そうです。

どういった場合でトリガを設定できれば有りがたいかということについて、しばらくいろいろ実験しながら、ユーザの視点で考えてみたいと思います。ご要望があればお申しつけください。

何はともあれ、もうすぐ、バウンダリスキャンモードのロジックアナライザでのトリガーが使えるようになりそうです。


| | コメント (2)

2008.09.16

MITOUJTAG Proの紹介ページなどを更新

MITOUJTAG Proの製品情報をすっきりと整理し、基板検査の解説ページ、および、FPGAプロトタイピング機能の解説ページを加筆するなど更新しました。

どうぞよろしくお願いします。

また、MITOUJTAG Proの簡易マニュアルも作成しました。

MITOU JTAG Proマニュアル

今回は、先にヘルプを作成しておいたので、マニュアルは出来上がったHTMLヘルプの中から絵や文章をWordに貼り付けていく感じで作れました。
Wordよりも、市販のHTML編集ツールのほうが字下げなどで苦労しなかったためでしょうか、今までよりもマニュアルは楽に作れたような気がします。


| | コメント (0)

2008.09.12

FPGAカンファレンス(東京)に出展しました

9月9日に行われたFPGAカンファレンスに出展しました。
200名近い参加者があったようで、大盛況といわれています。

会場のイメージはこんな感じです。

------------------------
   ■講演者   |
                廊下
            --------------
■■■■■■■■|  ■■  ■■■■
■■■■■■■■|
■■■■■■■■|■
■■■■■■■■|■
■■■■■■■■| 
■■講演会場■■   展示会場
■■■■■■■■|
■■■■■■■■|■
■■■■■■■■|■
■■■■■■■■|  ■■   ■■


私の講演は11:45から12:00の予定だったのですが、前の発表者が時間をすぎても延々と喋り続けていたため、すでに予定は大幅にずれこんでいました。スタッフが[END]という看板を持ってアピールしても一向に早く喋るとか内容端折るとかいうことはなく、パワーポイント上の全部の文字を喋っていました。

そういうわけで、私の順番は12:00ごろからになりました。
私の講演が始まったときにはすでに会場のお客様たちは疲れきっていた表情でした。最新FPGAの動向とか、難しい話を10:00から12:00まで休憩もなしに難しい話を聞いたのでは、疲れてしまいます。寝ている人も多かったようです。

なので難しい話はせずに軽くデモを行って、JTAGでこんなデバッグができるという紹介を行うだけにしました。

FPGAカンファレンス

FPGAカンファレンス

200人の聴衆を前に、MITOUJTAG Proを動かして、バウンダリスキャンの可視化のデモをプロジェクターでスクリーンに投影してきました。これは少しインパクトがあったみたいでした。
発表資料は当日の朝に徹夜で作ったものなので、最後のほうのまとまりが悪かったです。これは反省。

今回の東京会場では、講演会と展示会が隣の会場で行われていて、講演中は人の出入りができません。
公演中は展示会場には全く人が来なかったので、私の講演が終わったら昼食休憩で展示会場に人が集まってくるかと思いきや、全く来ません。
うちのブースに人が来ないのではなく、誰も講演会場から出てこないのです。

中を覗くと、トイレに行ったり、机に伏したり、昼食を食べたりしています。
だいぶんお疲れのようです。

15分くらいしたらようやく最初のお客様がきて、それから、あっという間にうちのブースの周りに3重にも4重にも人が層をなして集まってきます。一度に30人くらい来ます。
いろいろな方をお話をしたくても、とても一人一人と喋っている時間などありません。

今回の展示会は、人の流れのコントロールや休憩時間の確保が出来ていなかった点がまずかったと思います。
基本的に休憩時間にしか展示会場には人が来ないのですが、各講演の間に休憩時間がないのと、休憩時間が短いので、短い休憩時間に人が集中するので、たくさんのお客様と話ができない、というのが問題がありました。

去年は講演会場が2個以上あったので、人の流れがあったし、興味のない講演の際にはどちらにも行かないという選択ができましたが、今年は講演会場に閉じ込めるタイプだったので聞いているほうもつらかっただろうし、出展しているほうも、閑散と混雑の差がありすぎて大変でした。

結局のところ、30名くらいの方としかお話できませんでした。
せっかく200人ものお客様がいらっしゃったのだから、もっと大勢の方とお話がしたかったです。

何はともあれ、MITOUJTAGの動いているところを200名の方に見ていただき、大変多くの声をいただいたことは嬉しかったです。ブログを見ているとか、MITOUJTAGを初めてみて感動した、とか嬉しいコメントも多くいただきました。

次は10月10日の仙台会場に出展します。
茨城県および東北地方の皆様と会場でお会いできるのを楽しみにしています。

| | コメント (0)

2008.09.07

子ウィンドウによってツールバーが変わる

MITOUJTAG Version2では、子ウィンドウがいっぱい開いて、その中でいろんなツールが動きます。
バウンダリスキャンの可視化や、ロジアナ、JTAGスクリプト、etc...

こういったいろいろなツールが切り替わったときに、メインのツールバーのボタンに、現在可能な操作だけが出ると便利だと思いました。

・バウンダリスキャン可視化画面のツールバー
バウンダリスキャン可視化画面のツールバー

・ロジアナ画面のツールバー
ロジアナ画面のツールバー

・テキストエディタ(JTAGスクリプト)のツールバー
テキストエディタ(JTAGスクリプト)のツールバー

このような感じで切り替わります。
現在可能な操作に関するボタンだけがメインのツールバーに現れるので、操作の間違いが少なくなります。


このしくみを作るのは結構難しかったです。
Borland C++ Builderのビジュアルコンポーネントライブラリでは、TToolBarは複数のボタン(TToolButton)を持つことでツールバーの機能を実現しています。しかし、TToolButtonに対するAddとかClearとかDeleteといったメソッドがありません。ボタンを動的に追加したり削除したりするということはあまり考慮されていないようです。

ツールバーにボタンを追加するには、
TToolButton *tb = new TToolButton(ToolBarTmp);
tb->Parent = ToolBarTmp;
tb->ImageIndex = ...;
tb->OnClick = ...;
とやって、ボタンの親コンテナとなるTToolBarを引数にTToolButtonのコンストラクタを呼び、parentやイメージ番号やキャプション、幅などを指定します。
子ウィンドウを作るDLLの中で、これらの元になるデータを用意します。そして、MDIの子ウィンドウがアクティブになったのをトリガとして、ツールバーの動的生成ルーチンを呼び出せば、子ウィンドウを切り替えるたびにツールバーが切り替わる仕組みができあがります。

こうして作ったボタンは親コンテナからTToolBar->Buttons[i]で参照できるのですが、ボタンを削除するには、
for(int i= ToolBarTmp->ButtonCount - 1;i >= 0;i--)
{
delete ToolBarTmp->Buttons[i];
}
のように、ボタンのデストラクタを呼び出すようです。
親の削除メソッドを呼ぶのではなく、子のオブジェクトを直接削除するのが気持悪いところです。

しかも、新しく作ったボタンはツールバーの左から追加されていきます。
たくさんのボタンを作ると、今まで作ったボタンがスクロールして右にずれていくのが見えてしまいます。

これを回避する正しい方法はわかりませんでしたが、機能上常に固定されるボタンと、ウィンドウによって表示・非表示を変えたいボタンを別々のツールバーに用意すると、心理的にはちらつかなくなるようでした。

| | コメント (0)

2008.09.02

状況感応型ヘルプの作成

MITOUJTAGに状況感応型ヘルプを実装してみました。

MITOU JTAG

最近のヘルプはHTMLで記述するHTML Helpが主流なのですが、私の大好きなBorland C++ BuilderはHTMLヘルプに対応していません。なので、F1キーの捕捉とヘルプの呼び出しを自分で作る必要があります。
今まで状況感応型ヘルプを作るのはめんどくさいと思い込んでいたのですが、実際に作ってみると意外と簡単でした。

まず、アプリケーションの起動時に、WindowsAPIのSetWindowsHookEx関数を使ってフックを仕掛けます。
 SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyHookProc,0,GetCurrentThreadId());

こうすると、なんらかのキーが押された場合にKeyHookProcという関数へ飛ぶようになります。

その飛んだ先の関数はこんな形
 LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wparam, LPARAM lparam)
をしているのですが、F1キーが押されたときには、呼び出される際の引数が
nCode == HC_ACTION かつ (wparam == VK_F1) かつ !(lparam & 0xc0000000)
となります。
なお、!(lparam & 0xc0000000) も条件に加えておかないと、キーを押しっぱなしにしたりキーを離したときでもヒットしてしまいます。

上記の条件からF1キーが押されたと判断したら、WindowsAPIのHtmlHelp()という関数を呼び出せばよいだけです。この関数は、
 HtmlHelp(GetDesktopWindow(),ヘルプファイル名,HH_HELP_CONTEXT,ヘルプコンテキストID);
という形をしています。
ヘルプコンテキストIDに適当な数字をいれることで、目的のトピックが表示されます。
このIDは、HTML Help Workshopで指定したIDと同じです。
あとはアプリケーションが状況に応じてこのIDをセットしてやればよいということになります。

また、メイン画面の下にこういうタブを作ってみました。

Mjpro20080902_2_2

MITOUJTAG ProはMDIアプリなので、いろんな画面が同時に開きます。
実際に使ってみると、いろいろな画面を切り替えるために、[ウィンドウ]→[2]とかやっていると面倒でした。

やはり、画面切り替えにはタブが一番だと感じました。


| | コメント (0)

« 2008年8月 | トップページ | 2008年10月 »