有人可以帮我写一个测试台吗?
load = 1
。 load = 0
并输入a = 00000
我不明白如何使1个时钟周期延迟。
答案 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个周期的延迟。