名称:交通灯控制器带左转灯Verilog代码Quartus仿真
软件:Quartus
语言:Verilog
代码功能:
利用状态机,按照图1中十字路口交通运行的实际情况,使用 Verilog HDL语言,设计一个交通灯系统控制器。
其中方向1是主干道,车流量大,因此绿灯时间较长;方向2是次干道,绿灯时间较短,两个方向的交通灯变化显示时间,如表1所示。
从表1可以看出每个方向四种灯按“绿灯→黄灯→左转灯→黄灯→红灯”顺序依次点亮,不断循环,且每个方向红灯亮的时间与另一方向绿、黄、左转、黄灯亮的总时间相等。
假设用“1”表示灯亮,“0”表示灯灭,方向1和方向2的绿灯、黄灯、左转灯和红灯分别用字母G1、Y1、L1、R1和G2、Y2、L2、R2来表示,则该交通灯控制器的功能表,如表2所示。
2、设计要求
根据图1,设计一个交通灯系统控制器,具体要求如下:
(1)利用状态机,使用 Verilog HDL语言描述实现该交通灯控制器,要求方向1和方向2的红(R)、黄(Y)、绿(G)和左拐(L)四盏灯按照表1和表2的显示时间与功能状态循环亮灭,将灯亮的时间以倒计时的形式显示出来,且能够方便地进行设置和修改,给出 Quartus I平台的编译结果。
(2)画出该状态机的结构框图、状态转换图;
(3)编写测试模块,在 Modelsim上对所设计的交通灯控制器进行仿真,验证所有结果,并给出其时序仿真波形图;要求按照两组不同参数设定,其中一组参数限定为仿真时间2000ns,在100ns前完成复位,CLK时钟激励周期10ns,占空比50%;另一组参数自由选择。
(4)时序波形图中要求将现态变量(current_state)和次态变量? ? (next state)的状态变换值以十进制形式显示,每一个方向上每一种颜色灯亮的持续时间以十进制形式显示出来。
(5)使用系统函数$ monitor、$time,以二进制形式打印待测模块的输出数据,显示当前的时间单位,并给出一段清晰截图。注意:要求图形清晰,建议用 Visio或 Edraw(亿图)画图,直接复制粘贴至word。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
各模块框图
分频模块
状态机控制模块
显示模块
5. Testbench(仿真代码)
仿真参数1
仿真参数2
6. 仿真图(以仿真参数1为例)
整体仿真图
Moniter输出
State状态
分频模块仿真图
状态机控制模块仿真图
显示模块仿真图
部分代码展示:
//交通灯 module?trafic( input?clk,//时钟 input?key,//复位 output?main_red,//主干道红灯--R1 output?main_green,//主干道绿灯--G1 output?main_yellow,//主干道黄灯--Y1 output?main_left,//主干道左转灯--L1 output?branch_red,//支干道红灯--R2 output?branch_green,//支干道绿灯--G2 output?branch_yellow,//支干道黄灯--Y2 output?branch_left,//支干道左转灯--L2 output?[7:0]?HEX0,//数码管0--支干道倒计时个位 output?[7:0]?HEX1,//数码管1--支干道倒计时十位 output?[7:0]?HEX2,//数码管2---主干道倒计时个位 output?[7:0]?HEX3//数码管3--主干道倒计时十位 ); wire?clk_1Hz; wire?[7:0]?main_cnt; wire?[7:0]?branch_cnt; //分频模块 div?i_div( .?clk(clk),//时钟 .?clk_1Hz(clk_1Hz)//1Hz ); //状态机控制模块 state_machine?i_state_machine( .?clk_1Hz(clk_1Hz),//1Hz .?key(key), .?main_red(main_red), .?main_green(main_green), .?main_yellow(main_yellow), .?main_left(main_left), .?branch_red(branch_red), .?branch_green(branch_green), .?branch_yellow(branch_yellow), .?branch_left(branch_left), .?main_cnt(main_cnt), .?branch_cnt(branch_cnt) );
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=527