eda课程设计交通灯带左拐_第1页
eda课程设计交通灯带左拐_第2页
eda课程设计交通灯带左拐_第3页
eda课程设计交通灯带左拐_第4页
eda课程设计交通灯带左拐_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、目 录1 设计任务和要求21.1 设计任务21.2 交通灯控制器的基本要求22 工作原理及方案设计32.1 交通灯控制器的设计原理32.2交通灯控制器的基本方案33 系统设计43.1 计数器的设计43.2 控制器的设计43.3 分位器的设计53.4 交通灯控制器的顶层原理54 参考程序64.1 计数器的程序64.2 控制器的程序74.3 分位电路程序114.4. 七段译码电路的程序125系统调试与性能分析135.1 交通灯计数器波形图135.2控制器的波形图135.3 分位的波形图145.4 七段译码电路的波形图14 1 设计任务和要求1.1 设计任务 用FPGA实现一个智能交通灯系统,根据设

2、计要求分析智能交通灯系统的基本原理,设计系统框图,设计完成后给出FPGA占用资源分析。1.2 交通灯控制器的基本要求(1)道路足够宽,有双向六通道。车辆直行不允许车辆左拐,允许右拐。须另设左拐时间。针对上述通行规则,车辆控制灯有直行()、左拐()和右拐()三个绿色指示灯、黄灯以及一个红色指示灯。红色指示灯亮,代表禁止车辆通行、一个方向灯亮的顺序为绿灯、黄灯、左拐灯、红灯,前三种灯亮时间等于另一侧的红灯亮时间。(2)车辆正常通行时间为40秒,黄灯为5秒,左拐为10秒,由各方向设置的倒计时显示器显示时间,向司机提剩余时间。当一个方向车流量加大时,自动调节。(3)行人过马路需提出申请,且只在车辆直行

3、时才能响应行人的请求,行人在申请得到响应后方可穿越,穿越时间为60秒。(4)交通警察有权随时指定系统停在某个状态,确保某个方向的车辆流通。2 工作原理及方案设计2.1 交通灯控制器的设计原理交通灯控制器的核心范围是一个计数范围为059共(60秒)的计数器和一个根据计数值做出规定反映的控制器。另外,还需要输入CLK时钟信号。最后,要驱动七段数码管,显然还需要一个译码电路。 图2.1交通灯控制器原理图2.2 交通灯控制器的基本方案交通灯控制器的核心范围是一个计数范围为059共(60秒)的计数器和一个根据计数值做出规定反映的控制器。另外,作者所用的实验仪配备的晶振为50MHZ,因此还需要一个分频电路

4、。最后,要驱动七段数码管,显然还需要一个译码电路。 计数器 控制器红,黄,绿发光二极管分位译码电路七段数码管倒计时数字及“闪烁控制信号”HoldResetClk1Hz图2.2 交通灯控制器系统框图3 系统设计3.1 计数器的设计这里需要的计数器的计数范围为059。计到59后,下一个时钟沿恢复到0,开始下一轮计数。此外,当检测到特殊情况(hold=1)发生时,计数器暂停计数,而系统恢复信号则使计数器异步清0。3.2 控制器的设计控制器的作用是根据计数器控制发光二极管的亮、灭,以及输出倒计时数值给七段数译管的分位译码电路。此外,当检测到特殊情况时,无条件点亮红色的发光二极管。由于控制器要对于数值进

5、行判断,很容易想到用IF语句来实现。本设计采用利用时钟沿的下降沿读取前级计数器的计数植,然后做出反应。控制器数码显示器YRGGNARGY111NBNclknbnaGE图3.2控制器符号框图3.3 分位器的设计因为控制器输出的倒计时数值可能是1位或2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数。(如25分为2和 5,7分为0和7)与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路。控制器中,引入了寄存器。为了让读者开拓眼界,分位电路就用组合逻辑电路实现。3.4 交通灯控制器的顶层原理交通灯控制器的核心范围是一个计数范围为059共

