资源描述:
《vhdl语言实例练习 交通灯控制器》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一、课程设计的目的与要求1.设计目的l熟悉MAXPLUS2/QuartusII软件,掌握软件的VHDL程序输入、程序编译和程序仿真操作;l学习利用VHDL语言设计交通灯控制器电路程序。2.设计要求根据设计正文提出的交通灯控制器功能,实现交通灯控制器设计。l分析交通灯控制器的基础功能(见设计正文),在此基础上完善该交通灯控制器功能。l根据提出的真值表编写相应的VHDL程序。l对编写的程序说明其实现的功能和编程思路,描述程序中出现的端口含义。l设计者根据设计的复杂度,可以斟酌省去黄灯状态。二、设计正文设计一个交通灯控制器,实现
2、高速公路与乡间小路的交叉路口红绿灯的控制。基础功能如下:l只有在小路上发现汽车时,高速公路的交通灯才变为红灯,小路交通灯变为绿灯,但变为绿灯的持续时间为S时间。l高速公路变为绿灯之后,即使小路上再有汽车出现,而公路上无汽车,也要等待时间L公路交通灯才能变为红灯。VHDL源程序:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_UNSIGNED.all;——包含库与程序包entitytrafconisport(request,CLK,clk_fast:instd
3、_logic;big_hl,little_hl:outstd_logic_vector(0to1));——定义端口表:输入clk,request,输出big_hl,little_hlendtrafcon;architecturertloftrafconistypestatetypeis(normal,red,green);signalpresent_state,next_state:statetype;signalcount:std_logic_vector(4downto0);——定义信号present_state,ne
4、xt_statesignalclk_s,clk_l:std_logic;count,clk_s,clk_lbig_hl1,little_hl1signalbig_hl1,little_hl1:std_logic_vector(0to1);beginbig_hl<=big_hl1;little_hl<=little_hl1;p1:process(present_state,clk_s,clk_l,request)——进程P1开始begincasepresent_stateiswhennormal=>big_hl1<="01"
5、;little_hl1<="10";——正常状态下大路绿灯亮,小路红灯亮ifrequest='1'then——小路有车requst=1,状态转变。next_state<=red;elsenext_state<=normal;——否则保持endif;whenred=>big_hl1<="10";little_hl1<="01";ifclk_s='1'thennext_state<=green;——当持续S时间后状态恢复正常elsenext_state<=red;——否则继续保持大路红灯状态endif;whengreen=>b
6、ig_hl1<="01";little_hl1<="10";——当持续L时间后状态恢复正常ifclk_l='1'then——否则继续保持大路绿灯状态next_state<=normal;elsenext_state<=green;endif;endcase;endprocessp1;p2:process(clk)——进程P2开始beginifclk'eventandclk='1'thenpresent_state<=next_state;——脉冲上升沿引起状态改变endif;endprocessp2;p3:process(
7、clk_fast,present_state)——进程P3开始beginifclk_fast'eventandclk_fast='1'then——在脉冲作用下进行计时ifrequest='1'then——发生请求信号,开始清零计时count<="00000";endif;ifpresent_state=redthenifcount/="00010"thencount<=count+'1';clk_s<='0';elseclk_s<='1';——当计时达到S后,发出结束信号clk_s=1,endif;elsifpresent
8、_state=greenthenifcount/="00100"then--4count<=count+'1';clk_l<='0';else——当计时达到S后,发出结束信号clk_l=1,clk_l<='1';endif;endif;endif;endprocessp3;——进程结束endrtl;跳转