EDA交通信号灯控制电路设计_第1页
EDA交通信号灯控制电路设计_第2页
EDA交通信号灯控制电路设计_第3页
EDA交通信号灯控制电路设计_第4页
EDA交通信号灯控制电路设计_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、 北华航天工业学院EDA技术综合设计课程设计报告报 告 题 目 : 交通信号灯控制电路设计 作者所在系部: 电子工程系 作者所在专业: 通信工程 作者所在班级: B10231 作 者 姓 名 : 指导教师姓名: 陈刚、褚越强 完 成 时 间 : 2012.11.29 内 容 摘 要EDA技术是现代电子信息工程领域的一门新技术,它是在先进的计算机平台上开发出来的一整套电子系统设计的软硬件工具,并提供了先进电子系统设计方法。当今的技术,开发人员完全可以通过自己的电子系统设计来制定芯片内部的电路功能,使之成为设计者自己的专用集成电路芯片。这种技术中常用软件有maxplusII和quartusII,而

2、程序的编辑是用VHDL语言实现逻辑功能的。本实验试验系统中可用可编程逻辑器件为FPGA,本实验的交通信号灯的设计:首先在quartusII软件当中编辑程序,编译完成之后仿真,当仿真结果正确时下载到试验箱的系统中。最终的目的要在实验板上用红路灯表示出来,并且同时要用数码管显示出人们的等待时间,交通灯的状态变化和显示时间同步 关键词: EDA、VHDL、交通灯、控制电路目 录一、 设计任务5二、 设计结构51、 clk时钟秒脉冲发生电路或分频器 62、 六十进制计数器63、 次态发生器 64、 状态寄存器及等待时间输出 65、 时间显示电路66、 时钟扫描电路6三、 原理图6四、 程序7五、 心得

3、体会 10课程设计任务书课题名称交通信号灯的控制电路设计完成时间12/11/29指导教师陈刚职称教授学生姓名班 级B10231总体设计要求和技术要点设计一个交通信号灯控制电路。要求:1、主干道和支干道交替放行,主干道每次放行30秒,支干道每次放行20秒; 2、每次绿灯变红灯时,黄灯先亮5秒钟,此时原红灯不变;3、用十进制数字(递增计数)显示放行和等待时间。技术要点:1、主(支)干道红灯时间等于支(主)干道红绿黄灯时间之和;2、用时钟数据扫描通过视觉暂留来数码管显示等待时间;3、状态寄存器和状态寄存器的结合灵活运用;4、计数时间值要译成七段译码值。工作内容及时间进度安排工作内容:在软件上编辑、编

4、译程序,并仿真到达实验要求。进度安排;周一到周四编写程序,并要求程序能通过编译仿真;周四下午在实验板上下载调试程序;周五周六验收。课程设计成果1与设计内容对应的软件程序2课程设计报告书3成果使用说明书4设计工作量要求交通信号控制器的VHDL的设计一、设计任务模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED作为交通信号灯,用数码管显示等待时间。设计一个交通信号灯控制器。能达到的要求:(1) 交通灯从绿变红时,有5秒黄灯亮的间隔时间;(2) 交通灯红变绿是直接进行的,没有间隔时间;(3) 主干道上的绿灯时间为30秒,支干道的绿灯时间为20秒;(4) 在任意时间,显示等待时间。

5、支干道 主干道 图1 路口交通管理示意图S0S1S2S3主干道交通灯绿(30秒)黄(5秒)红(20秒)红(5秒)支干道交通灯红红绿黄表1 交通信号灯的4种状态 二、设计结构学习EDA开发软件和QuartusII的使用方法,熟悉可编程逻辑器件的使用。通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。设计说明(1)第一模块:clk时钟秒脉冲发生电路 在红绿灯交通信号系统中,大多数情况是通过自动控制的方式指挥交通的。因此 为了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作。 模块说明: 系统输入信号: Clk: 由外接信号发生器提供15

