欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    基于VHDL语言的交通灯设计DEA.doc

    • 资源ID:17526525       资源大小:151.50KB        全文页数:16页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于VHDL语言的交通灯设计DEA.doc

    【精品文档】如有侵权,请联系网站删除,仅供学习与交流基于VHDL语言的交通灯设计DEA.精品文档.交通信号控制器的VHDL的设计1. 设计任务 模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED作为交通信号灯,设计一个交通信号灯控制器,示意图如图1-1所示。要求:(1) 交通灯从绿变红时,有4秒黄灯亮的间隔时间;(2) 交通灯红变绿是直接进行的,没有间隔时间;(3) 主干道上的绿灯时间为40秒,支干道的绿灯时间为20秒;(4) 在任意时间,显示每个状态到该状态结束所需的时间。 支干道 主干道 图1-1 路口交通管理示意图表1-1 交通信号灯的4种状态ABCD主干道交通灯绿(40秒)黄(4秒)红(20秒)红(4秒)支干道交通灯红红绿黄2.设计要求 采用VHDL语言编写程序,并在QuartusII工具平台中进行开发,下载到EDA实验箱进行验证。 编写设计报告,要求包括方案选择、程序清单、调试过程、测试结果及心得体会。3.设计方案状态寄存器秒脉冲信号发生器计数器CLK 时间显示数据输出次态发生器信号灯输出信号 信号灯输出 图3-1 交通信号灯控制器程序原理框图进程将CLK信号分频后产生1秒信号,然后构成两个带有预置数功能的十进制计数器,并产生允许十位计数器计数的控制信号。状态寄存器实现状态转换和产生状态转换的控制信号,下个模块产生次态信号和信号灯输出信号,以及每一个状态的时间值。经过五个模块的处理,使时间计数、红绿灯显示能够正常运行。程序原理图如图3-1所示。 4.各模块具体设计4.1顶层文件的设计 顶层文件的原理图可以依据系统的框图进行,由控制模块JTD_CTRL、计时模块JTD_TIME、译码驱动模块JTD_LIGHT、显示模块JTD_DIS和分频模块JTD_FQU五部分组成,其顶层原理图文件如图3-1所示。图4-1交通灯顶层文件原理图顶层模块的程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TRAFFIC ISPORT( CLK1K,CLR:IN STD_LOGIC; M:IN STD_LOGIC_VECTOR(2 DOWNTO 0); LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); ABL:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)END TRAFFIC;ARCHITECTURE BEHAVE OF TRAFFIC ISCOMPONENT JTD_FQU IS -分频器元件的例化PORT( CLK1K:IN STD_LOGIC; CLK:OUT STD_LOGICEND COMPONENT;COMPONENT JTD_DIS IS -数码显示的元件例化PORT( CLK1K,CLK,CLR:IN STD_LOGIC; M:IN STD_LOGIC_VECTOR(2 DOWNTO 0); AT,BT:IN STD_LOGIC_VECTOR(7 DOWNTO 0); LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)END COMPONENT;COMPONENT JTD_LIGHT IS -译码驱动的元件例化PORT( CLR:IN STD_LOGIC; M,S:IN STD_LOGIC_VECTOR(2 DOWNTO 0); ABL:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)END COMPONENT;COMPONENT JTD_TIME IS -计时元件的例化PORT( CLK,CLR:IN STD_LOGIC; M,S:IN STD_LOGIC_VECTOR(2 DOWNTO 0); AT,BT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)END COMPONENT;COMPONENT JTD_CTRL IS -控制模块的元件例化PORT( CLK,CLR:IN STD_LOGIC; AT,BT:IN STD_LOGIC_VECTOR(7 DOWNTO 0); M:IN STD_LOGIC_VECTOR(2 DOWNTO 0); S:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)END COMPONENT;SIGNAL CLK:STD_LOGIC;SIGNAL AT:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL BT:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL S:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN U1:JTD_FQU PORT MAP( -名字关联方式赋值 CLK1K=>CLK1K, CLK=>CLKU2:JTD_TIME PORT MAP( CLR=>CLR, AT=>AT, BT=>BT, CLK=>CLK, M=>M, S=>SU3:JTD_CTRL PORT MAP( M=>M, S=>S, CLK=>CLK, CLR=>CLR, AT=>AT, BT=>BTU4:JTD_DIS PORT MAP( CLK1K=>CLK1K, CLK=>CLK, CLR=>CLR, AT=>AT, BT=>BT, LED=>LED, SEL=>SEL, M=>MU5:JTD_LIGHT PORT MAP( CLR=>CLR, S=>S, ABL=>ABL, M=>MEND BEHAVE;4.2 控制模块JTD_CTRL的设计 控制的模块根据外部输入信号M2M0和计时模块JTD_TIME的输入信号,产生系统的状态机,控制其他部分协调工作。控制模块的源文件程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JTD_CTRL ISPORT( CLK,CLR:IN STD_LOGIC; M:IN STD_LOGIC_VECTOR(2 DOWNTO 0); -用M来表示系统的8种工作状态 AT,BT:IN STD_LOGIC_VECTOR(7 DOWNTO 0); S:OUT STD_LOGIC_VECTOR(2 DOWNTO 0) END JTD_CTRL; ARCHITECTURE JTD_1 OF JTD_CTRL IS SIGNAL Q:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN PROCESS(CLR,CLK,M,AT,BT) BEGIN IF CLR='1'THEN Q<="000" -清'0'处理 ELSIF(CLK'EVENT AND CLK='1')THEN -时钟上升沿信号一来,M控制系统的8种状态 IF M="000"THEN Q<="001" END IF; IF M="001"THEN Q<="011" END IF; IF M="010"THEN Q<="101" END IF; IF M="011"THEN Q<="111" END IF; IF M>="100"THEN IF(AT=X"01")OR(BT=X"01")THEN Q<=Q+1; ELSE Q<=Q; END IF; END IF; END IF; END PROCESS; S<=Q; -M的控制端转向控制口S END JTD_1;该模块的时序仿真和功能仿真波形图如图4-2图4-2功能仿真4.3 计时模块JTD_TIME的设计计时模块用来设定A和B两个方向计时器的初值,并为显示模块JTD_DIS提供倒计时时间。当正常计时开始后,需要进行定时计数操作,由于东西和南北两个方向上的时间显示器是由两个LED七段显示数码管组成的,因此需要产生两个2位的计时信息:2个十位信号,2个个位信号,这个定时计数操作可以由一个定时计数器来完成,又因为交通灯的状态变化是在计时为0的情况下才能进行的,因此需要一个计时电路来产生使能信号,因此定时计数的功能就是用来产生2个2位计时信息和使能信号。计时模块的源文件程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JTD_TIME ISPORT( CLK,CLR:IN STD_LOGIC; M,S:IN STD_LOGIC_VECTOR(2 DOWNTO 0); AT,BT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)END JTD_TIME;ARCHITECTURE JTD_2 OF JTD_TIME IS SIGNAL AT1,BT1:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL ART,AGT,ALT,ABYT:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL BRT,BGT,BLT:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN ART<=X"55" -ART<=“01010101”A方向红灯亮 AGT<=X"40" -AGT<=“01000000”A方向绿灯亮 ALT<=X"15" -ALT<=“00010101”灯间歇闪烁 ABYT<=X"05"-ABYT<=“00000101”AB两方向黄灯亮 BRT<=X"65"-BRT<=“01100101”B方向红灯亮 BGT<=X"30"-BGT<=“00110000”B方向绿灯亮 BLT<=X"15"-BLT<=“00010101”B方向灯闪烁 PROCESS(CLR,CLK,M,S) BEGIN IF CLR='1'THEN AT1<=X"01"BT1<=X"01" ELSIF (CLK'EVENT AND CLK='1')THEN IF M="000"THEN AT1<=X"01"BT1<=X"51"-M=0时,A方向的计时器计时,B方向的红灯亮 END IF; IF M="001"THEN AT1<=X"01"BT1<=X"06"-M=1时,A方向的计时器计时,B方向绿灯亮 END IF; IF M="010"THEN AT1<=X"41"BT1<=X"01"-B方向的计时器计时,A方向的黄灯亮 END IF; IF M="011"THEN AT1<=X"06"BT1<=X"01"-B方向的计时器计时,A方向的红灯亮 END IF; IF M>="100"THEN IF(AT1=X"01")OR(BT1=X"01")THEN CASE S IS WHEN"000"=>AT1<=ALT;BT1<=BRT;-当S=0时,AB两方向的计时器计时,A方向车左转,B方向的红灯亮 WHEN"001"=>AT1<=ABYT;-当S=1时,A方向计时器计时,A方向黄灯亮 WHEN"010"=>AT1<=AGT;-当S=2时,A方向计时器计时,A方向绿灯亮 WHEN"011"=>AT1<=ABYT;-当S=3时,AB两方向黄灯亮,A方向计时器计时 WHEN"100"=>AT1<=ART;BT1<=BLT;-当S=4时,A方向计时,红灯亮,B方向车左转,B方向计时器计时 WHEN"101"=>BT1<=ABYT;-当S=5时,B方向计时器计时,AB两方向黄灯亮 WHEN"110"=>BT1<=BGT;-当S=6时,B方向计时器计时,B方向绿灯亮 WHEN"111"=>BT1<=ABYT;-当S=7时,B方向计时器计时,AB两方向车右转 WHEN OTHERS=>AT1<=AT1;BT1<=BT1; END CASE; END IF; IF AT1/=X"01"THEN IF AT1(3 DOWNTO 0)="0000"THEN AT1(3 DOWNTO 0)<="1001"-第四位数码管显示 AT1(7 DOWNTO 4)<=AT1(7 DOWNTO 4)-1;高四位数码管减一显示 ELSE AT1(3 DOWNTO 0)<=AT1(3 DOWNTO 0)-1;低四位数码管减一显示 AT1(7 DOWNTO 4)<=AT1(7 DOWNTO 4);高四位数码管显示不变 END IF; END IF; IF BT1=X"01"THEN IF BT1(3 DOWNTO 0)="0000"THEN BT1(3 DOWNTO 0)<="1001"-B方向计数器低四位数码管显示9 BT1(7 DOWNTO 4)<=BT1(7 DOWNTO 4)-1;-B方向计数器高四位数码管减一计数 ELSE BT1(3 DOWNTO 0)<=BT1(3 DOWNTO 0)-1;-B方向计数器低四位数码管减一计数 BT1(7 DOWNTO 4)<=BT1(7 DOWNTO 4); END IF; END IF; END IF; END IF;END PROCESS; AT<=AT1; BT<=BT1;END JTD_2; 该模块是为节省资源而设的,实验中有四个LED七段数码管显示计数,点亮一个LED需电流550mA,同时点亮4个LED,CPLD可能无法负荷这样的电流驱动,而且功率太大,散热也是问题。同时这么做也容易造成电路被烧毁,因此需要逐个循环点亮。又为使显示结果持续不致闪烁抖动,只需每个扫描频率超过人眼视觉暂留频率24Hz以上,就能达到。选择1kHz作为时钟,分到4个数码管,每个数码管50Hz(大于24Hz),故不会有闪烁。 该模块的功能仿真波形图如图4-4所示图4-4功能仿真4.4 译码驱动模块JTD_LIGHT的设计译码驱动模块根据控制信号,驱动交通灯的显示。该模块的源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JTD_LIGHT ISPORT( CLR:IN STD_LOGIC; M,S:IN STD_LOGIC_VECTOR(2 DOWNTO 0); ABL:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)END JTD_LIGHT;ARCHITECTURE JTD_3 OF JTD_LIGHT IS SIGNAL LT:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN PROCESS(CLR,S,M)BEGIN IF CLR='1'THEN LT<="00000000" -清'0'时系统状态全部处于关闭状态 ELSE IF M="000"THEN LT<="10000001" END IF; IF M="001"THEN LT<="00100001" END IF; IF M="010"THEN LT<="00011000" END IF; IF M="011"THEN LT<="00010010" END IF; IF M>="100"THEN CASE S IS -八种情况下的状况显示 WHEN"000"=>LT<="00010100" WHEN"001"=>LT<="10000001" WHEN"010"=>LT<="01000001" WHEN"011"=>LT<="00100001" WHEN"100"=>LT<="01000001" WHEN"101"=>LT<="00011000" WHEN"110"=>LT<="00010100" WHEN"111"=>LT<="00010010" WHEN OTHERS=>LT<=LT; END CASE; END IF; END IF; END PROCESS;ABL<=LT;END JTD_3;该模块的功能仿真波形图如图4-5:图4-5功能仿真4.5 显示模块JTD_DIS的设计 显示模块用来显示倒计时时间和系统的工作状态。其输出用来驱动六位数码管,其中四位用于显示倒计时时间,两位显示工作状态,采用动态扫描显示。该模块的源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JTD_DIS ISPORT( CLK1K,CLK,CLR:IN STD_LOGIC; M:IN STD_LOGIC_VECTOR(2 DOWNTO 0); AT,BT:IN STD_LOGIC_VECTOR(7 DOWNTO 0); LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)END JTD_DIS;ARCHITECTURE JTD_4 OF JTD_DIS IS SIGNAL OU,STL,STH,MM:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL DIS,DS:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL SL:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN MM<="0"&M; STH<=X"A" PROCESS(CLR,CLK1K) BEGIN IF CLR='1'THEN SL<="000" ELSIF(CLK1K'EVENT AND CLK1K='1')THEN IF SL="101"THEN SL<="000" -清'0' ELSE SL<=SL+1; -计数 END IF; END IF; END PROCESS; PROCESS(SL) BEGIN CASE SL IS -数码管的位选 WHEN"000"=>OU<=BT(3 DOWNTO 0); WHEN"001"=>OU<=BT(7 DOWNTO 4); WHEN"010"=>OU<=AT(3 DOWNTO 0); WHEN"011"=>OU<=BT(7 DOWNTO 4); WHEN"100"=>OU<=STL; WHEN"101"=>OU<=STH; WHEN OTHERS=>OU<=X"0" END CASE; END PROCESS; PROCESS(OU) BEGIN CASE OU IS -数码管的译码 WHEN X"0"=>DS<="00111111" -显示'0' WHEN X"1"=>DS<="00000110" -显示'1' WHEN X"2"=>DS<="01011011" -显示'2' WHEN X"3"=>DS<="01001111" -显示'3' WHEN X"4"=>DS<="01100110" -显示'4' WHEN X"5"=>DS<="01101101" -显示'5' WHEN X"6"=>DS<="01111100" -显示'6' WHEN X"7"=>DS<="00000111" -显示'7' WHEN X"8"=>DS<="01111111" -显示'8' WHEN X"9"=>DS<="01101111" -显示'9' WHEN OTHERS=>DS<="00000000" END CASE; END PROCESS;PROCESS(MM,CLK)BEGIN IF MM>=X"4"THEN STL<=X"5" -数码管产生进位 ELSE STL<=MM+1; END IF; IF CLR='1'THEN DIS<=X"00" ELSIF MM>=X"4"THEN DIS<=DS; ELSIF SL<="100"THEN IF CLK='0'THEN DIS<=DS; ELSIF DIS<=X"00"THEN END IF; ELSE DIS<=DS; END IF;END PROCESS;LED<=DIS(6 DOWNTO 0);SEL<=SL;END JTD_4;该模块的功能仿真波形图如图4-6所示图4-6功能仿真4.6 分频模块JTD_FQU的设计 本系统提供动态扫描需要的1kHz的脉冲,而系统时钟需要1Hz的脉冲。分频器主要为系统提供所需的时钟脉冲。该模块将1kHz的脉冲进行分频,产生1S的方波,作为系统时钟信号和特殊情况下的倒计时闪烁信号。其源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JTD_FQU ISPORT( CLK1K:IN STD_LOGIC; CLK:OUT STD_LOGICEND JTD_FQU;ARCHITECTURE JTD_5 OF JTD_FQU ISSIGNAL Q:STD_LOGIC_VECTOR(9 DOWNTO 0);BEGIN PROCESS(CLK1K)BEGINIF(CLK1K'EVENT AND CLK1K='1')THEN Q<=Q+1; -计数END IF;END PROCESS;CLK<=Q(9);END JTD_5;该模块的时序仿真图如图4-7所示

    注意事项

    本文(基于VHDL语言的交通灯设计DEA.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开