作業日誌

目次

2011年度分はMeRLサーバのほうにあります。
http://merl.ec.t.kanazawa-u.ac.jp/diary_private/index.php?kawakami


コメント

最新の3件を表示しています。 コメントページを参照

お名前:


過去の日誌

2013/06/06(Thu)

まだ正しい値が出ない

昨日の問題、フラグは意図したとおりに立つようになったが、全体の動作としてはちゃんと動かなかった。
先生からx方向の累算のクロックを遅くしてみたらとの指摘をもらったので、今後実装してみる。言われてみれば確かに以前クロック周りでうまくいっていなかったからこの方法で解決するかも。

IPX-VGA210-Lのフレームレート

カメラの仕様ではy方向を480行よりも少なくしていくとフレームレートを上げられる。
データシートP79にその関係性の式とグラフがある。

  • 640x480 (Dual Mode) : 210fps
  • 640x180 (Dual Mode) : 500fps
  • 640x69 (Dual Mode) : 1,000fps
  • 228x214 (Dual Center Mode) : 1,000fps

Dual Center Modeは水平方向中心の左右114pix、計228pixに絞って読み取るモード


2013/06/05(Wed)

640列分の結果が正しく出ない?

この間320x480で正しい結果が得られたが、それを640x480にするとうまく動かない。
症状としては常に重心が0, 0で、内部のx方向の累算完了フラグも立っていなかった。
詳しく各信号を見てみると、各列に入力するセレクタ用のxの値が、本来であれば639まで増えるところ329あたりまでしか増えていなかった。つまりそのせいでx=639を条件としていた累算完了フラグが立たず、それ以降の計算ができていなかった。
xはy方向の加算完了フラグが1の間中1ずつ増えるようにしているが、このyのフラグが途中で0に落ちていた。それがx=329あたりのタイミングだった。
原因としてはそのyのフラグを制御している部分の単なる記述ミス。
FVALが0に落ちた後(1フレーム分の転送が終わった後)、LVALに同期してフラグを立てるが、次のLVALの立ち上がりで0に落ちる記述になっていた。(LVALが落ちている間だけxが増加して、それが329。)
ここを修正。


2013/05/31(Fri)

重心が正しく出ない問題が解決

悩んでいた値がうまく出ない問題だが、accumlaterに各列の回路から取り込むタイミングをposedge CCLKからnegedgeにしたら期待している動作となった。バスが長いからサンプルする前の不定な値を取り込んでいたのかも?
ゲーテッドクロックになるが、意図的だから今回は良い。
320x480では正常動作。640x480を論理合成中...→うまく動かない(2013/06/05参照)

FPGAの簡単なデバッグをしてみる

FPGAの中の数値をどう読み取るか、UARTの実装やChipScopeの導入も考えたら簡単に1bitずつ外に出せば手軽だと思い、実装してみた。分かりやすくて良い。

	module outValSerial (clk, dataIn, dataOut, en, n_clr);
		input clk, en, n_clr;
		output reg dataOut;
		input [26:0] dataIn;
		
		reg [26:0] dat;
		reg [4:0] cnt;
		wire en_1;
		reg flag;
		
		registor dff1(.d(en), .q(en_1), .clk(clk), .n_clr(n_clr));
		
		always @ (posedge clk or negedge n_clr) begin
			if (n_clr == 0) begin
				dat <= 0;
				cnt <= 0;
				flag <= 0;
				dataOut <= 0;
			end else begin
				if (en == 1) begin
					if (en_1 == 0) begin
						flag <= 1;
						dat <= dataIn;
						dataOut <= 1;		// start bit
					end else begin
						if (flag == 1) begin
							if (cnt < 26) begin
								dataOut <= dat[0];
								dat <= dat >> 1;
								cnt <= cnt + 1;
							end
						end
					end
				end
			end
		end
	endmodule


2013/05/30(Thu)

(解決)謎の跳ね返りの問題

(※解決 : 2013/05/31) 先生からdividerがsignedになっているのが原因でないかとアドバイスをもらい確認したが、設定ではunsignedとなっていた。また割る数/割れれる数にいろいろな数値を設定したところ全て予想通りの動作をしたため、除算器は悪くなさそう。
重心を出すのにsx/s, sy/sの計算をするが、そのsにまず着目して調べてみると、どうやら謎の初期値を持っていることが分かった。
領域が全て0(白)の場合でも1831など、どこから出てきたのか分からない値が出ている。x方向の累算器がおかしい?


2013/05/29(Wed)

重心座標の跳ね返りの問題

重心を求める回路をFPGAに実装してみたが、挙動が正しくない。まずy方向だけ見ている。
XilinxのDivider Generatorを使用。
黒い領域の重心がちゃんと求められているように見えるが、端の方に行くにつれ求められた重心は中心に戻ろうとする。
不審な点

  • なぜ中心に戻ろうとするのか
  • 全領域が白の時は0÷0の計算になるが、重心はy=240付近となっている。こういう仕様?

先生に相談しデータシートを確認したところ計算時に補数を使う可能性があるから1bit余分に確保しておくと良いとある。
そこでやってみたが、効果なし。

  • Dividerのビット数を増やす(割る側、割られる側共に) : 変わらず
  • s, sx, syのバスを1bit増やす : 変わらず