6、3的时钟信号;系统输出信号: CLK:产生每秒一个脉冲的信号;(2)第二模块:计数秒数选择电路计数电路最主要的功能就是记数负责显示倒数的计数值,对下一个模块提供状态转换 信号。 模块说明: 系统输入: CLK: 接收由clk电路的提供的1hz的时钟脉冲信号;系统输出信号: tm: 产生显示电路状态转换信号 tl:倒计数值 秒数个位变化控制信号 th:倒计数值 秒数十位变化控制信号(3)第三模块:红绿灯状态转换电路 本电路负责红绿灯的转换。模块说明:系统输入信号: CLK: 接收由clk电路的提供的1hz的时钟脉冲信号; tm: 接收计数秒数选择电路状态转换信号;系统输出信号: da_out:

7、负责红绿灯的状态显示。 (4)第四模块:时间显示电路本电路负责红绿灯的计数时间的显示。 模块说明:系统输入信号: tl:倒计数值 秒数个位变化控制信号; th:倒计数值 秒数十位变化控制信号;系统输出信号: led7s1: 负责红绿灯的显示秒数个位。 led7s2: 负责红绿灯的显示秒数十位。三 、原理图信号灯输出分频计计数器时间显示状态寄存器 七段段码数码管片选次态发生器时钟扫描四、实验程序library ieee;use ieee. std_logic_1164.all; use ieee. std_logic_unsigned.all;entity traffic is port (cl

8、k_in:in std_logic; selout:out std_logic_vector(6 downto 0); -定义数码管的七段显示 sel:out std_logic_vector(1 downto 0); -数码管个位十位选择段 da_out:out std_logic_vector(5 downto 0);-定义主次干道的红绿灯(主红黄绿支红黄绿) end traffic;architecture one of traffic is type dm is (s0,s1,s2,s3);-自定义状态四种 signal current_state,next_state:dm;-当前状

9、态与次态均在四种状态之间变化 signal clk:std_logic;-一秒时钟信号 signal count:std_logic_vector(1 downto 0);-个十位选择端(sel) signal led7s1: std_logic_vector(6 downto 0);-十位数码管控制端 signal led7s2: std_logic_vector(6 downto 0);-个位数码管控制端 signal time0 : std_logic_vector (6 downto 0);-递增计数 signal tm : std_logic_vector (6 downto 0);

10、-剩余时间 倒计时 signal tl: std_logic_vector (6 downto 0);-个位数码管显示情况控制 signal th: std_logic_vector (1 downto 0);-十位数码管显示情况控制 begin sel<=count;fen:process(clk_in) variable cnt: std_logic_vector (16 downto 0);begin if clk_in' event and clk_in='1' then-产生153hz分频,上升沿有效产生clk if cnt = "100110

11、00100101101" then cnt:="00000000000000000" clk<='1' else cnt:= cnt+1; clk <= '0' end if; end if;end process fen;a:process(clk_in,count) -不断扫描出现count的00和01的选择 begin if clk_in'event and clk_in='1' then if count="01"then count<="00"

12、; else count<=count+1; end if; end if; case count is when"00"=>selout<=led7s2; when"01"=>selout<=led7s1; when others=>null; end case;end process a;process (clk) begin if clk'event and clk='1'then -60秒的循环设计 if time0= "0111100" then time0 <

13、;="0000001" else time0<=time0+1; end if; end if;end process;reg:process( clk,current_state) -定义当前状态与次态的关系 begin -产生上升沿时次态把自己的状态赋予当前状态 if clk='1' and clk'event then current_state<=next_state; end if;end process reg;com:process(current_state, time0) begin case current_state

14、 is when s0=>da_out<="001100"tm<=30-time0; -主绿和支红状态,当计时到29 if time0=29 then next_state<=s1; -秒时将s1状态赋给次态,此时 else next_state<=s0; -当前状态还是s0,等到下一个 end if; -上升沿后次态将s1赋给当前状 when s1=>da_out<="010100"tm<=35-time0; -态 if time0=34 then next_state<=s2; else next

15、_state<=s1; end if; when s2=>da_out<="100001"tm<=55-time0; if time0=54 then next_state<=s3; else next_state<=s2; end if; when s3=>da_out<="100010"tm<=60-time0; if time0=59 then next_state<=s0; else next_state<=s3; end if; end case;end process com;

16、process (tm) begin if tm>=30 THEN th<="11"tl<="0000000" elsif tm>=20 THEN th<="10"tl<=tm-20; elsif tm>=10 THEN th<="01"tl<=tm-10; else th<="00"tl<=tm; end if;end process;process(th,tl) begin case th is when"00&qu

17、ot;=>led7s1<="1111110" when"01"=>led7s1<="0110000" when"10"=>led7s1<="1101101" when"11"=>led7s1<="1111001" when others=>null; end case; case tl is when "0000000"=>led7s2<="1111110&qu

18、ot; when"0000001"=>led7s2<= "0110000" when "0000010"=>led7s2<="1101101" when"0000011"=>led7s2<= "1111001" when"0000100"=>led7s2<= "0110011" when "0000101"=>led7s2<="1011011&qu

19、ot; when "0000110"=>led7s2<="1011111" when"0000111"=>led7s2<= "1110000" when "0001000"=>led7s2<="1111111" when "0001001"=>led7s2<="1111011" when others=>null; end case;end process;end one;LIBRA

20、RY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY traffic IS PORT (CLK:in std_logic; led7s:out std_logic_vector(6 downto 0); sel:out std_logic_vector(1 downto 0); comb_out:out std_logic_vector(5 downto 0); END traffic;ARCHITECTURE one OF traffic ISTYPE dm IS (s0,s1,s2,s3); S

21、Ignal current_state,next_state:dm; SIGNAL FULL : STD_LOGIC; Signal count: std_logic_vector(1 downto 0); Signal led7s1: std_logic_vector(6 downto 0); Signal led7s2: std_logic_vector(6 downto 0); SIGNAL tl :STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL th:STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL tm :STD_LOGIC_VECT

22、OR(6 DOWNTO 0); SIGNAL time1 :STD_LOGIC_VECTOR(6 DOWNTO 0);BEGINSel<=count; P_REG: PROCESS(CLK) VARIABLE CNT8:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLK'EVENT AND CLK='1' THEN IF CNT8 = "11111111" THEN CNT8:="00000000" FULL<='1' ELSE CNT8 := CNT8+1; FULL

23、 <= '0' END IF; END IF; END PROCESS P_REG;A:process(CLK,count)BeginIf CLK'event and CLK='1'thenIf count="01" thenCount<="00"Else count<=count+1;End if;End if;Case count isWhen"00"=>led7s<=led7s2;When"01"=>led7s<=led7s1;

24、When others=>null;End case;End process A;PROCESS(full)BEGINIF full'EVENT AND full='1' THEN IF time1="0111100" THEN time1<="0000001" ELSe time1 <=time1+1; END IF;END IF;END PROCESS; REG:process( full,current_state) BEGIN IF full='1' AND full'EVENT

25、THEN current_state<=next_state; END IF; END process REG; COM:process(current_state, time1) begincase current_state iswhen s0=>comb_out<="001100"tm<=30-time1; if time1=29 then next_state<=s1; else next_state<=s0; end if;when s1=>comb_out<="010100"tm<=35-

26、time1;if time1=34 then next_state<=s2; else next_state<=s1; end if;when s2=>comb_out<="100001"tm<=55-time1; if time1=54 then next_state<=s3; else next_state<=s2; end if;when s3=>comb_out<="100010"tm<=60-time1;if time1=59 then next_state<=s0; else

27、next_state<=s3; end if; end case;end process COM;PROCESS(tm)BEGIN IF tm>=30 THEN th<="11"tl<=tm-30;ELSIF tm>=20 THEN th<="10"tl<=tm-20;ELSIF tm>=10 THEN th<="01"tl<=tm-10;ELSE th<="00"tl<=tm;END IF;END PROCESS;process(th,tl) begincase th is when"00"=>led7s1<="1111110" when"01"=>led7s1<="0110000" when"10"=>led7s1<="1101101&quo

温馨提示

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

评论

0/150

提交评论