2017-11-16 8 views
0

クロック周期を変更して新しいテストケースを再作成しなくても、異なるクロック周波数で現在のテストケースを実行することに興味があります。 tclスクリプトを使用すると、このようなことが改善されるでしょうか?例えばテストベンチで異なるクロックモードを実行する最適なアプローチ

testcase1 has 
    process 
    begin 
    wait for CLK_PERIOD/2.0; 
    CLK <= not CLK; 
    wait forCLK_PERIOD/2.0; 
    NCLK <= not CLK; 
    end process; 

が、私はあなたがテストベンチのエンティティへのジェネリックとしてクロック周期を渡すことができ

process 
    begin 
    wait for CLK_PERIOD1/2.0; 
    CLK <= not CLK; 
    wait forCLK_PERIOD1/2.0; 
    NCLK <= not CLK; 
    end process; 
+0

なり、これを行うための方法はたくさんあります。さまざまなテストケースを管理および実行するために現在どのような方法を使用していますか?おそらくあなたはすでに持っているものとうまく合うものを望むでしょう。 –

+0

CLK_PERIODを信号にしますか? –

答えて

0

でtestcase1実行できるようにしたいです。シミュレータはどのようなタイプのトップレベルジェネリックも扱えないので、文字列ジェネリックを使用してそれを時間に変換することができます。以下は

library vunit_lib; 
context vunit_lib.vunit_context; 

entity tb_test is 
    generic (
    clk_period_as_string : string; 
    runner_cfg : runner_cfg_t); 
end tb_test; 

architecture tb of tb_test is 
    constant clk_period : time := time'value(clk_period_as_string); 
begin 
    test_runner : process 
    begin 
    test_runner_setup(runner, runner_cfg); 

    info("Clock period set to: " & to_string(clk_period)); 

    test_runner_cleanup(runner); 
    end process test_runner; 
end; 

A VUnitスクリプトは、テストベンチ

from os.path import join, dirname 
from vunit import VUnit 

prj = VUnit.from_argv() 

tb_lib = prj.add_library('tb_lib') 
tb_lib.add_source_files(join(dirname(__file__), 'test', '*.vhd')) 
tb = tb_lib.entity("tb_test") 

generics = dict(clk_period_as_string="5 ns") 
tb.add_config(name='clock period = 5 ns', generics=generics) 

generics = dict(clk_period_as_string="10 ns") 
tb.add_config(name='clock period = 10 ns', generics=generics) 

prj.main() 
のいくつかの構成を作成することで、このジェネリックを制御することができます(私ができる場合、私はTCLを避けるように、私は著者の一人です)VUnitテストベンチの例です

結果は

enter image description here

関連する問題