1、 目 录一、实验目的- 3二、预习要求- 3三、实验要求- 3四、仪器与器材- 4五、层次化设计结构- 4)分频器-4)计数器-5)控制器-6)分位译码器-9)数码管驱动-11)七段数字显示-137)顶层模块-14 六、系统实现电路-17七、设计过程中出现的问题-17八、设计体会总结-17一、实验目的1、学会应用数字系统方法进行电路设计;2、进一步提高Maxplus软件开发应用能力;3、培养综合实验的能力;二、预习要求 1、层次化方法设计该交通灯控制器电路; 2、编写VHDL源程序,生成元器件; 3、将各个器件进行组合连线,验证设计交通灯的控制器;三、实验要求设计一个交通灯控制器1、 能显示十
2、字路口东西、南北两个方向的红、黄、绿的指示状态(1) 用L16、L15、L14作为东西方向的绿、黄、红灯;(2) 用L1、L2、L3作为南北方向的绿、黄、红灯。2、 能实现正常的倒计时功能(1) 用M6、M5作为东西方向的倒计时显示器,显示时间为红灯35秒、绿灯50秒、黄灯5秒;(2) 用M2、M1作为南北方向的倒计时显示器,实现时间为红灯55秒、绿灯30秒、黄灯5秒。3、 能实现特殊状态的功能(1) 按S1后,能实现特殊状态功能;(2) 显示器M6M5、M2M1闪烁;(3) 计数器停止计数并保持在原来的状态;(4) 东西、南北路口均显示红灯状态;(5) 特殊状态解除后能继续计数;4、 能实现
3、总体清零功能按下SB后,系统实现总清零,计数器由初始状态计数,对应状态的指示灯亮。5、 使用MaxPlus II 10.0软件设计符合以上功能要求的交通灯控制器,并用层次化设计方法设计该电路。6、 控制器、置数器的功能用功能仿真的方法验证,可通过观察有关波形确认电路设计是否正确。7、 完成全部电路设计后在SE-3实验系统上下载,验证设计课题的正确性。四、仪器与器材 1、开发软件:MaxPlusII 2、微机 3、ISP实验板五、层次化设计结构1、分频器在实际的电路板上,计数的数码管电路采用了1464赫兹的频率,而这个频率对于计数器和控制器来讲太高了。为了让显示计数与灯的亮灭保持同步,我使用了一
4、个1464频率的时钟脉冲,同时使用该分频器将高频时钟信号分成低频脉冲,赋予控制器。程序如下:LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider ISPORT (Clkin:IN Std_Logic; Clkout:OUT Std_Logic);END;ARCHITECTURE Devider OF FreDevider ISCONSTANT N:Integer:=499;signal counter:Integer range 0 to N;signal Clk:Std_Logic;BEGIN PROCESS(Clkin) be
5、gin IF clkinevent and clkin=1THEN IF Counter=N then counter=0; Clk=not clk; else counter=counter+1; end if; end if; end process; clkout=clk;end;2、计数器计数范围为0-90。计满90后回到0,开始下一轮计数。如遇hold=1时,停止计数,红灯闪烁;如遇reset=1时,计数清零,回到初始状态。程序如下:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY counter IS PORT (clock:IN
6、STD_LOGIC; reset:in std_logic; Hold:in std_logic; countNum:BuFFeR INTEGER RANGE 0 TO 90);END;ARCHITECTURE behavior OF counter IS BEGINprocess(reset,Clock)BEGINIF Reset=1 THENcountNum=0;ELSIF Clockevent and clock=1 THENIF Hold=1 thencountNum=countNum;ELSEIF countNum=90 THENcountNum=0;ELSEcountNum=cou
7、ntNum+1;END IF;END IF;END IF;END PROCESS;END;3、控制器控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译管的分译码电路。此外,当检测到特殊情况(Hold=1)发生时,无条件点亮红色的发光二极管,并且闪烁。程序如下:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY countroller IS PORT (Clock:IN STD_LOGIC; Hold:in std_logic; CountNum:in INTEGER RANGE 0 TO 89; NumA,NumB
8、:out INTEGER RANGE 0 TO 55; RedA,GreenA,YellowA:out std_logic; RedB,GreenB,YellowB:out std_logic); END;ARCHITECTURE behavior OF Countroller IS BEGINprocess(Clock)BEGINIF Clockevent and Clock=1THENIF Hold=1 THEN RedA=1; RedB=1; GreenA=0; GreenA=0; YellowA=0; YellowB=0;ELSIF CountNum=29 THEN NumA=30-C
9、ountNum; RedA=0; GreenA=1;YellowA=0; ELSIF CountNum=34 THEN NumA=35-CountNum; RedA=0; GreenA=0; YellowA=1;ELSE NumA=90-CountNum; RedA=1; GreenA=0;YellowA=0;END IF;IF Hold=1 THEN RedA=1; RedB=1; GreenA=0; GreenA=0; YellowA=0; YellowB=0;elsIF CountNum=34 THEN NumB=35-CountNum; RedB=1; GreenB=0; Yellow
10、B=0;ELSIF CountNum=84 THEN NumB=85-CountNum; RedB=0; GreenB=1; YellowB=0;ELSe NumB=90-CountNum; RedB=0; GreenB=0; YellowB=50 THENNumA=5;NumB=40 THENNumA=4;NumB=30 THENNumA=3;NumB=20 THENNumA=2;NumB=10 THENNumA=1;NumB=Numin-10;ELSE NumA=0;NumB=50 THENNumC=5;NumD=40 THENNumC=4;NumD=30 THENNumC=3;NumD=
11、20 THENNumC=2;NumD=10 THENNumC=1;NumD=Numin-10;ELSE NumC=0;NumD=Numin;END IF;END PROCESS;END;5、数码管驱动控制公共端为高电平控制相应数码管的亮、灭(共阴极数码管的公共端为高电平时,LED不亮;共阳极的公共端为低电平时,LED不亮)。程序如下:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_unsigned.ALL; ENTITY dtsm ISPORT(clk:in STD_LOGIC; hold:in std_logic; N
12、umA,NumB,NumC,NumD: in STD_LOGIC_VECTOR(3 downto 0);segout1:out STD_LOGIC_VECTOR(6 downto 0);led_sel: out STD_LOGIC_VECTOR(3 downto 0);END dtsm;architecture bhv of dtsm iscomponent bcd_data is port ( clk:in std_logic; fin:in std_logic; bcd_data:in STD_LOGIC_VECTOR(3 downto 0); segout:out STD_LOGIC_V
13、ECTOR(6 downto 0);end component; signal x:STD_LOGIC_VECTOR(3 downto 0); signal q:STD_LOGIC_VECTOR(1 downto 0);beginp2:process(clk)beginif clkevent and clk =1 then Qled_sel=0001;xled_sel=0010;xled_sel=0100;xled_sel=1000;xnull;end case;end process;u1:bcd_data PORT map(clk,hold,bcd_data=x,segout=segout
14、1);end ;6、七段数字显示LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY bcd_data ISPORT(clk:in std_logic;fin:in std_logic;bcd_data:in STD_LOGIC_VECTOR(3 downto 0); segout: out STD_LOGIC_VECTOR(6 downto 0);END;ARCHITECTURE behavior OF bcd_data IS signal time :integer range 0 to 255;beginprocess(clk)BEGINif
15、 clkevent and clk=1thenif(fin=0)thentime=0;elseif(time=255)thentime=0;elsetime=time+1;end if;end if;if(timesegoutsegoutsegoutsegoutsegoutsegoutsegoutsegoutsegoutsegoutnull;END CASE;elsesegout=0000000;end if;end if;END PROCESS;END;7、顶层模快LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; entity dingcen isport
16、( cp:in std_logic; reset,hold:in std_logic; ra,ga,ya,rb,yb,gb:out std_logic; s:out std_logic_vector(6 downto 0); l:out std_logic_vector(3 downto 0);end;Architecture a of dingcen iscomponent countrollerPORT (Clock:IN STD_LOGIC; Hold:in std_logic; CountNum:in INTEGER RANGE 0 TO 89; NumA,NumB:out INTEG
17、ER RANGE 0 TO 55; RedA,GreenA,YellowA:out std_logic; RedB,GreenB,YellowB:out std_logic); END component ;component counter PORT (clock:IN STD_LOGIC; reset:in std_logic; Hold:in std_logic; countNum:BuFFeR INTEGER RANGE 0 TO 90);END component ;component dtsm PORT(clk:in STD_LOGIC;hold:in std_logic; Num
18、A,NumB,NumC,NumD: in STD_LOGIC_VECTOR(3 downto 0);segout1:out STD_LOGIC_VECTOR(6 downto 0);led_sel: out STD_LOGIC_VECTOR(3 downto 0);END component ;component Fenwei PORT(Numin:IN integer RANGE 0 TO 55;NumA,NumB:OUT Integer RANGE 0 to 9);END component ;component Fenwei2 PORT(Numin:IN integer RANGE 0
19、TO 55;NumC,NumD:OUT Integer RANGE 0 to 9);END component ;component FreDevider PORT (Clkin:IN Std_Logic; Clkout:OUT Std_Logic);END component ;signal cp1:std_logic;signal numa1,numb1:integer ;signal cNum:integer ;signal ND1:STD_LOGIC_VECTOR(3 downto 0);signal Na1:STD_LOGIC_VECTOR(3 downto 0);signal Nb
20、1:STD_LOGIC_VECTOR(3 downto 0);signal NC1:STD_LOGIC_VECTOR(3 downto 0);beginu1:countroller port map(cp1,hold,cNum,numa1,numb1,ra,ga,ya,rb,gb,yb);u2:counter port map(cp1,reset,cNum);u3:dtsm port Map(cp,hold,Na1,Nb1,NC1,ND1,s,l);u4:Fenwei port Map(numa1,Na1,Nb1);u5:Fenwei2 port map(numb1,NC1,ND1);u6:FreDevider port map(cp,cp1);end;六、系统实现电路七、设计过程中出现的问题八、设计体会总结16