悩み中


2013/05/22(Wed)

Verilog HDLでのreg変数の初期化

output reg aaa = 1;
という記述は言語仕様上可能だが、実際にFPGA上でその動作になるかは分からない。
多くの場合0となる。
そこで、最初から1が欲しいのならば、

  • リセットで1が入るようにする
  • n_aaa = ~aaaを作って、反転した信号を入力する

negedgeについて

FFは立下りは原理的に検出できないので、negedgeのエッジセンシティビティを記述してもINVを通した信号に変換(=内部的にposedge)される。
この遅延が問題となることもあるからなるべく使わない方がいい。
ただしリセット時の信号はOK。
もしnegedge使いたいなら2倍のクロックを用意して、0/1と変化するようなステートマシンにすると良い。(立ち上がりが0, 立下りが1など)

2013/02/08(Fri)

レーザーカッター納品時レクチャーメモ

・レンズには2種類ある
 ・切断用
 ・刻印用
・フットスイッチ(左) : ブロア
  必ず使用時に動かす
・レンズまでの距離はテーブルの昇降で調整
・動き方には2種類
 ・ラスタモード : 刻印
   プリンタのような動き
 ・べクラモード : 切断
・作図ソフトはコーレルドロー
  起動時のキャンバス範囲がレーザーカッター実機の加工範囲と一致
  塗りこんだデータはラスタ
  線のみはベクタ
   線幅を極細線にする
   線幅があるとラスタと認識されてしまう
・加工
  加工したいデータを選択→印刷(VLS350)→環境設定
   マテリアルデータベースとマニュアルがある
  ・マテリアルデータベース
    材料の種類と厚みを指定するとDBから推奨値を自動で決めてくれる
    パワーとスピードを変更可
  ・印刷対象は選択範囲になっていることを確認
 ・本体の電源投入前にトランス(本体の横)の電源を入れる
   これで100V→110Vの変換。電源入れてないとソフトがフリーズする。そうなったらPC再起動するしかない
 ・左下の緑のランプ(アイドルランプ)が点いていれば電源入れていい
   通信が確立しているということ
 ・電源投入は本体側のボタンでもPC上のボタンでもどちらでも同じ
 ・スタートボタンが緑なら準備完了
 ・フォーカス合わせ
  ・レーザ位置確認(PCソフト上でボタン押して可視光レーザON)
  ・フォーカスツールで高さ合わせ(テーブルの昇降による)
    レンズ部分のフタを開けて合わせる
 ・燃えやすい材料の場合、ノズルをセット
   一度レンズを外さないといけない
   アクリル板なら8mm厚以上は付けたほうがいい
   他にも紙、木材など
・必ずブロアをON・。手を入れて吸い込んでいるか確認すること
・加工してみて弱かったら、スピートを落とすかパワーを上げる
・一度に8種類の加工が可能
  ソフト上の8色に対応
  加工順はマニュアル調整の画面に表示されている順になる
・自動で内側の部分から加工される
・リロケートビューで位置移動可
・初めて加工する材料の時はマテリアルデータベースを使って試して、それから手動で調整してみる
  その設定は保存可能。Save→Load
・15分くらい連続稼働させると特性が安定する。最初は強い?
  もし大規模な時間のかかる加工をするなら15分くらい慣らし運転をしてからのほうがいいが、通常は気にしなくていい
・加工可能なもの : ライターであぶって燃えるものに限る
  ステンレス、チタン、鉄への刻印くらいなら可能
  耐熱、クリスタルガラスなら切断のためのガイド線いれなどにも使える
  塩ビ、ポリカーボネートは有毒ガズ発生のため加工禁止
・下のハニカム形状のテーブルのせいで切断面下部にカエリと呼ばれるレーザー反射痕が付く。6mm間隔くらいで1mmくらいのが傷が付く
  防ぐためには何か下に噛ませてテーブルから浮かせればいい
・アクリル板を彫った時に白い粉がたくさん付いた
  焦点距離をずらしたり、ある人は自転車用のオイルを塗って回避しているらしい。この辺はノウハウがあるらしい
・切り口を滑らかにしたいときにも焦点距離を下に3mm程度ずらしたりするといい
・レーザーワークスのブログにたくさん加工例がある
・フェルト(化学繊維)は火が出ないからそのまま加工OK
・アクリル加工中は一番出火の可能性高い
  出火した場合、まず真っ先に本体ドアを開ける。レーザーも止まるし、大抵は火も止まる。それでも消えない時は設置予定のCO2消火器をかける
・メンテナンス
 ・初めにトランスの電源を落とし、USBも抜く
 ・自分が使う前に汚れ具合とかチェックするのが大事
 ・アクリルとか切ると粉とか付く
  ・特にレーザー発射部、各ミラー
    一番ひどいのは切断面に近いところのミラー
  ・曇ってるとそこに熱が溜まって割れる
 ・エアダスターで飛ばして、クリーナーで拭く
   専用のクリーナーもあるけど、メガネ用の濡れティッシュでもOK
 ・たまにベアリングが走るx, yのレールを綿棒で拭く
 ・テーブルの中にゴミ入ってると燃える。外して掃除
   テーブルにコネクタ有り。ちゃんとはまってないと「フィクスチャーをはめて」とのエラーが出る