1、数字逻辑电路和 PLD 设计报 告题目:红绿灯交通管理器的设计学院:通信与信息工程学院学号:09123904姓名:辛蔚桌号:13课程时间:2011-6-242011-6-27课程设计:红绿灯交通管理器一、设计要求:设计十字路口的交通管理器,该管理器控制甲乙垂直道路的红黄绿三色灯显示情况和各自显示时间,指挥车辆和行人安全通行,要求用 VHDL 语言对其进行描述。二、设计内容:该设计采用分层描述方法,以图形输入和原理输入混合方式建立 VHDL 描述文件。交通管理器顶层图形输入文件有控制器和三个各位模 26、模 30、模 5 的定时器组成,分别控制两个道口的通行时间和公共停车时间,系统由两组红黄绿指
2、示灯和三组七段显示器作倒计时显示,由 BCD 码驱动,控制器按照流程图中状态的变化来控制红黄绿灯的变换以及计数器的计时,当某个计数器工作技术信号 W1、W2 或 W3,由“0”转为“1”时,表示计满,控制器转向下一个状态并开始计时,各定时器连接控制器的 C1、C2 或 C3,当为“1”时,该计数器计时结束,整个系统循环互联。当计数器计数时,各个减法器同时做倒计时,输出接七段译码显示器做倒计时显示。各减法器具有置数控制端,当控制端为“1”时,预置 30、26、5。可以将时钟信号和置数信号一同设为进程敏感信号,减法计数器的使能端也对应控制器的C1、C2 和 C3 上升沿开始倒计时。三、 工作流程图
3、图中 R1、Y1、G1 是甲道红黄绿灯;R2、Y2 、G2 是乙道红黄绿灯。C1 、 C2、C3 是定时器工作信号。四、 VHDL 程序设计及波形仿真结果甲道禁止,乙道通行甲道禁止,乙道停车甲道通行,乙道禁止甲道停车,乙道禁止W1=1?W2=1?W3=1?W2=1?YNNNNYYYS0S1S2S3R1=1C1=1G2=1R1=1C2=1Y2=1G1=1C3=1R2=1Y1=1C2=1R2=1000111101) 顶层文件图及波形仿真结果图2) “trafficcontrol”模块程序设计及波形仿真结果图library IEEE;use IEEE.STD_LOGIC_1164.ALL;entit
4、y trafficcontrol isport(clk:in std_logic;c1,c2,c3:out std_logic;w1,w2,w3:in std_logic;r1,r2:out std_logic;y1,y2:out std_logic;g1,g2:out std_logic;reset:in std_logic);end trafficcontrol;architecture a of trafficcontrol istype state_space is(s0,s1,s2,s3);signal state:state_space;beginprocess(clk)begin
5、if reset=1 thenstateif w1=1 thenstateif w2=1 thenstateif w3=1 thenstateif w2=1 thenstate=s0;end if;end case;end if;end process;c1=1 when state=s0 else 0;c2=1 when state=s1 or state=s3 else 0;c3=1 when state=s2 else 0;r1=1 when state=s1 or state=s0 else 0;y1=1 when state=s3 else 0;g1=1 when state=s2
6、else 0;r2=1 when state=s2 or state=s3 else 0;y2=1 when state=s1 else 0;g2=1 when state=s0 else 0;end a;3) 模 30 加法器程序设计及波形仿真图library ieee;use ieee.std_logic_1164.all;entity count30 isport(clk:in std_logic;enable:in std_logic;c:out std_logic);end count30;architecture a of count30 isbeginprocess(clk)va
7、riable cnt: integer range 30 downto 0;beginif(clk event and clk=1) thenif enable=1 and cnt30 thencnt:=cnt+1;elsecnt:=0;end if;end if;if cnt=30 then c=1;elsec=0;end if;end process;end a;4) 模 26 加法器程序设计及波形仿真图library ieee;use ieee.std_logic_1164.all;entity count26 isport(clk:in std_logic;enable:in std_
8、logic;c:out std_logic);end count26;architecture a of count26 isbeginprocess(clk)variable cnt: integer range 26 downto 0;beginif(clk event and clk=1) thenif enable=1 and cnt26 thencnt:=cnt+1;elsecnt:=0;end if;end if;if cnt=26 then c=1;elsec=0;end if;end process;end a;5) 模 5 加法器程序设计及波形仿真图library ieee;
9、use ieee.std_logic_1164.all;entity count05 isport(clk:in std_logic;enable:in std_logic;c:out std_logic);end count05;architecture a of count05 isbeginprocess(clk)variable cnt: integer range 5 downto 0;beginif(clk event and clk=1) thenif enable=1 and cnt5 thencnt:=cnt+1;elsecnt:=0;end if;end if;if cnt
10、=5 then c=1;elsec=0;end if;end process;end a;6) 模 30 减法计数器程序设计及波形仿真图library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity de30 isport(clk,en,ld,reset:in std_logic;gl,gh:out std_logic_vector (3 downto 0);end de30;architecture a of de30 issignal ml,mh:std_logic_vector (3 down
11、to 0);beginprocess(clk,en,ld,reset)beginif(ld=1 or reset=1)thenml=“0000“;mh=“0011“;elsif (clkevent and clk=1)thenif(en=1)thenif(ml=“0000“ and mh=“0000“)thenml=“0000“;mh=“0011“;else if(ml=“0000“)thenmh=mh-1;ml=“1001“;else ml=ml-1;end if;end if;end if;end if;end process;gl=ml;gh=mh;end a;7) 模 26 减法计数器
12、程序设计及波形仿真图library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity de26 isport(clk,en,ld,reset:in std_logic;rl,rh:out std_logic_vector (3 downto 0);end de26;architecture a of de26 issignal ml,mh:std_logic_vector (3 downto 0);beginprocess(clk,en,ld,reset)beginif(ld=1 or reset=1
13、)thenml=“0110“;mh=“0010“;elsif (clkevent and clk=1)thenif(en=1)thenif(ml=“0000“ and mh=“0000“)thenml=“0110“;mh=“0010“;else if(ml=“0000“)thenmh=mh-1;ml=“1001“;else ml=ml-1;end if;end if;end if;end if;end process;rl=ml;rh=mh;end a;8) 模 5 减法计数器程序设计及波形仿真图library ieee;use ieee.std_logic_1164.all;use ieee
14、.std_logic_unsigned.all;entity de05 isport(clk,en,ld,reset:in std_logic;yl:out std_logic_vector (3 downto 0);end de05;architecture a of de05 issignal ml,mh:std_logic_vector (3 downto 0);beginprocess(clk,en,ld,reset)beginif(ld=1 or reset=1)thenml=“0101“;elsif (clkevent and clk=1)thenif(en=1)thenif(ml
15、=“0000“)thenml=“0101“;else ml=ml-1;end if;end if;end if;end process;yl=ml;end a;五、 小结两天的课程转眼就结束了,但是通过老师的细心指导,我学到了很多东西。对于之前学习的数字逻辑电路的内容有了更深的了解与认识,尤其是对电路的设计和 VHDL 语言的应用;增强了自己动手解决问题的能力。此外,数电实验将学习与生活紧密的结合到了一起,并将所学应用于实践,使学习内容更具体化,更生活化,同时也提高了学习兴趣。在此次数电实验中,再一次使用了 QUARTUS 2 软件,提高了对其的操作熟练程度,也增强了解决其中出现的各种问题的能力,尤其是由于忽略细节而产生的问题的能力,例如程序名称的修改、顶层文件的设置。红绿灯交通管理器是交通正常运行所不可或缺的,通过对它的设计,我们能够更深入的了解其操作原理,并且可以以此进行推广,对相近器件的设计进行思考,举一反三,真正达到学习数电实验这门课程的目的。当然,在学习过程中会遇到许多问题,其中有很多自己无法独立解决,这就需要同学们一起进行讨论分析,找到最佳的解决方法。因而这门课程还给我们提供了一个很好的交流合作的机会。希望以后老师能够多开设一些类似的课程,或者多提供一些与生活有关的器件的程序设计,提高同学们的综合能力。