信息科学与工程学院2019-2020学年第二学期实验报告课程名称:电子设计自动化实验名称:实验四有限状态机设计专业班级通信工程二班学生学号201800121050学生姓名孟麟芝实验时间2020年5月山东大学·电子设计自动化·实验报告-1-实验报告【实验目的】1.掌握使用VHDL语言进行硬件设计的基本方法2.掌握基本的QuartusⅡ使用方法3.学会testbench的编写,掌握波形仿真的基本方法4.掌握有限状态机设计方法【实验要求】1.设计一个交通红绿灯控制器模块,实现主干道和支路之间红绿黄灯的信号转换。2.设计一个10层楼的电梯控制器模块,要求:(1)时间先后优先级;(2)位置先后优先级。【实验具体内容】【第一个实验】1.实验原理状态转换图2.设计模块代码(DesignBlock)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYTRAFFICISPORT(CLK,RST:INSTD_LOGIC;山东大学·电子设计自动化·实验报告-2-YM,GM,RM,YF,GF,RF:OUTSTD_LOGIC);ENDTRAFFIC;ARCHITECTUREBHVOFTRAFFICISTYPESTATESIS(ST0,ST1,ST2,ST3);SIGNALPST:STATES;BEGINPROCESS(CLK,RST)VARIABLECNT:INTEGERRANGE0TO45;BEGINIFRST='1'THENPST=ST0;CNT:=0;ELSIFRISING_EDGE(CLK)THENCASEPSTISWHENST0=YM='0';GM='1';RM='0';YF='0';GF='0';RF='1';CNT:=CNT+1;IF(CNT=45)THENPST=ST1;CNT:=0;ENDIF;WHENST1=YM='1';GM='0';RM='0';YF='0';GF='0';RF='1';CNT:=CNT+1;IF(CNT=5)THENPST=ST2;山东大学·电子设计自动化·实验报告-3-CNT:=0;ENDIF;WHENST2=YM='0';GM='0';RM='1';YF='0';GF='1';RF='0';CNT:=CNT+1;IF(CNT=25)THENPST=ST3;CNT:=0;ENDIF;WHENST3=YM='0';GM='0';RM='1';YF='1';GF='0';RF='0';CNT:=CNT+1;IF(CNT=5)THENPST=ST0;CNT:=0;ENDIF;WHENOTHERS=PST=ST0;CNT:=0;ENDCASE;ENDIF;ENDPROCESS;ENDBHV;3.激励模块代码(TestBench)LIBRARYieee;山东大学·电子设计自动化·实验报告-4-USEieee.std_logic_1164.all;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYTRAFFIC_vhd_tstISENDTRAFFIC_vhd_tst;ARCHITECTURETRAFFIC_archOFTRAFFIC_vhd_tstISSIGNALCLK1:STD_LOGIC;SIGNALGF1:STD_LOGIC;SIGNALGM1:STD_LOGIC;SIGNALRF1:STD_LOGIC;SIGNALRM1:STD_LOGIC;SIGNALRST1:STD_LOGIC;SIGNALYF1:STD_LOGIC;SIGNALYM1:STD_LOGIC;COMPONENTTRAFFICPORT(CLK:INSTD_LOGIC;GF:OUTSTD_LOGIC;GM:OUTSTD_LOGIC;RF:OUTSTD_LOGIC;RM:OUTSTD_LOGIC;RST:INSTD_LOGIC;YF:OUTSTD_LOGIC;YM:OUTSTD_LOGIC);ENDCOMPONENT;CONSTANTCLK_P:TIME:=500MS;BEGINi1:TRAFFICPORTMAP(山东大学·电子设计自动化·实验报告-5-CLK=CLK1,GF=GF1,GM=GM1,RF=RF1,RM=RM1,RST=RST1,YF=YF1,YM=YM1);PROCESSBEGINCLK1='0';WAITFORCLK_P;CLK1='1';WAITFORCLK_P;ENDPROCESS;RST1='1','0'AFTER3000MS;ENDTRAFFIC_arch;4.仿真波形图最初三秒令RST为‘1’使之回到零状态山东大学·电子设计自动化·实验报告-6-三秒后开始ST0,主干道绿灯亮,支路红灯亮,持续45秒而后进入ST1,主干道黄灯亮,支路红灯亮,持续5秒之后进入ST2,支路绿灯亮,主干道红灯亮,持续25秒山东大学·电子设计自动化·实验报告-7-之后进入ST3,支路黄灯亮,主干道红灯亮,持续5秒,之后即回到ST05.门级电路图(1)使用顺序编码山东大学·电子设计自动化·实验报告-8-如上图为使用格雷码资源占用情况如上图为使用onehot码的资源占用,可见格雷码对资源的占用相对稍小,对于两种编码方式,EP4CE6E22C6这一款芯片都可满足需求6.结果分析与思考该设计实现了红绿灯的功能,缺点在于红绿灯时间无法灵活控制,另外其准确性依赖山东大学·电子设计自动化·实验报告-9-于时钟信号的准确性,若加入分频器和高频稳定的震荡,则时间控制会更准确【第二个实验】1.实验原理该电梯选择的是方向优先控制方案。电梯应当满足下面一些基本的要求:1).检测上方是否存在请求,存在电梯则运行,不存在则保持停靠2).检测下方是否存在请求,存在电梯则运行,不存在则保持停靠3).检测当前层是否存在请求,存在则开门,不存在则保持停靠4).经过请求楼层时要有开门停靠时间,并清除该层的请求(由于缺乏键盘、显示管等,清除请求这一点暂不予考虑)5).电梯要能显示当前所在的楼层2.设计模块代码(DesignBlock)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYELEVATORISPORT(CLK,RST:INSTD_LOGIC;UPP:INSTD_LOGIC_VECTOR(10DOWNTO1);DOWNN:INSTD_LOGIC_VECTOR(10DOWNTO1);INSIDE:INSTD_LOGIC_VECTOR(10DOWNTO1);POSITION:OUTINTEGERRANGE1TO10;DOOR_LIGHT:OUTSTD_LOGIC);ENDELEVATOR;ARCHITECTUREBHVOFELEVATORISTYPESTATESIS(UPING,DOWNING,STOPPING,OPENDOOR);SIGNALUPREC1:STD_LOGIC_VECTOR(10DOWNTO1):=0000000000;SIGNALDOWNREC1:STD_LOGIC_VECTOR(10DOWNTO1):=0000000000;SIGNALPST:STATES;山东大学·电子设计自动化·实验报告-10-SIGNALWAITT:STATES;BEGINPROCESS(UPP,INSIDE)BEGINUPREC1=UPPORINSIDE;ENDPROCESS;PROCESS(DOWNN,INSIDE)BEGINDOWNREC1=DOWNNORINSIDE;ENDPROCESS;PROCESS(CLK,RST)VARIABLEUPREC2:STD_LOGIC_VECTOR(10DOWNTO1):=0000000000;VARIABLEDOWNREC2:STD_LOGIC_VECTOR(10DOWNTO1):=0000000000;VARIABLECMP:STD_LOGIC_VECTOR(10DOWNTO1):=0000000000;VARIABLELEVEL:INTEGERRANGE1TO10:=1;VARIABLECNT,JUDGE1:INTEGERRANGE0TO10:=0;VARIABLEJUDGE2:INTEGERRANGE0TO11:=0;BEGINIFRST='1'THENPST=STOPPING;POSITION=1;DOOR_LIGHT='0';--RST高电平为复位操作ELSIFRISING_EDGE(CLK)THENPOSITION=LEVEL;CASEPSTISWHENSTOPPING=WAITT=STOPPING;CMP:=UPREC1ORDOWNREC1;JUDGE1:=0;L0:FORIIN10DOWNTO1LOOP山东大学·电子设计自动化·实验报告-11-IF(CMP(I)='1')THENJUDGE1:=I;EXIT;ELSENEXTL0;ENDIF;ENDLOOP;IF(JUDGE1=0)THENPST=STOPPING;ELSIF(JUDGE1=LEVEL)THENPST=OPENDOOR;ELSIF(JUDGE1LEVEL)THENPST=DOWNING;ELSEPST=UPING;ENDIF;--判断应当向上/向下WHENUPING=WAITT=UPING;UPREC2:=UPREC1;L11:FORIIN10DOWNTO1LOOPIF(UPREC1(I)='1'ORDOWNREC1(I)='1')THENJUDGE1:=I;EXIT;ELSENEXTL11;ENDIF;ENDLOOP;--L11是为了判断有请求的最高楼层山东大学·电子设计自动化·实验报告-12-L12:FORIIN10DOWNTO1LOOPIF(UPREC1(I)='1'ANDI=10)THENJUDGE2:=I;EXIT;ELSIF(UPREC1(I)='1')THENJUDGE2:=I+1;UPREC2(10DOWNTO(JUDGE2+1)):=DOWNREC1(10DOWNTO(JUDGE2+1));EXIT;ELSENEXTL12;ENDIF;ENDLOOP;--L12是为了判断有向上请求的最高楼层的上一层LEVEL:=LEVEL+1;IF(UPREC2(LEVEL)='1')THEN--在上升过程中也可以响应新的请求PST=OPENDOOR;ELSEIF(LEVEL=JUDGE1)THENPST=STOPPING;LEVEL:=LEVEL-1;--这里是为了消除上面加一的影响ELSEPST=UPING;ENDIF;ENDIF;WHENDOWNING=WAITT=DOWNING;DOWNREC2:=DOWNREC1ORUPREC1;L21:FORIIN1TO10LOOPIF(DOWNREC2(I)='1')THEN山东大学·电子设计自动化·实验报告-13-JUDGE1:=I;EXIT;ELSENEXTL21;ENDIF;ENDLOOP;--L21的作用与L11恰好相反L22:FORIIN1TO10LOOPIF(DOWNREC1(I)='1'ANDI=1)THENJUDGE2:=I;EXIT;ELSIF(DOWNREC1(I)='1')THENJUDGE2:=I;DOWNREC2((JUDGE2-1)DOWNTO1):=UPREC1((JUDGE2-1)DOWNTO1);EXIT;ELSENEXTL22;ENDIF;ENDLOOP;--L22是为了判断有向下请求的最低楼层的下一层LEVEL:=LEVEL-1;IF(DOWNREC2(LEVEL)='1')THEN--与向上时相似PST=OPENDOOR;ELSEIF(LEVEL=J