VUnit测试顺序组件

时间:2019-07-12 17:46:51

标签: vhdl vunit

如何使用VUnit测试库和VHDL正确测试顺序组件?我一直使用它来通过wait for语句等来测试组合组件。在我的github存储库中,它的示例here就是这样。

很明显,我必须使用clk <= not clk after half_period;生成时钟信号,但是如何等待呢?我是否写类似wait until rising_edge(clk)的东西。但是,如果我想将时钟提前多个时钟周期?有没有比在行上方多次复制更好的方法了?

2 个答案:

答案 0 :(得分:1)

我通常会有一些东西

    procedure walk (
        signal   clk   : in std_logic;
        constant steps : natural := 1) is
    begin
        if steps /= 0 then
            for step in 0 to steps - 1 loop
                wait until rising_edge(clk);
            end loop;
        end if;
    end procedure;

只需确保如果您等待其他信号,则可能需要与时钟重新同步。

例如

    clk <= not clk after 5 ns;
    ...

    wait for 1.5 ns;

    -- This assignment will happen at 1.5 ns, not at a clock edge!
    a <= '1'; 
    walk(clk, 1);

    -- If you need somethign happening at a clock edge and you're not sure of where in
    -- time you are, might be worth synchronizing at the start
    walk(clk, 1);

    --
    a <= '1';
    walk(clk, 1);
    a <= '0';
    walk(clk, 0);
    ...

希望这会有所帮助!

答案 1 :(得分:1)

如果您正在使用VUnit,则已经有这样的过程可用。 VUnit随OSVVM库提供了其随机化功能,但它还包含其他内容,例如WaitForClock。要启用OSVVM,您需要在Python脚本中添加以下内容。

ui = VUnit.from_argv()
ui.add_osvvm()