Verilog编译错误:未识别的变量2';b00
我正在尝试创建一个简单的32位ALUVerilog编译错误:未识别的变量2';b00,verilog,Verilog,我正在尝试创建一个简单的32位ALU module alu (a, b, f, y, zero); input [31:0] a, b; input [2:0] f; output [31:0] y; output zero; reg [31:0] bb, s; always @ (*) begin assign bb = (f[2] == 0) ? b : (~b); case( f[1:0] ) 2’b00 : y = (a & bb);
module alu (a, b, f, y, zero);
input [31:0] a, b;
input [2:0] f;
output [31:0] y;
output zero;
reg [31:0] bb, s;
always @ (*) begin
assign bb = (f[2] == 0) ? b : (~b);
case( f[1:0] )
2’b00 : y = (a & bb);
2’b01 : y = (a | bb);
2’b10 : y = (a + bb + f[2] );
2’b11 : begin
s = (a + bb + f[2] );
y[0] = (s[31]);
y[31:1] = 31’b0;
end
endcase
end
zero = ((y == 32’b0) ? 1 : 0); //if y is 000..0000, set to 1
endmodule
在ModelSim中运行时,我会遇到4个错误:
我花了很长时间试图弄清楚这些错误指的是什么,尤其是“未识别变量”的错误。任何帮助都将不胜感激。您需要将
y
声明为reg
,因为您对其进行了程序分配(在始终
块中)
您需要将assign
语句移出always
块
您需要为zero
使用assign
关键字,因为它是一个连续赋值
您需要将这些奇怪的单引号字符(2'b00
)替换为ASCII单引号(2'b00
)
module alu (a, b, f, y, zero);
input [31:0] a, b;
input [2:0] f;
output reg [31:0] y;
output zero;
reg [31:0] bb, s;
assign bb = (f[2] == 0) ? b : (~b);
always @ (*) begin
case( f[1:0] )
2'b00 : y = (a & bb);
2'b01 : y = (a | bb);
2'b10 : y = (a + bb + f[2] );
2'b11 : begin
s = (a + bb + f[2] );
y[0] = (s[31]);
y[31:1] = 31'b0;
end
endcase
end
assign zero = ((y == 32'b0) ? 1 : 0); //if y is 000..0000, set to 1
endmodule
此代码在上编译时没有错误