谁能帮我写一个测试台吗?
load = 1
输入“a”时设置。- 等待1个时钟周期(即时钟的时间段)。
- 设置
load = 0
和输入a = 00000
我不明白如何使 1 个时钟周期延迟。
谁能帮我写一个测试台吗?
load = 1
输入“a”时设置。load = 0
和输入a = 00000
我不明白如何使 1 个时钟周期延迟。
我会同步进行,而不是等待“时间段”:
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
t1
之后保持低电平。模拟器将发现没有安排进一步的信号更改并自动停止。
您可以有许多不同的过程来创建不同的输入并检查输出。如果它们中的每一个都将完成设置为完成1
时,则时钟将运行直到它们全部完成,因为分辨率功能导致finished
信号X
直到所有驱动程序都完成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
.