如何解决Verilog编写加法器时报adder_out为未知类型的错误
Verilog加法器报错修正方案
错误原因
你的代码存在核心问题:
adder_out被声明为reg类型,Verilog规定reg类型的赋值必须放在过程块(如always块)内,直接在模块层级写赋值语句会被编译器识别为非法的变量声明操作,因此抛出adder_out is an unknown type错误。- 注意
timescale的前缀是反引号(`),不要写为普通单引号。
修正方案
方案1:保留reg类型,使用组合逻辑always块实现
`timescale 1ns / 1ps module adder( input [7:0] adder_in1, input [7:0] adder_in2, output reg [7:0] adder_out ); always @(*) begin adder_out = adder_in1 + adder_in2; end endmodule
这里always @(*)代表敏感列表包含所有输入信号,只要输入变化就会执行块内逻辑,符合纯组合加法器的需求。
方案2:改为wire类型,使用assign连续赋值实现
纯组合逻辑的加法器更推荐这种写法,无需声明reg类型:
`timescale 1ns / 1ps module adder( input [7:0] adder_in1, input [7:0] adder_in2, output [7:0] adder_out ); assign adder_out = adder_in1 + adder_in2; endmodule
报错参考截图

内容的提问来源于stack exchange,提问作者Manu
相关产品推荐
相关产品推荐

