2017-07-05 5 views
-1

私は1日ここで立ち往生しました。私はこのコードを実行するためにedaplaygroundを使用していますが、私は何が間違っているのか分かりません。私がendmoduleと書いた最後の行に構文エラーがありますので、助けてください。エンドモジュールのVerilog構文エラー

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; 
[email protected]* 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

こんにちは、こんにちは、オーバーフローを歓迎します。あなたのここでのやり方を知るために(また、あなたの最初のバッジを得るために)[welcome tour](https://stackoverflow.com/tour) [Minimal、Complete、Verifiableの例](https://stackoverflow.com/help/mcve)の作成方法と[よくある質問を表示する方法](https://stackoverflow.com/help/how-to)もチェックしてください。あなたがあなたのチャンスを増やし、フィードバックと有用な答えを得ることができます。 – DarkCygnus

+2

コードを書式化すると、目に見えるようになり、 'end'が見付かりません。まだいくつかの他の問題があります。例えば、alwaysブロックの中で 'assign'を使うべきではなく、非同期フィードバックがあります。 – Greg

答えて

0

endmoduleの前には、endがあり、alwaysブロックのendがありません。常にブロック内の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; 
    [email protected]* 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 

をそれをチェックアウトするために私は私のアドバイスが適切な順序でコードを書いて、あなたは簡単にエラーを細かくすることができますされたコードを編集しました。