这是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