1实验三基于状态机的交通灯控制地点:31号楼312房;实验台号:12实验日期与时间:2017年12月08日评分:预习检查纪录:批改教师:报告内容:一、实验要求1、开发板上三个led等分别代表公路上红黄绿三种颜色交通灯。2、交通灯状态机初始状态为红灯,交通灯工作过程依次是红→绿→黄→红。3、为了方便观察,本次实验要求红灯的显示时间为9s,绿灯显示时间为6s,黄灯显示时间为3s,时间需要倒计时,在数码管上显示。编程之前要求同学们先画好ASM图。4、1Hz分频模块请采用第二次实验中的内容,7段码显示模块请参考书本相关内容。5、第三次实验课用到EP2C8Q208C8通过74HC595驱动数码管,有两种方法写该模块代码:方法1,用VHDL语言写,(自己写VHDL代码有加实验分)。方法2,可调用verilog数码管驱动模块,该模块在附件“seg.zip”中。和其它VHDL编写的模块可以混搭在一个电路图中使用。EP2C8Q208C8的SCTP,SHCP,SER_DATA数码管信号线通过两块74HC595集成块,再驱动数码管。6、芯片型号:cyclone:EP2C8Q208C8,开发板所有资料都在“新板”附件中,其中管脚配置在实验要求中是不对的,以“新板”附件中为准。二、实验内容1设计要求开发板上三个led等分别代表公路上红黄绿三种颜色交通灯。交通灯状态机初始状态为红灯,交通灯工作过程依次是红→绿→黄→红。本次实验要求红灯的显示时间为9s,绿灯显示时间为6s,黄灯显示时间为3s,时间需要倒计时,在数码管上显示。22设计思路(1)数码管驱动第三次实验课用到EP2C8Q208C8通过74HC595驱动数码管,有两种方法写该模块代码:方法1,用VHDL语言写,(自己写VHDL代码有加实验分)。方法2,可调用verilog数码管驱动模块,该模块在附件“seg.zip”中。和其它VHDL编写的模块可以混搭在一个电路图中使用。EP2C8Q208C8的SCTP,SHCP,SER_DATA数码管信号线通过两块74HC595集成块,再驱动数码管。(2)交通灯流程设计我根据实验要求,将实验设计分为6部分:分频器模块、复位部分、红灯部分、黄灯(红转黄时)部分、绿灯部分、扩位模块。其中复位部分包括1个状态:reset0,红灯部分包括9个状态:r1到r9,绿灯部分包括6个状态:r1到r6,黄灯部分包括3个状态:y1到y3。其中,对脉冲信号进行2的n次方分之一的分频,实现分频器分频。扩位模块采用补0操作实现将4位二进制数转为16位二进制数。33ASM图设计17个状态,包括1个复位状态,9个红灯状态,6个绿灯状态,交通灯控制的ASM图如图1所示。图1交通灯控制的ASM图4VHDL描述(1)分频器描述-----------------------------------------------------------VHDLexperience2--FENPINQI--DIV50MHzinto1Hzreset0g1r1y1r9r8r7r6r5r4r3r2g2g3g4g6g5y3y2红灯红灯绿灯4--QuartusIIversion:QuartusII9.0--ChenYirong--2017.11.24-----------------------------------------------------------includelibraryLIBRARYIEEE;--IEEELibrary--includepackageUSEIEEE.std_logic_1164.ALL;--usepackageUSEIEEE.std_logic_unsigned.all;-----------------------------------------------------------introduceentityENTITYclkdiv_15dianzhuo_12is--shiti--changentochangefrequenceGENERIC(n:integer:=50000000);--leishucanshuPORT(clk:INstd_logic;Y:OUTstd_logic);ENDENTITY;-----------------------------------------------------------describearchitectureARCHITECTUREbehavOFclkdiv_15dianzhuo_12IS--structureSIGNALcount:integerRANGEn-1DOWNTO0:=n-1;--COUNTERBEGINPROCESS(clk)BEGINIF(rising_edge(clk))thencount=count-1;--dijianif(count=n/2)thenY='0';--fenpinelseY='1';5endif;if(count=0)thencount=n-1;endif;ENDIF;ENDPROCESS;ENDbehav;---------------------------------------------------------(2)交通灯控制描述-----------------------------------------------------------VHDLexperience3--traffic_light_machinestate--sanjinchengzhuangtaiji--QuartusIIversion:QuartusII9.0--ChenYirong--2017.12.08-----------------------------------------------------------includelibraryLIBRARYIEEE;--IEEELibrary--includepackageUSEIEEE.std_logic_1164.ALL;--usepackageUSEIEEE.std_logic_unsigned.all;-----------------------------------------------------------introduceentityENTITYtraffic_light_machinestateis--shitiPORT(clk:INstd_logic;--clockrst_n:INstd_logic;--reset,lowlevelvalidred_light:OUTstd_logic;--lowlevelvalidgreen_light:OUTstd_logic;--lowlevelvalidyellow_light:OUTstd_logic;--lowlevelvalid6holdtime:OUTintegerrange0TO9);--showtimeENDENTITY;-----------------------------------------------------------describearchitectureARCHITECTUREBehavOFtraffic_light_machinestateIS--jiegouti--describeallstateTYPEstate_typeIS(reset0,r1,r2,r3,r4,r5,r6,r7,r8,r9,g1,g2,g3,g4,g5,g6,y1,y2,y3);SIGNALpresent_state,next_state:state_type;--shuangjinchengzhuangtaijiBEGIN-----------------------------------------------------------seqprocess:createstateseq:PROCESS(clk,rst_n)BEGINIF(rst_n='0')THEN--fuweishihongdengliangpresent_state=reset0;ELSIF(rising_edge(clk))THENpresent_state=next_state;ENDIF;ENDPROCESS;-----------------------------------------------------------comprocess:createnextstateandoutputlogiccom:PROCESS(next_state)BEGINred_light='0';green_light='1';yellow_light='1';holdtime=0;CASEpresent_stateISWHENreset0=--fuweistate7red_light='0';green_light='1';yellow_light='1';holdtime=0;next_state=r1;WHENr1=--redlightresttime=9red_light='0';green_light='1';yellow_light='1';holdtime=9;next_state=r2;WHENr2=--redlightresttime=8red_light='0';green_light='1';yellow_light='1';holdtime=8;next_state=r3;WHENr3=--redlightresttime=7red_light='0';green_light='1';yellow_light='1';holdtime=7;next_state=r4;WHENr4=--redlightresttime=6red_light='0';green_light='1';yellow_light='1';holdtime=6;next_state=r5;WHENr5=--redlightresttime=58red_light='0';green_light='1';yellow_light='1';holdtime=5;next_state=r6;WHENr6=--redlightresttime=4red_light='0';green_light='1';yellow_light='1';holdtime=4;next_state=r7;WHENr7=--redlightresttime=3red_light='0';green_light='1';yellow_light='1';holdtime=3;next_state=r8;WHENr8=--redlightresttime=2red_light='0';green_light='1';yellow_light='1';holdtime=2;next_state=r9;WHENr9=--redlightresttime=1red_light='0';green_light='1';yellow_light='1';holdtime=1;next_state=g1;WHENg1=--greenlightresttime=69red_light='1';green_light='0';yellow_light='1';holdtime=6;next_state=g2;WHENg2=--greenlightresttime=5red_light='1';green_light='0';yellow_light='1';holdtime=5;next_state=g3;WHENg3=--greenlightresttime=4red_light='1';green_light='0';yellow_light='1