错误(10170):TrafficLight.v(59)文本附近的Verilog HDL语法错误;“endcase”;;期待;完";

错误(10170):TrafficLight.v(59)文本附近的Verilog HDL语法错误;“endcase”;;期待;完";,verilog,Verilog,我是veriloghdl的新手,我在veriloghdl中遇到了这个错误 Error (10170): Verilog HDL syntax error at TrafficLight.v(59) near text "endcase"; expecting "end" 谁能告诉我怎么了 我的代码是 module TrafficLight(t, state, next_state, clk, out); input t, clk; output out; localparam s0=3'b

我是veriloghdl的新手,我在veriloghdl中遇到了这个错误

Error (10170): Verilog HDL syntax error at TrafficLight.v(59) near text "endcase";  expecting "end"
谁能告诉我怎么了

我的代码是

module TrafficLight(t, state, next_state, clk, out);

input t, clk;
output out;
localparam s0=3'b000, s1=3'b001, s2=3'b010, s3=3'b011, s4=3'b100, s5=3'b101;
reg[2:0] state, next_state, tt;
always@(posedge clk)
    begin
    case(state)
        3'b000:
            if(tt < 5)
                next_state = s0;
            else
                begin
                next_state = s1;
                assign out [5:0] = 6'b100001;
                end
        3'b001:
            if(tt < 1)
                next_state = s1;
            else
            begin
                next_state = s2;
                assign out [5:0] = 6'b010001;
            end
        3'b010:
            if(tt < 1)
                next_state = s2;
            else
            begin
                next_state = s3;
                assign out [5:0] = 6'b001001;
            end
        3'b011:
            if(tt < 5)
                next_state = s3;
            else
            begin
                next_state = s4;
                assign out [5:0] = 6'b001100;
            end
        3'b100:
            if(tt < 1)
                next_state = s4;
            else
            begin
                next_state = s5;
                assign out [5:0] = 6'b001010;
            end
        3'b101:
            if(tt < 1)
                next_state = s0;
            else
                begin
                next_state = s5;
                assign out [5:0] = 6'b001001;
                end
    endcase


    always@(posedge clk);
        begin
        state = next_state;
        tt = tt - 1;
        end

endmodule
模块交通灯(t、状态、下一状态、clk、out);
输入t,时钟;
输出;
局部参数s0=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100,s5=3'b101;
reg[2:0]状态,下一个_状态,tt;
始终@(posedge clk)
开始
案件(州)
3'b000:
如果(tt<5)
下一个_状态=s0;
其他的
开始
下一个_状态=s1;
分配出[5:0]=6'b100001;
结束
3'b001:
if(tt<1)
下一个_状态=s1;
其他的
开始
下一个_状态=s2;
分配出[5:0]=6'b010001;
结束
3'b010:
if(tt<1)
下一个_状态=s2;
其他的
开始
下一个状态=s3;
分配出[5:0]=6'b001001;
结束
3'b011:
如果(tt<5)
下一个状态=s3;
其他的
开始
下一个_状态=s4;
分配出[5:0]=6'b001100;
结束
3'b100:
if(tt<1)
下一个_状态=s4;
其他的
开始
下一状态=s5;
分配出[5:0]=6'b001010;
结束
3'b101:
if(tt<1)
下一个_状态=s0;
其他的
开始
下一状态=s5;
分配出[5:0]=6'b001001;
结束
尾声
始终@(posedge clk);
开始
状态=下一个状态;
tt=tt-1;
结束
端模

我认为错误发生在endcase和endmodule行上。我想我必须用一些东西来结束它们。

您的代码中有几个错误-

你错过了“结束”语句后的“结束”。在case语句之前,begin块需要end

您在always块声明中添加了“;”

always@(posedge clk);
    begin
    state = next_state;
    tt = tt - 1;
    end
在always块中不需要“;”

module TrafficLight(t, state, next_state, clk, out);

input t, clk;
output out;
localparam s0=3'b000, s1=3'b001, s2=3'b010, s3=3'b011, s4=3'b100, s5=3'b101;
reg[2:0] state, next_state, tt;
在上面的代码片段中,我看到您添加了“state”和“next_state”作为模块的端口,但没有为它们指定任何方向。将其作为端口删除,或将其作为“输入”或“输出”

在输出reg时,还需要删除“assign”语句。因为它位于程序块内,所以这里不需要“赋值”


你可以找到你的代码的所有更新

,但是你的第一个
开始
缺少一个
结束
。在我应用了这些修复错误(10170):TrafficLight.v(62)的Verilog HDL语法错误,靠近文本“always”;期待一个描述我尝试了你所有的建议,我仍然有这个错误。这个答案将修复编译错误,但仍然存在运行时问题。同步逻辑应该分配非阻塞(
Yes Greg)。我只打算解决编译错误。感谢您指出这一点。显然,解决运行时错误还需要一些更新。