1、EDA实验综合设计报告EDA 实验综合设计报告十字路口交通信号控制系统设计姓名: 学号 指导老师: 年 月 日一、概述1、设计任务要求:(1)东西(用A表示)、南北(用B表示)方向均有绿灯、黄灯、红灯指示,持续时间A、B方向分别各用一个2位十进制数进行预置,预置时个位和十位数字均用4位BCD码表示。交通灯运行的切换示意图和时序图分别如图1和如图2 所示,其中aredtime、agreentime、bredtime、bgreentime、yellowtime分别以35s、40s、45s、30s、5s为例。 图2 交通控制系统时序图(2)系统设有时钟,以倒计时方式显示每一路允许通行的时间。(3)当
2、东西或南北两路中任一路出现特殊情况时,系统可由交警手动控制立即进入特殊运行状态,即红灯全亮,时钟停止计时,东西、南北两路所有车辆停止通行;当特殊运行状态结束后,系统恢复工作,继续正常运行。2、所用软件工具和硬件平台(1)软件: Quartus II 9.0Quartus II 是Altera公司的综合性PLD/FPGA开发软件,原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware 支持Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。(2)硬件平台:台湾友晶科技DE0 FPG
3、A开发板台湾友晶科技DE0 FPGA开发板是一套轻薄型的开发板,参考设计和相关配件一应俱全,简单上手,非常适合初学者用来学习FPGA逻辑设计与计算机架构。DE0 FPGA开发板搭载了 Altera Cyclone III系列的EP3C16 FPGA,可提供15408个逻辑单元(LE)以及346个用户I/O。此外,DE0开发板还搭配了丰富的外部资源,非常适合于EDA实验类教学课程,并足够开发较复杂的数字系统。二、实现原理本系统主要由分频器、时序控制器、状态转移控制器、倒计时计数器、路口红绿灯状态显示器、倒计时显示器等电路组成。分频器将晶体振送来的5MHz信号变为1Hz时钟信号;控制器控制系统的状
4、态转移和红、黄、绿灯的信号输入;倒计时显示电路实现A路40、5、35秒以及B路45、30、5秒倒计时和显示功能。整个系统的工作时序受控制器控制,它是系统的核心。三、实现方法1、本设计实现方案分析 整个系统的工作过程用状态机进行描述,其状态转移如图3所示,5种状态描述如下: s0=A方向绿灯亮,B方向红灯亮,此状态持续为agreentime(40s); s1=A方向黄灯亮,B方向红灯亮,此状态持续yellowtime(5s); s2=A方向红灯亮,B方向绿灯亮,此状态持续bgreentime(30s); s3:A方向红灯亮,B方向黄灯亮,此状态持续yellowtime(5s); s4:紧急制动状
5、态,A方向红灯亮,B方向红灯亮,当紧急制动信号有效时(hold=1)进入这种状态。 当紧急制动信号无效(hold=0)时,状态机按照s0s1s2s3s0循环;当紧急制动信号有效(hold=1)时,状态机立即转入s4两个方向红灯全亮;当紧急制动信号再次恢复无效(hold=0)时,状态机会回到初始状态s0继续执行。 状态机进入不同的状态,计数器从不同的初始值开始减法计数,当减到0时,切换到下一个状态。计数器的计数值通过七段译码器模块译码后显示。2、本设计实现转移图图3 交通控制系统状态转移图四、实现过程1、各模块具体实现(1)分频器devide.vhd文件library ieee;use ieee
6、.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity devide is generic( sys_clk_fre_value: integer:=50000000; div_clk_fre_value: integer:=1 ); port( i_sys_clk: in std_logic; clk: out std_logic ); end entity devide; architecture arcdiv of devide is signal r_div_coun
7、t: std_logic_vector(31 downto 0); signal r_div_clk:std_logic; begin process(i_sys_clk,r_div_count) beginif(i_sys_clkevent and i_sys_clk=1) then if(r_div_count=sys_clk_fre_value/div_clk_fre_value/2-1) then r_div_count = x00000000; r_div_clk = not r_div_clk; else r_div_count = r_div_count+1; end if; e
8、nd if; end process; clk = r_div_clk;end architecture arcdiv;(2)主要部分traffic_light.vhd文件library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity traffic_light isport( rst : in std_logic; clk : in std_logic; hold: in std_logic; ared,agreen,ayellow,bred,bgreen,byellow: out std_log
9、ic; aseg7_h,aseg7_l : out std_logic_vector(6 downto 0); bseg7_h,bseg7_l : out std_logic_vector(6 downto 0) );end traffic_light;architecture arc of traffic_light is constant aredtime_h : std_logic_vector(3 downto 0):=0011; constant aredtime_l : std_logic_vector(3 downto 0):=0101; -aredtime 35s consta
10、nt agreentime_h : std_logic_vector(3 downto 0):=0100; constant agreentime_l : std_logic_vector(3 downto 0):=0000; -agreentime 40s constant bredtime_h : std_logic_vector(3 downto 0):=0100; constant bredtime_l : std_logic_vector(3 downto 0):=0101; -bredtime 45s constant bgreentime_h : std_logic_vector
11、(3 downto 0):=0011; constant bgreentime_l : std_logic_vector(3 downto 0):=0000; -bgreentime 30s constant yellowtime_h : std_logic_vector(3 downto 0):=0000; constant yellowtime_l : std_logic_vector(3 downto 0):=0101; -yellowtime 5s signal acount_h,acount_l,bcount_h,bcount_l :std_logic_vector(3 downto
12、 0); type state_type is(s0,s1,s2,s3,s4); signal c_state,n_state : state_type;begin process begin wait until clkevent and clk=1; if rst=1 then c_state = s0; else c_state =n_state; end if; end process; -state change状态机的状态转移关系描述 process(hold,c_state,acount_h,acount_l,bcount_h,bcount_l) begin n_state if
13、 hold=1 then n_state =s4; elsif acount_h=0000 and acount_l=0000 then n_state if hold=1 then n_state =s4; elsif acount_h=0000 and acount_l=0000 then n_state if hold=1 then n_state =s4; elsif bcount_h=0000 and bcount_l=0000 then n_state if hold=1 then n_state =s4; elsif acount_h=0000 and acount_l=0000
14、 then n_state if hold=0 then n_state = s0; end if; end case; end process;-count 十进制倒计时计数器的描述 process begin wait until clkevent and clk=1; if c_state/=n_state or rst=1 then if n_state=s0 then acount_h = agreentime_h; acount_l = agreentime_l; bcount_h = bredtime_h; bcount_l = bredtime_l; elsif n_state
15、=s1 then acount_h = yellowtime_h; acount_l = yellowtime_l; bcount_h = bredtime_h; bcount_l = bredtime_l; elsif n_state=s2 then acount_h = aredtime_h; acount_l = aredtime_l; bcount_h = bgreentime_h; bcount_l = bgreentime_l; elsif n_state=s3 then acount_h = aredtime_h; acount_l = aredtime_l; bcount_h
16、= bgreentime_h; bcount_l = bgreentime_l; end if; else if acount_l=0000 then acount_l =1001; acount_h =acount_h-1; else acount_l=acount_l-1; end if; if bcount_l=0000 then bcount_l =1001; bcount_h =bcount_h-1; else bcount_l ared =0; agreen =1; ayellow=0; bred =1; bgreen =0; byellow ared =0; agreen =0;
17、 ayellow=1; bred =1; bgreen =0; byellow ared =1; agreen =0; ayellow=0; bred =0; bgreen =1; byellow ared =1; agreen =0; ayellow=0; bred =0; bgreen =0; byellow ared =1; agreen =0; ayellow=0; bred =1; bgreen =0; byellowaseg7_haseg7_haseg7_haseg7_haseg7_haseg7_haseg7_haseg7_haseg7_haseg7_haseg7_haseg7_h
18、aseg7_haseg7_haseg7_haseg7_hnull; end case; end process; process(acount_l) begin case acount_l is when 0000=aseg7_laseg7_laseg7_laseg7_laseg7_laseg7_laseg7_laseg7_laseg7_laseg7_laseg7_laseg7_laseg7_laseg7_laseg7_laseg7_lnull; end case; end process; process(bcount_h) begin case bcount_h is when 0000=
19、bseg7_hbseg7_hbseg7_hbseg7_hbseg7_hbseg7_hbseg7_hbseg7_hbseg7_hbseg7_hbseg7_hbseg7_hbseg7_hbseg7_hbseg7_hbseg7_hnull; end case; end process; process(bcount_l) begin case bcount_l is when 0000=bseg7_lbseg7_lbseg7_lbseg7_lbseg7_lbseg7_lbseg7_lbseg7_lbseg7_lbseg7_lbseg7_lbseg7_lbseg7_lbseg7_lbseg7_lbse
20、g7_lnull; end case; end process; end arc; 2、仿真波形(1)紧急制动 hold=1时,紧急制动,ared=bred=1。(2)重置 rst=1时,重置,从s0开始运行。(3)分频器验证分频器功能,改为二分频。波形为:、(4)整体运行波形五、实现结果达到预期效果,LED灯,倒计时计数器,rst、hold键工作正常。六、结论存在问题:倒计时计数的波形不正常;解决方法:发现计数器环节有小的编写错误,将“acount_h =acount_h+1;” “acount_h =acount_h+1;”两条语句中的“+”改成“-”,即“acount_h =acount
21、_h-1;”“acount_h =acount_h-1;”。收获: 第一次系统进行了数字系统设计,对Quartus II的使用有了自己的理解。虽然已有知识还是很有限,但因为有了一次完整的设计体验,我相信这对以后的帮助是无穷的。七、参考文献【1】孙万蓉、任爱锋等,数字电路与系统设计,高等教育出版社,2015年4月【2】任爱锋、袁晓光,数字电路与EDA实验,西安电子科技大学出版社,2017年3月五、实现结果达到部分预期效果,有些功能未实现。六、结论存在问题:倒计时计数的波形不正常;解决方法:发现计数器环节有小的编写错误,将“acount_h =acount_h+1;” “acount_h =aco
22、unt_h+1;”两条语句中的“+”改成“-”,即“acount_h =acount_h-1;”“acount_h =acount_h-1;”。收获: 第一次系统进行了数字系统设计,对Quartus II的使用有了自己的理解。虽然已有知识还是很有限,但因为有了一次完整的设计体验,我相信这对以后的帮助是无穷的。七、参考文献【1】孙万蓉、任爱锋等,数字电路与系统设计,高等教育出版社,2015年4月【2】任爱锋、袁晓光,数字电路与EDA实验,西安电子科技大学出版社,2017年3月附录devide.vhd文件和traffic_light.vhd文件已在正文中给出,下面给出顶层文件、原理图和管脚锁定。1、顶层文件project_traffic_light.vhd:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity project_traffic_light isport( i_sys_clk : in std_logic; rst : in std_logic; hold: in std_logic; ared,agreen,ayellow,bred,bgreen,byellow: out st
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1