module led_key(
input clk ,//clk = 50mhz
input rst_n ,
input [1:0] key ,//two key
output reg [1:0] led //two led,reg are because use in always block);
reg [24:0] cnt;//50mhz=50_000_000,1s=50mhz/50mhz,0.5s=50mhz/50mhz/2
reg led_ctrl;//led control are two mode,because only need 0/1//the block generate 0.5s colck singal
always @ (posedge clk or negedge rst_n) begin
if(!rst_n)
cnt <=25'b0;elseif(cnt <25'd2500_0000)
cnt <= cnt +25'b1;else
cnt <=25'd0;
end
//the block every 0.5s negate led_ctrl mode
always @ (posedge clk or negedge rst_n) begin
if(!rst_n)
led_ctrl <=1'b0;elseif(cnt ==25'd2500_0000)//到达0.5s
led_ctrl <=~led_ctrl;//negate
end
//上面块使得led_ctrl每0.5s值变换一次,所以只需led_ctrl=0时亮一个或几个(0.5s),=1时亮一个或几个(0.5s)
always @ (posedge clk or negedge rst_n) begin
if(!rst_n)
led <=2'b11;elsecase(key)2'b10://key0if(led_ctrl ==1'b0)
led <=2'b01;//led0else
led <=2'b10;//led12'b01://key1if(led_ctrl ==1'b0)
led <=2'b11;//led0 and led1else
led <=2'b00;2'b11://key0 and key1
led <=2'b11;default:;
endcase
end
endmodule