摘 要
随着现代城市及交通工具的发展,交通事故也急剧增加,为了改善交通秩序及减少交通事故,交通灯起着越来越重要的作用。在越来越多的城市的各个路口上安装了交通灯,来改善交通秩序。
现代城市在日常运行控制中,越来越多的使用红绿灯对交通进行指挥和管理。而一套完整的交通灯控制系统通常要实现自动控制和手动控制去实现其红绿灯的转换。基于FPGA 设计的交通灯控制系统电路简单、可靠性好。本设计利用Verilog HDL 语言、采用层次化混合输入方式,可控制4个路口的红、黄、绿、左转四盏信号灯,让其按特定的规律进行变化。在QuartusⅡ下对系统进行了综合与仿真。仿真结果表明系统可实现十字路口红绿灯及左转弯控制和倒计时显示,并能够自动控制交通灯转变。
关键词:FPGA,交通灯控制器,QuartusⅡ,Verilog HDL
1
九江职业大学毕业设计(论文)
Abstract
With the development of modern cities and transport, traffic accidents also increased dramatically, plays an increasingly important role in order to improve traffic order and reduce traffic accidents and traffic lights. More and more all the roads of the city to install traffic lights to improve traffic order.Modern city, more and more control of the day-to-day running of the traffic light traffic command and management. And a complete set of traffic light control system is usually to achieve automatic control and manual control to achieve the conversion of its traffic lights. FPGA design-based traffic light control system circuit is simple and good reliability. The design using Verilog HDL language using hierarchical mixed input, and can control the four junctions of red, yellow, green, and turn left at the four signal lights, so that a particular law of change. QUARTUS Ⅱ system synthesis and simulation. The simulation results show that the system can achieve the crossroads of traffic lights and turn left control and countdown display and can automatically control the traffic lights into.
Key Words:FPGA ,traffic light controller, Quartus II, The Verilog HDL
II
九江职业大学毕业设计(论文)
目录
摘 要...........................................................................................................错误!未定义书签。
Abstract ......................................................................................................II 第1章 绪论...............................................................................................1 1.1 交通灯简介......................................................................................1 1.2 FPGA概述及发展............................................................................1 1.3 本设计所实现目标..........................................................................2 1.4 设计方案分析..................................................................................3 第2章 系统的设计及环境.......................................................................4 2.1 系统结构图......................................................................................4 2.2 系统接口信号描述..........................................................................4 2.3 软件环境..........................................................................................4 2.4 硬件环境..........................................................................................6 第3章 系统模块设计...............................................................................8 3.1 分频模块设计..................................................................................8 3.2 计数器模块设计..............................................................................9 3.3 控制器模块设计.............................................................................11 3.4 显示译码模块设计.........................................................................12 3.5 顶层连接模块.................................................................................13 结论............................................................................................................16 致谢............................................................................................................17 参考文献....................................................................................................18 附录............................................................................................................19
3
九江职业大学毕业设计(论文)
第1章 绪论
1.1 交通灯的简介
交通灯通常指由红、黄、绿三种颜色灯组成用来指挥交通的信号灯。绿灯亮时,准许车辆通行,黄灯亮时,已越过停止线的车辆可以继续通行;红灯亮时,禁止车辆通行。 交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。为了实现交通道路的管理,力求交通管理先进性、科学化。用可编程控制器实现交通灯
管制的控制系统具有以下优点:
① 实验证明该系统实现简单、经济;
② 能够有效地疏导交通,提高交通路口的通行能力; ③ 可编程控制器具有小型化、价格低、可靠性高;
1.2 FPGA概述及发展
目前以硬件描述语言(Verilog 或 VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC 设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。
系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。
FPGA一般来说比ASIC(专用集成芯片)的速度要慢,无法完成复杂的设计,但是功耗较低。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA。因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。另外一种方法是用CPLD(复杂可编程逻辑器件备)。
随着微电子技术的快速发展,可编程逻辑器件应用技术得到了广泛的应用,而FPGA技术正处于高速发展时期,新型芯片的规模越来越大,成本也越来越低,低端的FPGA已逐步取代了传统的数字元件,高端的FPGA不断在争夺ASIC的市场份额。未来可编程逻辑器件具有以下几个发展趋势:
① 大容量、低电压、低功耗FPGA 大容量FPGA 是市场发展的焦点。
② 系统级高密度FPGA 。随着生产规模的提高,产品应用成本的下降,FPGA 的应用已经不是过去的仅仅适用于系统接口部件的现场集成,而是将它灵活地应用于系统级(包括其核心功能芯片)设计之中。在这样的背景下,国际主要FPGA 厂家在系统级高密度FPGA 的技术发展上,主要强调了两个方面:FPGA 的IP( Intellec2tual Property ,知识产权)硬核和IP软核。当前具有IP内核的系统级FPGA的开发主要体现在两个方面:一方面是FPGA 厂商将IP硬核(指完成版图设计的功能单元模块)嵌入到FPGA 器件中,另一方面是大力扩充优化的IP软核(指利用HDL语言设计并经过综合验证的功能单元模块),用户可以直接利用这些预定义的、经过测试和验证的IP 核资源,有效地完成复杂的片上系统设计。
③ FPGA和ASIC出现相互融合。 虽然标准逻辑ASIC 芯片尺寸小、功能强、功耗低,但
1
九江职业大学毕业设计(论文)
其设计复杂,并且有批量要求。FPGA价格较低廉,能在现场进行编程,但它们体积大、能力有限,而且功耗比ASIC大。正因如此,FPGA和ASIC正在互相融合,取长补短。随着一些ASIC制造商提供具有可编程逻辑的标准单元,FPGA 制造商重新对标准逻辑单元发生兴趣。
④ 动态可重构FPGA 动态可重构FPGA是指在一定条件下芯片不仅具有在系统重新配置电路功能的特性,而且还具有在系统动态重构电路逻辑的能力。对于数字时序逻辑系统,动态可重构FPGA的意义在于其时序逻辑的发生不是通过调用芯片内不同区域、不同逻辑资源来组合而成,而是通过对FPGA 进行局部的或全局的芯片逻辑的动态重构而实现的。动态可重构FPGA在器件编程结构上具有专门的特征,其内部逻辑块和内部连线的改变,可以通过读取不同的SRAM中的数据来直接实现这样的逻辑重构,时间往往在纳秒级,有助于实现FPGA系统逻辑功能的动态重构。
1.3 本设计所要实现的目标
基于FPGA的Verilog HDL语言设计一个用于十字路口的交通灯控制器来达到一下几个目
的:
① 要求南北方向车道和东西方向车道两条交叉道路上的车辆交替运行,东西和南北各有一组红、黄、绿灯用于指挥交通;
② 红、绿灯的持续时间为60s,黄灯在绿灯转为红灯之前亮3s;
③ 东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行到几时显示;
④ 有紧急情况车辆要求通过时,系统要能禁止普通车辆通行,两条道路均为红灯,计时
器清零,当特殊情况结束后,南北方向信号灯变绿,东西方向信号灯变红,继续正常工作。
1.4 设计方案分析
基于FPGA 设计的交通灯控制系统电路简单、可靠性好。本设计利用Verilog HDL 语言、
采用层次化混合输入方式,可控制4个路口的红、黄、绿、左转四盏信号灯,让其按特定的规律进行变化。
交通灯的工作过程如下:假设十字路口的交通干道为南北方向和东西方向。初始状态为南北和东西干道上的灯均为红灯,然后南北方向上的绿灯先亮,允许车辆的行驶;东西干道的红灯亮,不不允许车辆的行驶,同时两个路口的数码显示器开始倒计时,南北方向的绿灯亮57s后,绿灯熄灭,黄灯开始亮3s;之后南北干道转为红灯,禁止车辆通行,同时东西方向的绿灯亮,允许东西方向车辆行驶,两个干道的数码显示器重新开始倒计时,57s后东西方向的绿灯熄灭,黄灯开始亮起,3s后转为红灯,禁止车辆通行,同时南北方向由红灯转为绿灯,允许车辆行驶。 之后不断重复以上过程。当出现特殊情况时,东西和南北干道上的信号灯转为红灯,并停止倒计时,特殊情况结束后,南北方向的绿灯亮起,东西方向信号灯变红灯,重新开始计时,恢复正常工作。
2
九江职业大学毕业设计(论文)
第2章 系统的设计及环境
2.1 系统结构图
交通灯控制器的系统结构框图如图2.1所示。
图2.1 交通灯控制器的系统结构框图
2.2 系统接口信号描述
交通灯控制器接口信号定义如表2.2所示。
表2.2 交通灯控制器接口信号定义
信号名 clk rst light1 I/O I I O 位 宽 1bit 1bit 2bits 系统时钟输入 复位信号(按键进入特殊工作状态) 南北方向信号灯显示信号,00红灯亮,01黄灯亮,10绿灯亮 含 义
3
九江职业大学毕业设计(论文) light2 dis_drv1 dis_drv2 O O O 2bits 7bits 7bits 东西方向信号灯输出显示信号 南北方向倒计时显示驱动信号 东西方向倒计时显示驱动信号 2.3 软件环境
1) QuartusII
Quartus II是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL
以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。此外,Quartus II 通过和DSP Builder工具与
Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
Quartus II提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:
① 可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;
② 芯片(电路)平面布局连线编辑;
③ LogicLock增量设计方法,用户可建立并优化系统,然后添加对原始系统的性能影响较小或无影响的后续模块;
④ 功能强大的逻辑综合工具;
⑤ 完备的电路功能仿真与时序逻辑仿真工具; ⑥ 定时/时序分析与关键路径延时分析;
⑦ 可使用SignalTap II逻辑分析工具进行嵌入式的逻辑分析; ⑧ 支持软件源文件的添加和创建,并将它们链接起来生成编程文件; ⑨ 使用组合编译方式可一次完成整体设计流程; ⑩ 自动定位编译错误; 11 高效的期间编程与验证工具;
12 可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件; 13 能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。
2) Modelsim仿真
Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,
是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP
4
九江职业大学毕业设计(论文)
核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。 主要特点:
① RTL和门级优化,本地编译结构,编译仿真速度快,跨平台跨版本仿真; ② 单内核VHDL和Verilog混合仿真; ③ 源代码模版和助手,项目管理;
④ 集成了性能分析、波形比较、代码覆盖、数据流ChaseX、Signal Spy、虚拟对象Virtual Object、Memory窗口、Assertion窗口、源码窗口显示信号值、信号条件断点等众多调试功能;
⑤ C和Tcl/Tk接口,C调试;
⑥ 对SystemC的直接支持,和HDL任意混合; ⑦ 支持SystemVerilog的设计功能;
⑧ 对系统级描述语言的最全面支持,SystemVerilog,SystemC,PSL;
⑨ ASIC Sign off。
2.4 硬件环境
开发板运用了:6个LED发光二极管,4个7段数码管,一个按键及时钟信号如图2.3所示。
利用开发板上的6个LED发光二极管分别来模拟南北和东西方向两条道路的红、黄、绿灯,利用按键来控制交通灯处于正常工作状态或特殊工作状态。4个7段数码显示器用来显示两条道路上亮灯的倒计时情况,每个路口使用2个,共需要4个。
在系统的输入信号中包括了一个按键开关,一个时钟信号,输出信号是由6个LED输出信号和4个7段数码显示器驱动信号完成的。交通控制器的外部时钟信号是由晶振产生的,开发板系统采用的是晶振频率为50MHz的信号。交通灯控制器的计时单位为秒,其时钟频率设定为1Hz,所以需要分频模块对外部时钟信号进行分频操作。
5
九江职业大学毕业设计(论文)
图2.3 交通灯示意图
第3章 系统模块设计
在系统模块的设计中运用了5个模块:分频器模块、计数器模块、控制器模块、显示译码模块及顶层连接模块来实现模拟交通灯控制器的设计。
3.1 分频器模块设计
1) 分频器实现的是将高频时钟信号转换成低频时钟信号,用于触发控制器、计数器和扫描显示
电路。具体实物模块如图2.4所示。
图2.4 分频器模块
2) 模块原理分析。在本次设计中开发板提供的时钟频率为50MHz,而秒计数器需要的时钟频率
为1Hz,所以需要降低开发板提供的,以满足计时的需要,我们将这种频率的变换关系称为分频。假设原始的时钟周期为T, 分频后的时钟周期为t,则分频倍数的计算公式为:
n
6
t T九江职业大学毕业设计(论文)
在进行分频之前首先计算n,分频的基本原理是对原始时钟的周期进行计数,每计数满n/2个时钟周期,目标时钟就进行一次翻转。原始时钟clk和目标时钟clk_1的关系如图2.5所示。
图2.5 分频原理
本设计中,原始的未分频时钟是50MHz,周期是T2108秒,分频后的时钟周期t=1秒,代
入公式得到n/2=25 000 000,也就是每次计数达到25 000 000个时钟周期以后就把输出的分频时钟信号翻转一次。
3) 模块接口定义。分频器模块接口定义如表2.6所示。
表2.6 分频器模块接口定义
信 号 名 clk clk_1 I/O I O 位 宽 1bit 1bit 含 义 系统50MHz时钟输入 分频后频率为1Hz的时钟输出 4) 模块仿真波形图如图2.7所示。
图2.7 分频器仿真结果
3.2 计数器模块设计
1) 这里需要的计数器的计数范围为0-60。计到0后,下一个时钟沿回复到60,开始下一轮计
数。此外,当检测到特殊情况(Y1 =‘1’)发生时,计数器暂停计数,而系统复位信号rst则使计数器异步清零。实物模块如图2.8所示。
7
九江职业大学毕业设计(论文)
图2.8 计数器模块
2) 模块原理设计。计数器用于对交通灯亮灯时间进行计时,本设计中的计时显示采用倒计时方
式,所以在进行计数模块设计的时候,要以60作为计时的起点,每进来一个时钟有效信号,计数器数字就减1。由于绿灯转为红灯前3s要亮黄灯,所以计时器剩最后3s时要发出一个点亮黄灯的信号。
3) 模块接口定义。计时器模块接口定义如表2.9所示。
表2.9 计时器模块接口信号定义
信 号 名 clk_1 rst count Y1 I/O I I O O 位 宽 1bit 1bit 6bits 1bit 含 义 分频后周期为1s的时钟信号 复位信号 计时输出信号 黄灯闪亮信号 4) 模块仿真结果。波形仿真结果如图2.10所示。
图2.10 计数器仿真结果
3.3 控制器模块设计
1) 控制器的作用是根据计数器的计数值控制各方向上的LED发光二极管的亮、灭,当计时时
间到达,状态控制器就响应,自动跳转到下一个状态。此外,当检测到特殊情况发生时,无条件点亮红灯的二极管。
2) 模块原理分析。根据交通灯的工作过程,交通灯的工作状况如下表所示。正常工作时交通
灯在前4个状态间运行,出现紧急情况进入状态s5,紧急情况结束后进入s1状态。
8
九江职业大学毕业设计(论文)
表2.11 交通灯状态转换表
当前状态 S1 S2 S3 S4 S5 当前状态下交通灯工作情况描述 南北干道绿灯亮,东西干道红灯亮 南北干道黄灯亮,东西干道红灯亮 南北干道红灯亮,东西干道绿灯亮 南北干道红灯亮,东西干道黄灯亮 两个路口红灯同时亮(特殊情况) 持续时间 57s 3s 57s 3s 不确定 下一个状态 S2 S3 S4 S1 恢复原始状态 3) 模块接口定义。控制器模块接口定义如表2.12所示。
表2.12 交通灯控制器模块接口信号定义
信 号 名 clk_1 rst Y1 count light1 light2 I/O I I I I O O 位 宽 1bit 1bit 1bit 6bits 2bits 2bits 含 义 分频后周期为1s的时钟信号 复位信号 黄灯闪亮信号 计数输出信号,控制信号灯的转换 南北方向信号灯输出显示信号 东西方向信号灯输出显示信号 4) 模块仿真结果。模块仿真结果如图2.13所示。
图2.13 控制器模块仿真结果
3.4 显示译码模块设计
1) 模块原理的分析。本次设计的信号灯带有倒计时显示,显示信号由计时器的输出信号驱动。
计时器的输出信号count为二进制输出信号,而7段数码显示器显示的是十进制数(分为十位和个位),所以在考虑设计此显示译码模块的时候首先要考虑的是将count输出的6为二进制转换为十进制数,然后令生成的十进制数的十位和个位分别转换成两个各自独立的二进制数,并驱动两个7段数码显示器。显示译码模块的结构图如图2.14所示。
9
九江职业大学毕业设计(论文)
图2.14 显示译码模块结构框图
2) 模块接口定义。显示译码模块的接口定义如表2.15所示。
表2.15 显示译码模块接口信号定义
信 号 名 count dis_drv1 dis_drv2 I/O I O O 位 宽 6bits 7bits 7bits 含 义 计数器输出信号,作为显示译码器模块的输入 南北方向倒计时显示驱动信号 东西方向倒计时显示驱动信号 3) 仿真波形图。仿真波形图如图2.16所示。从仿真波形图的结果可以看出,该模块能将输入的
count信号正确转换成BCD码输出信号,作为外部7段数码显示器的驱动信号。
图2.16 模块仿真结果
3.5 顶层连接模块设计
在前面设计的4个电路模块,包括:分频器模块(clk_div)、计数器模块(time_cnt)、控制
器模块(light_ctrl)和显示译码器模块(display_decode)。在顶层连接模块中,这4个模块的关系如图2.17所示。由于两个方向的红灯和绿灯持续时间相同,任何时刻南北方向和东西方向的倒计时显示器显示时间相同,所以可以使用同一个显示译码器。
10
九江职业大学毕业设计(论文)
图2.17 顶层模块连接结构图
顶层模块功能仿真图2.18所示。图中:96对应的dh为0110,对应的是6;而dl为0000,对应的是0;后面显示59…
图2.18 顶层连接模块仿真图
11
九江职业大学毕业设计(论文)
图2.19 RTL图
效果图
图2.19 实际
12
九江职业大学毕业设计(论文)
结论
以上为在毕业前所作的毕业论文---基于FPGA的交通灯控制器设计,本任务的设计实现了一个交通灯控制系统,可以用来控制一个南北和东西方向交叉的十字路口的信号灯。
通过人物分析将交通灯控制系统分为四个模块:分频模块、计时模块、控制模块和显示译码模块。信号灯在计数器的计数信号的控制下各个工作状态之间的转换非常明确,所以可利用状态机来对控制模块进行设计。计数器采用倒计时的方式,在设计计数模块时,要注意计时的起点是60s。由于使用7段数码显示器来模拟时间显示,所以需要将计时模块的输出信号转化为数码显示器的驱动信号,中间涉及到十进制和二进制之间的转换。
在设计中采用Verilog HDL语言设计交通灯控制系统, 借助其功能强大的语言结构, 简明的代码描述复杂控制逻辑设计, 与工艺无关特性, 在提高工作效率的同时达到求解目的, 并可以通过Verilog HDL 语言的综合工具进行相应硬件电路生成, 具有传统逻辑设计方法所无法比拟的优越性。
在设计过程中,觉得最难的部分是波形仿真部分,虽然程序编译通过但仿真却比较难实现正确的波形,不是计数器无法正常计数,就是控制输出无法进入到下一个状态,每次出现问题就必须返回重新修改程序。实践证明,在编写一个较复杂的程序时,一开始一定要先把各个模块分析透彻,弄清楚各个功能及实现它们的逻辑算法,做到心中有数后在开始下笔写编写程序。
通过这次毕业设计,无论从选题到定稿,从理论到实践都使我学到了很多东西,它不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。同时也明白了理论与实践相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
13
九江职业大学毕业设计(论文)
致谢
三年的大学生活像弹指一挥间很快就要结束了,在这段难忘的生活中,有许多美好的回忆,有在一起生活了三年的7位室友,有陪我一起学习一起成长了三年的计算机通信的同学们,有谆谆教导我们的老师指导专业知识……在毕业论文设计之中,我的老师和我的同学都细心的指导我,让我能更快的完成毕业设计。
在大学的生活里学到挺多的东西,让我领悟到诚实做人,踏实做事,扎实做学问的深刻道理,让我从一个懵懂得高中生变成一个成熟的大学生,让我幼稚的心在这慢慢的成长,不再有小孩子气。在这里我要感谢我的指导老师,谢谢你能在繁多的工作量中抽出时间来指导我完成毕业设计,感谢大学中陪我一起做业务的几个学长及老乡,有你们的帮助让我对业务的发展更熟悉更得心应手,当然还要感谢寝室的兄弟们陪我度过美好的三年大学生活,感谢能有这段美好的记忆。
现在即将挥别我的学校、老师、同学,还有我三年的大学生活,虽然依依不舍,但是对未来的路,我充满了信心。最后,感谢在大学期间认识我和我认识的所有人,有你们的陪伴,才有我大学生活的绚丽多彩,谢谢你们三年的陪伴,有你们真好!!
14
九江职业大学毕业设计(论文)
参考文献
[1] 夏宇闻. 《复杂数字电路与系统的V erilog HDL设计技术 [M ]》.北京: 北京航空航天大学出版社, 1998;
[2] 张明. 《Verilog HDL 实用教程[M ]》. 成都: 电子科技大学出版社, 1999;
[3] 褚振勇,齐亮,田红心,高楷娟.《FPGA设计及应用(第二版)》.西安:电子科技大学出版社,2006;
[4] 亿特科技.《CPLD/FPGA应用系统设计》.人民邮电出版社,2005;
[5] Hyde D C. 《Bucknell Handbook on V erilog HDL 1Computer Science Department. Bucknell U niversity L ew is burg, 1995;
[6] 谭会生等. 《EDA技术及应用》.西安电子科技大学出版社,2001; [7] 潘松等. 《EDA技术实用教程》.科学出版社,2006;
[8] 康华光. 《电子技术基础-数字部分》.高等教育出版社,1998;
[9] 王丹,童如松. 《电子设计自动化(EDA)手册》. 北京: 电子工业出版社,2005; [10] 杨承毅. 《电子技能实训基础》. 北京: 人民邮电出版社,2005;
15
九江职业大学毕业设计(论文)
附录 总程序
分频模块
module clk_div( clk, clk_1, ); input clk; output clk_1; reg[24:0] counter; reg clk_1;
always@(posedge clk) begin
if(counter==25'h17D7840) begin
counter<=25'b1; clk_1<=~clk_1; end else
counter<=counter+1'b1; end endmodule 计数器模块 module time_cnt( clk_1, rst, count, Y1 );
input clk_1,rst; output[5:0]count; output Y1; reg [5:0]count;
16
九江职业大学毕业设计(论文) reg Y1;
always@(posedge clk_1 or negedge rst) begin if(! rst)
count<=6'b111100; else if(count==6'b000000) begin Y1<=1'b0; count<=6'b111100; end
else if(count>6'b000011) begin Y1<=1'b0;
count<=count-1'b1; end else begin Y1<=1'b1;
count<=count-1'b1; end end endmodule
控制器模块
module light_ctrl( clk_1, rst, Y1, count, light1, light2, );
input clk_1,rst,Y1;
17
九江职业大学毕业设计(论文) input[5:0] count; output[1:0]light1,light2; reg[1:0]light1,light2; reg[2:0]state; parameter s1=3'b000, s2=3'b001, s3=3'b010, s4=3'b011, s5=3'b100;
always@(posedge clk_1 or negedge rst) begin if(!rst) state<=s5; else begin case(state) s1:if(Y1) begin
light1<=2'b01; light2<=2'b00; state<=s2; end else
state<=s1;
s2:if(! count) begin
light1<=2'b00; light2<=2'b10; state<=s3; end else
state<=s2;
18
九江职业大学毕业设计(论文) s3:if(Y1) begin
light1<=2'b00; light2<=2'b01; state<=s4; end else
state<=s3; s4:if(! count) begin
light1<=2'b10; light2<=2'b00; state<=s1; end else
state<=s4; s5:if (rst) begin
light1<=2'b10; light2<=2'b00; state<=s1; end else begin
light1<=2'b00; light2<=2'b00; state<=s5; end default state<=s1; endcase
19
九江职业大学毕业设计(论文) end end endmodule
显示译码器模块
module display_decode( count, dis_drv1, dis_drv2 );
input[5:0]count;
output[6:0]dis_drv1,dis_drv2; integer data; integer quo; integer comp; reg[2:0]dh; reg[3:0]dl;
wire[6:0]dis_drv1,dis_drv2; always@(count) begin
data=count[5]*32+count[4]*16+count[3]*8+count[2]*4+count[1]*2+count[0]; quo=data/4'd10; comp=data%4'd10; begin case(quo) 3'd6:dh=3'b110; 3'd5:dh=3'b101; 3'd4:dh=3'b100; 3'd3:dh=3'b011; 3'd2:dh=3'b010; 3'd1:dh=3'b001; 3'd0:dh=3'b000; default:dh=3'bxxx; endcase end
20
九江职业大学毕业设计(论文) begin case(comp) 4'd9:dl=4'b1001; 4'd8:dl=4'b1000; 4'd7:dl=4'b0111; 4'd6:dl=4'b0110; 4'd5:dl=4'b0101; 4'd4:dl=4'b0100; 4'd3:dl=4'b0011; 4'd2:dl=4'b0010; 4'd1:dl=4'b0001; 4'd0:dl=4'b0000; default:dl=4'bxxxx; endcase end end
assign dis_drv1={dh,dl}; assign dis_drv2={dh,dl}; endmodule
顶层连接模块
module top( clk, rst, dis_drv1, dis_drv2, light1, light2 ); input clk; input rst;
output[1:0] light1,light2; output[6:0] dis_drv1,dis_drv2;
wire clk_1;
21
九江职业大学毕业设计(论文) clk_div clk_div_inst (.clk(clk), .clk_1(clk_1) );
wire[5:0] count; wire Y1;
time_cnt time_cnt_inst (.clk_1(clk_1), .rst(rst), .count(count), .Y1(Y1), );
wire[1:0] light1; wire[1:0] light2;
light_ctrl light_ctrl_inst (.clk_1(clk_1), .rst(rst), .Y1(Y1), .count(count), .light1(light1), .light2(light2), );
wire[6:0] dis_drv1,dis_drv2; display_decode display_decode_inst (.count(count), .dis_drv1(dis_drv1), .dis_drv2(dis_drv2), ); Endmodule
22
九江职业大学毕业设计(论文)
23
因篇幅问题不能全部显示,请点此查看更多更全内容