基于VHDL的交通控制灯设计_第1页
基于VHDL的交通控制灯设计_第2页
基于VHDL的交通控制灯设计_第3页
基于VHDL的交通控制灯设计_第4页
基于VHDL的交通控制灯设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

福建农林大学计算机与信息学院信息工程类实验报告课程名称:VHDL数字系统设计姓 名: 系:电子信息工程专 业:电子信息工程年 级:2008级学 号:指导教师:职 称:2011 年 6 月 18 日实验项目列表序号实验项目名称成绩指导教师1基于VHDL的交通控制灯设计蔡剑卿福建农林大学计算机与信息学院信息工程类实验报告实验 基于VHDL的交通控制灯设计1实验目的和要求模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED作为交通信号灯,设计一个交通信号灯控制器。基本要求:(a)信号灯分别由红、黄、绿三种颜色组成,运行时,绿灯亮40秒钟,然后闪5秒,绿灯灭,黄灯亮2秒,黄灯灭,红灯亮,同时另一方向的绿灯亮,红灯亮的时间为47秒 。扩展要求:(b)增加显示功能,即每个灯亮时显示相应的秒数并倒计时。(c)增加左转功能,即信号灯由红灯、黄灯和两个绿灯组成,左转时间为15秒,红灯亮的时间调整为62秒。2实验原理或方案1.总体方案的设计:交通灯控制电路主要由以下几部分构成,如图2.1所示,有电源电路,脉冲电路,分频电路,倒计时电路,(交通灯)状态控制电路,灯显示电路。倒计时电路显示器控制电路分频电路脉冲电路状态控制电路路灯显示电路电源供电图2.1 交通灯控制电路功能模块框图在某一十字路口交叉地带,可设置东西走向的道路为主道,南北走向的道路为次道,主次车道的交通灯需按交通法则交替运行。2. 总体设计电路图交通控制灯系统总体电路图3主要仪器设备1、 装有Altera公司Max+plus仿真软件的计算机一台。2、 选择FPGA器件:Cyclone中的EP1C12Q240C8。3、 EDA-VI实验箱一台。4、 实现数据下载的数据线,导线。5、 开关以及LED灯。6、 四位八段数码显示管。4操作方法与实验步骤Max+plus开发工具是美国Altera公司自行设计的一种软件工具,其使用方法如下:(1)建立和编写一个VHDL语言的工程文件首先启动Max+plus系统,启动后系统进入主菜单画面。(a)打开文本编辑器;用鼠标点击File/New选项,接着屏幕会出现New的对话框。在对话框内有4种编辑方式:图形编辑、符号编辑、文本编辑和波形编辑。VHDL文件属于文本,那么应该选择文本编辑方式,点击OK按钮,屏幕上将出现一个无名的编辑窗口,则系统进入文本编辑状态。(b)在编辑窗口中进行编辑输入,输入相应的描述语句。(c)存盘。(a 我们编辑的VHDL文件扩展名为vhd;b 保存的文件名必须和所定义的实体名相同。c 文件存盘的目录不应是根目录或桌面,建议存放在Max2work或Maxplus2目录,或其子目录。)(2) VHDL程序的编译(a)若文件没有打开,需首先打开要编译的VHDL文件;(b)将目前的文件设置成工程文件;点击File/Project/Set Project to Current File。(c)打开编译器;点击主菜单MAX+plus/Compiler选项。(d)编译开始前还应确定源程序的版本。点击主菜单中的Interfaces/VHDL Netlist Reader Settings选项,就可在屏幕上显示VHDL Netlist Reader Settings(网表阅读器设置)对话框,有VHDL 1987或VHDL 1993版本可供我们选择。(e)开始编译;点击编译对话框中的Start按钮,编译即开始。在编译过程中如果编译器发现源程序语法有错就会自动弹出错误信息窗进行提示。这时需回到文本编辑器,修改VHDL程序中的错误,然后再继续编译直到全部正确为止。(3) VHDL程序的功能仿真仿真是为了验证我们所编写的VHDL程序的功能是否正确。首先生成仿真波形文件(a)打开波形编辑器;点击主菜单的MAX+plus/Waveform Editor选项,就可在屏幕上显示波形编辑器窗口。(b)确定仿真持续时间(File/End Time)。(c)选进输入输出端口名;(d)编辑输入信号波形;通过波形编辑器左侧的信号设置工具栏可以进行输入信号的波形编辑。对于输出信号波形,其最终值由仿真结果确定,我们可以把它设置为缺省值,例如设置为不定值或高阻值。(d)信号波形编辑完成后,需存盘为仿真使用,文件名采取默认方式即可。打开仿真器;点击主菜单MAX+plusSimulator项,此时弹出Simulator对话框。点击对话框的Start按钮,仿真即开始。在仿真结束后打开仿真波形文件(点击右下角的Open SCF按钮)即可以显示仿真结果。(4) 芯片的时序分析仿真结果从波形上来看,很难给出定量的信号延迟关系,这一点时序分析却能直观地用表来进行显示。(a)选择要下载的器件型号;(b)需要再编译一次。(c)打开时序仿真器;点击Timing Analyzer选项,即可显示Timing Analyzer对话框。在对话框弹出时,表中是空白的。(d)最后点击Start按钮后,时序分析器开始启动。时序分析结束后弹出一个结束提示框,点击确定按钮即可返回时序分析器。此时,表中将显示有关输入到输出的传输延迟数据。(5) 设定芯片脚位方式一:打开芯片脚位设置器;点击主菜单MAX+plus/Floorplan Editor,出现Floorplan Editor对话框;a若此时在Unassigned Nodes列表框中看不到输入输出口名称,点击主菜单的Layout选项,再点击其子菜单Current Assignment Floorplan,将会出现输入输出口名称。b 若窗口下面芯片视图为Lab View,需转变为Device View(器件视图),通过点击主菜单选项Layout/device view实现,则会看到管脚的排列情况。将实体定义的端口名字和下载芯片的管脚进行具体对应;将Unassigned Nodes列表框中的输入输出口名称用鼠标分别拖至芯片的相应脚位,则芯片的脚位设置完成。被设置的芯片脚位会以不同于黑白的颜色显示出来。最后再进行一次编译。注意芯片脚位设定后,必须重新编译才能下载。这时系统将产生可以向EPF10K10下载的文件and2.Sof。方式二:打开芯片脚位设置窗口;点击主菜单Assign/ Pin/Location/Chip,出现脚位设置对话框;将实体定义的端口名字和下载芯片的管脚进行具体对应;在Node Name框中输入我们定义的实体端口名字,然后在Pin列表选项框中输入下载芯片的管脚序号,再点击对话框右下角的Add按钮,将所有端口设置完成以后,点击Ok按钮,则实现实体端口和下载芯片的管脚的对应;最后再进行一次编译。注意芯片脚位设定后,必须重新编译才能下载。这时系统将产生可以向EPF10K10下载的文件and2.Sof。5实验内容及实验数据记录 模块一 :分频器分频器实现的是将高频时钟信号转换成低频时钟信号,clk信号经分频器将50MHz分为250Hz和1Hz提供给计数器、控制器和扫描显示电路所需的时钟计时脉冲。分频器模块(div) VHDL源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div isport(clk3:IN std_logic; clkout1,clkout2:OUT std_logic); end div;architecture one of div isbeginprocess(clk3)variable cnt:integer range 0 to 25000000;variable tmp:std_logic;begin if(clk3event and clk3=1)then if cnt=24999999 then cnt:=0; tmp:=not tmp;else cnt:=cnt+1;end if;end if;clkout1=99999 then cnt:=0; tmp:=not tmp;else cnt:=cnt+1;end if;end if;clkout2124 THEN S:=1; else S:=S+1; IF 0S AND S41 THEN 40s内 G1=0; 主道绿灯亮 Y1=1; R1=1; L1=1; G2=1; Y2=1; R2=0; 次道红灯亮 L2=1;ELSIF s=41 THEN 主道绿灯闪烁的第一秒 G1=1; Y1=1; R1=1; L1=1; G2=1; Y2=1; R2=0; L2=1;ELSIF s=42 THEN G1=0; Y1=1; R1=1; L1=1; G2=1; Y2=1; R2=0; L2=1;ELSIF s=43 THEN G1=1; Y1=1; R1=1; L1=1; G2=1; Y2=1; R2=0; L2=1;ELSIF s=44 THEN G1=0; Y1=1; R1=1; L1=1; G2=1; Y2=1; R2=0; L2=1;ELSIF s=45 THEN 主道绿灯闪烁最后一秒 G1=1; Y1=1; R1=1; L1=1; G2=1; Y2=1; R2=0; L2=1; ELSIF 45S AND s61 THEN G1=1; Y1=1; R1=1; L1=0; 主道左转灯亮 G2=1; Y2=1; R2=0; L2=1; ELSIF 60S AND s63 THEN G1=1; Y1=0; 主道黄灯亮 R1=1; L1=1; G2=1; Y2=1; R2=0; L2=1;ELSIF 62s AND s103 THEN G1=1; Y1=1; R1=0; 主道红灯亮 L1=1; G2=0; 次道绿灯亮 Y2=1; R2=1; L2=1; ELSIF S=103 THEN 次道绿灯闪烁第一秒 G1=1; Y1=1; R1=0; 主道红灯亮 L1=1; G2=1; Y2=1; R2=1; L2=1;ELSIF S=104 THEN G1=1; Y1=1; R1=0; L1=1; G2=0; Y2=1; R2=1; L2=1;ELSIF S=105 THEN G1=1; Y1=1; R1=0; L1=1; G2=1; Y2=1; R2=1; L2=1;ELSIF S=106 THEN G1=1; Y1=1; R1=0; L1=1; G2=0; Y2=1; R2=1; L2=1;ELSIF S=107 THEN 次道绿灯闪烁最后一秒 G1=1; Y1=1; R1=0; L1=1; G2=1; Y2=1; R2=1; L2=1;ELSIF 107s and s123 THEN G1=1; Y1=1; R1=0; L1=1; G2=1; Y2=1; R2=1; L2=0;ELSIF 122s and s125 THEN G1=1; Y1=1; R1=0; L1=1; G2=1; Y2=0; R2=1; L2=1; END IF; END IF;END IF; END PROCESS;END; 模块三: 显示控制电路输入与计数器相连,输出与扫描显示电路相连。VHDL源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY XSKZ IS PORT(EN45A,EN45B,EN02A,EN02B,EN15A,EN15B:IN STD_LOGIC; AIN45A,AIN45B:IN STD_LOGIC_VECTOR(7 DOWNTO 0); AIN15A,AIN15B:IN STD_LOGIC_VECTOR(7 DOWNTO 0); AIN02 :IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUTM,DOUTB:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY XSKZ;ARCHITECTURE ART OF XSKZ IS BEGIN PROCESS(EN45A,EN45B,EN02A,EN02B,EN15A,EN15B,AIN45A,AIN45B,AIN15A,AIN15B,AIN02)IS BEGIN IF EN45A=0 THEN DOUTM=AIN45A(7 DOWNTO 0);DOUTB=AIN45B(7 DOWNTO 0); ELSIF EN45B=0 THEN DOUTM=AIN45B(7 DOWNTO 0);DOUTB=AIN45A(7 DOWNTO 0);ELSIF EN02A=0 THEN DOUTM=AIN02(7 DOWNTO 0);DOUTB=AIN02(7 DOWNTO 0); ELSIF EN02B=0 THEN DOUTM=AIN02(7 DOWNTO 0);DOUTB=AIN02(7 DOWNTO 0);ELSIF EN15A=0THEN DOUTM=AIN15A(7 DOWNTO 0);DOUTB=AIN15B(7 DOWNTO 0);ELSIF EN15B=0THEN DOUTM=AIN15B(7 DOWNTO 0);DOUTB=AIN15A(7 DOWNTO 0); END IF; END PROCESS;END ARCHITECTURE ART;模块四: 扫描显示电路扫描显示电路可以根据控制信号,驱动数码管的显示。扫描显示模块(SELTIME) VHDL源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY SELTIME ISPORT(CLK2:STD_LOGIC; DOUT1,DOUT2,DOUT3,DOUT4:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DAOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END;ARCHITECTURE FUN OF SELTIME ISSIGNAL count: STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINSEL=100)THENCOUNT=000;ELSECOUNTDAOUTDAOUTDAOUTDAOUTDAOUT=0000;END CASE;END PROCESS;END FUN;模块五: 45s计数器该模块的功能是实现绿灯在45s内的倒计时,通过分频器分出来的时钟源clk进行计数。45s模块(CNT45S)VHDL源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNT45s is port(clk,EN45A,EN45B:in std_logic; DOUT45M,DOUT45B:out std_logic_vector(7 downto 0);end entity CNT45s;architecture art of CNT45s issignal CNT6B:std_logic_vector(5 downto 0);beginprocess(clk,EN45A,EN45B)is begin if(clkevent and clk=1)then if EN45A=0OR EN45B=0 then CNT6B=CNT6B+1; ELSECNT6BDOUT45M=01000101;DOUT45BDOUT45M=01000100;DOUT45BDOUT45M=01000011;DOUT45BDOUT45M=01000010;DOUT45BDOUT45M=01000001;DOUT45BDOUT45M=01000000;DOUT45BDOUT45M=00111001;DOUT45BDOUT45M=00111000;DOUT45BDOUT45M=00110111;DOUT45BDOUT45M=00110110;DOUT45BDOUT45M=00000100;DOUT45BDOUT45M=00000011;DOUT45BDOUT45M=00000010;DOUT45BDOUT45M=00000001;DOUT45BDOUT45M=00000000;DOUT45B=00000000;END CASE;END PROCESS;END ARCHITECTURE ART;模块六:15s计数器主要控制左转灯L1、L2的倒计时功能,控制他们的15s倒计时。15s模块(CNT15S)VHDL源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNT15s is port(clk,EN15A,EN15B:in std_logic; DOUT15M,DOUT15B:out std_logic_vector(7 downto 0);end entity CNT15s;architecture art of CNT15s issignal CNT6B:std_logic_vector(3 downto 0);beginprocess(clk,EN15A,EN15B)is begin if(clkevent and clk=1)then if EN15A=0OR EN15B=0 then CNT6B=CNT6B+1; ELSECNT6BDOUT15M=00010110;DOUT15BDOUT15M=00010101;DOUT15BDOUT15M=00010100;DOUT15BDOUT15M=00010011;DOUT15BDOUT15M=00010010;DOUT15BDOUT15M=00010001;DOUT15BDOUT15M=00010000;DOUT15BDOUT15M=00001001;DOUT15BDOUT15M=00001000;DOUT15BDOUT15M=00000111;DOUT15BDOUT15M=00000110;DOUT15BDOUT15M=00000101;DOUT15BDOUT15M=00000100;DOUT15BDOUT15M=00000011;DOUT15BDOUT15M=00000010;DOUT15BDOUT15M=00000001;DOUT15BDOUT15M=00000000;DOUT15B=00000000;END CASE;END PROCESS;END ARCHITECTURE ART;模块七:2s计数器 控制黄灯Y1、Y2的2s倒计时功能2s模块(CNT2S)VHDL源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNT02s is port(clk,EN02A,EN02B:in std_logic; DOUT02M:out std_logic_vector(7 downto 0);end entity CNT02s;architecture art of CNT02s issignal CNT2B:std_logic_vector(1 downto 0);beginprocess(clk,EN02A,EN02B)is begin if(clkevent and clk=1)then if EN02A=0OR EN02B=0 then CNT2B=CNT2B+1; ELSECNT2BDOUT02MDOUT02MDOUT02M=00000000;END CASE;END PROCESS;END ARCHITECTURE ART;模块八:译码器(decode3_8)3-8译码器模块VHDL源程序:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY decode3_8 IS PORT(SEL:IN std_logic_vector(2 downto 0); Q:OUT std_logic_vector(7 downto 0);END decode3_8;ARCHITECTURE a OF decode3_8 ISBEGIN Q=11111110when sel=0 else 11111101when sel=1 else 11111011when sel=2 else 11110111when sel=3 else 11111111;END a;模块九:数码显示器(deled)数码显示模块VHDL源程序:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY deled IS PORT(num:IN std_logic_vector(3 downto 0); A:OUT std_logic; B:OUT std_logic; C:OUT std_logic; D:OUT std_logic; E:OUT std_logic; F:OUT std_logic; G:OUT std_logic; DP:OUT std_logic);END deled;ARCHITECTURE fun OF deled ISsignal led:std_logic_vector(6 downto 0);BEGINA=led(6);B=led(5);C=led(4);D=led(3);E=led(2);F=led(1);G=led(0);DP=0; LED=1111110WHEN NUM=0000EL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论