目次
2011年度分はMeRLサーバのほうにあります。
http://merl.ec.t.kanazawa-u.ac.jp/diary_private/index.php?kawakami
最新の3件を表示しています。 コメントページを参照
ずいぶん久しぶりの作業日誌となってしまった。反省。
数日前からISimがエラーで落ちるようになってしまった。
エラー文面は以下の通り。
FATAL_ERROR:Simulator:Fuse.cpp:209:1.130.48.1 - Failed to compile one of the generated C files. Please recompile with -mt off -v 1 switch to identify which design unit failed. Process will terminate. For technical support on this issue, please open a WebCase with this project attached at http://www.xilinx.com/support.
FATAL_ERROR:Simulator:Fuse.cpp:209:1.130.48.1 - Failed to compile one of the generated C files. Please recompile with -mt off -v 1 switch to identify which design unit failed. Process will terminate. For technical support on this issue, please open a WebCase with this project attached at http://www.xilinx.com/support.
サポートに問い合わせて、とのことだったので秋田先生にXilinxサポートに投げていただいた。
その回答としては、メモリを10GB使っている。ModelSimを使うか、Linux版のISimを使って欲しいとのこと。
仕方なくModelSimについて調べていたところ以下のブログを発見。
http://marsee101.blog19.fc2.com/blog-category-66.html
少しエラーは違うが、Windows7 64bit版ではシミュレーションがうまくできないという内容だった。解決法として、Windows7 32bit版かWindows XP/Vistaの32/64bit版を使ってくれとのこと。
ダメ元でISEを32bit版で起動してシミュレーションを実行したところ正常にシミュレーションできた。32bitでの起動は以下をたどる。
Start -> すべてのプログラム -> Xilinx Design Tools -> ISE Design Suite 14.1 -> 32-bit Project Navigator
ここで起動したISEからプロジェクトを開く。
ちなみに自分のPCはWindows7 32bit メモリ4GBで、動いているISEはもちろん32bitだが恐らくメモリ不足で動かなかったのではないか。
ifdlkpはメモリを32GB搭載しているWIndows7 64bitで、64bitのためエラーが出たと思われる。32bitモードで起動すると正常動作する。
できないこともないが、やはり画像処理にはあまり向かないと思った。
重心を求める処理自体はそこまで難しくないからHDL書いて手動でインプリするのでもいいと思う。
重心を求める処理だけで視対象と眼球で1:1の対応が取れる座標が得られるのか実験してみる。さらにどれくらいばらつくのか(再現性はどの程度か)も調査。
影を含んだ状態でキャリブレーションでなんとかなるなら重心だけでいきたい。
引き続きSystem Generatorによる実装について試しているが、うまく進んでいない。
入出力+インバータだけのモデルでSimulink上でのシミュレーションもうまくいってるが、ucfファイルにてトップモジュールの入出力ピンの設定を行なっているがピン指定のところで存在しないなどのwarningが出ている。なんでだろう。
Simulinkモデル上ではモデルで表現されシンプルだが、生成されたHDLは分かりづらいかもしれない。
そうこうしているうちにMATLAB/Simulinkの試用期間が迫ってしまった...
インバータだけの簡単なモデルを作成してビットストリーム作成まで行った。しかしまだFPGA上で動作させることができていない。
ざっと見てみると、予めXilinxで用意してあるブロックしか使えないため、視線検出に使えそうな重心を求めるなどの処理は実装が難しい? 手動でインプリメントしたほうが無難かもしれない。
ヒューマンデータで販売されているDigilent社製USB-JTAGケーブルを用意してもらったので、今後はこっちを使うことにする。ついでに付属していた2.0mm-2.54mmピッチ変換基板も組み立ててみた。
Digilent社のXUP USB-JTAGケーブルは、Xilinx社のUSBダウンロードケーブルHW-USB(Platform Cable USB)の互換品で、Xilinx社のiMPACTから純正品と同じように使うことができます。 Digilent社はXilinx社のアライアンスパートナー企業です。
使い方はXILINXのPlatform Cable USBⅡと変わらない。コンピュータからもProgramming cables -> Xilinx USB Cableとして認識される。
小型になって便利。
うまくいってなかったVGA出力だが、クロック周りを見直したらあっけなく表示された。
(メモ : プロジェクト名gaTesSp6_120823)
秋田先生に設計していただいた新しいSpartan-6用の基板とヒューマンデータのSpartan-6ボードを軽く触ってみた。
とりあえずSpartan-6ボード上のLEDとスイッチを使って簡単な入出力のHDLとクロック分周+LED出力のHDLを書いたところ正常に動作させることができた。
ユーザーズマニュアルの最初のページに未使用ピンをFloatにする旨の注意があったためそれに従ってはじめに設定を行った。
JTAGピンの配置はVirtex-4と同様、コンフィグレーション手順も同じ。(Virtex-4のマニュアルに詳細手順有り)
ビットストリームファイルの割り当ての時に以下のような確認ダイアログが出たがNoを選択。
This device supports attached Flash PROMs. Do you want to attach an SPI or BPI PROM to this device?
論理合成段階で以下のwarningが出て何かと思ったら、26bit幅で宣言しているそのカウンタ内で常に24bit分しか使っていないという警告だった。
WARNING:Xst:1710 - FF/Latch <cnt_24> (without init value) has a constant value of 0 in block <spartan6tes120809>. This FF/Latch will be trimmed during the optimization process. WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <cnt_25> (without init value) has a constant value of 0 in block <spartan6tes120809>. This FF/Latch will be trimmed during the optimization process.
これをカウンタの上限値いっぱいの24bit幅で宣言し直したら上記の警告は消えた。しかし一方でこんな警告が。
WARNING:HDLCompiler:413 - "C:\programming\xilinx\spartan6tes120809\spartan6tes120809.v" Line 42: Result of 25-bit expression is truncated to fit in 24-bit target.
途中で25bit幅の計算するけど、上位1bitは無視しちゃうよというwarningらしい。今回は無視しても問題なさそうなのでこのままにしておく。
昨日うまくいかなかったDCMによるクロックの生成だが、リセット入力であっさり解決した。
リセット入力は単純にRST_Nの信号にLowを与えればリセットがかかると思っていたが、重要なのは次にまたHighの状態に戻すことだった。前回はRST_NをLowにしたままクロックを与え続けて、DCMから出ない出ないという状態になっていた。実機でも動作確認。
DCMで25MHzのクロックの生成はできたが、オシロで見ると波形がだいぶ歪んでいた。
秋田先生に見てもらったところ、信号端子とGNDとが離れすぎて電流ループができているのが原因とのこと。実際、より出力端子に近いところのGNDに繋いでみたところ歪みはかなり軽減された。
先の波形歪みの原因が分かる前、ucfファイルでの設定に何か問題があるのかと思っていろいろ調べていたら、PERIOD制約なるものを見つけた。
25MHzで駆動する出力ピンに以下の記述を追加。
NET "VGA_CLK_25M" PERIOD = 40.0ns HIGH 50%;
しかしこれは入力ピンに対する制約だったはずとの指摘を受け、調べてみるとどうも確かに入力ピンに使う様子。
参考
タイミングについて
前回設定したDCMを元に50MHzのクロックを出そうとしたが何も出てこない。明日もう一度見直してみる。
解決→2012/08/08(Wed)
同一システム内で複数のクロック源を使うのは良くない。基本的には1つ。
今回のVision Chipのシステムでは画像処理系はカメラからもらう40MHz、それ以外(VGA出力、UART、etc)はオンボードの48MHz辺りから取ると良い。
駒村さんのシステムではカメラの40MHz、オンボードの48MHz、18.432MHzの3系統を使用していた。
カメラの40MHzという数値はカメラの機種によって異なることがある点に注意。
一見中途半端に見えるが、9,600bpsなどの数値を作りやすい。(整数で割り切れる)
ex) (18.432 * 10^6) / 9600 = 1920, 1920 / 96 = 20
XPGA上で様々なクロックを作れるDCMの設定。どうやって使うのか分からなくて先生にも聞いたりしたが駒村さんの日誌に普通にあった。ちゃんと調べる癖を付けよう...
(参考)駒村さんの48MHzから50MHzクロックの生成パラメータ
CLKIN Sourceはボード上の48MHzだからExternalかと思ったが、駒村さんはInternalにしている。仕様書を見ると以下のようにある。
Spartan-3のDCM仕様書 : http://japan.xilinx.com/support/documentation/application_notes/j_xapp462.pdf CLKINをIBUFGグローバルバッファ入力プリミティブに接続する場合は[External]、その他のソースに接続する場合は[Internal]
ここ1週間くらいMacBookAir上のEvernoteが同期に失敗する旨のメッセージを毎回出すようになって同期ができなくなってしまった。
ソフト再起動、Mac再起動、Evernote入れ直しをしても効果なし。
ヘルプ->アクティビティログのエラーメッセージ
2012-07-31 15:54:57 sync [ENSyncEngine] ERROR: exception adding note '情報通信と危機管理特論 2012年度前期' to server 2012-07-31 15:54:57 sync [ENSyncEngine] ERROR: Sync exception: EDAMUserException(errorCode:5,parameter:"Data.body")
これを見るととあるノートだけがエラーになっている様子。
そこでこのノートをコピーして、元のノートを削除したところ問題なく同期ができるようになった。
何が原因かは分からなかったが、1つ問題のあるノートがあると他のノートも全て同期できなくなる様子。ただしノートのダウンロードはできる。アップロードは無理。
FPGAでの簡単な動作確認に成功
ボード : XCM-202A
VIRTEX4 XC4VLX160
outTes120627で作業
メインのVerilog HDL
module outTes120627(IN_I, OUT_O); input IN_I; output OUT_O; assign OUT_O = IN_I; endmodule
制約ファイル
NET "IN_I" LOC = AK12; NET "OUT_O" LOC = AJ12; #NET "IN_I" IOSTANDARD = "LVCMOS"; #NET "OUT_O" IOSTANDARD = "LVCMOS";
LVCMOSのを有効にしたらエラー出てコメントアウトしたけど、ISEでまとめた後にピン割付のレポート見たらLVCMOSになってた。デフォルトだとこうなる?
参考 : http://www.kumikomi.net/archives/2009/05/ioledrs-232.php
.vファイルを書く→制約ファイル(.ucf)を書く
"FPGAボードで学ぶVerilog HDL"の手順に従った。
無事書き込みし、実行できた。
駒村さんのストレージかifDLのdropboxの"ifDL\Research\CameraLink"にある。
詰まったところ
XILINX Platform Cable USBⅡから出てる"VREF/VREF"と書かれた赤い線と"---/INIT"と書かれた灰色の線がどう繋がるか分からなかったから駒村さんの作業日誌を見たら載っていた。
http://merl.ec.t.kanazawa-u.ac.jp/diary_private/index.php?komamura#mb76f860
赤はVCCとして見てよく、灰色はおそらく使わない。またFPGAボード側のGNDのうちの1つのピンは使わなくてよいらしい。
北川先生作成の"MeRL設計導入教育コース(外部非公開)"にPDKインストールの方法から最新のテクノロジファイルの導入法まで記されている。
半田さんのインストーラでは古いテクノロジファイルが含まれているので注意
使用するのはXILINXのFPGA。7, 8月くらいに笹田くん・自分用のボードが来そうなのでそれまで基礎の勉強。
まずはHDLの書き方の勉強を始めていきたい。
駒村さんの作業日誌等にいろいろなノウハウがあるのでそちらも探して読む。
昨日の続き
こんな感じ。撮影画像640x480のうち320x240を切り抜いて処理対象に。
撮影画像 二値化画像 コントロール
マスキング範囲 算出瞳孔中心(白い点) 座標出力
二値化画像で瞳孔以外の黒の領域があるが、マスキングで除去されて最終的な瞳孔領域の重心計算に影響していないことが分かる。
前回作製したカメラだと眼球を正面から撮影していたが、やはり下から見上げるような形で撮影したほうが瞳孔の欠けの影響を少なくできることが分かったのでカメラを下に設置し直した。
また、照射する赤外線も下から当てればプルキニエ像の映り込みを減らせるため位置を移動。
FPGAでの実装に先立って、OpenCVを使ってPC上で実際にWebカメラから取得した眼球画像から瞳孔の中心座標を求めるソフトウェアを作っている。
処理の流れは、
撮影
↓
収縮(0次モーメント=0になる直前まで繰り返し)
↓
1次モーメント算出(収縮できれいに1点に収まらないため1次モーメントで消失点座標を算出→整数化)
↓
マスク円作成
↓
マスキング
↓
1次モーメント算出
以上の処理で瞳孔の中心の算出ができた。
Webカメラは640x480で撮影しているが任意の区間を切り取って320x240にしている。
手元のMBAからVDECの20番サーバへファイルを置いた時のメモ
sftp (ユーザ名)@(20番サーバ)
put (ローカルのファイル名。TAB補完は効かなかった)
これでOK
DRCはDivaを使う
撮像素子はダイオードのシミュレーションができないからpDは描かずにLVS
画素間を突っ切るような配線にはM1, 2で遮光も兼ねる。遮光のメインはM2
隙間の下にトランジスタが無ければ問題ない
素子内の配線にはゲートを使ってもいい
前田さんの不規則の素子のレイアウトを参考にするといいかも
以前輪講で読んだ論文"An open-source low-cost eye-tracking system for portable
real-time and offline tracking"で使用されていたオープンソースのITU Gaze Trackerを使ってみた。
32bit Windows用のバイナリが入っていたのですぐに起動して試せる。
今の時点のバージョンは2.0ベータ。
100均でサングラスを買ってきてカメラと赤外線LEDを固定。
はじめにキャリブレーションがあり、9点、12点、16点が選べる。16点キャリブレーションをすると小さいボタンにもほぼ正確にポインタを視線により誘導できた。
精度は期待できそう。
今は眼球の正面にカメラが来ているが、斜め方向でも微妙な角度などによって上手くいったりそうでなかったり。正面からでもやはり影の影響などは大きい様子。
イメージセンサ試作では川﨑、中村と共に画素を担当。
計画としては18日くらいまででインバータの設計練習終了後、25日くらいまでに画素回路設計完了。
画素は10ミクロン四方
W/Lは最小でおk
画素の注意。内部素子の位置は異なるけど、線の位置は全画素で同じにしないといけない
電源線、GND、行選択線、列選択線、リセット線の5本ある
セレクタ
NANDしか作れないけらNOTをその後ろに付けないといけない
いきなりNANDに大きいNOTを付けると負荷容量が大きくなりすぎて動作速度が落ちる
3つとか5つに分割して、小さいのから段々大きくしてみるといい