Vhdl 在测试台上运行不同时钟模式的最佳方法

Vhdl 在测试台上运行不同时钟模式的最佳方法,vhdl,Vhdl,我对以不同的时钟频率运行当前的测试用例感兴趣,而不必在只改变时钟周期的情况下重新创建新的测试用例。对于这样的东西,使用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已

我对以不同的时钟频率运行当前的测试用例感兴趣,而不必在只改变时钟周期的情况下重新创建新的测试用例。对于这样的东西,使用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已经
过程
开始
等待时钟周期/2.0;

CLK您可以将时钟周期作为常规传递给testbench实体。模拟器无法处理任何类型的顶级泛型,因此可以使用字符串泛型并将其转换为时间。下面是VUnit测试台的一个示例(我是作者之一,因此如果可以的话,我会避免使用TCL)

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()
结果将是


您可以将时钟周期作为常规传递给测试台实体。模拟器无法处理任何类型的顶级泛型,因此可以使用字符串泛型并将其转换为时间。下面是VUnit测试台的一个示例(我是作者之一,因此如果可以的话,我会避免使用TCL)

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()
结果将是


有很多方法可以做到这一点。您当前使用什么方法来管理和运行不同的测试用例?想必你会想要一些和你已经拥有的东西很匹配的东西。让时钟周期成为一个信号?有很多方法可以做到这一点。您当前使用什么方法来管理和运行不同的测试用例?想必你会想要一些和你已经拥有的相匹配的东西。把时钟周期作为一个信号?
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()