错误:赋值语句l-value中的语法



这是Verilog代码。

module Problem1(x,y,z,F1,F2,F3);
input  [1:0] x,y;
input wire z;
output F1, F2; 
reg F1 , F2; 
output wire [1:0] F3;
assign F3 = x&y;
always @* begin 
if(z)
assign F1 = x[0];
else
assign F1 = x[1];
sub(z,F2);
end
endmodule
module sub(F,x);
task sub;
output reg F;
input x;
always @* begin
case(x)
0:F = 1;
1:F = 0;
endcase
end
endtask
endmodule  

我收到以下错误。你能帮我了解如何修理它们吗?

$iverilog -o main *.v
main.v:25: syntax error
main.v:27: Syntax in assignment statement l-value.
main.v:28: syntax error
main.v:28: Syntax in assignment statement l-value.
main.v:29: syntax error
I give up.

您的代码中有一些语法错误。

不要使用assign关键字为reg(F1(赋值。

不要将模块实例(sub(放置在always块中。

sub模块实例使用实例名称。

不要创建与模块(sub(同名的task。在这种情况下不需要task/endtask

这是一个为我干净编译的版本:

module Problem1(x,y,z,F1,F2,F3);
input  [1:0] x,y;
input wire z;
output F1, F2; 
reg F1 , F2; 
output wire [1:0] F3;
assign F3 = x&y;
always @* begin 
if(z)
F1 = x[0];
else
F1 = x[1];
end
sub sub (z,F2);
endmodule
module sub(F,x);
output reg F;
input x;
always @* begin
case(x)
0:F = 1;
1:F = 0;
endcase
end
endmodule  

相关内容

最新更新