endilodule的Verilog语法错误

时间:2017-07-05 22:43:41

标签: verilog system-verilog

我被困在这里一天。我使用edaplayground运行此代码,但我不知道我的错误。它在我写endmodule的最后一行说了语法错误,请帮忙。

module lifo #(parameter n=4,w=4) ( input insert ,clk,output isEmpety,isfull,error,inout [w-1:0]data);

         logic h=$clog2(n);

  reg [n-1:0]mem[w-1:0];
  reg [h:0]sp;
  reg [w-1:0]datar;
  wire [w-1:0] #(0) data=datar;
 always@* begin
if(reset==1)
begin
  assign datar={n{z}};
  assign sp={h{1'b0}};
assign isfull=0;
assign isEmpety=0;
assign error=0;
end
if(insert==1)
begin
if(isEmpety==1)
begin
assign mem[sp]=data;
assign isEmpety=0;
if(error==1)
assign error=0;
end
else
if(isfull==1)
begin
assign mem[sp]=data;
assign error=1;
end
else
begin
assign sp=sp+1;
assign stack[sp]=data;
  if(sp=={h{1}})
assign isfull=1;
end
end
if(insert==0)
begin
  if(sp=={h{0}}&&(isEmpety!=1))
begin
assign datar=mem[sp];
assign isEmpety=1;
end
else
if(isEmpety==1)
begin
assign datar=mem[sp];
assign error=1;
end
else
begin
assign datar=mem[sp];
  if(sp!={h{0}})
assign sp=sp-1;
if(error==1)
assign error=0;
if(isfull==1)
assign isfull=0;
end
end
endmodule

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

endmodule包含end您错过end always阻止之前。并在always块中删除assign关键字。不建议使用这种编码方式。我已经为您编辑了代码

module lifo #(parameter n=4,w=4) ( input insert ,clk,output isEmpety,isfull,error,inout [w-1:0]data);
    logic h=$clog2(n);
    reg [n-1:0]mem[w-1:0];
    reg [h:0]sp;
    reg [w-1:0]datar;
    wire [w-1:0] #(0) data=datar;
    always@* begin
        if(reset==1)
        begin
             datar={n{z}};
             sp={h{1'b0}};
             isfull=0;
             isEmpety=0;
             error=0;
        end
        if(insert==1)
        begin
            if(isEmpety==1)
            begin
                 mem[sp]=data;
                 isEmpety=0;
                if(error==1)
                    error=0;
            end
            else if(isfull==1)
            begin
                mem[sp]=data;
                error=1;
            end
            else begin
                sp=sp+1;
                stack[sp]=data;
                if(sp=={h{1}})
                    isfull=1;
            end
    end
    if(insert==0)
    begin
        if(sp=={h{0}}&&(isEmpety!=1))
        begin
            datar=mem[sp];
            isEmpety=1;
        end
        else if(isEmpety==1)
        begin
            datar=mem[sp];
            error=1;
        end
        else
        begin
            datar=mem[sp];
            if(sp!={h{0}})
                sp=sp-1;
            if(error==1)
            error=0;
            if(isfull==1)
            isfull=0;
        end
    end
end
endmodule

我的建议是以正确的顺序编写代码,您可以轻松地纠正错误。