FPGA Notes

.30 2010 FPGA-others comment(0) trackback(0)
1. std_logic型の'-'というのは使わないほうがよい、というか使えない。
ex.
with a select
b <=	"1111" when "--11",
	"0101" when "-11-",
	"0000" when others;
これでa = "1111"とかでも'1' /= '-'と判断されてbには"0000"が入るようです。少なくともシミュレータではそうなりました。

2. textioが謎
mifファイルなどの改行コードは必ず\r\nにしないといけないようです。

3. IPが謎
ISE9ではBlockRAMをシミュレーションしてもSRAMとして動作しないことがあります。これは生成時に、シミュレーションに必要なファイルがプロジェクトに登録されないためのようですが、詳細はわかりません。

4. IPが更に謎
RAMサイズがimplementできるサイズを超えていると、generate programming fileのところまで進んでエラーが出る。

ISE 9 の最適化が残念な件

.30 2010 FPGA-others comment(0) trackback(0)
ISE ver 9でちょっとした回路を組んでみたわけですが、design goalをspeedにして合成した(要するに多少回路規模が大きくなってもいいから速度がでるように最適化するオプション)にもかかわらず結構残念なことが判明しました。
min		<= a       when b /= "000" or c > a else c;
min3	<= min - 1 when b = "000" and c <= a and c /= "00000" else min;

ここで、min3のwhen節が成立するとき、b = "000" かつ c <= a なのでこのときminは必ずcになっています。 したがって2行目は
min3	<= c - 1 when b = "000" and c <= a and c /= "00000" else min;

と書けるわけです。このように圧縮しないとき、min3の値が出るまでの遅延は、
minの値が出るまでの遅延( = マルチプレクサの遅延) + min - 1の計算の遅延( = 定数加算回路の遅延) + min3のマルチプレクサの遅延
となります。
しかし、さきほどのように圧縮すれば、min3の値が出るまでの遅延は、
max{minの値が出るまでの遅延( = マルチプレクサの遅延), min - 1の計算の遅延( = 定数加算回路の遅延)} + min3のマルチプレクサの遅延
となってそこそこ遅延時間を減らすことができるのです。

が、残念ながらISE9ではこういった最適化は自動ではやってくれませんでした。ISEもバージョンがあがるにつれてこういった最適化も上手になってきているんでしょうかね…
早く家のPCにも最新版を入れてみよう。
# そもそもこのくらいの最適化は手動でやれよという気もしますが…

配線完了

.13 2010 FPGA-LCD comment(0) trackback(0)
電源周り(Charge Pumpで±9Vを作るところ)の配線をしようとして基板を引っ張ったら、本体基板とLCDを繋いでるウレタン線がブチブチ切れてしまいました。
また0.5mmピッチのランドにウレタン線を付け直す羽目になりました。
もう0.5mmピッチは懲り懲りだぁ~

数時間0.5mmピッチのランドと格闘した挙句なんとか配線がが完了しました。あとはLT1054を買ってくるだけ。とりあえず手持ちの7660を代わりに入れてみましたが±9Vは出ていないようでした。

一応VHDLで適当なシーケンサを作ってみましたがLCDの電源が準備できていないのでまだ動くか分かりません。

例によってmskファイルがデフォルトでは生成されないのでGenerate Programming FilesのPropertyのRead Optionからmskファイルを生成するように設定します。

水晶発振器の周波数が40MHzなのでタイミング制約はこんな感じでしょうか。
NET "sys_clk" TNM_NET = clk;
TIMESPEC TS_clk = PERIOD "clk" 25 ns HIGH 50%;

下準備(2)

.10 2010 FPGA-LCD comment(2) trackback(0)
レポートやら試験勉強やらやらなくてはいけないことが山積しているときこそ敢えて他のことをやると集中できるという経験は皆さんもお持ちでしょう。

というわけでFPGA開発の下準備として液晶周りを少し配線してみました。
0.5mmピッチのところにφ0.2mmのウレタン線をくっつけています。
0.5mmだとすぐに神経が疲れてきます。今日は5本くっつけたところで集中力が落ちてきたのでダウン。 あと31本残ってる…

考えてみると液晶にかなりの本数のピンを使わなくてはいけません。RGB6bitずつだと18本で不便なのでRGを5bitにして色データを16bitにします。それから制御ピンが4本あるので計20本。 今回使うFPGAの汎用IOは51本なので残り31本。入力デバイスとしてPS/2のキーボードをつけるとして残り29本。

ここで、液晶のVRAMを用意したいのですが、double-bufferにしたいので必要な容量は
96(height) * 400(width) * 2[Byte/pixel] * 2(double) ~ 160kByte
つまりdata幅が8bitのSRAMの場合、アドレスは最低でも18本必要です。SRAMの制御ピンが4本として18 + 8 + 4 > 29(泣)

仕方がないのでSRAMのデータ幅を16bitにして、それをそのまま液晶のデータ線と共有します。

実はLCDのデータバスをSRAMのデータバスと同じバスにしておくといろいろといいことがあります。
LCDに出力するとき、FPGAはまずSRAMにデータ要求をします。次にSRAMがデータを吐いてきます。そのときLCDのEnableをActiveにしてやればデータをFPGAに取り込むことなくSRAMから直接LCDに吐き出せます。 これで少し高速化できるというわけです。

秋月のHP見たらデータ幅16bitで512kByteの高速SRAM売り切れてた。萎え。

# 試験対策しなきゃいけないのに何やってんだろw

下準備

.30 2009 FPGA-LCD comment(0) trackback(0)
今日は埃がひどかった部屋の大掃除をしました。PCゲームをやりながらPCの電源周りの掃除をするのはさすがに心臓に悪いです。
部屋の掃除も終わって一段落したところで早速配線して机の上が散らかってしまいました><

今日は先日買ってきた秋月300円液晶をいじる準備。まずハンダでとめてあるふたっぽいものを撤去。続いて配置してあるコネクタを撤去。このコネクタの規格がよく分からないand入手できそうにないのでコネクタなしで直接ウレタン線でくっつけてしまおうという魂胆です。

ところが、…
家にあったウレタン線は0.4mm、基板のパターンの方は0.5mmピッチなので当然配線なんてできません。そこを無理してくっつけたら予想通りランドが取れました(泣
仕方がないので細いウレタン線を調達してもう一度挑戦することにします。

FPGAプロジェクトの方は春に取っておくつもりなのですが、春にスムーズに開発の中核部分に入れるように今のうちに下準備をしています。FPGA基板の配線が完了し、テストプログラムを書いてみました。
パラレルポートが付いている古いPCだとSPARTANの合成の場合、Fitterがやたらと時間を食うようになります。CPLDのときはそれほどでもなかったのですが…

やっとFitterが終わっていざ書き込もうとすると今度は「mskファイルが見つからない」とか言ってきます。調べてみるとちゃんと出てきました。
http://japan.xilinx.com/support/answers/22228.htm
よくわからないけどなんでデフォルトでは必要なファイルを生成してくれないんだろう…
まぁ結局書き込みまでできたので下準備としてはまずまずいい感じです。

# あのライターでちゃんとFPGAも書き込めてます^^
 HOME