ERROR: HDL COMPILER:806 Line 31: Syntax error near "sumador"

ERROR: HDL COMPILER:806 Line 31: Syntax error near "sumador"

不知道为什么每次编译都会报这个错。拜托我需要你的帮忙。谢谢

module operaciones(

    input [3:0] A,
    input [3:0] B,
    input [3:0] numop,
    output reg [3:0] C
    );

  wire bas1,bas2;

  always  @ ( A[3] | A[2] | A[1] | A[0] | B[3] | B[2] | B[1] | B[0] | numop[3] | numop[2] | numop[1] | numop[0] )

    case (numop)
      4'b0000 : sumador_4bits sumador(A,B,bas1,C,bas2);
      4'b0001 : restador_4bits restador(A,B,C);
      4'b0010 : mult_4bits multiplicador(A,B,C);
      4'b0011 : complemento_a_1 comp1(A,C);
      4'b0100 : complemento_a_2 comp2(A,C);
      4'b0101 : AND anda(A,B,C);
      4'b0110 : OR ora(A,B,C);
      4'b0111 : NOT nota(A,C);
      4'b1000 : XOR xora(A,B,C);
    endcase

endmodule

您不能在 always 块内实例化模块。如果要执行的操作是在执行时确定的,那么你需要在 always 块之外实例化所有这些实例,然后确定你使用哪个来分配输出,像这样的 case 语句:

module operaciones(

    input [3:0] A,
    input [3:0] B,
    input [3:0] numop,
    output reg [3:0] C
    );

  wire bas1,bas2;

  wire [3:0] C0, C1, C2, C3, C4, C5, C6, C7, C8;

  sumador_4bits sumador(A,B,bas1,C0,bas2);
  restador_4bits restador(A,B,C1);
  mult_4bits multiplicador(A,B,C2);
  complemento_a_1 comp1(A,C3);
  complemento_a_2 comp2(A,C4);
  and1 anda(A,B,C5);
  or1 ora(A,B,C6);
  not1 nota(A,C7);
  xor1 xora(A,B,C8);

  always  @ ( C0 or C1 or C2 or C3 or C4 or C5 or C6 or C7 or C8 or numop )
    case (numop)
      4'b0000 : C = C0;
      4'b0001 : C = C1;
      4'b0010 : C = C2;
      4'b0011 : C = C3;
      4'b0100 : C = C4;
      4'b0101 : C = C5;
      4'b0110 : C = C6;
      4'b0111 : C = C7;
      4'b1000 : C = C8;
      default : C = C0;
    endcase
endmodule

我所做的其他更改:

  • 敏感度列表应该使用or而不是|
  • 您不需要在敏感度列表中列出向量的每一位,只需列出向量
  • 您似乎在为内置门(and、or、...)使用自己的模块,但您使用的实例名称与这些基于大写的保留字不同。我更改了实例名称,因此不仅仅是大写使它们成为合法名称。
  • 我不知道你是否想综合这个,但如果你这样做了,那么这将在闩锁中综合,因为 case 语句不完整。我添加了一个默认值,这样无论输入是什么,都会有一个赋值。