2008年3月12日水曜日

VHDLのstring

writeとかwritelenとかではなく、ModelSimとかで波形表示する際に有効な、VHDLで文字列を格納しておく方法。

signal signal_name : string(1 to n);

で信号(というより格納領域)を定義しておいて、signal_nameには通常の信号(std_logic_vectorとか)と同様に文字列を代入する。文字列は“”で囲っておく。

例:
signal bus_condition : string(1 to 3);
:
process ( CLK, RESET ) begin
if ( RESET='1' ) then
bus_condition <= "typ";
elseif ( CLK'event and CLK='1' ) then
if ( PERR='1' ) then
bus_condition <= "err"; else bus_condition <= "typ"; end if;
end if;
end process;

注意点としては、以下のとおり。

(1) bit array(と言うのも変かな?)の0番目は使用不可。
(2) 信号を定義したビット数と文字列の数が合わないとcompile時にerrorが出る。

ちなみに、信号の定義は(1 to n)でも(n downto 1)でもどちらでもいい。別に1始まりでなくてもいいけど、そうするとnが文字数になるので楽。

テストベンチでの使用になるけど、意外と便利かも。文字数に融通が効く(例えば、5文字分を定義しておいて、3文字しか入れないとか)ともっと便利なのだが。

0 件のコメント: