Verilog编译错误:未识别的变量2';b00

Verilog编译错误:未识别的变量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);

我正在尝试创建一个简单的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);
        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个错误:

  • 第15行,“未识别变量b00”
  • 在第15行中,“靠近“=”:语法错误,意外的“=”,应为++或--
  • 第21行,“未识别变量b0”
  • 在第21行中,“靠近”语法错误,意外的“;”
    我花了很长时间试图弄清楚这些错误指的是什么,尤其是“未识别变量”的错误。任何帮助都将不胜感激。

    您需要将
    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
    
    此代码在上编译时没有错误