用verilog编译问题

用verilog编译问题,verilog,system-verilog,Verilog,System Verilog,任何人都能看到任何明显的错误,这是为什么没有编译。我认为这些操作的逻辑都是正确的。它最有可能的语法错误。 我能想到的唯一一件事是switch语句没有像add模块那样正确编写。每个四位语句都连接到它下面的一个模块。(按位非二进制) \u 4bitALU模块中存在很多问题: case语句不在始终块内 您不能像在案例分支中那样“调用”其他模块,而是需要创建这些模块的实例,并将连接到案例分支中这些实例的导线分配给所需的输出 这些问题是相当基本的Verilog,因此我建议您仔细阅读它的使用方法(可能会有所

任何人都能看到任何明显的错误,这是为什么没有编译。我认为这些操作的逻辑都是正确的。它最有可能的语法错误。 我能想到的唯一一件事是switch语句没有像add模块那样正确编写。每个四位语句都连接到它下面的一个模块。(按位非二进制)


\u 4bitALU
模块中存在很多问题:

  • case
    语句不在
    始终
    块内
  • 您不能像在
    案例
    分支中那样“调用”其他
    模块
    ,而是需要创建这些模块的实例,并将连接到
    案例
    分支中这些实例的
    导线
    分配给所需的输出

  • 这些问题是相当基本的Verilog,因此我建议您仔细阅读它的使用方法(可能会有所帮助)。请记住,您(无论如何,在大多数情况下)试图描述硬件的结构,而不是刚执行的软件程序。

    notop
    和op
    等。所有模块都必须声明为函数,而不是模块。另外,
    case
    语句必须位于某个always块内。像
    总是@(开关)
    之类的。
    module _4bitALU(C , O , A , B , Switch);
      input[3:0] A ;
      input [3:0] B;
      input [3:0] Switch;
      output [3:0] O;
      output       C;
    
      case(Switch)
         4'B0000: notop(O , A);
         4'B0001: andop(O , A , B);
         4'B0010: orop(O , A , B);
         4'B0011: xorop(O , A , B);
         4'B1000: addop(C , O , A , B);
      endcase // case (Switch)
     endmodule // _4bitALU
    
    
    module notop(O , A);
       input [3:0] A;
       output [3:0] O;
       assign O = ~A;
     endmodule // notop
    
    
    
    module andop(O , A , B);
      input [3:0] A;
      input [3:0] B;
      output [3:0] O;
      assign O = (A & B);
    endmodule // andop
    
    
    module orop(O , A , B);
      input [3:0] A;
      input [3:0] B;
      output [3:0] O;
      assign O = (A | B);
    endmodule // orop
    
    
     module xorop(O , A , B);
      input [3:0] A;
      input [3:0] B;
      output [3:0] O ;
      assign O = (A ^ B);
    endmodule // xorop
    
     module addop(C , O , A , B);
       input [3:0] A;
       input [3:0] B;
       output [3:0] O;
       output       C;
       assign C1 = (A[0] & B[0]);
       assign C2 = ((A[1] & B[1]) | (A[1] & C1) | (B[1] & C1));
       assign C3 = ((A[2] & B[2]) | (A[2] & C2) | (B[2] & C2));
       assign C = ((A[3] & B[3]) | (A[3] & C3) | (B[3] & C3));
       assign O[0] = (A[0] ^ B[0]);
       assign O[1] = ((A[1] ^ B[1] ^ C1) | (A[1] & B[1] & C[1]));
       assign O[2] = ((A[2] ^ B[2] ^ C2) | (A[2] & B[2] & C[2]));
       assign O[3] = ((A[3] ^ B[3] ^ C3) | (A[3] & B[3] & C[3]));
       assign O[4] = ((A[4] ^ B[4] ^ C4) | (A[4] & B[4] & C[4]));
    
    endmodule // addop