VSS簡易マニュアル

  1. 必ずお読み下さい!!
  2. 最上位階層のVHDLソース
  3. 回路のコンパイル
  4. 設定ファイル
  5. 観測信号線の設定
  6. 入力信号値の設定
  7. VHDLシミュレータの起動
  8. シミュレータの実行
  9. シミュレーションの再実行
  10. 観測信号や信号入力の追加
  11. VHDLシミュレータの終了
  12. 付録

総目次へ

必ずお読み下さい

本マニュアルでは,Synopsys社のVHDLシミュレータ(VSS)を対象としています. VHDLによる回路記述が完了したら,VHDLシミュレータを利用して機能検証を行 います.ここでは,コマンドvhdlsimを利用したシミュレーション方法につい て説明します.VSSの詳細に関しては,VSSリファレンスマニュアルや,VSSユー ザーズガイドを参照して下さい.なお,ライブラリパス等の設定環境について は,九州大学安浦研究室での使用を前提としています.また,キー入力やメニュー バーの選択は,ボールド体で示します.

最上位階層のVHDLソース

階層設計を行っている場合,最上位階層のVHDLソースにコンフィギュレーショ ン宣言が必要になります.アーキテクチャ本体の後にコンフィギュレーション 宣言を追加してください.後にVHDLシミュレータを起動する際は,コンフィギュ レーション名(下図ではconf_name)で起動します.




回路のコンパイル

以下のコマンドを実行して,記述を完了したVHDLソースのコンパイルを行いま す.

%> vhdlan -l file_name.vhd

-lオプションを設定すると,コンパイル結果を反映したリストファイルが作成 されます.デバッグを行う際に非常に便利です.階層設計を行っている場合は, 下位の階層から順にコンパイルして下さい.また,パッケージファイルを使用 している場合は,必ずパッケージファイルのコンパイルを行ったのちに,通常 のVHDLソースのコンパイルを行います.

設定ファイル

回路シミュレーションを行う前に,Synopsys環境設定ファイルを設定します.
設定ファイル .synopsys_vss.setup を作業ディレクトリにコピーして下さい. このファイル内で,シミュレーションに関する様々な設定を行います.ここで, 設定ファイル.synopsys_vss.setup中に

RUNREAD = setupfile.inc

と定義して下さい.setupfile.incは自由な名前を付けても結構です. setupfile.incはVHDLシミュレータの初期設定ファイルとして利用します.今 後,信号線の観測や信号値の代入などは,全てsetupfile.incで定義します. VHDLシミュレータは,シミュレータ起動直後にsetupfile.incを読み込み初期 設定します.setupfile.incの例

観測信号線の設定

setupfile.incの中で,観測したい信号線を定義します.観測信号線の定義に はtraceコマンドを使用します.traceコマンドで観測信号線を定義すると, VHDLシミュレータ起動直後にビューアが起動され,自動的にビューア内に観測 信号線が定義されます.最上位階層に現れている信号線を観測するには, setupfile.incの中に以下の記述を追加して下さい.

trace /top_entity_name/signal_name

ここで,top_entity_nameは最上位階層のエンティティ名を表します.また, signal_nameは,入出力ポートの信号線名もしくはアーキテクチャ内部で定義 した信号線名です.なお,VARIABLE型の信号の値は観測できません.もし,下 位階層の信号線を観測したい場合には,setupfile.incの中に以下の記述を追 加して下さい.

trace /top_entity_name/component_label/・・・/signal_name

下位階層のラベル名(エンティティ名ではありません)を指定することで,下位 階層の信号線を観測できます.もし,バス信号線のある一ビットだけ観測した 場合には,signal_name(インデックス)を指定してください.




入力信号値の設定

setupfile.incの中で,入力したい信号値を定義します.入力値の定義には assignコマンドを使用します.assignコマンドでは,入力時間,入力値,入力 対象となる信号線名,を定義します.VHDLシミュレータは,シミュレーション 時間が入力時間で指定された時間になると,入力値を信号線に代入します.最 上位階層の入出力ポートinput_portに対し,シミュレーション時間500nsの時 に信号値'1'を代入するには,setupfile.incの中に以下の記述を追加して下さ い.

assign -after 500 '1' /top_entity_name/input_port

-after 500 を省略すると,シミュレーション時間0nsの時に信号値が代入され ます.また,バス信号の入力ポートに値を代入する場合は,

