《基于SOPC交通灯的EDA课程设计(18页).doc》由会员分享,可在线阅读,更多相关《基于SOPC交通灯的EDA课程设计(18页).doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-基于SOPC交通灯的EDA课程设计-第 18 页信息工程学院EDA课程设计报告书 题目: 十字路口交通灯的设计 专 业: 电子信息科学与技术 班 级: 学 号: 学生姓名: 指导教师: 2012年 5月12日 信息工程学院课程设计任务书学生姓名 学 号 成 绩设计题目十字路口交通灯的设计设计内容1.总体设计框图2.系统功能说明3.工作原理介绍4.引脚说明5.软件设计流程设计要求1.东西方向红灯亮时,南北方向绿灯亮2.东西方向红黄亮时,南北方向绿黄亮3.东西方向红绿亮时,南北方向红灯亮4.东西方向和南北方向的红灯亮的时间均为15s5.东西方向和南北方向的黄灯亮5s,且在最后3s时,两个方向的黄
2、灯每隔1s亮灭闪烁6.当紧急情况到来时,东西和南北方向的红灯全亮,数码管停止计时,紧急情况过后,系统恢复正常7.点阵上循环显示“交通灯”三个字,且每个字的显示时间为0.5s参考资料 2012年 5月12日学生姓名: 杨波 学号: 030940910 专业(班级):电子信息科学与技术课程设计题目: 十字路口交通灯的设计 成绩: 指导教师: 袁海林 2012年5月12日信息工程系课程设计成绩评定表摘要 随着社会经济的发展,城市交通问题越来越引起人们的关注。人、车、路三者的协调,已成为交通管理部门需要解决的重要问题之一,城市的交通控制系统是用于城市交通数据监测、交通信号控制与交通疏导的计算机综合管理
3、系统,它是现代城市交通监控指挥系统的重要组成部分。同时,生活水平的提高,汽车的普及化,给交通带来了更大的挑战,道路的负载加重,带来的是交通事故越来越多。所以,如何采用合适的方法,最大限度的利用好交通灯的控制,缓解城市道路交通堵塞问题,降低交通事故发生率,成为人们共同关注的话题。本设计采用FPGA技术,完成了一个简单实用的十字路口交通灯的控制系统。关键字: 控制 管理 缓解 目录1 主要技术指标和方案阐述61.1主要技术指标61.2 方案阐述61.3工作原理62 详细电路设计72.1 主控制器的设计72.2 紧急情况电路设计72.3 译码电路72.4 蜂鸣器模块82.5 东西方向模块82.5.1
4、 红黄绿灯控制模块92.5.2 计时模块92.6 南北方向模块92.6.1 红黄绿灯控制模块102.6.2 计时模块102.7 点阵模块102.8蜂鸣器模块122.9时钟模块123 引脚分配13总结15参考文献15附录:源程序清单161 主要技术指标和方案阐述1.1主要技术指标 1.东西方向红灯亮时,南北方向绿灯亮 2.东西方向红黄亮时,南北方向绿黄亮 3.东西方向红绿亮时,南北方向红灯亮 4.东西方向和南北方向的红灯亮的时间均为15s 5.东西方向和南北方向的黄灯亮5s,且在最后3s时,两个方向的黄灯每隔1s亮灭闪烁 6.当紧急情况到来时,东西和南北方向的红灯全亮,数码管停止计时,紧急情况过
5、后,系统恢复正常 7.点阵上循环显示“交通灯”三个字,且每个字的显示时间为0.5s1.2 方案阐述 系统采用现场可编程逻辑器件作为主控制器,外加按键模块、数码管显示模块、译码器模块、点阵显示模块和蜂鸣模块构成。计时数据在数码管上显示出来,点阵上循环显示“交通灯”三个字。蜂鸣器作为紧急情况使用。系统的基本框图如下:图1-1 系统原理框图1.3工作原理系统开始时,南北方向和东西方向正常工作,两个方向的红、黄、绿三灯交替亮灭,当紧急情况到来,即按键S1按下时,两个方向的数码管停止计时,而且两个方向的红灯全部点亮,蜂鸣器响起,表明此时南北和东西方向行人和普通车辆严禁通行。当紧急情况过后,系统恢复正常,
6、按照紧急情况到来之前继续工作。两个方向的时间显示用两位数码管显示。2 详细电路设计2.1 主控制器的设计 系统采用altera公司的cyconeIII系列芯片,封装为FBGA贴片式封装,速度等级3,引脚个数780个。由于引脚个数较其他芯片多,因此,外部硬件资源比较多,而且性能很好,稳定,易于控制。2.2 紧急情况电路设计本设计的紧急情况用按键来模拟,当按键按下时,紧急情况到来,按键释放后,紧急情况消失。按键与主控制器连接图如下图所示:图2-1 按键与主控器连接图 按键只有逻辑电平“0”和“1”两种状态,当按下时,为逻辑电平0,当未按下时,为逻辑电平1。本设计中只用到了其中的一个按键S1,当S1
7、按下时,紧急情况到来,当S1未按下时,没有紧急情况发生。2.3 译码电路译码电路为3-8译码器,它经常用在数码管的动态扫描中,输出端接数码管的8个位选,每次可以选中一个数码管,而输入端为000-111的8种组合,每一种组合对应一个输出,Y0-Y7对应输入的8种输出,即当输入为000时,Y0选通,依次类推。由于8位一体的数码管不能够在同一时间全部显示,因此,要通过译码电路对8位数码管进行译码,一次只让一个数码管亮,通过人眼的视觉暂态效应,当扫描时间在人眼视觉效应之内时,看起来就像是几个数码管同时被点亮。这样既能够节约端口资源,又能达到很好的效果。译码器与主控制器的连接图如下图所示:图2-2 3-
8、8译码器与控制器的接口图74LS138为一个3-8线译码器,低电平输出,其工作原理见下表格:表2-1 74LS138译码表输入输出ABCY0Y1Y2Y3Y4Y5Y6Y7LLLLHHHHHHHLLHHLHHHHHHLHLHHLHHHHHLHHHHHLHHHHHLLHHHHLHHHHLHHHHHHLHHHHLHHHHHHLHHHHHHHHHHHL 从表中可以看出:每输入一种组合,输出端只有一端响应,这样可以通过输入端的组合,选中想要选中的数码管,让其工作。而74LS138的使能端已经接了有效电平,设计中不用再管使能端的电平。2.4 蜂鸣器模块 当输入信号的电平为高电平1时,蜂鸣器响起,当输入电平为
9、低电平0时,蜂鸣器不响。因此,当紧急情况到来时,让蜂鸣器的输入端的电平为高电平,那么蜂鸣器就会响起;紧急情况过后,让蜂鸣器的输入端电平为低电平时,蜂鸣器就不响。2.5 东西方向模块 东西方向包含红黄绿灯控制模块和计时模块。 2.5.1 红黄绿灯控制模块 由于东西方向计时与灯的控制相同,设计中在此方向只用了三个灯,即红、黄、绿灯。用到的是实验系统中第一、二、三个灯,即LED1、LED2、LED3,分别表示红、黄、绿三种颜色的灯。LED灯与控制器的连接图如下图所示:图2-3 LED与控制器的连接图 2.5.2 计时模块 设计中采用8段数码管显示,七段数码管是电子开发过程中常用的输出显示设备。可以显
10、示数字0-9,东西方向用的是第一、二个数码管,计时时间为红灯15s,黄灯5s,绿灯15s。在实验系统中使用的是两个四位一体、共阴极型七段数码管。其单个静态数码管如下图4-1所示。图4-1 静态七段数码管 由于七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段被输入高电平,则相应的这一段被点亮。反之则不亮。四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。工作原理都相同,八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,共8根段选引脚,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭,共8根位选引脚,总共16根引
11、脚。共阴极数码管显示0-9字符数据如下表:表2-2 数码管字符显示表输入段选显示字符abcdefgdp111111000011000001110110102111100103011001104101101105101111106111000007111111108111101109 从表可以看出,当选中第1、2个数码管时,只要按照表中的输入组合送入段选,那么数码管就会显示相应的数字,从而达到结果。2.6 南北方向模块 南北方向包含红黄绿灯控制模块和计时模块。 2.6.1 红黄绿灯控制模块由于南、北方向计时以及灯的控制都相同,设计中在此方向只用了三个灯,即红、黄、绿灯和两个数码管。用到的是实验系
12、统中第一、二、三个灯,即LED10、LED11、LED12,分别表示红、黄、绿三种颜色的灯。LED灯与控制器的连接图如图2-3所示。 2.6.2 计时模块 计时模块与东西方向相同,只是南北方向的计时用到的是实验系统中的第7、8个数码管,工作原理与东西方向的完全相同。当选中第7、8个数码管时,送入表2-2中的段选,可以显示相应的数字。2.7 点阵模块本设计主要是完成汉字在LED上的显示,16*16扫描LED点阵的工作原理与8位扫描数码管类似,也是用到了人眼的视觉暂态效应,只是显示的方式与结果不一样。16*16点阵由256个LED通过排列组合而形成16行*16列的一个矩阵式的LED阵列,俗称16*
13、16点阵。单个的LED的电路如下图13-1所示:图13-1 单个LED电路图由上图可知,对于单个LED的电路图当Rn输入一个高电平,同时Cn输入一个低电平时,电路形成一个回路,LED发光。也就是LED点阵对应的这个点被点亮。16*16点阵也就是由16行和16列的LED组成,其中每一行的所有16个LED的Rn端并联在一起,每一列的所有16个LED的Cn端并联在一起。通过给Rn输入一个高电平,也就相当于给这一列所有LED输入了一个高电平,这时只要某个LED的Cn端输入一个低电平时,对应的LED就会被点亮。具体的电路如下图13-2所示:图13-2 16*16点阵电路原理图因此,在点阵上显示一个字,就
14、是要让这个字在点阵上所覆盖区域的LED灯点亮,而其他区域的LED灯被熄灭,例如,在点阵上显示中文“汉”字的显示图如下图13-3所示:图13-3 字符在点阵上的显示在上图中,只要将被“汉”字所覆盖的区域的点点亮,则在点阵中就会显示一个“汉”字。根据前面我们所介绍的点阵显示的原理。当我们选中第一列后,根据要显示汉字的第一列中所需要被点亮的点对应的Rn置为高电平,则在第一列中需要被点亮的点就会被点亮。依此类推,显示第二列、第三列第N列中需要被点亮的点。然后根据人眼的视觉原理,将每一列显示的点的间隔时间设为一定的值,那么我们就会感觉显示一个完整的不闪烁的汉字。同时也可以按照这个原理来显示其它的汉字下图
15、11-4是一个汉字显示所需要的时序图:图13-4 显示时序图在上图中,在系统时钟的作用下,首先选取其中的一列,将数据输入让这列的LED显示其数据(当为高电平时LED发光,否则不发光)。然后选取下一列来显示下一列的数据。当完成一个16*16点阵的数据输入时,即列选择计数到最后一列后,再从第一列开始输入相同的数据。这样只要第一次显示第一列的数据和第二次显示第一列的数据的时间足够短,那么人的眼睛就会看到第一列的数据总是显示的,而没有停顿现象。同样的道理其它列也是这样,直到显示下一个汉字。在实际的运用当中,一个汉字是由多个八位的数据来构成的,那么要显示多个汉字的时候, 这些数据可以根据一定的规则存放到
16、存储器中,当要显示这个汉字的时候只要将存储器中对应的数据取出显示即可。字库数据的格式如下图:图13-5 字库格式 该模块与控制器的连接图如下图所示:图13-6 16*16点阵电路图2.8蜂鸣器模块 本设计中采用蜂鸣器是为了在紧急情况下报警。紧急情况过后蜂鸣器停止报警,系统恢复正常。2.9时钟模块时钟是一个系统正常工作的重要保证,没有时钟,再优越的条件,系统都不能正常工作由于FPGA控制器外设中不含有晶振,即时钟模块,只有一个时钟输入,但是该时钟频率对于完成本设计是不够的,数码管以及点阵的动态显示都要用到时钟,而且两个的扫描的时钟频率不一样,这样,就要求对原有的时钟频率进行分频,得到所需要的时钟
17、频率。时钟与控制器的连接图如下图所示:图3-2 数字时钟信号模块电3 引脚分配 本模块用到的模块与实验箱的引脚连接如下表所示:模块名称信号名称FPGA I/O管脚号功能说明时钟模块CLKPin_A14时钟信号紧急情况模块S1Pin_AF5按键0东西方向控制模块LED1Pin_AE8东西方向红灯LED2Pin_J22东西方向黄灯LED3Pin_M24东西方向绿灯南北方向控制模块LED10Pin_F22南北方向红灯LED11Pin_E22南北方向黄灯LED12Pin_F21南北方向绿灯数码管显示模块LEDAG0Pin_G16数码管A段LEDAG1Pin_G17数码管B段LEDAG2Pin_F18数
18、码管C段LEDAG3Pin_G18数码管D段LEDAG4Pin_G15数码管E段LEDAG5Pin_G14数码管F段LEDAG6Pin_G12数码管G段LEDAG7Pin_M21数码管DP段DEL0Pin_C223-8译码器第一个输入端DEL1Pin_D223-8译码器第二个输入端DEL2Pin_G93-8译码器第三个输入端点阵显示模块DOT_R0Pin_C17点阵第一行DOT_R1Pin_D15点阵第二行DOT_R2Pin_D14点阵第三行DOT_R3Pin_D13点阵第四行DOT_R4Pin_D12点阵第五行DOT_R5Pin_D10点阵第六行DOT_R6Pin_C10点阵第七行DOT_R
19、7Pin_C9点阵第八行DOT_R8Pin_D21点阵第九行DOT_R9Pin_C21点阵第十行DOT_R10Pin_D20点阵第十一行DOT_R11Pin_D19点阵第十二行DOT_R12Pin_C19点阵第十三行DOT_R13Pin_D18点阵第十四行DOT_R14Pin_C18点阵第十五行DOT_R15Pin_D17点阵第十六行DOT_C0Pin_L54-16转换第一个输入端DOT_C1Pin_H64-16转换第二个输入端DOT_C2Pin_H74-16转换第三个输入端DOT_C3Pin_H54-16转换第四个输入端总结通过本次设计,初步了解了quartusII软件的基本操作。熟悉了数码
20、管、点阵的动态扫描方法和原理,了解了VHDL语言的结构特点及编程思想,能够编写简单的程序。在设计过程中,遇到了许多的问题,通过与同学和老师的交流,以及自己在图书馆查找资料,最终完成了本设计。设计能够按照预期的要求正常工作,但是,设计还存在一些不足,东西方向和南北方向的红绿灯计时时间相同,不能够达到两个方向的时间不同步显示;点阵只能够现实普通的数字和汉字,还不能够现实人形,在红灯亮时,人形不动,当绿灯亮时,人形行走,此功能还不能实现。在接下来的时间里,会在这方面有所突破,完善本设计。参考文献1.赵明富,李立军. EDA技术基础M. 北京:北京大学出版社,2007.62.孟庆海,张洲.VHDL基础
21、及经典实例开发M.西安:西安交通大学出版社,2008.43.杨承恩,谭克俊,颜得文.VHDL编程实例(第四版)M. 北京:电子工业出版社,2009.64.詹仙宁.VHDL开发精解与实例剖析M. 北京:电子工业出版社,2009.9附录:源程序清单 -十字路口交通灯的设计- -学号030940910- -姓名- -杨波-library ieee; -库文件use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity traffic is port(clk : in st
22、d_logic; -时钟信号 del : buffer std_logic_vector(2 downto 0); -3-8译码器输入 seg : out std_logic_vector(7 downto 0); -数码管段选 key : in std_logic; -按键S1,紧急情况 east_west_led_red : out std_logic; -东西方向红灯 east_west_led_yellow : out std_logic; -东西方向黄灯 east_west_led_green : out std_logic; -东西方向绿灯 south_north_led_red
23、: out std_logic; -南北方向红灯 south_north_led_yellow : out std_logic; -南北方向黄灯 south_north_led_green : out std_logic; -南北方向绿灯 hang : out std_logic_vector(15 downto 0); -点阵的行 lie : out std_logic_vector(3 downto 0) -4-16转换输入 end traffic;architecture behave of traffic is signal count_nanbei : integer range 0
24、 to 45; signal count_dongxi : integer range 0 to 45; signal num_nanbei : integer range 0 to 25; signal num_dongxi : integer range 0 to 25; signal e_w_shiwei : integer range 0 to 9; signal e_w_gewei : integer range 0 to 9; signal s_n_shiwei : integer range 0 to 9; signal s_n_gewei : integer range 0 t
25、o 9; signal dis : std_logic_vector(7 downto 0); signal display : integer range 0 to 10; signal clk_count : std_logic_vector(13 downto 0); signal clk1HZ : std_logic; signal cdount : std_logic_vector(3 downto 0); signal dount : std_logic_vector(8 downto 0); signal s : std_logic_vector(2 downto 0); beg
26、in process(clk) -分频 begin if (clkevent and clk=1) then if(clk_count10000) then clk_count=clk_count+1; else clk_count=00000000000001; end if; end if; clk1HZ=clk_count(13); end process; process(clk) begin if(clkevent and clk=1) then del=del+1; seg=dis; end if; end process; process(clk1Hz) - begin if(c
27、lk1Hzevent and clk1Hz=1) then if(key=0) then -紧急情况到来 count_nanbei=count_nanbei; -南北方向停止计数 else if(count_nanbei=46) then count_nanbei=0; else count_nanbei=count_nanbei+1; end if; end if; end if; end process; process(clk1Hz) begin if(clk1Hzevent and clk1Hz=1) then if(key=0) then -紧急情况到来 count_dongxi=c
28、ount_dongxi; -东西方向停止计数 else if(count_dongxi=46) then count_dongxi=0; else count_dongxi=count_dongxi+1; end if; end if; end if; end process; process(clk1Hz,count_nanbei) begin if(key=0) then -紧急情况到来 south_north_led_red=1; -南北方向红灯亮 south_north_led_green=0; south_north_led_yellow=0; east_west_led_red=1
29、; -东西方向红灯亮 east_west_led_green=0; east_west_led_yellow=0; else if(count_nanbei=20) then south_north_led_red=1; -南北红灯亮 south_north_led_yellow=0; south_north_led_green=0; east_west_led_red=0; east_west_led_yellow=0; east_west_led_green=1; -东西绿灯亮 else if(count_nanbei=25) then south_north_led_red=0; sou
30、th_north_led_yellow=1; -南北黄灯亮 south_north_led_green=0; east_west_led_red=0; east_west_led_yellow=1; -东西黄灯亮 east_west_led_green=0; else south_north_led_red=0; south_north_led_yellow=0; south_north_led_green=1; -南北绿灯亮 east_west_led_red=1; -东西红灯亮 east_west_led_yellow=0; east_west_led_green=0; end if; e
31、nd if; end if; end process; process(count_nanbei,count_dongxi) begin if(count_nanbei=20)then -南北和东西方向倒计时20s num_nanbei=20-count_nanbei; num_dongxi=20-count_dongxi; else if(count_nanbei=25)then -南北和东西方向倒计时5s num_nanbei=25-count_nanbei; num_dongxi=25-count_dongxi; else -南北和东西方向倒计时20s num_nanbei=45-cou
32、nt_nanbei; num_dongxi=45-count_dongxi; end if; end if; end process; process(num_nanbei) -南北时间显示分位 begin if(num_nanbei10) then s_n_gewei=num_nanbei; s_n_shiwei=10)then s_n_shiwei=num_nanbei/10; s_n_gewei=num_nanbei mod 10; end if; end if; end process; process(num_dongxi) -东西时间显示分位 begin if(num_dongxi10) then e_w_gewei=num_dongxi; e_w_shiwei=10) then e_w_shiwei=num_dongxi/10; e_w_geweidisplaydisplaydisplaydisplaydisplaydisplaydisplaydisplaydisdisdisdisdisdisdisdisdisdisdis=00000000; -灭 end case; end process; process(clk) -分频 begin if