スポンサーサイト

.-- -- スポンサー広告 comment(-) trackback(-)
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

XILINX chipscope 12 on Ubuntu

.07 2011 FPGA-others comment(0) trackback(0)
メモ。
Ubuntuでchipscopeを使おうとしてハマった点。

普通にインストールし、sourceを~/.bashrcに書けばISE 12が起動する。
問題はその後。chipscope を使おうとしてNew sourceからchipscope fileを選択しても「ISEのバージョンとChipscopeのバージョンが違うよ」と言われて起動できず。
再起動したらとりあえずそのエラーは出なくなった。

しかーし。
再びNew SourceからChipscope fileを作ろうとすると
unwrapped/cs_common.sh: 76: count++: not found
なるエラーが。結果的に
% sudo dpkg-reconfigure dash
でNOを選択することで解決した。
スポンサーサイト

XILINXのハードワイヤードロジックを評価してみた

.27 2010 FPGA-others comment(0) trackback(0)
Spartan3とかだと乗算器が専用回路で入っていますが、Virtex系のFPGAの場合、それをさらに進化させたようなスライスが入っています。
DSP48-sliceとかいうやつですね。

実際にこれがどのくらいの周波数まで耐えられるのかを調べてみました。
データシートによると550MHzだとか。
実際に簡単な積和演算回路を書いてタイミング制約を厳し目に設定してみると、ちゃんと500MHzのタイミング制約を通過してくれました。
Virtex系のデバイスの場合、DSPユニットがあるのでAdderとかも変に自分でRTLレベルで書くより普通に+を書いたほうが速くなるようです。

さて、CPU作りたくなってきたので暫くAVR系の開発は凍結ですね…

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にも最新版を入れてみよう。
# そもそもこのくらいの最適化は手動でやれよという気もしますが…

CPLDライター続編

.28 2009 FPGA-others comment(0) trackback(0)
CPLDライター続編です。

前回はあまった基板の切れ端に無理やり部品を押し込んで相当な倹約っぷりをご覧に入れましたが今回もそれに劣らぬ倹約っぷりを発揮します。
今日はJTAG用の10pinの圧着コネクタを買ってきて圧着しました。
これって意外に大変ですね。結局ラジオペンチを2つ取り出してきてかなり強引に圧着しました。
そのケーブルなのですが、なんとまぁ家中探しても4本とか6本とかでまとまっているのは転がってたんですが10本まとまっているのがいなかったんですね。
しょうがないので4本のやつと6本のやつをまとめて10本にしています。そのせいでケーブルが2つに裂けていて非常にみっともない感じです。

で、そんなケチケチライターでCPLDなんて書き込めるのか?それを検証するにはCPLDが必要なのですが、 半死のCPLD(プログラムによっては書き込めなかったりするような微妙な死に方をしているCPLD)がなぜか家にあったのでそいつを昔作ったCPLDテストボードに挿して超簡単な回路を書いてみました。
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
use IEEE.std_logic_arith.all;

entity main is
	port(	LED	: out	std_logic_vector(7 downto 0);
			sw	: in	std_logic_vector(2 downto 0));
end main;

architecture RTL of main is
begin
	dec: for i in 0 to 7 generate
		LED(i) <= '1' when i = conv_integer(sw) else '0';
	end generate;
end RTL;

速攻で書いて一発動作。さすがにこのくらいはすらすら書けないと。
書き込み/読み出し等は全く問題なくできました。ケチケチライターも一発動作です♪

結論:部品がすべて基板に乗っている以上なにも問題はない。

一応ライターに使ってる子は74ACタイプなので低電圧のFPGAも書き込めるはずです。HCタイプだと低電圧にしたときに速度が落ちて書き込みに失敗するんですがACなら大丈夫でしょう。 ちなみに参考にした本には74LCXを使えと書いてありましたが、それだと5VのCPLDが書き込めないんですね。LCXなんて初めて聞きます。最近は各社新しいシリーズを発売してるんでしょうか。
 HOME 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。