基于EDA交通灯的设计.doc
设计任务书一、 设计目的1 学习使用集成设计软件Maxplus,了解电路描述、综合、模拟过程。2 掌握使用工具设计数字系统的设计思路和设计方法。3 模仿目前十字路口的控制器,设计交通灯控制器。二、 设计任务 实验目的:学习交通灯控制器的设计、仿真和硬件测试,进一步熟悉VHDL 设计技术。实验要求: 模仿目前十字路口的控制器,其中:东西方向交通灯循环为绿灯(直行和右转)45 秒、黄灯5 秒、左转灯15 秒、黄灯5 秒、红灯40 秒、黄灯5 秒;南北方向交通灯循环为红灯65 秒、黄灯5 秒、绿灯(直行和右转)20 秒、黄灯5 秒、左转灯15 秒、黄灯5 秒。 输入端为:基准时钟(CLK)、复位(CLR);输出端分别为SNGreen、SNRed、SNYellow、SNLeft 和EWGreen、EWRed、EWYellow、EWLeft。实验内容:根据实验要求设计交通灯控制器,并对其进行编辑、编译、综合、仿真,以及给出其所有信号的时序仿真波形。交通灯控制器设计摘要本文主要介绍了运用硬件描述语言(VHDL语言)和原理图输入的方法对交通灯控制器进行设计,并利用集成设计软件Maxplus对其进行编辑、编译、综合和仿真。关键词:交通灯控制器、VHDL语言、Maxplus II、仿真AbstractThis paper introduces the design of the traffic signal controller using hardware description language(VHDL language) and schematic method,and use an integrated EDA design software Maxplus to edit, compile, synthesis and simulation.Key words: traffic light controller, VHDL language, Maxplus II, simulation1 设计要求(1)模仿目前十字路口的控制器,其中:东西方向交通灯循环为绿灯(直行和右转)45 秒、黄灯5 秒、左转灯15 秒、黄灯5 秒、红灯40 秒、黄灯5 秒;南北方向交通灯循环为红灯65 秒、黄灯5 秒、绿灯(直行和右转)20 秒、黄灯5 秒、左转灯15 秒、黄灯5 秒。(2)输入端为:基准时钟(CLK)、复位(CLR);输出端分别为SNGreen、SNRed、SNYellow、SNLeft 和EWGreen、EWRed、EWYellow、EWLeft。2 设计思路根据设计要求,可知所要设计的交通灯的循环周期为115s,交通灯的控制信号状态一共有8种(如表2.1)。故可以设计一115进表2.1交通灯的控制信号状态表SNGreenSNRedSNYellowSNLeftEWGreenEWRedEWYellowEWLeft0-45s0100100045-50s0100001050-65s0100000165-70s0010001070-90s1000010090-95s0010010095-110s00010100110-115s00100010制计数器和一状态控制器,通过时间计数,由时间段跳变来控制交通灯信号(原理图如图2.1)。在设计115进制的计数器过程中,直接用VHDL语言设计遇到了一定的困难,故先设计一128进制计数器(用VHDL语言便于实现),再通过原理图输入法来实现115进制计数器的设计。图2.1交通灯控制器原理图3 设计输入文件3.1 115进制计数器设计输入设计115进制的计数器,可先设计一128进制计数器(当然为了最终实现115进制的计数功能,在VHDL语言编辑中对其进位输出端信号进行了修改,即计数到115便输出进位信号,以便控制复位信号,故称其伪128进制计数器),再通过原理图输入法来实现115进制计数器的设计。3.1.1 伪128进制计数器设计输入VHDL语言设计输入:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT7B ISPORT (CLK : IN STD_LOGIC;RST : IN STD_LOGIC;ENA : IN STD_LOGIC;OUTY : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);COUT : OUT STD_LOGIC );END CNT7B;ARCHITECTURE behav OF CNT7B ISSIGNAL CQI : STD_LOGIC_VECTOR(6 DOWNTO 0); BEGINP_REG: PROCESS(CLK, RST, ENA)BEGINIF RST = '1' THEN CQI <= ""ELSIF CLK'EVENT AND CLK = '1' THENIF ENA = '1' THEN CQI <= CQI + 1;ELSE CQI <= ""END IF;END IF;OUTY <= CQI ;END PROCESS P_REG ;COUT <= CQI(0) AND CQI(1) AND CQI(4) AND CQI(5) AND CQI(6); -计数到115进位输出END behav;生成的元件符号:图3.1 伪128进制计数器元件符号图3.1.2伪128进制计数器实现115进制计数设计输入原理图输入:图3.2 115进制计数器原理图生成的元件符号:图3.3 115进制计数器元件符号图3.2 状态控制器设计输入VHDL语言设计输入:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY STACON ISPORT(CLR:IN STD_LOGIC; COUNT:IN STD_LOGIC_VECTOR(6 DOWNTO 0); SNGREEN:OUT STD_LOGIC; SNRED:OUT STD_LOGIC; SNYELLOW:OUT STD_LOGIC; SNLEFT:OUT STD_LOGIC;EWGREEN:OUT STD_LOGIC;EWRED:OUT STD_LOGIC; EWYELLOW:OUT STD_LOGIC; EWLEFT:OUT STD_LOGIC);END STACON;ARCHITECTURE func OF STACON ISSIGNAL SNEW:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINfunc_1:PROCESS(CLR,COUNT)BEGINIF CLR='1' THEN SNEW<="" -时间段跳变状态选择ELSIF COUNT<"" THEN SNEW <=""ELSIF COUNT<"" THEN SNEW <=""ELSIF COUNT<"" THEN SNEW <=""ELSIF COUNT<"" THEN SNEW <=""ELSIF COUNT<"" THEN SNEW <=""ELSIF COUNT<"" THEN SNEW <=""ELSIF COUNT<"" THEN SNEW <=""ELSIF COUNT<"" THEN SNEW <="" END IF;SNGREEN<=SNEW(7);SNRED<=SNEW(6);SNYELLOW<=SNEW(5);SNLEFT<=SNEW(4);EWGREEN<=SNEW(3);EWRED<=SNEW(2);EWYELLOW<=SNEW(1);EWLEFT<=SNEW(0);END PROCESS func_1;END FUNC;生成的元件符号:图3.4 状态控制器原件图3.3 交通灯控制器设计输入原理图输入:图3.5 交通灯控制器原理图4 设计与调试过程先在E:maxpluiimax2work目录下建立文件夹trafficlight,再启动MAX+PLUS II软件运行环境,对交通灯控制器进行设计。4.1伪128进制计数器设计 4.1.1 建立项目在管理器窗口选择File>Project>Name,显示对话框,选择路径E:maxpluiimax2worktrafficlight输入名字cnt7b,如图4.1,单击OK,即建立了伪128进制计数器设计项目cnt7b。图4.1 4.1.2 文本设计在管理器窗口选择File>New,显示对话框,选择Text Editor file,如图4.2,单击OK,显示如图4.3。图4.2 图4.3 在文本编译框中输入伪128进制计数器设计VHDL语言(见3.1.1),并保存为cnt7b.vhd。4.1.3 编译文本cnt7b.vhd保存后,单击管理器窗口中工具栏中的,对其进行编译。若出错,返回文本编辑框对其进行修改,直到编译无误为止,如图4.4。图4.4 4.1.4 波形仿真(1)编译无误后,在管理器窗口选择File>New,显示对话框,选择Waveform Editor File,如图4.5。单击OK,显示如图4.6。图4.5图4.6 (2)然后在管理器窗口选择File>End Time,设置仿真的时间范围为180s,如图4.7,在管理器窗口选择Options>Grid size,设置最小分辨大小为0.5s,如图4.8。图4.7 图4.8(3)基本设置完成后,在管理器窗口选择Node>Enter Nodes From SNF,显示如图4.9。单击,列出各信号,单击,导出各信号,如图4.10。单击后,显示如图4.11。图4.9图4.10图4.11(4)接着对输入信号RST、ENA、CLK进行波形设置,在设置的过程中可通过View菜单下的各项进行视图调节,设置完后如图4.12,保存为cnt7b.scf。(5)然后单击管理器窗口中工具栏中的,进行仿真,直到无误为止,如图4.13,单击,打开仿真波形图,经视图调整,如图4.14(为突出其功能故显示计数到115输出进位信号的波形仿真)。图4.12图4.13图4.144.1.5生成元件符号仿真无误后,打开cnt7b.vhd文件,再在管理器窗口选择 File>Create Default Symbol,生成cnt7b.sym。4.2 115进制计数器设计4.2.1 建立项目同4.1.1,在同一目录下,建立115进制计数器设计项目cnt115。4.2.2 原理图设计在管理器窗口选择File>New,显示对话框,选择Graphic file,如图4.15。单击OK,显示如图4.16。在原理图编译框中输入115进制计数器设计原理图(见3.1.2),并保存为cnt115.gdf。图4.15图4.164.2.3 编译同4.1.3 ,编译若出错,返回原理图编译器进行修改,直到编译无误为止。4.2.4 波形仿真同4.1.4,同样为突出其功能,显示其计数到114到0的跳转,仿真波形如图4.17。图4.174.2.5生成元件符号打开cnt115.vhd文件,再在管理器窗口选择File>Create Default Symbol,生成cnt115.sym。4.3 状态控制器设计4.3.1 建立项目同4.1.1,在同一目录下,建立状态控制器设计项目stacon。4.3.2 文本设计同4.1.2,在文本编译框中输入状态控制器设计VHDL语言(见3.2),并保存为cnt7b.vhd。4.3.3 编译同4.1.3 ,编译若出错,返回文本编译器进行修改,直到编译无误为止。4.3.4 生成元件符号编译无误后(由于此波形仿真输入COUNT不易编辑,且在最后模拟仿真中会间接对其仿真),打开stacon.vhd文件,再在管理器窗口选择File>Create Default Symbol,生成stacon.sym。4.4 交通灯控制器设计4.4.1 建立项目同4.1.1,在同一目录下,建立状态控制器设计项目tracon。4.4.2 原理图设计同4.2.2,在原理图编译框中输入1交通灯控制器设计原理图(见3.3),并保存为tracon.gdf。4.4.3 编译同4.1.3 ,编译若出错,返回原理图编译器进行修改,直到编译无误为止。4.4.4 波形仿真同4.1.4,编译无误后,对其进行波形仿真。在此不赘述,在第5部分会有介绍。5模拟仿真与结果5.1 交通灯控制器模拟仿真输入同4.1.4(1)、(2)、(3)、(4),进行波形输入,仿真范围0-1000s,分辨大小0.5s,输入信号CLR(复位信号)和CLK(1Hz信号),如图4.18。图5.1 波形仿真输入5.2 交通灯控制器模拟仿真结果同4.1.4(5),单击,进行仿真编译,仿真结果如图5.2、图5.3、图5.4、图5.5、图5.6、图5.7、图5.8、图5.9、图5.10。图5.2 CLR复位功能仿真图图5.3 循环内0-45s(图中239.5-284.5s)状态仿真图“”图5.4循环内45-50s(途中284.5-289.5s)状态仿真图“”图5.4循环内50-65s(途中289.5-304.5s)状态仿真图“”图5.4循环内45-45s(途中304.5-309.5s)状态仿真图“”图5.4循环内45-45s(途中309.5-329.5s)状态仿真图“”图5.4循环内45-45s(途中329.5-334.5s)状态仿真图“”图5.4循环内45-45s(途中334.5-349.5s)状态仿真图“”图5.4循环内45-45s(途中349.5-354.5s)状态仿真图“”6 结论(1)由模拟仿真结果上可以得出,本设计基本上实现了交通灯控制器的功能,且符合设计要求;(2)从波形仿真图上可以看出,部分波形上有毛刺,但毛刺范围非常小,不会影响人的视觉,基本上对功能的实现没有影响;(3)虽然设计符合要求,但仍有一定的不足,如:115进制计数器的设计,本可以用VHDL语言直接设计,无需间接设计。参考文献1黄仁欣EDA技术实用教程M2006年9月第1版北京:清华大学出版社,2006年17592黄仁欣EDA技术实用教程M2006年9月第1版北京:清华大学出版社,2006年2092103黄仁欣EDA技术实用教程M2006年9月第1版北京:清华大学出版社,2006年2812834黄仁欣EDA技术实用教程M2006年9月第1版北京:清华大学出版社,2006年286286