Verilog ERROR **错误:(vlog-13069)(96):near" endmodule":

时间:2018-03-24 01:05:40

标签: verilog system-verilog

我最近开始在Verilog工作,并尝试制作状态机。因为我不断出错,请让我知道我做错了什么。它表示endmodule附近的错误,但没有指定。我试图改变一些东西并在底部添加额外的结尾和类似的东西,以防我错过了一个。它继续给我一个错误。我确信这是一件我想念的简单事。请帮我。我真的很困惑为什么它不起作用。

module FSM(input KEY0, SW0, SW1, SW2, SW3, SW4,

                        output [6:0] HEX0, HEX1, HEX2, HEX3, output reg [2:0] state,

                        output reg [1:0] Z, output reg [4:0] LED_SW0, LED_SW1, LED_SW2, LED_SW3, LED_SW4);
reg [2:0] nextstate;
localparam start=3'b000, state1=3'b001, state2=3'b011, state3=3'b100;
always @ (posedge KEY0 or posedge SW0)
    if(SW0) begin
        state <=start;
        end
    else
        state <= nextstate;
always @ (*) begin
    nextstate = state;
    Z=2'b0;
    LED_SW0='b0;
    LED_SW1='b0;
    LED_SW2='b0;
    LED_SW3='b0;
    LED_SW4='b0;
    HEX0 = 7'b0;
    HEX1 = 7'b0;
    HEX2 = 7'b0;
    HEX3 = 7'b0;
if(SW0)
    LED_SW0=1;
else
    LED_SW0=0;
if(SW1)
    LED_SW1=1;
else
    LED_SW1=0;
if(SW2)
    LED_SW2=1;
else
    LED_SW2=0;
if(SW3)
    LED_SW3=1;
else
    LED_SW3=0;
if(SW4)
    LED_SW4=1;
else
    LED_SW4=0;
case(state)
start:begin
Z=2'b00;
HEX0[6]=1; HEX0[5]=1; //b
HEX1[6]=1; HEX1[5]=1; HEX1[4]=1; HEX1[3]=1; HEX1[1]=1; //r
HEX2[3]=1; //A
HEX3[2]=1; //g
if(~SW0&&SW1&&~SW2&&~SW3&&~SW4)
nextstate = state1;
else
nextstate = start;
end
state1: begin
Z=2'b00;
HEX0[0]=1; HEX0[3]=1; HEX0[4]=1; HEX0[5]=1; HEX0[6]=1; 
HEX1[6]=1; 
HEX2[0]=1; HEX2[1]=1; HEX2[2]=1; HEX2[4]=1; HEX2[5]=1; HEX2[6]=1; 
HEX3[1]=1; HEX3[4]=1;
if(~SW0&&~SW1&&SW2&&~SW3&&~SW4)
nextstate = state2;
else 
nextstate = state1;
end
state2 : begin
Z=2'b10;
HEX0[2]=1; HEX0[5]=1; 
HEX1[6]=1; 
HEX2[0]=1; HEX2[1]=1; HEX2[2]=1; HEX2[4]=1; HEX2[5]=1; HEX2[6]=1; 
HEX3[1]=1; HEX3[4]=1;
if(~SW0&&~SW1&&~SW2&&~SW3&&SW4)
nextstate = state1;
else if(~SW0&&~SW1&&~SW2&&SW3&&~SW4)
nextstate = state3;
else
nextstate = state2;
end
state3:begin
Z=2'b11;
HEX0[1]=1; HEX0[2]=1; 
HEX1[6]=1; 
HEX2[0]=1; HEX2[1]=1; HEX2[2]=1; HEX2[4]=1; HEX2[5]=1; HEX2[6]=1; 
HEX3[1]=1; HEX3[4]=1;
if(~SW0&&~SW1&&SW2&&~SW3&&~SW4)
nextstate = state1;
else if(~SW0&&~SW1&&~SW2&&~SW3&&SW4)
nextstate = start;
else
nextstate=state3;
end
endcase
endmodule

2 个答案:

答案 0 :(得分:0)

检查您是否end always阻止,我认为您不是。并且通常会为每个语句重新检查所有end s。此外,正确对齐代码的内容,以便更好地澄清和发现此类错误(一般建议)。

答案 1 :(得分:0)

我在你的代码中看到了2个问题

  • always @ (posedge KEY0 or posedge SW0)没有相应的beginend
  • always @(*)end没有对应的begin。它应该在endcase
  • 之后

是的,适当的缩进始终有助于识别此类错误。一般来说,您应该始终从一开始就引入begin - end(在需要的地方),然后在两者之间插入代码。