assign -after 500 "0101010" /top_entity_name/input_port

とします.ここでは8ビットバスの場合を示しています.




VHDLシミュレータの起動

初期設定ファイルが完成したら,VHDLシミュレータを起動します.VHDLシミュ レータの起動には,以下のコマンドを入力してください.

%> vhdlsim conf_name

vhdlsimコマンドの引数は,コンフィギュレーション名であることに注意して ください.このコマンドを実行すると,VHDLシミュレータが起動されます. setupfile.incの中でtraceコマンドを使用しておけば,自動的にビューアが立 ち上がります.また,コマンドを実行したktermは,VHDLシミュレータのプロ ンプトが表示されます.プロンプトの設定は,setupfile.inc中の

set PROMPT ^$file->^

で可能です.ここでは,最上位階層のVHDLファイル名をプロンプトに表示して います.




シミュレーションの実行

シミュレーションを実行します.VHDLシミュレータを起動したktermにおいて,

sim_prompt-> run Simuration-Time

を入力します.Simuration-Timeは,実行するシミュレーション時間を指定し ます.以下では,5000nsシミュレーションを実行する場合を示しています.




シミュレーションの再実行

シミュレーションを再実行したい場合は,VHDLシミュレータを起動したkterm において,

sim_prompt-> restart

を入力してください.ビューアの波形もクリアされます.restartした場合は, setupfile.incも再度読みなおされます.




観測信号や信号入力の追加

setupfile.incで定義したtraceコマンドやassignコマンドは,VHDLシミュレー タを起動したktermからも直接定義できます.例えば,ビューアが起動されて いる状態で信号add_signalの観測を追加したい場合は,以下のように入力して 下さい.

sim_prompt-> trace /top_entity_name/add_signal




VHDLシミュレータの終了

VHDLシミュレータを終了するには,

sim_prompt-> quit

を実行します.

付録

  • オリジナル・コマンドの作成
    setupfile.incにユーザオリジナルのコマンドを定義することができます.例 えば,クロック信号を何度も'0','1','0','1',・・と入力するのは面倒です. そこで,setupfile.inc中で次のようにコマンドとして定義します.
    --           setupfile.inc
    --     ユーザオリジナル・コマンドの定義
    --    run_p100 Clk_Name Reset_Name Sim_Time
    --
    comm run_p100              -- コマンド名
    if ($# < 3) then           -- パラメータ数のチェック
    echo ============== Error ==============
    echo You must set some parameters!!
    echo run_p100 Clk_Name Reset_Name Sim_Time  
    end if
    if ($# > 3) then           -- パラメータ数のチェック  
    echo ============== Error ==============
    echo You must reduce some parameters!!
    echo run_p100 Clk_Name Reset_Name Sim_Time  
    end if
    if ($# = 3) then           -- パラメータ数のチェック(OK!)
    assign '1' $2              -- 2番目の引数(Reset_Name)に'1'を代入
    assign -after 150 '0' $2   -- 150ns後に2番目の引数に'0'を代入
    set tmp_cou 0              -- カウント用変数をリセット
    while ($tmp_cou < $3) loop -- 3番目の引数(Sim_Time)までLOOP
    assign -after 50 '0' $1    -- 50ns後に1番目の引数(Clk_Name)に'0'を代入
    assign -after 100 '1' $1   -- さらに50ns後に1番目の引数(Clk_Name)に'1'を代入
    set tmp_cou $tmp_cou+100   -- 
    run 100                    -- シミュレーション時間100nsだけ実行
    end loop
    end if
    end
    
    
    このコマンドrun_p100は,

    sim_prompt-> run_p100 Clk_Name Reset_Name Sim_Time

    というように利用します.Clk_Nameにはクロック信号名を,Reset_Nameにはリ セット信号線名を指定します.また,Sim_Timeには実行したいシミュレーショ ン時間を入力します.setupfile.incで以下のコマンド定義を行い,

    sim_prompt-> run_p100 Clock Reset 1000

    と実行すると,シミュレーション時間1000nsまで以下のような信号がClockと Resetに代入されます.
             __      ____      ____      ____      ____
    Clock      |____|    |____|    |____|    |____|
              50   100  150  200  250  300  350  400
             ____________
    Reset                |_____________________________
    
    


総目次へ