软件:Quartus
语言:Verilog
代码功能:
基于 FPGA 的交通灯控制器
设计任务及具体要求: 要求设计一个基于 FPGA 的交通灯控制器。
(1) 交通指示灯:LED 灯模块有 12 个 LED 灯,红黄绿三种颜色,纵向表示南北方向,横向表示东西方向,输出高电平时,对应的 LED 灯亮;
(3) 4 个 0-1 开关:K1-K4,开关向上为 1,向下为 0;
(4) 外部输入脉冲信号时钟源 CLK(1Hz),供计数器使用。
3、交通灯时序
(1)东西、南北方向均有绿灯、黄灯、红灯指示,其持续时间由自己观察的结果自定。(要求要合理可行,小于 100 秒)
(2)系统设有时钟,以倒计时方式显示每一路允许通行的时间。(八个数码管的左边六位显示030506,右边两位显示东西和南北通行时间)
(3)当东西或南北两路中任一路出现特殊情况时,系统可由交警手动控制立即进入特殊运行状态,即红灯全亮,时钟停止计时,东西、南北两路所有车辆停止通行;当特殊运行状态结束后,系统恢复工作,继续正常运行。(本次设计规定 K1 为“0”时自动运行,K1 为“1”时手动控制)
数码管动态显示:设计中七段数码管采用动态扫描的方式显示,扫描需要一个比较高频率的信号,本次设计选用 1000HZ 。为了得到 1000Hz 信号,必须对输入的时钟信号50MHZ 进行分频。显示模块共用 11 个管脚,其中 8 个用于连接 8 个数码管的七段 LED,还有 3 个管脚用于选择点亮哪个数码管,每隔很短的一段时间 8 个数码管交替点亮,依次循环,动态显示,由于人眼的视觉残留,可以观察到连续的测量计数器的计数值。
其原理框图如图所示:
根据如上说明,本设计的主要任务和设计要求步骤是:
1、按照现代数字系统的 Top-Down 模块化设计方法,提出交通灯电 路设计系统的整体设计方案,并进行正确的功能划分,分别提出并实现控制器、计数器、数码管显示、LED 显示等模块化子系统的设计方案。
2、在 QuartusⅡ13.0 的 EDA 设计环境中,完成系统的顶层设计、各子系统的模块化设计。分别完成各个基于 Verilog 语言实现的子模块(包括控制器电路、计数器电路、数码管显示、 LED 显示电路)的逻辑功能仿真。最后对顶层设计进行功能仿真。
3、在完成第 2 步的基础上,锁定管脚并全编译通过。
4、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中,观察实验结果是否与自己的编程思想一致。(有条件再进行)
5、电路设计与仿真,主要包括:总体方案设计,各个电路子模块的 Verilog 源文件或者原理图,功能仿真波形;顶层设计的 Verilog 源文件或者 原理图、功能仿真波形;
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图(原理图)
5. 管脚分配
6. 仿真图
整体仿真图
分频模块
红绿灯控制模块
数码管计数模块
显示模块
部分代码展示:
/* 红->绿 绿->黄 黄->红 1、红--计时main_red_times------------------------绿--计时main_green_times---main_yellow_times黄灯---------------红 2、绿--计时branch_green_times---branch_yellow_times黄灯--------------------红--计时branch_reg_times-------------------绿 */ module traffic_light( input clk,//时钟 input lock_key,//紧急按键--均为红灯,为1紧急状态,为0正常状态 //红绿灯 1亮0灭 output main_red,//主路灯 output main_green,//主路灯 output main_yellow,//主路灯 output branch_red,//支路灯 output branch_green,//支路灯 output branch_yellow,//支路灯 output [2:0] weixuan,//数码管位选 output [7:0] duanxian//数码管段选 ); wire clk_1Hz; wire [7:0] main_green_BCD; wire [7:0] main_yellow_BCD; wire [7:0] main_red_BCD; wire [7:0] branch_green_BCD; wire [7:0] branch_yellow_BCD; wire [7:0] branch_red_BCD; wire [7:0] main_data; wire [7:0] branch_data; wire main_red_led;//主路灯 wire main_green_led;//主路灯 wire main_yellow_led;//主路灯 wire branch_red_led;//支路灯 wire branch_green_led;//支路灯 wire branch_yellow_led;//支路灯 //led 1亮0灭 assign main_red=main_red_led;//主路灯 assign main_green=main_green_led;//主路灯 assign main_yellow=main_yellow_led ;//主路灯 assign branch_red=branch_red_led;//支路灯 assign branch_green=branch_green_led;//支路灯 assign branch_yellow=branch_yellow_led ;//支路灯 //分频模块 div div100 ( . clk(clk), . clk_out(clk_1Hz) );
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1307
918