Verilog模块输入端口能否赋值?为何该操作不被允许?
Verilog模块input端口能否赋值?
结论:绝对不能给Verilog模块的input端口直接赋值,不管是隐式还是显式声明wire类型,这种操作都会触发编译报错,原因主要有两点:
- 语法规则限制:Verilog里
input端口默认是wire线网型(显式声明input wire也一样),线网型变量的唯一合法赋值方式是通过assign连续赋值语句,或者被其他模块的输出端口驱动。你代码里直接用a=1这种写法(哪怕没放在过程块里),本质是错误的过程赋值方式,编译器会直接判定为非法。 - 硬件建模逻辑:input端口对应硬件电路的输入引脚,这些引脚的电平是由模块外部的电路提供的,模块内部根本没有能力去修改输入引脚的电平。如果允许内部赋值,完全违背了真实硬件的工作逻辑——你总不能在芯片内部强制把输入引脚的电平改成高或低,这在物理上是不可能实现的。
你的两段测试代码都会报错,就是踩了这个规则:
测试代码1:
module test( input a,b,c ); a=1; b=0; c=1; endmodule
测试代码2:
module test( input wire a,b,c ); a=1; b=0; c=1; endmodule
内容的提问来源于stack exchange,提问作者gubang
相关产品推荐
相关产品推荐

