请教:用两个按键来控制流水灯的左右移动问题
时间:10-02
整理:3721RD
点击:
module led1(clk,rst,led,c1,c2);
input clk;
input rst;
input c1,c2;
output [7:0]led;
reg [7:0]led;
reg [24:0]count;
reg flag1,flag2;
wire count_clk;
assign count_clk=(count==25'd24999999)?1:0;
always@(negedge clk)
begin
if(!rst)
count<=0;
else if(count<25'd24999999)
count<=count+1'd1;
else count<=0;
end
always@(c2 or c1)
begin
flag1<=~c1;
flag2<=~c2;
end
always@(negedge clk)
begin
if(!rst)
led<=8'b1111_1110;
else if(count_clk)
begin
if(flag1)
led<={led[6:0],led[7]};
else if(flag2)
led<={led[0],led[7:1]};
else led<=8'b1111_1110;
end
end
endmodule
以上是我写的代码,但是板上的现象是我必须要一直按着按键才可以使其左移或右移,我分析原因是当我松手的时候,按键上升沿触发,这样又会使flag为零,这样流水灯就不动了,所以我想请教下各位高手如何修改程序是我只要按一下就可以改变流水灯流向,谢谢大家!
input clk;
input rst;
input c1,c2;
output [7:0]led;
reg [7:0]led;
reg [24:0]count;
reg flag1,flag2;
wire count_clk;
assign count_clk=(count==25'd24999999)?1:0;
always@(negedge clk)
begin
if(!rst)
count<=0;
else if(count<25'd24999999)
count<=count+1'd1;
else count<=0;
end
always@(c2 or c1)
begin
flag1<=~c1;
flag2<=~c2;
end
always@(negedge clk)
begin
if(!rst)
led<=8'b1111_1110;
else if(count_clk)
begin
if(flag1)
led<={led[6:0],led[7]};
else if(flag2)
led<={led[0],led[7:1]};
else led<=8'b1111_1110;
end
end
endmodule
以上是我写的代码,但是板上的现象是我必须要一直按着按键才可以使其左移或右移,我分析原因是当我松手的时候,按键上升沿触发,这样又会使flag为零,这样流水灯就不动了,所以我想请教下各位高手如何修改程序是我只要按一下就可以改变流水灯流向,谢谢大家!
你的程序输入信号一变化状态就取反了,根据读取按键值的实际情况设置移动方向就好了
你好,请问能否说的再详细一点,谢谢
问题已解决,这么简单。我二了,谢谢
您好,我是学习fpga的新手,想请教下您出现的问题是怎么解决的,谢谢