32-bit adder subtractor model compile error: Illegal Lvalue
32-bit adder subtractor model compile error: Illegal Lvalue
我正在使用以下规格设计 32 adder/subtractor。
输入连接到具有同步复位和使能信号的 FF。这些寄存器的输出连接到 add/subtract。 add/subtract 的输出转到另一组 FF,其输出连接到输出端口。现在,当将输入提供给模块时,会在 2 个时钟周期后生成输出。
这是我的设计。
module adder(A,B,Add_Sub,Out);
input [31:0]A;
input [31:0]B;
input Add_Sub;
output [32:0]Out;
reg [32:0]Out;
always @( A or B or Add_Sub)
begin
if(Add_Sub == 1)
Out = A + B;
else
Out = A -B;
end
endmodule
module DFF(D,clk,reset,enable, Q);
input[31:0] D; // Data input
input clk,reset,enable;
output[31:0] Q; // output Q
reg[31:0] Q;
always @(posedge clk or posedge reset)
begin
if(reset)
Q <= 32'b0;
else if (enable)
Q <= D;
end
endmodule
module register_adder(A,B,CLK,RST,ADD_SUB,EN,OUT,OUT_READY);
input [31:0]A,B;
input CLK,RST,ADD_SUB,EN;
output [32:0]OUT;
reg [32:0]OUT;
wire [31:0]Q1,Q2;
wire[32:0]Q3;
output OUT_READY;
always @(posedge CLK or A or B or ADD_SUB)
begin
DFF F1(A,CLK,RST,EN,Q1);
DFF F2(B,CLK,RST,EN,Q2);
adder A1(Q1,Q2,ADD_SUB,Q3);
DFF F3(Q3,CLK,RST,EN,OUT);
OUT_READY <=1'b1;
end
endmodule
编译模型时,出现以下错误。
Compiling source file : q6.v
q6.v: L42: error: Illegal Lvalue
q6.v: L42: error: syntax error, unexpected IDENTIFIER, expecting LE or '='
q6.v: L43: error: Illegal Lvalue
q6.v: L43: error: syntax error, unexpected IDENTIFIER, expecting LE or '='
q6.v: L44: error: Illegal Lvalue
q6.v: L44: error: syntax error, unexpected IDENTIFIER, expecting LE or '='
q6.v: L45: error: Illegal Lvalue
q6.v: L45: error: syntax error, unexpected IDENTIFIER, expecting LE or '='
8 errors in compilation
分析找不到问题
您的模块实例不应位于 always
块内。
OUT_READY
也不应该在 always
内部,它应该使用 assign
关键字和阻塞赋值运算符 (=
).
我不再遇到以下代码的编译错误:
module register_adder(A,B,CLK,RST,ADD_SUB,EN,OUT,OUT_READY);
input [31:0]A,B;
input CLK,RST,ADD_SUB,EN;
output [32:0]OUT;
reg [32:0]OUT;
wire [31:0]Q1,Q2;
wire[32:0]Q3;
output OUT_READY;
DFF F1(A,CLK,RST,EN,Q1);
DFF F2(B,CLK,RST,EN,Q2);
adder A1(Q1,Q2,ADD_SUB,Q3);
DFF F3(Q3,CLK,RST,EN,OUT);
assign OUT_READY = 1'b1;
endmodule
这是 edaplayground 上的固定代码(如果您还没有帐户,则需要创建一个帐户——它是免费的)。
该代码在某些模拟器上生成警告消息。例如,对于 Cadence,我看到:
DFF F3(Q3,CLK,RST,EN,OUT);
|
xmelab: *W,CUVMPW (./testbench.sv,42|14): port sizes differ in port connection(33/32) for the instance(register_adder) .
你需要决定你是真的想要 32 位还是 33 位。
我正在使用以下规格设计 32 adder/subtractor。
输入连接到具有同步复位和使能信号的 FF。这些寄存器的输出连接到 add/subtract。 add/subtract 的输出转到另一组 FF,其输出连接到输出端口。现在,当将输入提供给模块时,会在 2 个时钟周期后生成输出。
这是我的设计。
module adder(A,B,Add_Sub,Out);
input [31:0]A;
input [31:0]B;
input Add_Sub;
output [32:0]Out;
reg [32:0]Out;
always @( A or B or Add_Sub)
begin
if(Add_Sub == 1)
Out = A + B;
else
Out = A -B;
end
endmodule
module DFF(D,clk,reset,enable, Q);
input[31:0] D; // Data input
input clk,reset,enable;
output[31:0] Q; // output Q
reg[31:0] Q;
always @(posedge clk or posedge reset)
begin
if(reset)
Q <= 32'b0;
else if (enable)
Q <= D;
end
endmodule
module register_adder(A,B,CLK,RST,ADD_SUB,EN,OUT,OUT_READY);
input [31:0]A,B;
input CLK,RST,ADD_SUB,EN;
output [32:0]OUT;
reg [32:0]OUT;
wire [31:0]Q1,Q2;
wire[32:0]Q3;
output OUT_READY;
always @(posedge CLK or A or B or ADD_SUB)
begin
DFF F1(A,CLK,RST,EN,Q1);
DFF F2(B,CLK,RST,EN,Q2);
adder A1(Q1,Q2,ADD_SUB,Q3);
DFF F3(Q3,CLK,RST,EN,OUT);
OUT_READY <=1'b1;
end
endmodule
编译模型时,出现以下错误。
Compiling source file : q6.v
q6.v: L42: error: Illegal Lvalue
q6.v: L42: error: syntax error, unexpected IDENTIFIER, expecting LE or '='
q6.v: L43: error: Illegal Lvalue
q6.v: L43: error: syntax error, unexpected IDENTIFIER, expecting LE or '='
q6.v: L44: error: Illegal Lvalue
q6.v: L44: error: syntax error, unexpected IDENTIFIER, expecting LE or '='
q6.v: L45: error: Illegal Lvalue
q6.v: L45: error: syntax error, unexpected IDENTIFIER, expecting LE or '='
8 errors in compilation
分析找不到问题
您的模块实例不应位于 always
块内。
OUT_READY
也不应该在 always
内部,它应该使用 assign
关键字和阻塞赋值运算符 (=
).
我不再遇到以下代码的编译错误:
module register_adder(A,B,CLK,RST,ADD_SUB,EN,OUT,OUT_READY);
input [31:0]A,B;
input CLK,RST,ADD_SUB,EN;
output [32:0]OUT;
reg [32:0]OUT;
wire [31:0]Q1,Q2;
wire[32:0]Q3;
output OUT_READY;
DFF F1(A,CLK,RST,EN,Q1);
DFF F2(B,CLK,RST,EN,Q2);
adder A1(Q1,Q2,ADD_SUB,Q3);
DFF F3(Q3,CLK,RST,EN,OUT);
assign OUT_READY = 1'b1;
endmodule
这是 edaplayground 上的固定代码(如果您还没有帐户,则需要创建一个帐户——它是免费的)。
该代码在某些模拟器上生成警告消息。例如,对于 Cadence,我看到:
DFF F3(Q3,CLK,RST,EN,OUT);
|
xmelab: *W,CUVMPW (./testbench.sv,42|14): port sizes differ in port connection(33/32) for the instance(register_adder) .
你需要决定你是真的想要 32 位还是 33 位。