实验任务:
本节实验任务是使用底板上的PL_KEY0和PL_KEY1按键来控制底板上的PL_LED0和PL_LED1两个LED的闪烁方式。没有按键按下时,两个LED保持常亮;如果按键0按下,则两个LED交替闪烁;如果按键1按下,则两个LED同时闪烁。
模块示意图:
模块代码实现:
modulekey_led(
input sys_clk,
input sys_rst_n,4
input [1:0] key,
output reg [1:0] led
);
//reg define
reg [24:0] cnt;
reg led_ctrl;
//*****************************************************
//** main code
//*****************************************************16
always@(posedgesys_clkornegedgesys_rst_n)begin
if(!sys_rst_n)
cnt<=25’d0;
elseif(cnt<25’d2500_0000)//计数500ms
cnt<=cnt+1’b1;
else
cnt<=25’d0;
end
//每隔500ms就更改LED的闪烁状态
always@(posedgesys_clkornegedgesys_rst_n)begin
if(!sys_rst_n)
led_ctrl<=1’b0;
elseif(cnt==25’d2500_0000)
led_ctrl<=~led_ctrl;
end
//根据按键的状态以及LED的闪烁状态来赋值LED
always@(posedgesys_clkornegedgesys_rst_n)begin
if(!sys_rst_n)
led<=2’b11;
elsecase(key)
2’b10://如果按键0按下,则两个LED交替闪烁
if(led_ctrl==1’b0)
led<=2’b01;
else
led<=2’b10;
2’b01://如果按键1按下,则两个LED同时闪烁
if(led_ctrl==1’b0)
led<=2’b11;
else
led<=2’b00;
2’b11://如果两个按键都未按下,则两个LED都保持点亮
led<=2’b11;
default:;
endcase
end
endmodule