6、(60秒)的计数器和一个根据计数值做出规定反映的控制器。另外,还需要输入CLK时钟信号。最后,要驱动七段数码管,显然还需要一个译码电路来完成交通灯控制器的设计。图3.4交通灯控制器的顶层原理图4 参考程序4.1 计数器的程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt120 isport(clk,rst,hold :in std_logic; cq :out std_logic_vector(6 downto 0);end cnt120;architecture behav

7、 of cnt120 isbeginprocess(clk,rst,hold)variable cqi:std_logic_vector(6 downto 0);beginif rst='1' then cqi:=(others=>'0');elsif clk'event and clk='1' thenif hold='1' then cqi:=cqi+0; 当出现紧急情况时,计数器暂停计数 else if cqi<119 then cqi:=cqi+1;else cqi:=(others=>'

8、0'); end if; end if;end if;cq<=cqi;end process;end behav; 4.2 控制器的程序library ieee;use ieee.std_logic_1164.all;entity controller isport(clock:in std_logic; countnum:in integer range 0 to 119; numa,numb:out integer range 0 to 59; reda,greena,yellowa,lefta,reda1,greena1,yellowa1,lefta1:out std_lo

9、gic; redb,greenb,yellowb,leftb,redb1,greenb1,yellowb1,leftb1:out std_logic);end;architecture behavior of controller isbegin process(clock) beginif falling_edge (clock) then if countnum<=39 then numa<=40-countnum; reda<='0' greena<='1' yellowa<='0' lefta<=

10、9;0' reda1<='0' greena1<='1' yellowa1<='0' lefta1<='0' elsif (countnum<=44) then numa<=45-countnum; reda<='0' greena<='0' yellowa<='1' lefta<='0' reda1<='0' greena1<='0' yellowa1&l

11、t;='1' lefta1<='0' elsif (countnum<=59) then numa<=59-countnum; reda<='0' greena<='0' yellowa<='0' lefta<='1' reda1<='0' greena1<='0' yellowa1<='0' lefta1<='1' else numa<=119-countnum;

12、 reda<='1' greena<='0' yellowa<='0' lefta<='0' reda1<='1' greena1<='0' yellowa1<='0' lefta1<='0' end if;if countnum<=59 then numb<=59-countnum; redb<='1' greenb<='0' yellowb<='0

13、' leftb<='0' redb1<='1' greenb1<='0' yellowb1<='0' leftb1<='0'elsif countnum<=99 then numb<=100-countnum; redb<='0' greenb<='1' yellowb<='0' leftb<='0' redb1<='0' greenb1<='

14、1' yellowb1<='0' leftb1<='0'elsif countnum<=104 then numb<=105-countnum; redb<='0' greenb<='0' yellowb<='1' leftb<='0' redb1<='0' greenb1<='0' yellowb1<='1' leftb1<='0'else numb<

15、;=119-countnum; redb<='0' greenb<='0' yellowb<='0' leftb<='1' redb1<='0' greenb1<='0' yellowb1<='0' leftb1<='1' end if;end if;end process;end;4.3 分位电路程序library ieee;use ieee.std_logic_1164.all;entity fenwei ispor

16、t(numin:in integer range 0 to 60; numa:out integer range 0 to 9;numb:out integer range 0 to 9);end;architecture behavior of fenwei isbegin process(numin) begin if numin>=50 then numa<=5; numb<=numin-50; elsif numin>=40 then numa<=4; numb<=numin-40; elsif numin>=30 then numa<=

17、3; numb<=numin-30; elsif numin>=20 then numa<=2; numb<=numin-20; elsif numin>=10 then numa<=1; numb<=numin-10; else numa<=0; numb<=numin; end if; end process;end;4.4 七段译码电路的程序library ieee; use ieee.std_logic_1164.all; entity ymq is port(ain:in std_logic_vector(3 downto 0);

18、 yout: out std_logic_vector(6 downto 0); end; architecture one of ymq is begin process(ain) begin case ain is when "0000"=> yout<="0111111" when "0001"=> yout<="0000110" when "0010"=> yout<="1011011" when "0011"=> yout<="1001111" when "0100"

温馨提示

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

评论

0/150

提交评论