如何使用VUnit测试库和VHDL正确测试顺序组件?我一直使用它来通过wait for
语句等来测试组合组件。在我的github存储库中,它的示例here就是这样。
很明显,我必须使用clk <= not clk after half_period;
生成时钟信号,但是如何等待呢?我是否写类似wait until rising_edge(clk)
的东西。但是,如果我想将时钟提前多个时钟周期?有没有比在行上方多次复制更好的方法了?
答案 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()