Verilog交通灯
verilog课程设计交通灯
verilog课程设计交通灯一、教学目标本节课的教学目标是使学生掌握Verilog HDL的基本知识,能够使用Verilog编写简单的交通灯控制系统。
具体来说,知识目标包括理解Verilog的基本语法、模块化设计方法以及状态机的设计原理;技能目标包括能够使用Verilog编写交通灯控制器的代码,并能够进行仿真测试;情感态度价值观目标包括培养学生的团队合作意识,提高他们对电子工程的兴趣。
二、教学内容本节课的教学内容主要包括Verilog基础知识、模块化设计方法、状态机设计原理以及交通灯控制系统的实现。
具体来说,首先介绍Verilog的基本语法,包括数据类型、运算符、语句等;然后讲解模块化设计方法,如何将复杂的系统分解为简单的模块,并介绍模块的调用和连接;接着介绍状态机的设计原理,如何根据状态转移图编写状态机的Verilog代码;最后,通过实例讲解如何使用Verilog编写交通灯控制系统的代码,并进行仿真测试。
三、教学方法为了达到本节课的教学目标,将采用多种教学方法相结合的方式进行教学。
首先,通过讲授法,为学生讲解Verilog的基本语法、模块化设计方法和状态机设计原理;然后,通过案例分析法,分析交通灯控制系统的实现过程,让学生加深对知识的理解;接着,通过实验法,让学生动手编写交通灯控制器的Verilog代码,并进行仿真测试,提高他们的实践能力;最后,通过讨论法,让学生分享自己的学习心得,培养他们的团队合作意识。
四、教学资源为了支持本节课的教学内容和教学方法的实施,将准备以下教学资源:教材《Verilog HDL Primer》和相关参考书,用于讲解Verilog的基本语法和设计方法;多媒体教学课件,用于展示交通灯控制系统的原理和实现过程;实验设备,包括计算机和仿真器,用于让学生动手编写代码并进行仿真测试。
此外,还将提供在线编程平台,让学生可以随时随地编写代码并进行调试。
五、教学评估本节课的教学评估将采用多元化的评估方式,以全面、客观、公正地评价学生的学习成果。
《FPGA设计与应用》交通灯实验一
《FPGA设计与应用》交通灯实验
一、实验目的和要求
实验目的:
1. 综合运用 Verilog HDL 语言进行时序设计。
实验要求:
1. 两个方向各种灯亮的时间能够进行设置和修改
二、实验内容和原理
1. 编写时间控制程序,利用交通灯实验子板,实现东西,南北向的交通灯计数并亮灯的程序;
2.子板实现所有显示方面的功能,包括十进制倒数计数和红绿黄三色灯的轮流点亮。
三、主要仪器设备
电脑、VIVADO软件
四、操作方法与实验步骤
1.为了在八段数码管上正确显示十进制数据,设计一个函数,程序即上述实验五中的数码管封装模块。
2、将实验板上电,下载程序到 FPGA 芯片中。
3、观察实验结果。
五、实验数据记录和处理
综合:
程序:
六、实验结果与分析
实验仿真结果:
实物操作:
七、讨论和心得
通过这次实验,我加深了用Verilog语言来进行时序设计方法的理解,能够编写简单的时间控制程序,让我verilog语法的运用更加熟练,在实验中还用到了之前学到的模块调用,加深了我对之前知识的理解。
通过本次实验,我不仅学到了关于Verilog的知识,同时也让我感觉到了思考的重要性。
fpga交通灯课程设计
fpga交通灯课程设计一、课程目标知识目标:1. 学生能理解FPGA的基本原理和交通灯系统的功能需求。
2. 学生能掌握利用硬件描述语言(如VHDL/Verilog)设计简单的数字电路。
3. 学生能了解交通灯系统的时序逻辑设计和状态机原理。
技能目标:4. 学生能运用FPGA开发软件进行电路设计和仿真。
5. 学生能通过编程实现交通灯控制逻辑,并进行功能测试和调试。
6. 学生能分析并解决交通灯系统中可能出现的问题。
情感态度价值观目标:7. 培养学生对于电子工程和信息技术领域的兴趣,激发其创新意识和探索精神。
8. 强化学生的团队合作意识,使其能够在项目实施中有效沟通与协作。
9. 增强学生的社会责任感,使其理解技术在实际应用中对公共安全的作用。
课程性质:本课程为实践性强的设计与制作课程,结合理论知识与动手操作,旨在提升学生的实际工程能力。
学生特点:考虑到学生处于高年级,具备一定的电子电路基础和编程能力,能够理解和掌握较为复杂的逻辑设计。
教学要求:课程要求学生在理解理论知识的基础上,通过动手实践,完成具有实际应用价值的交通灯控制系统设计,注重培养学生解决实际问题的能力。
教学过程中将目标分解为具体可衡量的学习成果,以便于教学设计和最终评估。
二、教学内容1. 理论知识:- 数字电路基础:逻辑门、触发器、计数器等。
- 硬件描述语言:VHDL/Verilog基本语法和结构。
- 交通灯控制系统原理:状态机、时序逻辑设计。
- FPGA原理与设计流程:FPGA结构、配置过程、硬件描述语言到硬件的映射。
2. 实践操作:- FPGA开发环境搭建:安装与配置FPGA开发软件。
- 交通灯控制逻辑设计:编写VHDL/Verilog代码实现交通灯控制逻辑。
- 电路仿真与功能测试:使用开发软件进行电路仿真,验证设计功能。
- 硬件调试与优化:在FPGA开发板上进行实际测试,发现问题并进行优化。
3. 教学安排与进度:- 数字电路基础与硬件描述语言学习(2课时)。
交通灯控制程序
1引言 (2)1.1编写目的 (2)1.2背景 (2)1.3定义 (2)1.4参考资料 (2)2总体设计 (2)2.1需求规定 (2)2.2运行环境 (2)2.3基本设计概念和处理流程 (3)2.4结构 (3)2.5功能器求与程序的关系 (3)2.6人工处理过程 (3)2.7尚未问决的问题 (3)3接口设计 (3)3.1用户接口 (3)3.2外部接口 (3)3.3内部接口 (4)4运行设计 (4)4.1运行模块组合 (4)4.2运行控制 (4)4.3运行时间 (4)5系统数据结构设计 (4)5.1逻辑结构设计要点 (4)5.2物理结构设计要点 (4)5.3数据结构与程序的关系 (4)6系统出错处理设计 (5)6.1出错信息 (5)6.2补救措施 (5)6.3系统维护设计 (5)概要设计说明书1引言1.1编写目的创建一个可供日常交通灯使用的程序,目标读者为交通灯控制人员。
1.2背景说明:a.交通路口复杂交通信号灯的设计b.任务提出者,开发者:陈磊用户:交通指挥系统设计环境:使用Verilog HDL语言进行设计使用Quartus 2编程环境进行开发。
1.3定义ORDER 选择信号ROAD 亮灯控制信号EN5 5秒延时使能信号LIN5 5秒延时终止信号EN25 25秒延时使能信号LIN25 25秒延时终止信号RST 系统复位信号CLK 系统时钟信号1.4参考资料Verilog HDL数字系统设计与应用2总体设计2.1需求规定输入项目:CLK 系统时钟信号RST 系统复位信号输出项目:ROAD 亮灯控制信号,ROAD=00,红灯亮;ROAD=01,黄灯亮;ROAD=10,绿灯亮;ROAD=11,黄灯亮。
处理要求:根据ORDER的不同值,使相应的灯发亮。
2.2运行环境运行环境:。
Quartus II 9.02.3基本设计概念和处理流程2.4结构ORDER 选择某一灯的选择变量ROAD 控制某一灯亮的控制变量2.5功能器求与程序的关系2.6人工处理过程人工输入ORDER的值,根据ORDER的不同值,相应的灯变亮2.7尚未问决的问题创建一个稳定的时钟源3接口设计3.1用户接口light(red,amber,green,0,order)ORDER为控制变量,由它决定让哪一盏灯发亮。
vivado交通灯课程设计
vivado交通灯课程设计一、课程目标知识目标:1. 理解交通灯工作原理,掌握交通灯控制系统的基础知识。
2. 学习使用Vivado软件进行基本的数字电路设计和仿真。
3. 了解Verilog HDL语言的基本结构,能运用其编写简单的交通灯控制程序。
技能目标:4. 能够运用Vivado软件进行电路设计,完成交通灯控制电路的搭建。
5. 能够利用Verilog HDL语言实现交通灯的定时切换和紧急车辆优先通过功能。
6. 培养动手实践能力,通过实际操作解决交通灯控制系统中的问题。
情感态度价值观目标:7. 培养学生对电子设计工程的兴趣,激发创新意识和探索精神。
8. 增强团队合作意识,学会在项目实施中分工合作,共同解决问题。
9. 认识到科技在生活中的应用,理解技术对提高社会生活质量的重要性。
课程性质:本课程为实践性强的课程设计项目,旨在通过实际操作让学生将理论知识与实际应用相结合。
学生特点:学生应为具有一定电子工程基础知识和Verilog HDL语言基础的年级学生,具备基本的逻辑思维能力和动手操作能力。
教学要求:课程要求学生在教师的指导下,独立完成交通灯控制系统的设计、编程、仿真与调试。
通过本课程的学习,学生应能够展示出对知识的应用能力和解决实际问题的能力。
二、教学内容1. 交通灯控制系统原理介绍:讲解交通灯的工作机制,包括信号灯的定时控制、相位差设置、紧急车辆优先通行等基础知识。
- 相关教材章节:第五章“交通控制系统概述”2. Vivado软件操作:学习Vivado设计环境的基本操作,包括创建工程、添加源文件、配置硬件和仿真。
- 相关教材章节:第三章“数字电路设计工具介绍”3. Verilog HDL语言基础:回顾Verilog HDL的基本语法,包括数据类型、运算符、控制语句等。
- 相关教材章节:第四章“Verilog HDL基础”4. 交通灯控制模块设计:- 定时控制模块设计:设计实现交通灯的定时切换功能。
实验五交通灯控制
操作规则实现电路
功能:根据交通红绿灯控制器的功能要求,确定不同工作状态下计时器的计数值。可用8位计数器来实现定时计数。
正常运行时,计数器按照规定的定时要求加1计数;若要人工放行某方向,只要使计时器运行到该放行状态的最后一刻时,计时器保持此时的计数值,使红绿灯信号生成器暂停状态的转移即可。
*
再按下键2,表示欲人工放行B方向,则相应LED有显示;同时两个方向的红绿灯按正常运行规律自动切换,当运行到放行B方向时,则保持放行该方向。
再按下键3,表示清除人工方向的控制,则交通灯开始自动转换红黄绿灯的状态。
3
2
1
4
*
1
2
3
4
5
6
预习时请画出其状态转移图。
*
设计方案的选择
01
图文混合设计方法:先将电路划分为几个子模块,每个子模块由Verilog HDL语言描述实现,然后生成逻辑符号,顶层文件采用图形文件来实现。
02
纯文本描述方法:每个子模块和顶层电路的连接关系都采用Verilog HDL语言描述实现,对子模块的调用采用模块元件例化的方法。
起始状态的选择
采用log2N个触发器来表示这N个状态 采用N个触发器来表示这N个状态——称为一位热码状态机编码(One-Hot State Machine Encoding)。
状态编码
采用Verilog HDL语言实现基于状态机的设计,就是在时钟信号的触发下,完成两项任务: 用case或if-else语句描述出状态的转移; 描述状态机的输出信号。
在线校验
下载后,仔细观察:红绿灯应按设定的时间规律自动切换,D1~D8八个LED分别对应的是:A方向的红黄绿,B方向的红黄绿,A方向的放行状态,B方向的放行状态。
基于FPGA的交通灯控制电路设计
基于FPGA的交通灯控制电路设计本文介绍了一种基于FPGA的交通灯控制电路设计。
交通灯控制是城市交通管理的一个重要部分,它有助于维护交通秩序,减少交通事故,提高交通效率。
在本电路设计中,我们使用FPGA作为主控制器,并通过数码管、按钮和LED模块与外部交互。
同时,我们还采用了状态机设计方法,以实现灵活的控制逻辑和连续的动态过渡。
首先介绍了本电路设计的硬件设计。
在本设计中,我们使用了FPGA作为主控制器,数码管用于显示当前状态,按钮用于进行手动控制,LED模块用于显示当前灯颜色。
在硬件设计中,我们通过适当的寄存器和时钟模块,实现了稳定的时序控制和同步操作。
接着,我们介绍了本电路设计的软件设计。
在软件设计中,我们采用了状态机设计方法,将交通控制逻辑分为多个状态,通过状态间的转移完成交通灯的切换控制。
具体地,我们将交通灯控制状态划分为三种:绿灯、黄灯和红灯。
在每种状态下,我们通过计数器和状态转移条件来实现精确的时间控制和灯颜色的自动切换。
同时,为了提高控制的灵活性,我们设计了手动控制模式,让用户可以通过按钮手动切换交通灯状态。
最后,我们介绍了本电路设计的实现结果。
在实现过程中,我们使用了Quartus II软件进行综合、布局和验证,并将设计的电路下载到FPGA开发板上进行实验。
实验结果表明,本交通灯控制电路设计实现了稳定、灵活和精确的交通控制,能够满足不同的交通道路需求。
综上所述,本文介绍了一种基于FPGA的交通灯控制电路设计,通过硬件和软件设计,实现了稳定、灵活和精确的交通控制。
该设计可以为城市交通管理提供帮助,为交通事故和交通拥堵的缓解做出贡献。
verilog实验报告流水灯数码管秒表交通灯
流水灯实验目的:在basys2开发板上实现LED灯的花样流水的显示,如隔位显示,依次向左移位显示,依次向右移位显示,两边同时靠中间显示。
实验仪器:FPGA开发板一块,计算机一台。
实验原理:当一个正向的电流通过LED时,LED就会发光。
当阳极的电压高于阴极的电压时,LED就会有电流通过。
当在LED上增添一个典型值为1.5V—2.0V之间的电压时,LED就会有电流通过并发光。
实验内容:顶层模块:输入信号:clk_50MHz(主时钟信号),rst(重置信号),输出信号:[7:0] led(LED灯控制信号)。
module led_top(clkin,rst,led_out);input clkin, rst;output [7:0] led_out;wire clk_1hz;divider_1hz d0(clkin, rst, clk_1hz);led l0(clk_1hz, rst, led_out);endmodule分频模块:module divider_1hz(clkin,rst,clkout);input clkin,rst;output reg clkout;reg [24:0] cnt;always@(posedge clkin, posedge rst)beginif(rst) begincnt<=0;clkout<=0; endelse if(cnt==24999999) begincnt<=0;clkout=!clkout; endelse cnt<=cnt+1;endendmodule亮灯信号模块:module led(clkin,rst,led_out);input clkin,rst;output [7:0] led_out;reg [2:0] state;always@(posedge clkin, posedge rst)if(rst) state<=0;else state<=state+1;always@(state)case(state)3'b000:ledout<=8'b0000_0001;3'b001:ledout<=8'b0000_0010;3'b010:ledout<=8'b0000_0100;3'b011:ledout<=8'b0000_1000;3'b100:ledout<=8'b0001_0000;3'b101:ledout<=8'b0010_0000;3'b110:ledout<=8'b0100_0000;3'b111:ledout<=8'b1000_0000;endcaseendmodule实验中存在的问题:1 芯片选择问题automotive spartan3EXA3S100E XA3S250E CPG132spartan3EXC3S100E XC3S250E CP1322 时序逻辑部分,阻塞赋值和非阻塞赋值混用always@(posedge clk)begina=b+c;d<=e+f;end3 UCF文件格式错误NET “CLK” LOC = “B8”;NET “a” LOC = “N11”;NET “b” LOC = “G13”;NET “c[0]”LOC =“K11;数码管实验目的:设计一个数码管动态扫描程序,实现在四位数码管上动态循环显示“1”、“2”“3”“4”;实验仪器:FPGA开发板一块,计算机一台。
交通灯控制器+数字电路课程设计报告
交通灯控制器+数字电路课程设计报告交通灯控制器是交通管理系统中的重要组成部分,其主要作用是控制道路上的交通信号灯。
随着数字电路技术的发展,交通灯控制器也逐渐向数字化、智能化方向发展。
本文将详细介绍一种基于数字电路的交通灯控制器设计,以及该设计方案的实现和效果。
一、设计方案1.硬件设计硬件设计方案主要包括数字电路的选择、交通灯的控制模块、传感器等。
本方案选用FPGA芯片作为控制芯片,该芯片具有先进的数字信号处理能力和可编程性,便于开发和定制。
交通灯的控制模块包括红灯、黄灯、绿灯三个信号灯的控制器,以及车辆、行人传感器等。
其中车辆传感器主要用来检测车流量,行人传感器主要用来检测行人通行情况。
2.软件设计软件设计方案主要包括程序的设计和调试,以及人机界面的设计和开发。
程序设计方案采用Verilog HDL语言进行实现,采用时序逻辑设计的思路来编写程序,实现红绿灯的控制和状态转移。
人机界面采用C语言进行编写,通过串口通信与控制芯片进行数据传输和控制。
二、实现过程在设计方案确定后,我们进一步开始实现。
首先是电路的焊接和测试,在确定电路正常无误后,再完成程序的编写和调试。
最后是人机接口的开发和完善。
具体实现流程如下:1.电路焊接首先进行电路布线和焊接,将FPGA芯片、光耦隔离器、电位器等元器件焊接到电路板上,以及信号灯、传感器等元器件的接入。
2.程序编写利用Verilog HDL语言编写程序,主要包括红绿灯状态的转移逻辑和相应的信号输出控制。
程序设计过程中,需要注意时序和状态的转移。
3.调试测试完成程序编写后,需要进行相应的调试测试。
通过仿真测试,检查程序逻辑是否正确,排除潜在问题。
在硬件实验平台上进行测试,确定系统能够正常工作。
4.人机界面开发利用C语言编写人机界面,实现与交通灯控制器的交互控制。
实现车辆、行人传感器的数据采集和显示,以及人手动控制交通灯的功能。
三、实现效果通过测试和实验验证,本文的交通灯控制器设计方案具有以下优势:1.使用FPGA芯片作为控制芯片,具有较强的可编程性和数字信号处理能力。
Verilog代码(计数器、交通灯、串并转换)
1、通用二进制计数器设计一个二进制计数器(默认为8位计数器),具有加/减计数功能、异步复位、预制数功能。
代码如下:`define WIDTH 8module BinaryCounter(counter,clk,up_down,load,reset,din);output reg [`WIDTH-1:0] counter;input clk;input up_down; //1为加计数,0为减计数input reset;input load; //预置数,1有效,din输出到counterinput [`WIDTH-1:0] din;always@(posedge clk or posedge reset)beginif(reset)counter<=0;else if(load)counter<=din;else if(up_down==1)counter<=counter+1;else if(up_down==0)begincounter<=counter-1;if(counter<1) counter<=0;endendendmodule测试程序如下:`define WIDTH 8module BinaryCounter_tb;reg clk,up_down,reset,load;reg [`WIDTH-1:0] din;wire [`WIDTH-1:0] counter;integer i;initialbeginclk=0;reset=1;#5 reset=0;#3000 $stop;endalways #5 clk=~clk;/*always@(posedge clk)beginup_down={$random}%2;load={$random}%2;din={$random}%256;end*/initialbegin#5;for(i=0;i<256;i=i+3)begindin=i;#10;endendinitialbeginup_down=1;load=1;#20 load=0;#30 load=1;#30 load=0;endalways #200 up_down=~up_down;BinaryCounter bcounter(.counter(counter),.clk(clk),.up_down(up_down),.load(load),.reset(reset),.din(din));endmodule波形图如下:图1 二进制计数器波形图图2 二进制计数器波形图从图像可看出,20s-50s为加计数,50s-80s时load=1,执行置数功能,80s-200s 时up_down=1,为加计数,200s-280s时up_down=0,为减计数。
交通灯控制器数字电路的设计及仿真
交通灯控制器数字电路的设计及仿真随着城市化进程的加快,交通量越来越大,如何科学有效地管理交通成为一个重要的问题。
其中,交通灯控制器是一个涉及电子电路技术的重要设备。
基于数字电路的设计和仿真,进一步提高交通灯控制器的精度和稳定性,对于保障交通安全、提高城市交通效率至关重要。
一、设计方案1.计算时序交通灯控制器的每个阶段均有确定的时间,因此需要计算时序以确定各个信号时序是否正确,以及控制灯的开关时间是否正确。
2.设计状态机根据计算好的时序,可以通过 ISE 设计工具绘制状态图,然后再利用 Verilog HDL 语言编写出状态机。
交通灯控制器的每个阶段都有一个对应的状态,状态机会根据输入信号的状态来判断当前处于何种状态,并根据状态判断应该输出什么信号。
3.确定数字电路结构利用 ISE 设计工具,可以采用 Combinational Logic Circuit 来设计灯的开关逻辑电路,时序电路中以时钟触发器为主。
可以通过该工具绘制仿真波形来检测电路的正确性,检查信号间是否存在错误。
二、仿真过程1.绘制输入信号波形首先,需要绘制出输入信号的波形,并且在仿真时要按照相应的频率和占空比输出。
2.对仿真波形进行仿真分析仿真过程中,可以通过 Xilinx 仿真工具,对仿真波形进行分析,检测电路的正确性和稳定性。
同时,可以通过仿真过程中的输出信号波形,判断各阶段信号的状态。
3.检验仿真结果与设计方案借助仿真工具,可以非常直观地验证数字电路的设计方案是否合理、可靠。
此外,还可以通过不同的应用场景,不断优化和调整设计方案,以实现更高的效率与精度。
三、总结数字电路的设计和仿真,可以有效地提高交通灯控制器的精度和稳定性,在城市交通管理中起到关键的作用。
当前数字电路技术的不断推进,为实现更加高效安全的交通管理提供了强有力的支持。
Verilog自制交通灯控制器加倒计时功能(内带源码文件)
无论是课程设计,还是实验课,最好的方法就是在FPGA实验板上进行测试实验,这样可以看到实际交通灯的效果。对每一部分修改可以看到修改 的效果,知道程序的修改带来的效果,那样比只看代码要理解的更深刻。 在设计中最好是分模块设计,状态控制,脉冲发生等部分,对每个模块的调试书写时要特别注意每位的意义,尤其在软件绑定引脚时,每个输入输 出信号的绑定,引脚的输入输出特性等,要与实际代码中的相符,在调试中不断发现问题,解决问题。 下面附上代码部分: 自制交通灯控制器加倒计时功能: module traffic(CLK,EN,LIGHT_A,LIGHT_B,TIME_A,TIME_B,a,b,c,d,e,f,g); output[7:0] TIME_A,TIME_B; output[2:0] LIGHT_A,LIGHT_B; output[3:0] a,b,c,d,e,f,g; input CLK,EN; reg[7:0] numa,numb; reg tempa,tempb; reg[1:0] counta,countb; reg[5:0] ared,ayellow,agreen,bred,byellow,bgreen; reg[2:0] LIGHT_A,LIGHT_B; reg[3:0] a,b,c,d,e,f,g; always @(EN) if(!EN)
default:{a[0],b[0],c[0],d[0],e[0],f[0],g[0]}=7'bx; endcase end endmodule
end
always @(posedge CLK)
begin
if (EN) begin if(!tempb) begin tempb<=1; case (countb) 0: begin numb<=bgreen; LIGHT_B<=1; countb<=1; end 1:begin numb<=byellow; LIGHT_B<=2; countb<=2; end 2: begin numb<=bred; LIGHT_B<=4; countb<=0; end default: LIGHT_B<=1; endcase end else begin if(numb>=1) if(!numb[3:0]) begin numb[3:0]<=9; numb[7:4]<=numb[7:4]-1; end else numb[3:0]<=numb[3:0]-1; if(numb==0) tempb<=0; end end
实训报告
EDA课程设计——基于verilog语言交通灯程序设计前言实现路口交通灯系统控制的方法很多,可以用标准逻辑器件、可编程序控制器PLC、单片机等方案来实现。
但是这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上增加了设计难度。
采用EDA技术,应用VHDL硬件电路描述语言实现交通灯系统控制器的设计,电子设计自动化(EDA)的关键技术之一。
它采用一种自上而下(top—down)的设计方法,即从系统总体要求出发,自上至下地逐步将设计内容细化,如划分为若干子模块,最后完成系统硬件的整体设计。
它支持设计库和可重复使用的元件生成,支持阶层设计,提供模块设计的刨建,VHDL设计技术对可编程专用集成电路(ASIC)的发展起着极为重要的作用。
利用MAX+PLUSⅡ集成开发环境进行综合、仿真,并下载到CPLD可编程逻辑器件中,完成系统的控制作用。
该灯控制逻辑可实现3种颜色灯的交替点亮、时间的倒计时,指挥车辆和行人安全通行。
一.实验目的与要求1、了解交通灯控制原理2、学习和掌握quartusⅡ编写程序、编译、波形仿真3、了解模块化设计方法4、掌握数字系统设计的基本方法5、通过仿真器观察输入输出波形,并能在FPGA开发板上实现交通灯控制系统二、实验仪器1、计算机2、FPGA实验开发板三、实验内容1、从网上、图书馆、实验开发板找相关资料2、画出基本框图、流程图3、完成控制器部分状态图的画法4、完成系统的模块划分5、使用V erilog HDL完成整个系统的代码编写6、用quartusⅡ编译并波形仿真7、在实验开发板上验证并调试四、实验步骤1、关于fpga和verilog的相关知识可编程器件的广泛应用,为数字系统的设计带来了极大的灵活性。
由于可编器件可以通过软件编程对硬件的结构和工作方式进行重构,使得硬件的设计可以如同软件设计那样快捷方便。
由于高速发展的FPGA/CPLD兼有串、并行工作方式和高速、高可靠性的特点[1],在电子系统设计中得到了广泛应用。
基于FPGA的交通灯控制器的设计
基于FPGA的交通灯控制器的设计交通灯控制器是现代城市交通系统中至关重要的组成部分。
传统的交通灯控制器通常是基于微控制器或单片机设计的,但随着技术的发展,基于现场可编程门阵列(Field-Programmable Gate Array,FPGA)的交通灯控制器越来越受到关注。
本文将介绍基于FPGA的交通灯控制器的设计。
FPGA是一种可编程逻辑器件,具有高度灵活性和可重配置性。
与传统的微控制器相比,FPGA能够并行处理多个任务,提供更高的性能和更低的延迟。
在交通灯控制器的设计中,这种并行处理的能力可以显著提高交通信号的响应速度和效率。
首先,我们需要确定交通流量检测的方式。
常用的交通流量检测方法有传感器检测、视频图像处理和无线通信等。
在基于FPGA的交通灯控制器设计中,我们可以选择使用传感器检测的方法。
传感器可以通过检测来往车辆的存在与否来确定交通流量,然后将这些数据传输到FPGA中进行处理。
其次,我们需要设计合适的交通灯控制算法。
传统的交通灯控制算法主要基于定时控制,但这种方法无法根据实际交通流量进行动态调整。
在基于FPGA的交通灯控制器设计中,我们可以采用基于车辆检测数据的自适应控制算法。
该算法可以根据交通流量的变化情况灵活地调整交通信号的周期和相位,以实现最优的交通流控制。
接下来,我们需要将交通灯控制算法实现在FPGA上。
使用HDL (Hardware Description Language)编程语言,如Verilog和VHDL,可以将交通灯控制算法描述为硬件逻辑电路。
然后,通过使用FPGA的开发工具,将HDL代码编译成可在FPGA上运行的位流文件。
通过将交通灯控制算法实现在FPGA上,可以实现高速的并行处理和低延迟的响应。
最后,我们需要连接FPGA与交通灯控制设备。
FPGA可以通过GPIO (General Purpose Input/Output)接口与其他设备进行通信。
通过将FPGA的输出信号与交通灯控制设备的输入信号连接,可以实现对交通灯的控制。
Verilog实验报告交通灯
Verilog实验报告---第四次交通灯班级:集电0802班:鹏学号:04086057序号:16一、规(1)具有开关功能:当reset=0时红绿灯关闭,使主支干道六个灯全灭;(2)具有四个功能:当reset=1且func=2’b00时,主干道和支路正常计数;且func=2’b01时,支干道一直绿灯,主干道一直红灯;且func=2’b10时,主干道一直绿灯,支干道一直红灯;且func=2’b11时,主干道和支干道一直黄灯闪;(3)计数器频率:运行频率2Hz计数器;(4)信号灯种类:红、黄、绿;(5)信号灯计执行时间关系:主干道:绿灯常亮+绿灯闪+黄灯=支干道:红灯常亮;此设计中:主干道:绿灯常亮=57s,T绿灯闪=3s,T黄灯亮=3s支干道:绿灯常亮=15s,T绿灯闪=3s,T黄灯亮=3s(6)信号灯到计时功能:信号灯预置后,开始执行2Hz计数器;(7)信号灯跳转功能:当各信号灯计时至T时在下一个时钟信号上升沿到来时自动转为下一状态;(8)信号灯各状态跳转关系:绿-黄-红-绿;二、输入输出定义reset,clk, func[1:0] ,green[1:0],red[1:0],yellow[1:0]信号名宽度输入/输出管脚描述reset 1 input L13 红绿灯总开关clk 1 input C9 freq:50MHz func 2 input N17/H18 控制红绿灯功能green[1] 1 output D11 主绿green[0] 1 output E11 支绿red[1] 1 output F11 主红red[0] 1 output F12 支红yellow[1] 1 output C11 主黄yellow[0] 1 output E12 支黄三、模块设计状态转移图:四、测试代码module frequency_divider_small(reset,clk,out); //重写一个小分频模块测试交通灯主模块功能input reset,clk;output out;reg [1:0] temp;reg out;always (posedge clk or negedge reset)if (!reset)temp<=2'b00;elsetemp<=(temp==2'b11)?2'b00:temp+2'b01;always (temp)out=(temp==2'b11);endmodulemodule test_traffic_light;reg reset,clk;reg [1:0] func;wire [1:0] green;wire [1:0] red;wire [1:0] yellow;traffic_lightsimulation(.reset(reset),.clk(clk),.func(func),.green(green),.red(red),.yellow(yellow));always #10 clk=~clk;initialbeginreset=0;clk=1;func=2'b00;#20 reset=1;#21000 func=2'b01;#10000 func=2'b10;#10000 func=2'b11;endendmodule波形:五、源代码module frequency_divider(reset,clk,out);//分频模块,把50MHz时钟分成半秒计时器input reset,clk;output out;reg [5:0] mol1,mol2;reg [6:0] mol3,mol4;reg out1,out2,out3,out;always (posedge clk or negedge reset)//把25000000分成40*40*125*125if(!reset)mol1<=6'd0;elsemol1<=(mol1==6'd39)?6'd0:mol1+6'd1;always (posedge clk or negedge reset)if(!reset)mol2<=6'd0;else if(out1)mol2<=(mol2==6'd39)?6'd0:mol2+6'd1;always (posedge clk or negedge reset)if(!reset)mol3<=7'd0;else if(out2)mol3<=(mol3==7'd124)?7'd0:mol3+7'd1;always (posedge clk or negedge reset)if(!reset)mol4<=7'd0;else if(out3)mol4<=(mol4==7'd124)?7'd0:mol4+7'd1;always (mol1 or mol2 or mol3 or mol4)beginout1=(mol1==6'd39);out2=((mol2==6'd39)&&out1);out3=((mol3==7'd124)&&out2);out=((mol4==7'd124)&&out3);endendmodulemodule traffic_light(reset,clk,func,green,red,yellow);//交通灯主模块input reset,clk;input [1:0] func;output [1:0] green,red,yellow;reg [1:0] green,red,yellow;reg [2:0] state;reg [6:0]t;wire in;parameter greentime1=6'd57;//主干道绿灯时间parameter greentime0=6'd27;//支干道绿灯时间parameter yellowtime=3'd3;//黄灯时间,绿灯闪时间frequency_divider fenpin(.reset(reset),.clk(clk),.out(in));//调用分频模块always (posedge clk or negedge reset)if(!reset)begint<=7'd0;state<=3'd1;green<=2'b00;red<=2'b00;yellow<=2'b00;endelseif(in)//分频器结果当主模块始能if(func==2'b00)//选择不同功能控制开关if(cnt==7'd0)case(state)//选择不同状态3'd1:begint<=greentime1<<1;state<=3'd2;green<=2'b10;red<=2'b01;yellow<=2'b00;end3'd2:begint<=yellowtime<<1;state<=3'd3;end3'd3:begint<=yellowtime<<1;state<=3'd4;green<=2'b00;red<=2'b01;yellow<=2'b10;end3'd4:begint<=greentime1<<1;state<=3'd5;green<=2'b01;red<=2'b10;yellow<=2'b00;endt<=yellowtime<<1;state<=3'd6;end3'd6:begint<=yellowtime<<1;state<=3'd1;green<=2'b00;red<=2'b10;yellow<=2'b01;endendcaseelsebegint<=cnt-7'd1;//倒计数,计数结束进入下一状态case(state)3'd3:green[1]<=cnt[0];//主干道绿灯闪3'd6:green[0]<=cnt[0];//支干道绿灯闪endcaseendelse if(func==2'b10)//主干道常绿,支干道常红begint<=0;state<=3'd1;green<=2'b10;red<=2'b01;yellow<=2'b00;endelse if(func==2'b01)//主干道常红,支干道常绿begint<=0;state<=3'd1;green<=2'b01;red<=2'b10;yellow<=2'b00;endelse if(func==2'b11)//主干道,支干道黄灯一直闪begint<=0;state<=3'd1;green<=2'b00;yellow[1]<=~yellow[1];yellow[0]<=~yellow[1];endendmodule。
基于verlilog hdl的交通信号灯电路设计
基于Verilog HDL的交通信号灯电路设计1. 引言交通信号灯是城市道路交通管理中不可或缺的一部分,它通过不同颜色的灯光来指示车辆和行人何时停止和通行。
本文将介绍基于Verilog HDL的交通信号灯电路设计。
2. 设计目标本次设计的目标是实现一个简单的交通信号灯电路,包括红、黄、绿三种状态。
具体要求如下:•红灯亮时,其他两个灯应熄灭。
•黄灯亮时,其他两个灯应熄灭。
•绿灯亮时,其他两个灯应熄灭。
•红、黄、绿三个状态按照固定时间间隔循环切换。
3. 电路设计3.1 总体结构本次设计采用有限状态机(FSM)来实现交通信号灯电路。
有限状态机是一种数学模型,可以描述系统在不同状态之间的转移和输出。
我们将使用Verilog HDL来描述并实现这个有限状态机。
3.2 状态定义根据设计目标,我们可以定义三种状态:红、黄、绿。
我们可以用二进制数来表示这三种状态,比如红色为00,黄色为01,绿色为10。
我们可以使用两个输出信号来表示当前状态:red和green。
3.3 状态转移根据设计目标,交通信号灯应该按照固定时间间隔循环切换状态。
我们可以使用一个计数器来实现这个功能。
当计数器的值达到一定阈值时,状态应该切换到下一个状态。
具体的状态转移如下:•当前状态为红色时(00),计数器的值递增。
–当计数器的值达到阈值时,切换到黄色状态(01),并重置计数器。
•当前状态为黄色时(01),计数器的值递增。
–当计数器的值达到阈值时,切换到绿色状态(10),并重置计数器。
•当前状态为绿色时(10),计数器的值递增。
–当计数器的值达到阈值时,切换到红色状态(00),并重置计数器。
3.4 Verilog HDL代码实现以下是基于Verilog HDL实现交通信号灯电路的代码:module traffic_light(input wire clk,output reg red,output reg yellow,output reg green);reg [1:0] state;reg [3:0] counter;parameter THRESHOLD = 4'b1010; // 阈值always @(posedge clk) begincase(state)2'b00: begin// 红灯状态if(counter == THRESHOLD) beginstate <= 2'b01; // 切换到黄灯状态counter <= 0;end else begincounter <= counter + 1;endend2'b01: begin// 黄灯状态if(counter == THRESHOLD) beginstate <= 2'b10; // 切换到绿灯状态counter <= 0;end else begincounter <= counter + 1;endend2'b10: begin// 绿灯状态if(counter == THRESHOLD) beginstate <= 2'b00; // 切换到红灯状态counter <= 0;end else begincounter <= counter + 1;endendendcaseendalways @(state) begincase(state)2'b00: begin// 红灯亮,其他两个灯熄灭red <= 1;yellow <= 0;green <= 0;end2'b01: begin// 黄灯亮,其他两个灯熄灭red <= 0;yellow <= 1;green <= 0;end2'b10: begin// 绿灯亮,其他两个灯熄灭red <= 0;yellow <= 0;green <= 1;endendcaseendendmodule4. 总结本文介绍了基于Verilog HDL的交通信号灯电路设计。
交通信号灯控制器代码及说明
课程设计报告课程名称: FPGA现代数字系统设计设计名称:交通信号灯控制器姓名: * * *学号: ********** 专业:通信指导教师:* * *起止日期: 2010.12.25 - 2011.1.9课程设计任务书设计名称:一、设计目的和意义通过应用Verilog语言在QuartusⅡ软件平台上设计交通信号灯控制器,并借助硬件来测试仿真效果。
通过课程设计,熟悉硬件编程语言的应用,特别是有限状态机的灵活使用,为以后进一步的学习实践打下良好的基础。
二、设计原理(1) 主、支干道用传感器检测车辆到来情况,实验电路用逻辑开关代替。
(2) 选择1HZ时钟脉冲作为系统时钟。
(3) 45s、25s、5s定时信号可用顺计时,也可用倒计时,计时起始信号由主控电路给出,每当计满所需时间,启、闭三色信号灯,并启动另一计时电路。
(4) 交通灯状态变化如表1及图1所示:表1:交通灯状态图图1:交通灯状态图(5) 交通灯设计输入信号4个:CLK(时钟),EN(使能),EMERGENCY(紧急),BCHECK(检测) ;输出信号4个:LAMPA(主干道信号灯),LAMPB(支干道信号灯),ACOUNT(主干道计数器),BCOUNT(支干道计数器)。
交通灯控制原理如图2所示。
图2:交通灯原理图三、详细设计步骤(1) 确定4个输入信号与4个输出信号,具体见图2;(2) 将50MHZ时钟分频为1MHZ;(3) 设计红黄绿3中信号灯切换的时间及顺序;(4) 设计支路检测状态下的信号灯切换;(5) 设计紧急(EMERGENCY)状态下信号灯的切换;(6) 程序使用3always块[1],详细代码如下:module traffic_control(CLK,EN,EMERGENCY,BCHECK,LAMPA,LAMPB,ACOUNT,BCOUNT);output[2:0] ACOUNT,BCOUNT;output[2:0] LAMPA,LAMPB;reg clk1;input CLK,EN,EMERGENCY,BCHECK;reg[2:0] numa,numb;reg tempa,tempb;reg[25:0]count;reg[2:0] counta,countb;reg[2:0] ared,ayellow,agreen,aleft,bred,byellow,bgreen,bleft;reg[2:0] LAMPA,LAMPB;/* 信号定义与说明:CLK:为同步时钟;EN:使能信号,为1 的话,则控制器开始工作;LAMPA:控制A 方向四盏灯的亮灭;其中,LAMPA0~LAMPA2,分别控制A 方向的绿灯、黄灯和红灯;LAMPB:控制B 方向四盏灯的亮灭;其中,LAMPB0 ~ LAMPB2,分别控制B 方向的绿灯、黄灯和红灯;ACOUNT:用于A 方向灯的时间显示,8 位BCOUNT:用于B 方向灯的时间显示,8 位*/always @(posedge CLK ) //将50MHZ时钟分频为1MHZbeginif(count==49999999)begincount<=0;clk1<=~clk1;endelsecount<=count+1;endassign ACOUNT=numa;assign BCOUNT=numb;always @(EN )if(!EN)beginared <=6;ayellow <=2;agreen <=4;bred <=6;byellow <=2;bgreen <=4;endalways @(posedge clk1)//该进程控制A 方向beginif(EMERGENCY) //EMERGENCY高电平有效,手动控制beginnuma<=0;LAMPA<=4;counta<=0;tempa<=0;endelse if(EN)beginif(!tempa)//亮灯begintempa<=1;case(counta)//控制亮灯的顺序0: begin numa<=agreen; LAMPA<=1; counta<=1; end1: begin numa<=ayellow; LAMPA<=2; counta<=2; end2: begin numa<=ared; LAMPA<=4; counta<=0; enddefault: LAMPA<=4;endcaseendelse //倒计时beginif(numa>2) numa<=numa-1;if(numa==2) begin numa<=1;tempa<=0;if ((BCHECK) &&(counta==2)) counta<=0;end/*if(numa>1)if(numa[3:0]==0)beginnuma[3:0]<=4'b1001;numa[7:4]<=numa[7:4]-1;endelse numa[3:0]<=numa[3:0]-1;if (numa==2)begin tempa=0;if ((!BCHECK )&& (counta==1)) counta<=0;end*/endendelsebeginLAMPA<=3'b100;counta<=0; tempa<=0;endendalways @(posedge clk1)//该进程控制B 方向的四种灯beginif(EMERGENCY) //EMERGENCY高电平有效,手动控制beginnumb<=0;LAMPB<=4;countb<=0;tempb<=0;endelse if (EN)beginif(!tempb)begintempb<=1;case (countb)0: begin numb<=bred; LAMPB<=4; countb<=1; end1: begin numb<=bgreen; LAMPB<=1; countb<=2; end2: begin numb<=byellow; LAMPB<=2; countb<=0; enddefault: LAMPB<=4;endcaseendelsebeginif(numb>2) numb<=numb-1;if(numb==2) begin numb<=1;tempb<=0;if ((BCHECK )&& (countb==1)) countb<=0;end/*if(numb>1)if(!numb[3:0])beginnumb[3:0]<=9;numb[7:4]<=numb[7:4]-1;endelse numb[3:0]<=numb[3:0]-1;if(numb==2)begin tempb=0;if ((!BCHECK) && (countb==1)) countb<=0;end*/endendelsebeginLAMPB<=3'b100;tempb<=0; countb<=0;endendendmodulemodule四、结果分析程序仿真效果如图3和图4所示:为观察方便,将红黄绿灯显示时间分别缩短,图中[4]表示红灯亮,[2]表示黄灯亮,[1]表示绿灯亮,BCHECK信号代表支干道检测状况,低电平表示检测到有车辆正常通过,EMERGENCY代表紧急状态信号,低电平表示紧急信号无效。
基于Verilog HDL语言的带左转复杂交通灯设计
Mirc mp trA piain o. 2 N . ,06 coo ue p l t sV 12 , o 4 2 0 c o
文 章 编 号 :0 7 5 X(0 6 0 -O 3 一 O 1 0 —7 7 2 0 )4 O 7 3
开 发 应 用
在语言 中。
・
路径和设计 的时序检查 。
・
可 以 用 三 种 不 同方 式 或 混 和 方 式 对 设 计 建 模 这 些 方 式
包 括 : 为 描 述 方 式 —— 使 用 过 程 化 结 构 建 模 ; 据 流 方 式 行 数
— —
使 用 连 续 赋 值 语 句 方 式 建 模 ; 构 化 方 式 —— 使 用 门和 结 能 够 描 述 层 次 设 计 , 使 用 模 块 实 例 结 构 描 述 任 何 层 可
・
设计 能够在 多个层 次相加 以描述 , 开关级 , 级 , 从 门 寄 能 够 监 控 拟 验 证 的执 行 , 模 拟 验 证 执 行 过 程 这 设 计 即
级 器传 送 级 ( TL 到算 法 级 , 括 进 程 和 队 列 级 。 R ) 包
・
成 开 发 环 境 进 行 综 合 、 真 , 下 载 到 C L 可 编 程 逻 辑 器 件 仿 并 PD
次。
・
用 户 定 义 原语 ( P) 建 的 灵 活 性 。用 户 定 义 的 原 语 UD 创
既 可 以是 组 合 逻 辑 原 语 , 可 以 是 时 序 逻 辑 原 语 。 也
・
开 关 级 基 本 结 构 模 型 , 如 p s n s 也 被 内置 例 mo 和 mo 等
提供 显示 语 言 结 构 制 定 设 计 中 的 端 口到 端 口的 时 延 及
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告班级:微电2班组员:刘家豪门珺学号:11180102目录一、概述 (4)二、任务功能 (5)三.系统设计 (5)1.工作原理 (5)2.系统设计方案 (6)四、程序设计 (7)1.verilog源程序 (7)2.设备选择 (11)3引脚绑定 (12)五、结束语 (13)一:概述HDL(Hardware Description Language,硬件描述语言)是一种描述硬件所做工作的语言。
目前,电子系统向集成化、大规模和高速度等方向发展,以硬件描述语言和逻辑综合为基础的自顶向下的电路设计方法在业界得到迅猛发展,HDL在这种形势下显示出了巨大的优势,展望将来HDL在硬件设计领域的地位将与C和C++在软件设计领域地位一样,在大规模数字系统的设计中,它将逐步取代传统的逻辑状态表和逻辑电路图等硬件描述方法而成为主要的硬件描述工具。
Verilog HDL是工业和学术界的硬件设计者所使用的两种主要的HDL之一,另一种是VHDL。
现在它们都已成为IEEE标准。
两者各有特点,但Verilog HDL 拥有更悠久的历史、更广泛的设计群体,资源也远比VHDL丰富,且非常容易学习掌握。
Quartus简介: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)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
二、任务功能交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。
在现代化的大城市中,十字交叉路口越来越多,在每个交叉路口都需要使用红绿灯进行交通指挥和管理,红、黄、绿灯的转换要有一个准确的时间间隔和转换顺序,这就需要有一个安全、自动的系统对红、黄、绿灯的转换进行管理,本系统就是基于此目的而开发的。
基本要求:1. 模拟一个交通灯系统2.正常的时候东西路口分别计时30秒和45秒的绿灯时间3.需要用七段数码管来显示剩余的时间三、系统设计1.工作原理:城市十字交叉路口红绿灯控制系统主要负责控制主干道走向和从干道走向的红绿灯的状态和转换顺序,关键是各个状态之间的转换和进行适当的时间延时,正是基于以上考虑,采用如下设计:S0:当主干道走向的绿灯亮时,从干道走向的红灯亮,并保持30sS1:当主干道走向的黄灯亮时,从干道走向的黄灯亮,并保持5sS2:当主干道走向的红灯亮时,从干道走向的绿灯亮,并保持20sS3:当主干道走向的黄灯亮时,从干道走向的黄灯亮,并保持5s在S3结束后又回到(1)状态,并周期重复进行。
状态图如下:30秒5秒5秒20秒2.系统设计方案:根据设计要求和系统所具有功能,并参考相关的文献资料经行方案设计画出如下所示的十字路口交通灯控制器系统框图,及为设计的总体方案,框图如下图所示:四、程序设计1.verilog源程序:module diplay (seg,wh,disdata,diswh);output [7:0] seg;output [3:0] wh;input [3:0] disdata;input [1:0] diswh;segdecoder u1 (.outdata(seg),.indata(disdata));decoder2_4 u2 (.sel(wh),.dat(diswh));Endmodulemodule dvi1hz(clkout,clk,rst);//in:50MHz,out:1Hzinput clk,rst;output clkout;reg [24:0] cnt;reg clkout;always@(posedge clk or negedge rst)beginif(rst==1'b0) begincnt<=25'd0;clkout<=1'b0;endelse if(cnt==25'd2*******) begincnt<=25'd0;clkout<=~clkout;endelsecnt<=cnt+1'b1;endendmodulemodule cnt4(dclk,outdata,rst);input dclk,rst;output [1:0] outdata;reg [1:0] outdata;always@(posedge dclk or negedge rst)beginif(rst==1'b0)outdata<=2'b00;//else if(outdata==1'b11)// outdata<=4'b0000;elseoutdata<=outdata+1'b1;endendmodulemodule dvi200hz(clkout,clk,rst);//in:50MHz,out:100Hzinput clk,rst;output clkout;reg [18:0] cnt;reg clkout;always@(posedge clk or negedge rst)beginif(rst==1'b0) begincnt<=19'd0;clkout<=1'b0;endelse if(cnt==19'd124999) begincnt<=19'd0;clkout<=~clkout;endelsecnt<=cnt+1'b1;endendmodulemodule shuzi (bin,state,acount,bcount);output [3:0] bin;input [1:0] state;input [7:0] acount,bcount;reg [3:0] bin;wire [3:0]gewei,shiwei,baiwei,qianwei;assign qianwei=acount/10%10;assign baiwei =acount%10;assign shiwei =bcount/10%10;assign gewei =bcount%10;always@(state)case(state)2'b00 : bin<=qianwei;2'b01 : bin<=baiwei;2'b10 : bin<=shiwei;2'b11 : bin<=gewei;default bin<=4'd0;endcaseendmoduleclk: 同步时钟;en: 使能信号,高电平有效,则控制器开始工作;pointa: 控制A 方向四盏灯的亮灭;其中,pointa0~pointa3,分别控制A 方向的左拐灯、绿灯、黄灯和红灯;pointb: 控制B 方向四盏灯的亮灭;其中,pointb0 ~ pointb3,分别控制B 方向的左拐灯、绿灯、黄灯和红灯;acount:用于A 方向灯的时间显示,8 位,可驱动两个数码管;bcount:用于B 方向灯的时间显示,8 位,可驱动两个数码管。
*/module traffic(rst,clk,en,pointa,pointb,acount,bcount);output [6:0] acount,bcount;output [3:0] pointa,pointb;input rst,clk,en;reg [6:0] numa,numb;reg tempa,tempb;reg [2:0] counta,countb;reg [6:0] ared,ayellow,agreen,aleft,bred,byellow,bgreen,bleft;reg [3:0] pointa,pointb;always @(en)if(!en)begin //设置各种灯的计数器的预置数ared <=7'd55; //55 秒ayellow <=7'd5; //5 秒agreen <=7'd45; //45 秒aleft <=7'd15; //15 秒bred <=7'd70; //70 秒byellow <=7'd5; //5 秒bleft <=7'd15; //15 秒bgreen <=7'd30; //30 秒endassign acount=numa;assign bcount=numb;always @(posedge clk) //该进程控制A方向的四种灯beginif(en)beginif(rst==1'b0)numa<=7'd0;if(!tempa)begintempa<=1;case(counta) //控制亮灯的顺序0: begin numa<=agreen; pointa<=2; counta<=1; end1: begin numa<=ayellow; pointa<=4; counta<=2; end2: begin numa<=aleft; pointa<=1; counta<=3; end3: begin numa<=ayellow; pointa<=4; counta<=4; end4: begin numa<=ared; pointa<=8; counta<=0; enddefault: pointa<=8;endcaseendelse begin //倒计时if(numa>1)if(numa[3:0]==4'd0) beginnuma[3:0]<=4'b1111;numa[6:4]<=numa[6:4]-1;endelse numa[3:0]<=numa[3:0]-1;if (numa==2) tempa<=0;endendelse beginpointa<=4'b1000;counta<=0; tempa<=0;endendalways @(posedge clk) //该进程控制B方向的四种灯beginif (en)beginif(!tempb)begintempb<=1;case (countb) //控制亮灯的顺序0: begin numb<=bred; pointb<=8; countb<=1; end1: begin numb<=bgreen; pointb<=2; countb<=2; end2: begin numb<=byellow; pointb<=4; countb<=3; end3: begin numb<=bleft; pointb<=1; countb<=4; end4: begin numb<=byellow; pointb<=4; countb<=0; enddefault: pointb<=8;endcaseendelse begin //倒计时if(numb>1'b1)if(!numb[3:0]) beginnumb[3:0]<=4'b1111;numb[6:4]<=numb[6:4]-1'b1;endelse numb[3:0]<=numb[3:0]-1'b1;if(numb==2'd2) tempb<=0;endendelse beginpointb<=4'b1000;tempb<=0; countb<=0;endendendmodule2.设备选择:3.引脚绑定六、结束语这次课程设计让我学到了很多,不仅是巩固了先前学的verilog的理论知识,而且也培养了我的动手能力,更加熟悉了Quartus的使用和EDA的设计流程,更令我的创造性思维得到拓展。