testbench有助于使一个时钟周期延迟

时间:2013-07-25 20:28:54

标签: vhdl

有人可以帮我写一个测试台吗?

  • 输入“a”时设置load = 1
  • 等待1个时钟周期(即时钟的时间段)。
  • 设置load = 0并输入a = 00000

我不明白如何使1个时钟周期延迟。

2 个答案:

答案 0 :(得分:3)

我会同步,而不是等待“时间段”:

process
begin
  load <= '1';
  -- setup other signals as you wish also
  wait until rising_edge(clk);
  load <= '0';
  -- more signals and wait for rising_edge() calls in here...
  wait; -- when you've finally finished.
end;

另一个有用的技巧是有一个名为finished的信号。在流程开始时设置为0,在最终1之前设置为wait

那么你的时钟发生器可以是:

signal clk : std_logic := '1';
....
clk <= not clk after clk_period/2 when finished /= '1' else '0';

这会创建一个时钟信号,直到finished转到1然后保持低电平。模拟器将发现没有进一步的信号变化被安排并自动停止。

您可以使用许多不同的流程创建不同的输入并检查输出。如果它们中的每一个在完成时都设置为1,则时钟将一直运行,直到它们全部完成,因为分辨率函数导致finished信号为X,直到所有司机是1 s。

答案 1 :(得分:1)

您可以尝试这样做:

SIGNAL CLKp :time := 40 ns;

PROCESS
BEGIN
    CLK <= '0'; wait for CLKp/2;
    CLK <= '1'; wait for CLKp/2;
END PROCESS;

PROCESS
BEGIN
    load <= '1'; a <= ...; wait for CLKp;
    load <= '0'; a <= X"0"; wait for CLKp;
END PROCESS;

在这个简单的例子中,使用wait for CLKp可以获得1个周期的延迟。