verilog 用状态机 来实现 流水灯
moduleZTled(inputclk,inputrst,outputrega,outputregb,outputregc,outputregd,outputrege,...
module ZTled(
input clk,
input rst,
output reg a,
output reg b,
output reg c,
output reg d,
output reg e,
output reg f,
output reg g,
output reg h
);
reg [25:0] counter;
reg [3:0] count;
reg [3:0] state;
parameter
NO1=4'b0000,
NO2=4'b0001,
NO3=4'b0010,
NO4=4'b0011,
NO5=4'b0100,
NO6=4'b0101,
NO7=4'b0110,
NO8=4'b0111;
always@(posedge clk or negedge rst)begin
if(!rst) counter<=26'b0;
else if (counter==26'd5000000)
counter=26'b0;
else
counter<=counter+26'b1;
end
always@(posedge clk or negedge rst)
begin
if(!rst)count=4'b0;
else if(counter==26'd5000000 && count==4'd8 )
count<=count+4'b1;
end
always@(posedge clk )
if(!rst)
state<=NO1;
else case (state)
NO1: if(count==4'd1) begin
state<=NO2;
a<=1'b1;end
NO2: if(count==4'd2) begin
state<=NO3;
b<=1'b1;end
NO3: if(count==4'd3) begin
state<=NO4;
c<=1'b1;end
NO4: if(count==4'd4) begin
state<=NO5;
d<=1'b1;end
NO5: if(count==4'd5) begin
state<=NO6;
e<=1'b1;end
NO6: if(count==4'd6) begin
state<=NO7;
f<=1'b1;end
NO7: if(count==4'd7) begin
state<=NO8;
g<=1'b1;end
NO8: if(count==4'd8) begin
state<=NO1;
h<=1'b1;end
default :state<=4'bxxxx;
endcase
endmodule
以上是我写的程序 。把它们下载到我的开发板 上 ,但是 没有实现流水的效果。灯全亮。怎么回事啊? 展开
input clk,
input rst,
output reg a,
output reg b,
output reg c,
output reg d,
output reg e,
output reg f,
output reg g,
output reg h
);
reg [25:0] counter;
reg [3:0] count;
reg [3:0] state;
parameter
NO1=4'b0000,
NO2=4'b0001,
NO3=4'b0010,
NO4=4'b0011,
NO5=4'b0100,
NO6=4'b0101,
NO7=4'b0110,
NO8=4'b0111;
always@(posedge clk or negedge rst)begin
if(!rst) counter<=26'b0;
else if (counter==26'd5000000)
counter=26'b0;
else
counter<=counter+26'b1;
end
always@(posedge clk or negedge rst)
begin
if(!rst)count=4'b0;
else if(counter==26'd5000000 && count==4'd8 )
count<=count+4'b1;
end
always@(posedge clk )
if(!rst)
state<=NO1;
else case (state)
NO1: if(count==4'd1) begin
state<=NO2;
a<=1'b1;end
NO2: if(count==4'd2) begin
state<=NO3;
b<=1'b1;end
NO3: if(count==4'd3) begin
state<=NO4;
c<=1'b1;end
NO4: if(count==4'd4) begin
state<=NO5;
d<=1'b1;end
NO5: if(count==4'd5) begin
state<=NO6;
e<=1'b1;end
NO6: if(count==4'd6) begin
state<=NO7;
f<=1'b1;end
NO7: if(count==4'd7) begin
state<=NO8;
g<=1'b1;end
NO8: if(count==4'd8) begin
state<=NO1;
h<=1'b1;end
default :state<=4'bxxxx;
endcase
endmodule
以上是我写的程序 。把它们下载到我的开发板 上 ,但是 没有实现流水的效果。灯全亮。怎么回事啊? 展开
展开全部
你写的输出是rega~regh。这段RTL里没有驱动他们啊。最终是要用rega~regh来驱动灯的吧??
请检查
请检查
追问
a,b,c,d,e...h对应的 就是8盏led灯啊。这个不是问题,我知道这里没错。 灯全亮,只是不流水。
也就是说 a,b,c,d,e,f,g,h 同时赋值为1,它们赋值 没有延时。
我 不知道怎么弄
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询