交通灯信号控制设计.docx
《交通灯信号控制设计.docx》由会员分享,可在线阅读,更多相关《交通灯信号控制设计.docx(24页珍藏版)》请在冰豆网上搜索。
交通灯信号控制设计
EDA技术实验报告册
班 级:
姓 名:
学 号:
指导教师:
开课时间:
2013至2014学年第1学期
实验名称
交通灯信号控制设计
实验时间
2013年12月05日
姓名
实验成绩
一、实验目地
1.掌握VHDL语言地基本结构.
2.掌握VHDL层次化地设计方法.
3.掌握VHDL基本逻辑电路地综合设计应用.
二、实验设备
计算机软件:
QuartusII
EDA实验箱.主芯片:
EPM7128SLC84-15或EP1K100QC208-3.下载电缆,导线等.
三、实验内容
设计并调试好一个由一条主干道和一条支干道地汇合点形成地十字交叉路口地交通灯控制器,具体要求如下:
1.主、支干道各设一个绿、黄、红指示灯,两个显示数码管.
2.主干道处于常允许通行状态,而支干道有车来时才允许通行.当主干道允许通行亮绿灯时,支干道亮红灯.而支干道允许通行亮绿灯时,主干道亮红灯.
3.当主、支干道均有车时,两者交替允许通行,主干道每次放行45S,支干道每次放行25S,在每次由亮绿灯变成亮红灯地转换过程中,要亮5S地黄灯作为过渡,并进行减计时显示.
要求编写交通灯控制器电路逻辑图中地各个模块地VHDL语言程序,并完成交通灯控制器地顶层设计,然后利用开发工具软件对其进行编译和仿真,最后要通过实验开发系统对其进行硬件验证.
(一)编写交通灯控制器JTDKZ模块地VHDL程序,并对其进行编译和仿真,初步验证设计地正确性.
LIBRARYIEEE。
USEIEEE.STD_LOGIC_1164.ALL。
ENTITYJTDKZIS
PORT(CLK,SM,SB:
INSTD_LOGIC。
MR,MY,MG,BR,BY,BG:
OUTSTD_LOGIC)。
ENDENTITYJTDKZ。
ARCHITECTUREARTOFJTDKZIS
TYPESTATE_TYPEIS(A,B,C,D)。
SIGNALSTATE:
STATE_TYPE。
signalcnt:
integerrange0to45。
BEGIN
PROCESS(CLK)IS
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
CASESTATEIS
WHENA=>
IF(SBANDSM)='1'THEN
IFCNT=44THEN
CNT<=0。
STATE<=B。
ELSE
CNT<=CNT+1。
STATE<=A。
ENDIF。
ELSIF(SBAND(NOTSM))='1'THEN
STATE<=B。
CNT<=0。
ELSESTATE<=A。
CNT<=0。
ENDIF。
WHENB=>
IFCNT=4THEN
CNT<=0。
STATE<=C。
ELSE
CNT<=CNT+1。
STATE<=B。
ENDIF。
WHENC=>
IF(SMANDSB)='1'THEN
IFCNT=24THEN
CNT<=0。
STATE<=D。
ELSE
CNT<=CNT+1。
STATE<=C。
ENDIF。
ELSIFSB='0'THEN
STATE<=D。
CNT<=0。
ELSESTATE<=C。
CNT<=0。
ENDIF。
WHEND=>
IFCNT=4THEN
CNT<=0。
STATE<=A。
ELSE
CNT<=CNT+1。
STATE<=D。
ENDIF。
ENDCASE。
ENDIF。
ENDPROCESS。
RGY:
PROCESS(STATE)IS
BEGIN
CASESTATEIS
WHENA=>
MR<='0'。
MY<='0'。
MG<='1'。
BR<='1'。
BY<='0'。
BG<='0'。
WHENB=>
MR<='0'。
MY<='1'。
MG<='0'。
BR<='1'。
BY<='0'。
BG<='0'。
WHENC=>
MR<='1'。
MY<='0'。
MG<='0'。
BR<='0'。
BY<='0'。
BG<='1'。
WHEND=>
MR<='1'。
MY<='0'。
MG<='0'。
BR<='0'。
BY<='1'。
BG<='0'。
ENDCASE。
ENDPROCESSRGY。
ENDARCHITECTUREART。
(二)编写45S定时单元CNT45S模块地VHDL程序,并对其进行编译和仿真,初步验证设计地正确性.
--45s定时模块源程序CNT45S.VHD
LIBRARYIEEE。
USEIEEE.STD_LOGIC_1164.ALL。
USEIEEE.STD_LOGIC_UNSIGNED.ALL。
ENTITYtime_45sIS
PORT(SB,SM,CLK,EN45:
INSTD_LOGIC。
DOUT45M,DOUT45B:
OUTSTD_LOGIC_VECTOR(7DOWNTO0))。
ENDENTITYtime_45s。
ARCHITECTUREARTOFtime_45sIS
SIGNALCNT6B:
STD_LOGIC_VECTOR(5DOWNTO0)。
BEGIN
PROCESS(SB,SM,CLK,EN45)IS
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
IFSB='1'ANDSM='1'THEN
IFEN45='1'THENCNT6B<=CNT6B+1。
ELSECNT6B<="000000"。
ENDIF。
ELSECNT6B<="000000"。
ENDIF。
ENDIF。
ENDPROCESS。
PROCESS(CNT6B)IS
BEGIN
CASECNT6BIS
WHEN"000000"=>DOUT45M<="01000101"。
DOUT45B<="01010000"。
--BCD数45,50
WHEN"000001"=>DOUT45M<="01000100"。
DOUT45B<="01001001"。
--BCD数44,49
WHEN"000010"=>DOUT45M<="01000011"。
DOUT45B<="01001000"。
--BCD数43,48
WHEN"000011"=>DOUT45M<="01000010"。
DOUT45B<="01000111"。
--BCD数42,48
WHEN"000100"=>DOUT45M<="01000001"。
DOUT45B<="01000110"。
--BCD数41,50
WHEN"000101"=>DOUT45M<="01000000"。
DOUT45B<="01000101"。
--BCD数40,49
WHEN"000110"=>DOUT45M<="00111001"。
DOUT45B<="01000100"。
--BCD数39,48
WHEN"000111"=>DOUT45M<="00111000"。
DOUT45B<="01000011"。
--BCD数38,48
WHEN"001000"=>DOUT45M<="00110111"。
DOUT45B<="01000010"。
--BCD数37,50
WHEN"001001"=>DOUT45M<="00110110"。
DOUT45B<="01000001"。
--BCD数36,49
WHEN"001010"=>DOUT45M<="00110101"。
DOUT45B<="01000000"。
--BCD数35,48
WHEN"001011"=>DOUT45M<="00110100"。
DOUT45B<="00111001"。
--BCD数34,48
WHEN"001100"=>DOUT45M<="00110011"。
DOUT45B<="00111000"。
--BCD数33,50
WHEN"001101"=>DOUT45M<="00110010"。
DOUT45B<="00110111"。
--BCD数32,49
WHEN"001110"=>DOUT45M<="00110001"。
DOUT45B<="00110110"。
--BCD数31,48
WHEN"001111"=>DOUT45M<="00110000"。
DOUT45B<="00110101"。
--BCD数30,48
WHEN"010000"=>DOUT45M<="00101001"。
DOUT45B<="00110100"。
--BCD数29,50
WHEN"010001"=>DOUT45M<="00101000"。
DOUT45B<="00110011"。
--BCD数28,49
WHEN"010010"=>DOUT45M<="00100111"。
DOUT45B<="00110010"。
--BCD数27,48
WHEN"010011"=>DOUT45M<="00100110"。
DOUT45B<="00110001"。
--BCD数26,48
WHEN"010100"=>DOUT45M<="00100101"。
DOUT45B<="00110000"。
--BCD数25,50
WHEN"010101"=>DOUT45M<="00100100"。
DOUT45B<="00101001"。
--BCD数24,49
WHEN"010110"=>DOUT45M<="00100011"。
DOUT45B<="00101000"。
--BCD数23,48
WHEN"010111"=>DOUT45M<="00100010"。
DOUT45B<="00100111"。
--BCD数22,48
WHEN"011000"=>DOUT45M<="00100001"。
DOUT45B<="00100110"。
--BCD数21,50
WHEN"011001"=>DOUT45M<="00100000"。
DOUT45B<="00100101"。
--BCD数20,49
WHEN"011010"=>DOUT45M<="00011001"。
DOUT45B<="00100100"。
--BCD数19,48
WHEN"011011"=>DOUT45M<="00011000"。
DOUT45B<="00100011"。
--BCD数18,48
WHEN"011100"=>DOUT45M<="00010111"。
DOUT45B<="00100010"。
--BCD数17,50
WHEN"011101"=>DOUT45M<="00010110"。
DOUT45B<="00100001"。
--BCD数16,49
WHEN"011110"=>DOUT45M<="00010101"。
DOUT45B<="00100000"。
--BCD数15,48
WHEN"011111"=>DOUT45M<="00010100"。
DOUT45B<="00011001"。
--BCD数14,48
WHEN"100000"=>DOUT45M<="00010011"。
DOUT45B<="00011000"。
--BCD数13,50
WHEN"100001"=>DOUT45M<="00010010"。
DOUT45B<="00010111"。
--BCD数12,49
WHEN"100010"=>DOUT45M<="00010001"。
DOUT45B<="00010110"。
--BCD数11,48
WHEN"100011"=>DOUT45M<="00010000"。
DOUT45B<="00010101"。
--BCD数10,48
WHEN"100100"=>DOUT45M<="00001001"。
DOUT45B<="00010100"。
--BCD数9,50
WHEN"100101"=>DOUT45M<="00001000"。
DOUT45B<="00010011"。
--BCD数8,49
WHEN"100110"=>DOUT45M<="00000111"。
DOUT45B<="00010010"。
--BCD数7,48
WHEN"100111"=>DOUT45M<="00000110"。
DOUT45B<="00010001"。
--BCD数6,48
WHEN"101000"=>DOUT45M<="00000101"。
DOUT45B<="00010000"。
--BCD数5,50
WHEN"101001"=>DOUT45M<="00000100"。
DOUT45B<="00001001"。
--BCD数4,49
WHEN"101010"=>DOUT45M<="00000011"。
DOUT45B<="00001000"。
--BCD数3,48
WHEN"101011"=>DOUT45M<="00000010"。
DOUT45B<="00000111"。
--BCD数2,07
WHEN"101100"=>DOUT45M<="00000001"。
DOUT45B<="00000110"。
--BCD数1,06
WHENOTHERS=>DOUT45M<="00000000"。
DOUT45B<="00000000"。
--BCD数00,00
ENDCASE。
ENDPROCESS。
ENDARCHITECTUREART。
(三)编写25S定时单元CNT25S模块地VHDL程序,并对其进行编译和仿真,初步验证设计地正确性.
--25s定时模块源程序CNT25S.VHD
LIBRARYIEEE。
USEIEEE.STD_LOGIC_1164.ALL。
USEIEEE.STD_LOGIC_UNSIGNED.ALL。
ENTITYtime_25sIS
PORT(SB,SM,CLK,EN25:
INSTD_LOGIC。
DOUT25M,DOUT25B:
OUTSTD_LOGIC_VECTOR(7DOWNTO0))。
ENDENTITYtime_25s。
ARCHITECTUREARTOFtime_25sIS
SIGNALCNT_5Bit:
STD_LOGIC_VECTOR(4DOWNTO0)。
BEGIN
PROCESS(SB,SM,CLK,EN25)IS
BEGIN
IFSB='0'ORSM='0'THEN
CNT_5Bit<="00000"。
ELSIF(CLK'EVENTANDCLK='1')THEN
IFEN25='1'THEN
CNT_5Bit<=CNT_5Bit+1。
ELSIFEN25='0'THEN
CNT_5Bit<="00000"。
ENDIF。
ENDIF。
ENDPROCESS。
PROCESS(CNT_5Bit)IS
BEGIN
CASECNT_5BitIS
WHEN"00000"=>DOUT25B<="00100101"。
DOUT25M<="00110000"。
--BCD数25,50
WHEN"00001"=>DOUT25B<="00100100"。
DOUT25M<="00101001"。
--BCD数24,49
WHEN"00010"=>DOUT25B<="00100011"。
DOUT25M<="00101000"。
--BCD数23,48
WHEN"00011"=>DOUT25B<="00100010"。
DOUT25M<="00100111"。
--BCD数22,48
WHEN"00100"=>DOUT25B<="00100001"。
DOUT25M<="00100110"。
--BCD数21,50
WHEN"00101"=>DOUT25B<="00100000"。
DOUT25M<="00100101"。
--BCD数20,49
WHEN"00110"=>DOUT25B<="00011001"。
DOUT25M<="00100100"。
--BCD数19,48
WHEN"00111"=>DOUT25B<="00011000"。
DOUT25M<="00100011"。
--BCD数18,48
WHEN"01000"=>DOUT25B<="00010111"。
DOUT25M<="00100010"。
--BCD数17,50
WHEN"01001"=>DOUT25B<="00010110"。
DOUT25M<="00100001"。
--BCD数16,49
WHEN"01010"=>DOUT25B<="00010101"。
DOUT25M<="00100000"。
--BCD数15,48
WHEN"01011"=>DOUT25B<="00010100"。
DOUT25M<="00011001"。
--BCD数14,48
WHEN"01100"=>DOUT25B<="00010011"。
DOUT25M<="00011000"。
--BCD数13,50
WHEN"01101"=>DOUT25B<="00010010"。
DOUT25M<="00010111"。
--BCD数12,49
WHEN"01110"=>DOUT25B<="00010001"。
DOUT25M<="00010110"。
--BCD数11,48
WHEN"01111"=>DOUT25B<="00010000"。
DOUT25M<="00010101"。
--BCD数10,48
WHEN"10000"=>DOUT25B<="00001001"。
DOUT25M<="00010100"。
--BCD数9,50
WHEN"10001"=>DOUT25B<="00001000"。
DOUT25M<="00010011"。
--BCD数8,49
WHEN"10010"=>DOUT25B<="00000111"。
DOUT25M<="00010010"。
--BCD数7,48
WHEN"10011"=>DOUT25B<="00000110"。
DOUT25M<="00010001"。
--BCD数6,48
WHEN"10100"=>DOUT25B<="00000101"。
DOUT25M<="00010000"。
--BCD数5,50
WHEN"10101"=>DOUT25B<="00000100"。
DOUT25M<="00001001"。
--BCD数4,49
WHEN"10110"=>DOUT25B<="00000011"。
DOUT25M<="00001000"。
--BCD数3,48
WHEN"10111"=>DOUT25B<="00000010"。
DOUT25M<="00000111"。
--BCD数2,07
WHEN"11000"=>DOUT25B<="00000001"。
DOUT25M<="00000110"。
--BCD数1,06
WHENOTHERS=>DOUT25B<="00000000"。
DOUT25M<="00000000"。
--BCD数00,00
ENDCASE。
ENDPROCESS。
ENDARCHITECTUREART。
(四)编写5S定时单元CNT05S模块地VHDL程序,并对其进行编译和仿真,初步验证设计地正确性.
--5s定时模块源程序CNT05S.VHD
LIBRARYIEEE。
USEIEEE.STD_LOGIC_1164.ALL。
USEIEEE.STD_LOGIC_UNSIGNED.ALL。
ENTITYtime_5sIS
PORT(CLK,EN05M,EN05B:
INSTD_LOGIC。
DOUT5:
OUTSTD_LOGIC_VECTOR(7DOWNTO0))。
ENDENTITYtime_5s。
ARCHITECTUREARTOFtime_5sIS
SIGNALCNT_3Bit:
STD_LOGIC_VECTOR(2DOWNTO0)。
BEGIN
PROCESS(CLK,EN05M,EN05B)IS
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
IFEN05M='1'OREN05B='1'THEN
CNT_3Bit<=CNT_3Bit+1。
ELSE
CNT_3Bit<="000"。
ENDIF。
ENDIF。
ENDPROCESS。
PROCESS(CNT_3Bit)IS
BEGIN
CASECNT_3BitIS
WHEN"000"=>DOUT5<="00000101"。
--BCD数05
WHEN"001"=>DOUT5<="00000100"。
--BCD数04
WHEN"010"=>DOUT5<="00000011"。
--BCD数03
WHEN"011"=>DOUT5<="00000010"。
--BCD数02
WHEN"100"=>DOUT5<="00000001"。
--BCD数01
WHENOTHERS=>DOUT5<="00000000"。
--BCD数00
ENDCASE。
ENDPROCESS。
ENDARCHITECTUREART。
(五)编写显示控制单元XSKZ模块地VHDL程序,并对其进行编译和仿真,初步验证设计地正确性.
--显示控制模块源程序XSKZ.VHD
LIBRARYIEEE。
USEIEEE.STD_LOGIC_1164.ALL。
USEIEEE.STD_LOGIC_UNSIGNED.ALL。
ENTITYXSKZIS
PORT(EN45,EN25,EN05M,EN05B:
INSTD_LOGIC。
AIN45M,AIN45B:
INSTD_LOGIC_VECTOR(7DOWNTO0)。
AIN25M,AIN25B,AIN05:
INSTD_LOGIC_VECTOR(7DOWNTO0)。
dec_