这是我写的流水灯一部分,共有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
你的代码中缺少时钟信号的控制,可能导致仿真时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
在这个例子中,我们根据时钟信号控制灯的状态改变。在时钟上升沿或下降沿,根据复位信号判断是否需要复位,如果复位则第一个灯亮,否则将灯的状态左移一位,移出的灯熄灭,最后一个灯亮。这样就实现了一个流水灯的功能。