用verilog编译问题

时间:2015-10-26 01:14:48

标签: verilog system-verilog

任何人都可以看到任何明显的错误,为什么这不编译。我认为大多数这些操作的逻辑是正确的。最可能的语法错误。 我唯一能想到的是switch语句没有正确写入以及add模块。每个foury位语句都连接到它下面的一个模块。 (按位不是二进制)

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

1 个答案:

答案 0 :(得分:3)

_4bitALU模块中存在很多问题:

  1. case语句不在always块内。
  2. 你不能打电话"与module分支中的其他case类似,您需要创建这些模块的实例并分配连接到这些实例的wire case分支到所需的输出。
  3. 这些问题是相当基本的Verilog,因此我建议你阅读它是如何使用的(也许this tutorial可能有帮助)。请记住,您(在大多数情况下无论如何)试图描述硬件结构,而不是刚刚执行的软件程序。