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

Syntax iverilog:赋值语句l-value中的语法错误,syntax,verilog,Syntax,Verilog,为什么我的Verilog代码中会出现语法错误 代码: module RegFile ( input clk, input [4:0] rs1, input [4:0] rs2, input [4:0] wr, input reg[31:0] wd, input RegWrite, output reg[31:0] rd1, output reg[31:0] rd2); reg [31:0] file[31:0];

为什么我的Verilog代码中会出现语法错误

代码:

module RegFile (
    input clk,
    input [4:0] rs1,
    input [4:0] rs2,
    input [4:0] wr,
    input reg[31:0] wd,
    input RegWrite,
    output reg[31:0] rd1,
    output reg[31:0] rd2);

    reg [31:0] file[31:0];

    integer i;
    initial begin
        i=0;
        while(i<32)
        begin
            file[i]=32'b0;
            i=i+1;
    end

assign rd1=file[rs1];
assign rd2=file[rs2];

always @(posedge clk) begin
    if(RegWrite)
        file[wr]=wd;
end

always@(file[0])
file[0]=32'b0;
    
endmodule
“l值”语法错误的发生是因为您对声明为
reg
的信号进行了连续赋值(使用
assign
关键字)。在这种情况下,您不应该使用
reg
关键字。更改:

output reg[31:0] rd1,
output reg[31:0] rd2);
致:

我在下面的行中还得到一个编译错误:

input reg[31:0] wd,
对于
输入
端口,不应使用
reg
关键字。将其更改为:

input [31:0] wd,
最后,您在
开始
时丢失了与
匹配的
结束
关键字:

initial begin
    i=0;
    while(i<32)
    begin
        file[i]=32'b0;
        i=i+1;
    end // <----- add this
end
初始开始
i=0;
而
input [31:0] wd,
initial begin
    i=0;
    while(i<32)
    begin
        file[i]=32'b0;
        i=i+1;
    end // <----- add this
end