0

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

显然我必须生成一个时钟信号,clk <= not clk after half_period;但如何等待它?我会写类似wait until rising_edge(clk). 但是,如果我想将时钟提前多个时钟周期?有没有比多次复制以上行更好的方法?

4

2 回答 2

2

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

ui = VUnit.from_argv()
ui.add_osvvm()
于 2019-07-15T19:55:47.030 回答
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);
    ...

希望这可以帮助!

于 2019-07-14T14:45:23.013 回答