如何使用 VUnit 测试库和使用 VHDL 正确测试顺序组件?我一直在使用它来测试使用wait for
语句等的组合组件。它的示例在我的 github 存储库中。
显然我必须生成一个时钟信号,clk <= not clk after half_period;
但如何等待它?我会写类似wait until rising_edge(clk)
. 但是,如果我想将时钟提前多个时钟周期?有没有比多次复制以上行更好的方法?
如果您使用的是 VUnit,那么您已经有这样的程序可用。VUnit 随 OSVVM 库提供随机化功能,但它还包含其他内容,例如WaitForClock。要启用 OSVVM,您需要在 Python 脚本中添加以下内容。
ui = VUnit.from_argv()
ui.add_osvvm()
我通常有一些东西
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);
...
希望这可以帮助!