always clk <= #5 !clk;
似乎这不起作用并得到一个“内存不足”#34; VCS错误
这背后的原因是什么?我觉得VCS无法摆脱它为clk安排的事件。但不知道为什么?
答案 0 :(得分:1)
您收到“内存不足”错误,因为它是一个非阻塞的无限循环,将未来事件添加到调度程序。
always
在功能上等同于initial while(1)
(无限循环)。 <= #5
不消耗时间,它会在将来安排更新。没有时间阻止循环中的延迟。
如果没有时间阻塞延迟,模拟器将在同一时间步中继续执行相同的循环。模拟将不会移动到下一个时间步,直到当前时间步中的所有操作完成或暂停。最终模拟器将耗尽内存并出错。如果检测到无限循环,某些模拟器可能会提前退出。
通常,使用LHS延迟和阻塞语句生成时钟。例子:
reg clk = 1'b1; // or 1'b0
always #5 clk = !clk;
或
reg clk;
initial begin
clk = 1'b1; // or 1'b0
forever #5 clk = !clk;
end
答案 1 :(得分:0)
我得到&#34;内存不足&#34; VCS和Incisive都有错误。
在LHS上延迟更为常规:
reg clk = 0;
always #5 clk <= !clk;