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 语句不完整。我添加了一个默认值,这样无论输入是什么,都会有一个赋值。
不知道为什么每次编译都会报这个错。拜托我需要你的帮忙。谢谢
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 语句不完整。我添加了一个默认值,这样无论输入是什么,都会有一个赋值。