我被困在这里一天。我使用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
感谢您的帮助。
答案 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
我的建议是以正确的顺序编写代码,您可以轻松地纠正错误。