verilog 流水灯部分问题

这是我写的流水灯一部分,共有8个灯,从左往右依次亮,一次只有一个亮。我是用8位2进制表示的,1就表示那个灯亮,
可是我这样写,仿真时rst=0,就不动了,请问这是什么原因,这个问题困扰好久了,希望好xin人能回答一下,真的十分感谢您!


module FlowingWaterLamp(
    input clk,rst,
    input [2:0] C,
    output reg[7:0] led
    );
    //dir确定方向
    reg dir=1;
    reg[7:0] start=8'b0000_0000;
    reg[7:0] state;
    reg[7:0] nextstate;
    
    always @(*) begin
        if(rst)
            state<=start;
        else
            state<=nextstate;
    end
    

    
    always @(*) begin
        case(C)
        //单灯:从左向右
            3'b000:
                begin
                //由start过度
                if(state==8'b0000_0000) nextstate=8'b1000_0000;
                //每次右移一位
                else nextstate=nextstate>>1;
                end
         endcase
    end
    
    always @(*) begin
        led<=state;
    end
    
endmodule

以下内容部分参考ChatGPT模型:


你的代码中缺少时钟信号的控制,可能导致仿真时rst=0后停止运行。你需要添加时钟信号,并在时钟上升沿或下降沿控制灯的状态改变。以下是一个简单的例子:

module led_shift(input clk, // 时钟信号
                 input rst, // 复位信号
                 output reg [7:0] led); // 8个灯

always @(posedge clk or negedge rst) begin
    if (!rst) begin
        led <= 8'b00000001; // 复位时第一个灯亮
    end else begin
        led <= led << 1; // 左移一位,移出的灯熄灭,最后一个灯亮
    end
end

在这个例子中,我们根据时钟信号控制灯的状态改变。在时钟上升沿或下降沿,根据复位信号判断是否需要复位,如果复位则第一个灯亮,否则将灯的状态左移一位,移出的灯熄灭,最后一个灯亮。这样就实现了一个流水灯的功能。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快