我有兴趣以不同的时钟频率运行我当前的测试用例,而无需重新创建只有时钟周期改变的新测试用例。使用tcl脚本会更好吗?
例如:
testcase1 has
process
begin
wait for CLK_PERIOD / 2.0;
CLK <= not CLK;
wait forCLK_PERIOD / 2.0;
NCLK <= not CLK;
end process;
但我想能够用
运行testcase1 process
begin
wait for CLK_PERIOD1 / 2.0;
CLK <= not CLK;
wait forCLK_PERIOD1 / 2.0;
NCLK <= not CLK;
end process;
答案 0 :(得分:0)
您可以将时钟周期作为通用传递给testbench实体。模拟器无法处理任何类型的顶级泛型,因此您可以使用字符串泛型并将其转换为时间。下面是VUnit测试平台的一个例子(我是作者之一,所以如果可以的话我会避免使用TCL)
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;
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()
结果将是