为什么这段Verilog模块第9行提示invalid module item错误?
报错原因
- Verilog语法规定,
forever属于过程控制语句,必须嵌套在initial或always这类过程块内部使用,不能直接作为模块的顶层成员存在。 - 你提交的代码中将
forever语句放在了所有过程块之外,直接归属于module作用域,不属于合法的模块项,因此编译器抛出语法错误和非法模块项报错。
修正方案
方案1:将forever移入initial块
完全保留原本逻辑,仅调整语句位置即可正常运行:
module Pulse(clock); output reg clock; initial begin clock = 1'b0; forever #10 clock = ~clock; end endmodule
方案2:使用always块生成时钟
这是Verilog生成时钟的更常用写法,always块本身为永久循环执行的过程块,不需要额外加forever:
module Pulse(clock); output reg clock; initial clock = 1'b0; always #10 clock = ~clock; endmodule
两种方案生成的时钟都是周期20ns、占空比50%的预期效果。
内容的提问来源于stack exchange,提问作者Circuit_Breaker0.7
相关产品推荐
相关产品推荐

