module flashled(
input clk,
input switch,
output reg led1,led2,led3,led4,led5,led6,led7,led8
);
reg [26:0]count;
reg [2:0]sel;
reg [7:0]wave;
always@(posedge clk)//divide 100MHz to 1Hz;
begin
if (count[26] == 1 & count[25] == 1)//2^26 + 2^25 = 100,663,296;
begin
divide <= divide + 1;//if 100M,divide + 1;
count <= 0;//if 100M,clear count;
else
divide <= 0;i//divide keep zero until 100M;
count <= count + 1;//counter count until 100M;
end
end
always@(posedge divide)//sel 8bit counter
begin
sel <= sel + 1;//every 100M,sel + 1,until sel = 3'b111;
end
/*ANOTHER WAY TO DRIVE THE LED
always@(*)
begin
led1 = ~sel[2] * ~sel[1] * ~sel[0] * switch;
led2 = ~sel[2] * ~sel[1] * sel[0] * switch;
led3 = ~sel[2] * sel[1] * ~sel[0] * switch;
led4 = ~sel[2] * sel[1] * sel[0] * switch;
led5 = sel[2] * ~sel[1] * ~sel[0] * switch;
led6 = sel[2] * ~sel[1] * sel[0] * switch;
led7 = sel[2] * sel[1] * ~sel[0] * switch;
led8 = sel[2] * sel[1] * sel[0] * switch;
end
endmodule
*/
always@(*)//3-8decoder
begin
case(sel)
0: wave = 8'b00000001;
1: wave = 8'b00000010;
2: wave = 8'b00000100;
3: wave = 8'b00001000;
4: wave = 8'b00010000;
5: wave = 8'b00100000;
6: wave = 8'b01000000;
7: wave = 8'b10000000;
endcase
end
always@(*)//switch&wave drive led
begin
led1 = wave[0] * switch;
led2 = wave[1] * switch;
led3 = wave[2] * switch;
led4 = wave[3] * switch;
led5 = wave[4] * switch;
led6 = wave[5] * switch;
led7 = wave[6] * switch;
led8 = wave[7] * switch;
end
endmodule