精华内容
下载资源
问答
  • verilog交通灯

    2013-12-03 20:44:10
    verilog交通灯代码基础性 源代码 可根据自身需要进行改进
  • Verilog 交通灯

    2010-06-06 23:36:16
    Verilog编写的交通灯程序,已经在开发板上验证过。
  • verilog 交通灯

    2012-12-17 22:41:45
    乡村公路和主干道的交通灯转换,用于帮住概念不是很清楚的同学
  • Verilog交通灯控制程序

    2018-06-27 14:54:01
    Verilog交通灯控制程序,内含文档,简单方便 交通灯控制器
  • 数字系统Verilog 交通灯(红绿灯),可直接运行,运用Quartus软件编写
  • 交通灯程序,写了详细的设计报告,并且经过板级验证
  • 自己写的Verilog交通灯

    2010-04-01 18:00:40
    自己写的Verilog交通灯控制,参考了华中科技大学康华光老师数点489页的核心算法。书里的算法实在是太高效了。佩服。 包含功能:数码管时间显示,红绿黄灯,绿灯闪烁。主次干道区分。
  • fpga-verilog交通灯.zip

    2020-04-06 17:19:32
    本资源为用Verilog编写的交通灯代码,欢迎下载。本人采用的是Quarters,下载即可用,可编程逻辑器件类课程需要的有缘人可自行下载
  • verilog交通灯控制

    2018-09-25 00:26:02
    基于verilog交通信号控制,CLK: 为同步时钟; EN: 使能信号,为1 的话,则控制器开始工作; LAMPA: 控制A 方向四盏的亮灭;其中,LAMPA0~LAMPA3,分别控制A 方向的 左拐、绿灯、黄灯和红灯; LAMPB: ...
  • verilog交通灯设计

    2013-07-06 00:17:16
    本实验为自主选题设计实验,实验选择具有倒计时显示功能的红黄绿三色交通设计,实验中采用verilog HDL 作为设计功能...并给出了设计电路图,详细的介绍了交通灯的设计流程,实验报告中还附有实验代码实验结果照片图。
  • verilog实现的交通灯,用状态机实现,七段数码管显示,包含详细讲解,注释,testbench,波形图以及实验报告!内部只写了单方向的交通灯,可以根据自己需要进行修改。
  • fpga verilog 交通灯例子

    2015-10-22 09:48:50
    基于verilog的小例子交通灯 通过此来模拟红黄绿灯之间的转换
  • Verilog 交通灯控制器

    千次阅读 多人点赞 2019-11-20 15:05:06
    设计一个交通灯控制器,在数码管上以红、黄、绿三种颜色显示当前状态的剩余时间。持续时间分别为:红灯30s,黄灯5s,绿灯30s。初始为红灯,依次变为绿灯、黄灯、红灯循环显示。输入时钟为1k Hz。 系统设计: 分析...

    简介:
    设计一个交通灯控制器,在数码管上以红、黄、绿三种颜色显示当前状态的剩余时间。持续时间分别为:红灯30s,黄灯5s,绿灯30s。初始为红灯,依次变为绿灯、黄灯、红灯循环显示。输入时钟为1k Hz。
    系统设计:
    分析需求,可将交通控制器系统划分为generate_1s、controller、counter、splitter和decoder5_7共五个模块实现。
    交通灯控制器顶层框图如下:
    在这里插入图片描述
    controller状态转移图如下:
    在这里插入图片描述
    Verilog完整代码实现如下:

    /*-------------------------------------------------
    Filename: traffic_light_controller.v
    Function: 交通灯控制器顶层模块(用于综合成实际电路)
    Author: Zhang Kaizhou
    Date: 2019-11-17 14:28:50
    -------------------------------------------------*/
    `include "generate_1s.v"
    `include "counter.v"
    `include "controller.v"
    `include "splitter.v"
    `include "decoder5_7.v"
    module traffic_light_controller(sys_clk, reset, data_high, data_low, state);
    	//输入输出端口定义
    	input sys_clk, reset;
    	output [1 : 0] state;
    	output [6 : 0] data_high, data_low;
    	
    	//内部寄存器及连线定义
    	wire count_clk;
    	wire [6 : 0] data;
    	wire [3 : 0] data_shi, data_ge;
    	
    	//逻辑实现
    	generate_1s		generate_1s_m0(.sys_clk(sys_clk), .reset(reset), .y(count_clk));
    	counter			counter_m0(.count_clk(count_clk), .reset(reset), .data(data));
    	controller		controller_m0(.clk(count_clk), .reset(reset), .din(data), .state(state));
    	splitter		splitter_m0(.data(data), .data_shi(data_shi), .data_ge(data_ge));
    	decoder5_7		decoder5_7_m0(.reset(reset), .data_shi(data_shi), .data_ge(data_ge), .data_high(data_high), .data_low(data_low));
    endmodule
    
    /*--------------------------------------
    Filename: generate_1s.v
    Function: 将1kHz系统时钟分频产生1Hz时钟
    Author: Zhang Kaizhou
    Date: 2019-11-17 14:28:56
    --------------------------------------*/
    module generate_1s(sys_clk, reset, y);
    	//定义输入输出端口
    	input sys_clk, reset;
    	output y;
    	
    	//内部寄存器定义
    	reg y;
    	reg [9 : 0] cnt;
    	
    	//逻辑实现
    	always@(posedge sys_clk or negedge reset)
    	begin
    		if(!reset)
    		begin
    			y <= 1'b0;
    			cnt <= 10'd0;
    		end
    		else
    		begin
    			if(cnt == 10'd999)
    			begin
    			y <= 1'b1;
    			cnt <= 10'd0;
    			end
    			else
    			begin
    				y <= 1'b0;
    				cnt <= cnt + 1;
    			end
    		end
    	end
    endmodule
    
    /*---------------------------------------------
    Filename: counter.v
    Function: 7位循环减计数器(用于倒计时和状态转移)
    Author: Zhang Kaizhou
    Date: 2019-11-17 14:29:01
    ---------------------------------------------*/
    module counter(count_clk, reset, data);
    	//输入输出端口定义
    	input count_clk, reset;
    	output [6 : 0] data; //64~35, 34~5, 4~0循环减计数
    	
    	//内部寄存器定义
    	reg [6 : 0] data;
    	
    	//逻辑实现
    	always@(posedge count_clk or negedge reset)
    	begin
    		if(!reset) data <= 7'd64; //异步复位
    		else if(data == 7'd0) data <= 7'd64;
    		else data <= data - 7'd1;
    	end
    endmodule	
    
    /*-------------------------------------------------
    Filename: controller.v
    Function: 整个电路的控制模块(用FSM实现)
    Author: Zhang Kaizhou
    Date: 2019-11-17 14:29:06
    -------------------------------------------------*/
    module controller(clk, reset, din, state);
    	//定义输入输出端口
    	input clk, reset;
    	input [6 : 0] din;
    	output [1 : 0] state;
    	
    	//内部寄存器定义
    	reg [1 : 0] state, current_state, next_state;
    	
    	//状态编码
    	parameter red = 2'b00, green = 2'b01, yellow = 2'b10;
    	
    	//时序逻辑实现状态转移
    	always@(posedge clk or negedge reset)
    	begin
    		if(!reset) current_state <= red;
    		else current_state <= next_state;
    	end
    	
    	//组合逻辑实现转移条件判断
    	always@(current_state or din)
    	begin
    		case(current_state)
    			red: next_state = (din == 7'd35) ? green : red;
    			green: next_state = (din == 7'd5) ? yellow : green;
    			yellow: next_state = (din == 7'd0) ? red : yellow;
    		endcase
    	end
    	
    	//组合逻辑实现输出
    	always@(current_state)
    	begin
    		case(current_state)
    			red: state = 2'b00;
    			green: state = 2'b01;
    			yellow: state = 2'b10;
    		endcase
    	end
    endmodule
    
    /*------------------------------------------------------------
    Filename: splitter.v
    Function: 将输入的7位二进制数转换成2个4位的BCD码(分离十位和个位)
    Author: Zhang Kaizhou
    Date: 2019-11-17 14:29:10
    ------------------------------------------------------------*/
    module splitter(data, data_shi, data_ge);
    	//输入输出端口定义
    	input [6 : 0] data;
    	output [3 : 0] data_shi;
    	output [3 : 0] data_ge;
    	
    	//内部寄存器定义
    	reg [3 : 0] data_shi, data_ge;
    	reg [6 : 0] data_display;
    	
    	//显示数据转换
    	always@(data)
    	begin
    		if(data >= 7'd35) data_display = data - 7'd35;
    		else if(data >= 7'd5) data_display = data - 7'd5;
    		else data_display = data;
    	end
    	
    	//用左移加3法将7位二进制数转换为两个4位的BCD码
    	integer i;
    	always@(data)
    	begin
    		data_shi = 4'd0;
    		data_ge = 4'd0;
    		
    		for(i = 6; i >= 0; i = i - 1)
    		begin
    			if(data_ge >= 4'd5) data_ge = data_ge + 4'd3;
    			if(data_shi >= 4'd5) data_shi = data_shi + 4'd3;
    		
    			data_shi = data_shi << 1;
    			data_shi[0] = data_ge[3];
    			data_ge = data_ge << 1;
    			data_ge[0] = data_display[i];
    		end
    	end
    endmodule
    
    /*------------------------------------------------
    Filename: decoder5_7.v
    Function: 将4位BCD码数据转换为7段数码管的显示数据
    Author: Zhang Kaizhou
    Date: 2019-11-17 14:29:16
    ------------------------------------------------*/
    module decoder5_7(reset, data_shi, data_ge, data_high, data_low);
    	//输入输出端口定义
    	input reset;
    	input [3 : 0] data_shi, data_ge;
    	output [6 : 0] data_high, data_low;
    	
    	//内部寄存器定义
    	reg [6 : 0] data_high, data_low;
    	
    	//译码个位数
    	always@(reset or data_ge)
    	begin
    		if(!reset)
    		begin
    			data_high <= 7'b0000110; //7'h06
    			data_low <= 7'b0000001; //7'h01
    		end
    		else
    		begin
    			case(data_ge)
    				4'd0: data_low <= 7'b0000001; //7'h01
    				4'd1: data_low <= 7'b1001111; //7'h4f
    				4'd2: data_low <= 7'b0010010; //7'h12
    				4'd3: data_low <= 7'b0000110; //7'h06
    				4'd4: data_low <= 7'b1001100; //7'h4c
    				4'd5: data_low <= 7'b0101100; //7'h2c
    				4'd6: data_low <= 7'b0100000; //7'h20
    				4'd7: data_low <= 7'b0001111; //7'h0f
    				4'd8: data_low <= 7'b0000000; //7'h00
    				4'd9: data_low <= 7'b0000100; //7'h04
    				default: data_low <= 7'b0110000; //7'h48
    			endcase
    		end
    	end
    	
    	//译码十位数
    	always@(reset or data_shi)
    	begin
    		if(!reset)
    		begin
    			data_high <= 7'b0000110; //7'h06
    			data_low <= 7'b0000001; //7'h01
    		end
    		else
    		begin
    			case(data_shi)
    				4'd0: data_high <= 7'b0000001; //7'h01
    				4'd1: data_high <= 7'b1001111; //7'h4f
    				4'd2: data_high <= 7'b0010010; //7'h12
    				4'd3: data_high <= 7'b0000110; //7'h06
    				default: data_high <= 7'b0110000; //7'h48
    			endcase
    		end
    	end
    endmodule
    
    /*---------------------------------------------------------
    Filename: top_t.v
    Function: 交通灯控制器整个系统的顶层测试文件(用于仿真测试)
    Author: Zhang Kaizhou
    Date: 2019-11-17 14:29:23
    ---------------------------------------------------------*/
    `timescale 1ms/100us
    `define sys_clk_half_period 0.5 //系统时钟频率为1kHz,其半周期为0.5ms
    `include "generate_1s.v"
    `include "counter.v"
    `include "controller.v"
    `include "splitter.v"
    `include "decoder5_7.v"
    module top_t(data_high, data_low, state);
    	//输入输出端口定义
    	output [1 : 0] state;
    	output [6 : 0] data_high, data_low;
    	
    	//内部寄存器及连线定义
    	reg sys_clk, reset;
    	wire count_clk;
    	wire [6 : 0] data;
    	wire [3 : 0] data_shi, data_ge;
    	
    	//产生测试信号
    	initial
    	begin
    		sys_clk = 0;
    		#5 reset = 1;
    		#5 reset = 0;
    		#9.5 reset = 1;
    		#120000 $stop; //仿真120s停止
    	end
    	
    	//产生1kHz的系统时钟sys_clk
    	always #`sys_clk_half_period sys_clk = ~sys_clk;
    	
    	//结构描述
    	generate_1s		generate_1s_m0(.sys_clk(sys_clk), .reset(reset), .y(count_clk));
    	counter			counter_m0(.count_clk(count_clk), .reset(reset), .data(data));
    	controller		controller_m0(.clk(count_clk), .reset(reset), .din(data), .state(state));
    	splitter		splitter_m0(.data(data), .data_shi(data_shi), .data_ge(data_ge));
    	decoder5_7		decoder5_7_m0(.reset(reset), .data_shi(data_shi), .data_ge(data_ge), .data_high(data_high), .data_low(data_low));
    endmodule
    

    ModelSim10.4仿真结果:
    在这里插入图片描述
    总结:
    由上面的仿真结果可知,本次设计的交通灯控制电路实现了,在输入1kHz时钟的驱动下,在数码管上以红、黄、绿(状态编码分别为2’d0、2’d1、2’d2)三种颜色显示当前状态的剩余时间。持续时间分别为:红灯30s,黄灯5s,绿灯30s。初始为红灯,依次变为绿灯、黄灯、红灯循环显示。相应的数码管驱动数据也正确。完成了设计预期。

    展开全文
  • Verilog交通灯控制模块

    千次阅读 2019-08-06 22:57:36
    Verilog编写行为模块模拟交通灯的控制时序。 【注】该代码不可综合成电路网表。 代码实现: /*---------------------------------------------- Filename: trafic_lights.v Function: 模拟交通灯的控制时序;...

    简介:
    用Verilog编写行为模块模拟交通灯的控制时序。【注】该代码不可综合成电路网表。
    代码实现:

    /*----------------------------------------------
    Filename: trafic_lights.v
    Function: 模拟交通灯的控制时序;[本程序不可综合]
    Author: Zhang Kaizhou
    Date: 2019-8-6 22:20:08
    -----------------------------------------------*/
    `timescale 1ns/1ns
    `define clock_period 100
    module trafic_lights(red, amber, green);
    	//端口定义
    	output red, amber, green;
    	reg clock, red, amber, green;
    	parameter on = 1, off = 0, red_tics = 350, 
    			  amber_tics = 30, green_tics = 200;
    	
    	//初始化
    	initial
    	begin
    		clock = 0; red = off; amber = off; green = off;
    	end
    	
    	//控制时序
    	always
    	begin
    		red = on;
    		light(red, red_tics);
    		amber = on;
    		light(amber, amber_tics);
    		green = on;
    		light(green, green_tics);
    	end
    	
    	//灯亮持续时间的任务
    	task light;
    		//端口定义
    		output color;
    		input [31 : 0] tics;
    		
    		//控制时序
    		begin
    			repeat(tics) @(posedge clock);
    			color = off;
    		end
    	endtask
    	
    	//产生时钟信号
    	always	#`clock_period clock = ~clock;
    endmodule	
    
    /*----------------------------------------------
    Filename: trafic_lights_tb.v
    Function: 测试程序
    Author: Zhang Kaizhou
    Date: 2019-8-6 22:21:02
    -----------------------------------------------*/
    `timescale 1ns/1ns
    module trafic_lights_tb;
    	wire red, amber, green;
    	
    	trafic_lights m0(.red(red), .amber(amber), .green(green));
    endmodule
    

    仿真结果:
    在这里插入图片描述
    以上仿真波形与代码所写控制时序逻辑一致,说明交通灯时序控制模块功能正常。

    展开全文
  • Verilog交通灯设计(ESP2C35F672C6)项目场景:问题描述:原因分析:解决方案:学习目标:学习内容:学习时间:学习产出:前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结二级目录三级目录 项目场景: ...

    ⌘⌘最详细步骤⌘⌘

    希望照片里面的每一个步骤,都要认认真真的看一遍。

    1.新建工程文件

    在桌面新建工程文件

    2.打开Quartus II软件

    打开Quartus II

    3.新建工程

    在这里插入图片描述
    点击Next
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4.新建代码文件

    有三个代码文件
    TOP.V
    SEGTOP.V
    SEGBOT.V

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    TOP.V代码

    `timescale 1ns/1ps
    module TOP(clk,rst,night,R,G,Y,T,close);
    input clk,rst,night;
    output reg R,G,Y,close;
    output reg[5:0] T;
    reg[5:0] T1;
    reg[5:0] T2;
    reg[2:0] state;
    reg[30:0] cnt;
    reg[30:0] cnt_1;
    always@(posedge clk or negedge rst) //clk的上升沿触发和rst的下降触发
    if(!rst)
    	begin
    		R<=1'b0;
    		G<=1'b0;
    		Y<=1'b0;
    		close<=1'b1;
    		cnt<=31'd0;
    		cnt_1<=31'd0;
    		T<=6'd0;
    		T1<=6'd0;
    		T2<=6'd0;
    		state<=3'd0;
    	end
    else if(night)
    	case(state)
    		3'd0:
    			begin
    				R<=1'b0;
    				G<=1'b0;
    				Y<=1'b0;
    				close<=1'b1;
    				cnt<=31'd25000000;//0.5S
    				state<=3'd1;
    			end
    		3'd1:
    			begin
    				cnt<=cnt-1'b1;
    				state<=(cnt==31'd0)?3'd2:3'd1;
    			end
    		3'd2:
    			begin
    				R<=1'b0;
    				G<=1'b0;
    				Y<=1'b1;
    				cnt<=31'd25000000;
    				state<=3'd3;
    			end
    		3'd3:
    			begin
    				cnt<=cnt-1'b1;
    				state<=(cnt==31'd0)?3'd0:3'd3;
    			end
    		default:
    			state<=state;
    	endcase
    else
    	case(state)
    		3'd0:
    			begin
    			close<=1'b0;
    			R<=1'b1;
    			G<=1'b0;
    			Y<=1'b0;
    			cnt<=31'd1500000000;
    			cnt_1<=31'd0;
    			T1<=6'd30;
    			T2<=6'd0;
    			state<=3'd1;
    		end
    		3'd1:
    			begin
    				cnt_1<=(cnt_1==31'd50000000)?31'd0:cnt_1+1'b1;
    				T2<=(cnt_1==31'd49999999)?T2+1'b1:T2;           //每隔一秒加1
    				T<=T1-T2;
    				cnt<=cnt-1'b1;
    				state<=(cnt==31'd0)?3'd2:3'd1;
    			end
    		3'd2:
    			begin
    				R<=1'b0;
    				G<=1'b1;
    				Y<=1'b0;
    				cnt<=31'd1500000000;
    				cnt_1<=31'd0;
    				T1<=6'd30;
    				T2<=6'd0;
    				state<=3'd3;
    			end
    		3'd3:
    			begin
    				cnt_1<=(cnt_1==31'd50000000)?31'd0:cnt_1+1'b1;
    				T2<=(cnt_1==31'd49999999)?T2+1'b1:T2;
    				T<=T1-T2;
    				cnt<=cnt-1'b1;
    				state<=(cnt==31'd0)?3'd4:3'd3;
    			end
    		3'd4:
    			begin
    				R<=1'b0;
    				G<=1'b0;
    				Y<=1'b1;
    				cnt<=31'd150000000;
    				cnt_1<=31'd0;
    				T1<=6'd0;
    				T2<=6'd61;//这里修改
    				state<=3'd5;
    			end
    		3'd5:
    			begin
    				cnt_1<=(cnt_1==31'd50000000)?31'd0:cnt_1+1'b1;
    				T2<=(cnt_1==31'd49999999)?T2+1'b1:T2;
    				T<=T1-T2;
    				cnt<=cnt-1'b1;
    				state<=(cnt==31'd0)?3'd0:3'd5;
    			end
    	default:
    		state<=state;
    	endcase
    endmodule
    
    
    
    
    
    

    SEGTOP.V

    /**************************************************************
    Filename: SEGTOP.v
    Function: 将输入的 
    Author: ChunMu He
    Date: 2021-4-27 12:09:06
    ***************************************************
    *							引脚说明	
     
    /*************个位数**********************************
    HEX0[0] PIN_AF10  
    HEX0[1] PIN_AB12  
    HEX0[2] PIN_AC12  
    HEX0[3] PIN_AD11 
    HEX0[4] PIN_AE11   
    HEX0[5] PIN_V14  
    HEX0[6] PIN_V13  
    /*************十位数**********************************
    HEX1[0] PIN_V20  
    HEX1[1] PIN_V21  
    HEX1[2] PIN_W21  
    HEX1[3] PIN_Y22  
    HEX1[4] PIN_AA24  
    HEX1[5] PIN_AA23  
    HEX1[6] PIN_AB24 
    *********************************************************/
    `timescale 1ns/1ps
    module SEGTOP (a,dr);
    input[3:0]a;
    output[6:0]dr;
    assign  dr =  (a==4'b0000)?7'b1000000://0
    			  (a==4'b0001)?7'b1111001://1
    			  (a==4'b0010)?7'b0100100://2
    			  (a==4'b0011)?7'b0110000://3
    			  (a==4'b0100)?7'b0011001://4		  
    			  (a==4'b0101)?7'b0010010://5			  
    			  (a==4'b0110)?7'b0000010://6
    			  (a==4'b0111)?7'b1111000://7		  
              	  (a==4'b1000)?7'b0000000://8
    			  (a==4'b1001)?7'b0010000://9		  
               	  (a==4'b1010)?7'b1111111:	dr;//全灭
    endmodule	
    
    

    SEGBOT.V

    /**************************************************************
    Filename:SEGBOT.v
    Function: 将输入的7位二进制数转换成2个4位的BCD码(分离十位和个位)
    Author: ChunMu He
    Date: 2021-4-27 12:09:06
    *********************************************************/
    module SEGBOT(T,close,a0,a1);
    input[5:0]T;
    input close;
    output[3:0]a0;
    output[3:0]a1;
    assign a0=(close==1'b1)?4'd10:
             	 (T<6'd10)? T:
    			 (T<6'd20)? T-6'd10:
    			 (T<6'd30)? T-6'd20:
    			 (T<6'd40)? T-6'd30:
    			 (T<6'd50)? T-6'd40:
    			 (T<6'd60)? T-6'd50:
    			 (T<7'd70)? T-6'd60: a0;
    assign a1=(close==1'b1)?4'd10:
              	 (T<6'd10)? 4'd0:
    			 (T<6'd20)? 4'd1:
    			 (T<6'd30)? 4'd2:
    			 (T<6'd40)? 4'd3:
    			 (T<6'd50)? 4'd4:
    			 (T<6'd60)? 4'd5:
    			 (T<7'd70)? 4'd6:a1;
    endmodule
    
    
    

    生成元器件,三个点V文件都要生,步骤看图
    在这里插入图片描述

    5.新建原理图文件

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这样说明你就成功啦
    在这里插入图片描述

    6.添加引脚

    在这里插入图片描述
    已经添加好的引脚
    在这里插入图片描述

    7.进入下载程序的界面

    在这里插入图片描述
    添加最核心的驱动程序进行下载
    在这里插入图片描述

    8.工程文件下载

    链接: 参考文件.
    链接: 工程文件.

    展开全文
  • verilog 交通灯实验(使用状态机)

    千次阅读 2020-11-01 23:51:27
    一、实验要求 包含一个counter与一个state转换模块 当reset为1时,则count为0,state=S0 当reset为0时,则开始数数,state切到绿灯 每过clk一周期则counter+1 绿灯时,当过25周期,则切到黄灯 ...

    一、实验要求

    • 包含一个counter与一个state转换模块
    • 当reset为1时,则count为0,state=S0
    • 当reset为0时,则开始数数,state切到绿灯
    • 每过clk一周期则counter+1
    • 绿灯时,当过25周期,则切到黄灯
    • 黄灯时,当过2周期,则切到红灯
    • 红灯时,每过15周期,则切到绿灯

    以此循环。

    二、状态机

    在这里插入图片描述

    三、程序实现

    1、RTL代码

    
    module traffic_light_ctl(
        clk,
        reset,
        state
        );
    
        input clk,reset;
        output [1:0]state;
        reg [1:0]state_r;
    
        localparam idle=0;
        localparam green=1;
        localparam yellow=2;
        localparam red=3;
    
        /******************************
                计数模块
        ******************************/
        reg [5:0]count;
        reg clear;
    
        always@(posedge clk or posedge reset)begin
            
            if(reset|clear)
                begin
                    count <= 0;
                    clear <= 0;
                end
            else 
                count <= count + 1;
        
        end
    
        /******************************
                状态机
        ******************************/
    
        reg [1:0]state_c,state_n;
    
        //状态机第一段:对现态state_c进行赋值
        always @(posedge clk or posedge reset)begin
            if(reset)
                state_c <= idle;
            else
                state_c <= state_n;
        end
    
        //状态机第二段:确定下一状态state_n
    
        always @(*)begin
        case(state_c)
            idle: begin
                count <=0;
                state_n =green;
            end
            green: begin
                if(count==24)
                    begin
                        state_n = yellow;
                        clear = 1;
                    end
                    
                else
                    state_n = green;
            end
            yellow: begin
                if(count==1)
                    begin
                        state_n = red;
                        clear = 1;
                    end
                else
                    state_n = yellow;
            end
            red: begin
                if(count==14)
                    begin
                        state_n = green;
                        clear = 1;
                    end
                else
                    state_n = red;
            end
            
            default:state_n = idle;
        endcase
    end
    
        //状态机第三段:确定输出信号
        always @(posedge clk or posedge reset)begin
            if(reset)
                state_r <= 0;
            else if(state_c==green)
                state_r <= 1;
            else if(state_c==yellow)
                state_r <= 2;
            else if(state_c==red)
                state_r <= 3;
            else state_r <= 0;
        end
    
        assign state=state_r;
    endmodule
    

    2、仿真程序

    `timescale  1ns / 1ps
    
    module tb_traffic_light_ctl;
    
    // traffic_light_ctl Inputs
    reg   clk= 0 ;
    reg   reset= 1 ;
    
    // traffic_light_ctl Outputs
    wire  [1:0]  state ;
    
    
    initial
    begin
        forever #5  clk=~clk;
    end
    
    initial
    begin
        #10 reset  =  0;
    end
    
    traffic_light_ctl  u_traffic_light_ctl (
        .clk ( clk),
        .reset ( reset ),
    
        .state ( state  [1:0] )
    );
    
    endmodule
    

    3、仿真结果

    在这里插入图片描述

    展开全文
  • 交通灯和七段计数 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 2016/05/24 14:55:05 /.....
  • 基于verilog交通灯的基本程序,……………………………………………………………………
  • 自己写的一个Verilog 交通灯,在DE1上跑过,完全没问题
  • verilog实现交通灯

    2010-04-11 10:00:43
    这是用verilog实现交通灯的常规功能
  • Verilog HDL交通灯设计

    2010-11-29 21:00:06
    这是大学期间我上VerilogHDL的交通灯设计实验报告,报告中除了包括正确测试后的程序代码,我 还加入了非常详细的注释。为了让读者更好理解交通灯程序代码和编写代码的思路,我还特意精心绘制了交通灯程序模块间的...
  • 交通灯 verilog

    2013-07-12 11:10:14
    交通灯控制系统 verilog代码完全正确!可试试

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 578
精华内容 231
关键字:

verilog交通灯