Quartus/Verilog:移位实现不同频率的流水灯

//该程序将用移位来实现流水灯,每次左移一个流水灯;复位时流水灯全亮,高电平有效
//三个分频,分别为亮灭灯间隔0.5s、以100HZ、10HZ频率闪烁
module LED(
	input   clk,//时钟信号
	input   rst_n,//复位信号
	input   [1:0]en,//控制分频的开关
	output reg[9:0]led//流水灯输出
	);
	
	reg [27:0]count;//计数控制分频

always@(posedge clk or negedge rst_n)
	begin
		if(!rst_n)led<=10'b1111_1111_11;//复位
		else
		   begin
				case(en)
					2'b00://亮灭灯间隔0.5s
						begin
						count<=count+1;
						if(count==28'h17D_7840)
							begin
								led<=led<<1;//左移
								if(led==10'b0000_0000_00)led<=10'b1111_1111_11;//当流水灯全灭时复位为全亮
								count<=0;//计数复位
							end
						end
					2'b01://100HZ
						begin
						count<=count+1;
						if(count==28'h7A120)
							begin
								led<=led<<1'b1;
								if(led==10'b0000_0000_00)led<=10'b1111_1111_11;
								count<=0;
							end
						end
					2'b10://10HZ
						begin
						count<=count+1;
						if(count==28'h4C4B40)
							begin
								led<=led<<1'b1;
								if(led==10'b0000_0000_00)led<=10'b1111_1111_11;
								count<=0;
							end
						end
				endcase
			end
	end
	
endmodule 

你可能感兴趣的:(Verilog,verilog,vhdl)