1

谁能帮我写一个测试台吗?

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

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

4

2 回答 2

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';

这会产生一个时钟信号,该时钟信号一直运行到finishedt1之后保持低电平。模拟器将发现没有安排进一步的信号更改并自动停止。

您可以有许多不同的过程来创建不同的输入并检查输出。如果它们中的每一个都将完成设置为完成1时,则时钟将运行直到它们全部完成,因为分辨率功能导致finished信号X直到所有驱动程序都完成1

于 2013-07-26T09:06:46.747 回答
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.

于 2013-07-25T20:32:26.007 回答