FPGAなど、パソコンに関連することを載せている。

zzz ~雑記~
鋼材(コイル・フープ・板)の加工・販売サイト「テツコ」 全国対応

タイトル
仮運営中
google検索
このホームページ内の検索に使用してください。
ModelsimのError loading designについて
本文コメント
目的
ModelSimのError loading designというエラーに対処する。

概要
ModelSimでシミュレーションするとき、vishやvcomなどのエラーメッセージがなくて、Error loading designとだけしかエラーが表示されないことがある。

失敗例
シミュレーションしたいvhdlファイルのentity名とテストベンチのcomponent名を確認するとよいかもしれない。おそらく、entity名とcomponent名が同じ場合、先ほどのError loading designが発生する。Error loading designだけのときは名前関係を疑ったほうがいいかもしれない。
verilogでは未確認。

訂正
上記は間違いで、仮にentity名とcomponent名を違うものにすると、シミュレーションは通るが、インプット信号だけしか通らず、出力は出てこない。そのため、entity名とcomponent名は同じにしなければならない。

結果
ソースをじっくりと見たところ、vhdlファイルのinとテストベンチのoutを間違えて入力していた。それを改善したところ、シミュレーションが通った。 そのほかvhdlファイルとテストベンチでbit幅が違う場合などがある。

結論1
ModelSimでError loading designだけしかないときはvhdlファイルとテストベンチを比較して違うところを修正する。
->追記2参考

追記1
Modelsimの違うバージョン、たとえば6.5bと6.1gが混在していたり、QuartusIIのバージョン7.1と9.1が混在していたりするとだめなときもある。そのときはModelsimの設定を変えればいいと思うが、tclの知識が必要になるかもしれない。

追記2
根本的な解決方法がわかった。それはtranscript窓にError loading designだけではなく、青文字のメッセージ、たとえばLoading...などを表示させることである。青文字のwarning,note,errorなどが表示されない原因はおそらく日本語の文字にあると考える。
青メッセージが出てきた一例を挙げる。
マイコンピュータを右クリックし、プロパティ->詳細設定->環境変数を開く。
環境変数のところでTMPに注目する。青メッセージが表示されない場合はおそらくTMPの値に日本語が含まれていると思う。
%USERPROFILE%\Temp -> C:\Documents and Settings\○○○(おそらく日本語)\Temp
から
%SystemRoot%\TEMP -> C:\WINDOWS\TEMP
に変更する。
%SystemRoot%\TEMPでなくても、日本語が含まれていなければなんでもいいと思う。
この状態でModelsimを使えば青メッセージが出てくると思うのでそのメッセージにしたがってエラーを取り除く。

http://q.hatena.ne.jp/1203640748にあるようにアカウント、環境変数のUSERNAMEを変更することでも可能であると考える。要するにTMPに日本語が入っていなければOK。USERPROFILEはDocument and Settings + USERNAMEみたいな感じだとwikipediaで見たような気がする。

結論2
ModelSimでError loading designだけしかないときは日本語の設定を英数字に変更する。

追記3

Modelsimについて

ModelsimとはMentor Graphics(メンターグラフィックス)社が提供しているVHDL/Verilog-HDL/System-Cのシミュレーションを行うためのツールである。FPGAベンダーのaltera(アルテラ)版、Xilinx(ザイリンクス)版などがある。無料のModelsim、アルテラバージョンはmodelsim-ase(altera starter edition)である。

追記4

VHDLについて

VHDLとはハードウェア記述言語の一種で、FPGAの挙動や、動作を決定するプログラミング言語のようなものである。しかし、ハードウェア記述言語はC言語などのプログラミング言語と違い、並列動作をする。プログラミング言語は基本的に手続き型で逐次実行される(おそらく)。
たとえば以下の例を考える。
<例>
プロセス文の中のクロック同期の中で
if(rst_n = '0')then -- 初期化
	cnt		<= 0;
	s_flag	<= '0';
elsif(clk'event and clk = '1')then -- クロックの立ち上がり
	if(cnt >= 3)then
		cnt		<= 0;
		s_flag	<= '1';
	else
		cnt		<= cnt + 1;
		s_flag	<= '0';
	end if;
	if(s_flag = '1')then
		s_dout	<= x"20";
	else
		s_dout	<= (others => '0');
	end if;
end if;

-----------------------------------------------------------------------
クロックの立ち上がり数(clk数)
0	1	2	3	4	5	6	7	8	
cnt
0	1	2	3	0	1	2	3	0
s_flag
'0'	'0'	'0'	'0'	'1'	'0'	'0'	'0'	'1'
s_dout
x"00"	x"00"	x"00"	x"00"	x"00"	x"20"	x"00"	x"00"	x"00"
-----------------------------------------------------------------------

この例のようにcntが3になったとき、s_flagが'1'になっていないのは一つ前の状態、すなわちclk数が2の状態を参照するからだと思う。
ハードウェア記述言語にはVHDLのほかにもVerilog-HDLやSystem-Cがある。

追記5

FPGAについて

FPGAとはField Programmable Gate Arrayの頭文字をとったもので、ICの一種である。FPGAは何度でも(限度はあると思われるが)書き換えが可能である。FPGAに書き込むデータを作成するため、シミュレーションツールでVHDLなどをシミュレーションし、バイナリ作成ツールでコンパイルを行う。




				
Copyright (C) 2013 雑 All Rights Reserved.