首页 > 解决方案 > 错误:赋值语句左值中的语法

问题描述

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

标签: verilog

解决方案


您的代码存在一些语法错误。

不要使用assign关键字对reg( F1) 进行赋值。

不要将模块实例 ( sub) 放在always块内。

sub为您的模块实例使用实例名称。

不要创建task与模块 ( ) 同名的 a subtask/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  

推荐阅读