⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 traffic.v

📁 交通灯的VERILOG实现
💻 V
字号:
module traffic(LED,CLK,SEG,SL);	        //模块及其结构
	output [7:0] SEG;					//定义LED段码数据线
	output [3:0] SL;					//定义LED位码线
	output [7:0] LED;					//定义交通灯输出口
	input CLK;						    //定义时钟输入

	reg [31:0] count;					//分频系数寄存器
	reg [7:0] seg_reg;					//段码寄存器
	reg [3:0] sl_reg;					//位码寄存器
	reg [3:0] disp_dat;					//若显示数据寄存器

	reg [1:0] lamp_status;				//定义此时灯的状态寄存器
	reg lamp_change,sec_tick;			//秒标志寄存器
	reg [7:0] lamp_time;				//LED显示数据寄存器
	reg [7:0] led_reg;

initial									//初始化
	begin
		lamp_status=3'h0;
		lamp_time=8'h30;
	end

always @(posedge CLK) 				//0.25秒发生器(11.05926M/4/2=1380K)
	begin
	if (count < 31'd25000000)
		begin
			count=count+1;
		end
	else
		begin
			count=0;					//清零计数寄存器
			sec_tick=~sec_tick;			//0.25秒标志加1
		end
	end

always @(posedge sec_tick) 				//计时模块
	begin
	if (lamp_status == 2'h0)			//绿灯状态
		begin
		if (lamp_time == 8'h0)			//绿灯该灭了吗?
	  		begin
	  			lamp_status=2'h1;		//是,则切换到黄灯
				lamp_time=8'h6;			//赋值为6
				led_reg=8'b10111101;	//黄交通灯点亮
	  		end
	  	else
			begin
				lamp_time=lamp_time-1;	//否则,绿灯亮的时间减1
				if (lamp_time[3:0]>9)
				lamp_time[3:0]=9;
	  		end
		end
	else if (lamp_status == 2'h1)		//黄灯状态(从绿灯变为黄灯)
		begin
		if (lamp_time == 8'h0)
	  		begin
	  			lamp_status=2'h2;
				lamp_time=8'h20;
				led_reg=8'b11011011;
			end
		else
			begin
				lamp_time=lamp_time-1;
			end
		end
	else if (lamp_status == 2'h2)		//红灯状态
		begin
		if (lamp_time == 8'h0)
	  		begin
	  			lamp_status=2'h0;
				lamp_time=8'h30;
				led_reg=8'b01111110;
	  		end
		else
			begin
				lamp_time=lamp_time-1;
				if (lamp_time[3:0]>9)
					lamp_time[3:0]=9;
	  		end
		end
	end

always @(count[12:11])
begin
	case (count[12:11])
		2'h0: disp_dat = 4'h0;
		2'h1: disp_dat = 4'h0;
		2'h2: disp_dat = lamp_time[7:4];
		2'h3: disp_dat = lamp_time[3:0];
	endcase

	case (count[12:11])
		2'h0: sl_reg = 4'b1110;
		2'h1: sl_reg = 4'b1101;
		2'h2: sl_reg = 4'b1011;
		2'h3: sl_reg = 4'b0111;
	endcase
end

always @(disp_dat)
begin
	case (disp_dat)
		4'h0: seg_reg = 8'hc0;
		4'h1: seg_reg = 8'hf9;
		4'h2: seg_reg = 8'ha4;
		4'h3: seg_reg = 8'hb0;
		4'h4: seg_reg = 8'h99;
		4'h5: seg_reg = 8'h92;
		4'h6: seg_reg = 8'h82;
		4'h7: seg_reg = 8'hf8;
		4'h8: seg_reg = 8'h80;
		4'h9: seg_reg = 8'h90;
		4'ha: seg_reg = 8'h88;
		4'hb: seg_reg = 8'h83;
		4'hc: seg_reg = 8'hc6;
		4'hd: seg_reg = 8'ha1;
		4'he: seg_reg = 8'h86;
		4'hf: seg_reg = 8'h8e;
	endcase
end

assign LED=led_reg;
assign SEG=seg_reg;
assign SL=sl_reg;

endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -