2007年10月02日

VHDL TIPS 「物理タイプの使い方」

物理タイプとは、時間や電圧、電流、距離などの物理的な物を表すために使用するデータタイプだ。
VHDLには元々「time」が物理タイプとして定義されており内容はスタンダードパッケージに書かれている。
この「time」を代表とする物理タイプはpsやnsなどの単位を指定できるのが大きな特徴で、新しい単位を持ったデータタイプを作成する事も出来る。

以下の例は距離の物理タイプを新たに定義して、その距離を遅延時間に変換する関数も用意した。(遅延時間は1ns=15cmで計算)


library modelsim_lib;
use modelsim_lib.util.all;

package distance_pkg is

    -- 距離タイプ
    type distance is range 0 to integer'high
        units
            munit;

            um      = 10 munit;
            mm      = 1000 um;
            cm      = 10 mm;
            m       = 100 cm;
            km      = 1000 m;

            mil     = 254 munit;
            inch    = 1000 mil;
            ft      = 12 inch;
            yd      = 3 ft;
            fm      = 6 ft;
            mi      = 5280 ft;
            lg      = 3 mi;
        end units;

    -- 距離から遅延時間を算出
    function distance2time( trace_len : distance ) return time;

end distance_pkg;

package body distance_pkg is

    -- 距離から遅延時間を算出
    function distance2time( trace_len : distance ) return time is
        variable    resolution      : real;
        variable    delay_time      : time;
    begin
        -- シミュレーションレゾリューションの取得
        resolution := get_resolution;

        -- メートル−時間変換
        --1ns=15cm(150000um)
        --1000000fs=150000um
        --1fs=0.15um(1.5munit)
        delay_time := to_time( real( distance'pos(trace_len))
                                 /(1.5 * resolution * 1000000000000000.0));

        return delay_time;
    end;

end distance_pkg;


このように最小単位からの係数を変えることで、ミリやインチなどを混在して記述出来る事も便利な点だ。
また、距離を遅延時間に変換する関数は、「time」がシミュレーションのレゾリューションによって最小単位が変わる特殊な物理タイプのため、まずレゾリューションを取得してから変換している。

この距離パッケージを使うと、以前紹介したVHDL TIPS 「双方向バスの遅延モデル」の遅延値を入力する部分を、距離を入力する様に簡単に置き換えることが出来るので、ケーブルのモデリングなどに使用するとおもしろいと思う。



投稿時刻(08:58)│コメント(0)VHDL 

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
最新コメント
カテゴリ別表示
月別表示