交通灯毕业论文drmc.docx
VHDL语言课程设计报告目录 前言:1 一、设设计任务务:2 二、题题目分析析与整体体构思:2三、硬件件电路设设计:3四、程序序设计:77 五、心心得体会会:220 六、设设计创新新:20 七七、参考考文献:220前 言伴随着社社会的发发展以及及人类生生活水平平的提高高,汽车车的数量量在D的的DEAA技术的的发展和和应用领领域的扩扩大与深深入,EEDA技技术在电电子信息息,通信信,自动动,控制制及计算算机应用用等领域域的重要要性日益益突出。随随着技术术市场与与人才市市场对DDEA的的不断的的增加,交通的的问题日日益突出出,单单单依靠人人力来指指挥交通通已经不不可行了了,所以以,设计计交通灯灯来完成成这个需需求就显显的越加加迫切了了.为了了确保十十字路口口的行人人和车辆辆顺利、畅畅通地通通过,往往往采用用电子控控制的交交通信号号来进行行指挥。以以下就是是运用数数字电子子设计出出的交通通灯:其其中红灯灯亮,表表示该条条路禁止止通行;黄灯亮亮表示停停车;绿绿灯亮表表示允许许通行。一设计计任务设计一个个十字路路口的交交通灯控控制系统统,用实实验平台台上的LLED发发光二极极管显示示车辆通通过的方方向(东东西和南南北各一一组),用用数码管管显示该该方向的的剩余时时间。要要求:工工作顺序序为东西西方向红红灯亮445秒,前前40秒秒南北方方向绿灯灯亮,后后5秒黄黄灯亮。然然后南北北方向红红灯亮445秒,前前40秒秒东西方方向绿灯灯亮,后后5秒黄黄灯亮。依依次重复复。有紧紧急事件件时允许许将某方方向一直直开绿灯灯或者开开红灯,另另外允许许特定情情况两方方向均为为红灯,车车辆禁行行,比如如十字路路口恶性性交通事事故时,东东西,南南北两个个方向均均有两位位数码管管适时显显示该方方向亮灯灯时间。二、题目目分析与与整体构构思(1)该该交通灯灯控制器器应具备备的功能能设东西和和南北方方向的车车流量大大致相同同,因此此红、黄黄、绿灯灯的时长长也相同同,定为为红灯445seec,黄黄灯5ssec,绿绿灯400secc,同时时用数码码管指示示当前状状态(红红、黄、绿绿)剩余余时间。另另外,设设计一个个紧急状状态,当当紧急状状态出现现时,两两个方向向都禁止止通行,指指示红灯灯。紧急急状态解解除后,重重新计数数并指示示时间。(2) 实现方方案 一 从题目目中计数数值与交交通灯的的亮灭的的关系如如图(11)所示示三硬件件电路设设计(1)分分频器分频器实实现的是是将高频频时钟信信号转换换成底频频的时钟钟信号,用用于触发发控制器器、计数数器和扫扫描显示示电路。该该分频器器实现的的是一千千分频,将将一千赫赫兹的时时钟信号号分频成成一赫兹兹的时钟钟信号。(2)控控制器设计控制器的的作用是是根据计计数器的的计数值值控制发发光二极极管的亮亮、灭,以以及输出出倒计时时数值给给七段数数码管的的分位译译码电路路。此外外,当检检测到特特殊情况况(HOOLD=1)发生生时,无无条件点点亮红灯灯的二极极管。本本控制器器可以有有两种设设计方法法,一种种是利用用时钟烟烟的下降降沿读取取前级计计数器的的计数值值,然后后作出反反应;另另一种则则是将本本模块设设计成纯纯组合逻逻辑电路路,不需需要时钟钟驱动。这两种方法各有所长,必须根据所用器件的特性进行选择:比如有些FPGA有丰富的寄存器资源,而且可用与组合逻辑的资源则相对较少,那么使用第一种方法会比较节省资源;而有些CPLD的组合逻辑资源则比较多,用第二种方法可能更好。(3)计计数器设设计这里需要要的计数数器的计计数范围围为0-90。计计到900后,下下一个时时钟沿回回复到00,开始始下一轮轮计数。此此外,当当检测到到特殊情情况(HHOLDD=1)发生生是,计计数器暂暂停计数数,而系系统复位位信号RRESEET则使使计数器器异步清清零。(4)分分位译码码电路设设计-1 因为控控制器输输出的到到计时数数值可能能是1位位或者22位十进进制数,所所以在七七段数码码管的译译码电路路前要加加上分位位电路(即即将其分分为2个个1位的的十进制制数,如如25分分为2和和5,77分为00和7)。 与控制制器一样样,分位位电路同同样可以以由时钟钟驱动,也也可以设设计成纯纯组合逻逻辑电路路。控制制器中,引引入了寄寄存器。为为了让读读者开拓拓眼界,分分位电路路就用组组合逻辑辑电路实实现。(5)分分位译码码电路设设计2(6)数数码管驱驱动设计计 串行连连接,即即每个数数码管对对应的引引脚都接接在一起起(如每每个数码码管的aa引脚都都接到一一起,然然后再接接到CPPLD/FPGGA上的的一个引引脚上),通通过控制制公共端端为高电电平控制制相应数数码管的的亮、灭灭(共阴阴极数码码管的公公共端为为高电平平时,LLED不不亮;共共阳极的的公共端端为低电电平时,LLED不不亮)。 串行行法的优优点在于于消耗的的系统资资源少,占占用的II/O口口少,NN个数码码管只需需要(77+N)个个引脚(如如果需要要小数点点,则是是(8+N)个个引脚)。其其缺点是是控制起起来不如如并行法法容易。(7)下下图为交交通灯控控制器的的顶层文文件连接接图四、程序序设计(1)分分频器的的设计LIBRRARYY IEEEE;USE IEEEE.SStd_Loggic_11664.AALL;ENTIITY FreeDevvideer IISPORTT (CClkiin:IIN SStd_Loggic; CClkoout:OUTT Sttd_LLogiic);END;ARCHHITEECTUURE Devvideer OOF FFreDDeviiderr ISSCONSSTANNT NN:Inntegger:=4999;signnal couunteer:IInteegerr raangee 0 to N;signnal Clkk:Sttd_LLogiic;BEGIIN PROOCESSS(CClkiin) beeginn IF rissingg_eddge(Clkkin)THEEN IIF CCounnterr=N theen ccounnterr<=00; CClk<<=noot cclk; ellse coountter<<=coountter+1; eend if; endd iff; ennd pproccesss; clkkoutt<=cclk;end;(2)控控制设计计控制器的的作用是是根据计计数器的的计数值值控制发发光二极极管的亮亮、灭,以以及输出出倒计时时数值给给七段译译管的分分译码电电路。此此外,当当检测到到特殊情情况(HHoldd=1)发生生时,无无条件点点亮红色色的发光光二极管管。LIBRRARYY IEEEE; USE IEEEE.SSTD_LOGGIC_11664.AALL; ENTIITY couuntrrolller IS PORTT (CClocck:IIN SSTD_LOGGIC; Holld:iin sstd_loggic; CCounntNuum:iin IINTEEGERRRANNGE 0 TTO 889; NNumAA,NuumB:outt INNTEGGERRRANGGE 00 TOO 455; RRedAA,GrreennA,YYelllowAA:ouut sstd_loggic; RRedBB,GrreennB,YYelllowBB:ouut sstd_loggic); END;ARCHHITEECTUURE behhaviior OF Couuntrrolller IS BEGIINproccesss(Cllockk)BEGIINIF ffalllingg_eddge(Cloock)THEENIF HHoldd='11' TTHENN ReddA<='1'' ReddB<='1'' GreeenAA<=''0' GreeenAA<=''0' YelllowwA<='0'' YelllowwB<='0''ELSIIF CCounntNuum<=39 THEEN NummA<=40-CouuntNNum; ReddA<='0'' GreeenAA<=''1'YelllowAA<=''0' ELSSIF CouuntNNum<<=444 THHEN NummA<=45-CouuntNNum; ReddA<='0'' GreeenAA<=''0' YelllowwA<='1''ELSEE NummA<=90-CouuntNNum; ReddA<='1'' GreeenAA<=''0'YelllowAA<=''0'END IF;IF CCounntNuum<=44 THEEN NummB<=45-CouuntNNum; ReddB<='1'' GreeenBB<=''0' YelllowwB<='0''ELSIIF CCounntNuum<=84 THEEN NummB<=85-CouuntNNum; ReddB<='0'' GreeenBB<=''1' YelllowwB<='0''ELSee NummB<=90-CouuntNNum; ReddB<='0'' GreeenBB<=''0' YelllowwB<='1''END IF;END IF;END PROOCESSS;END;(3)计计数器的的设计这里计数数器的计计数范围围为045SS 。计计到455后,下下一个时时钟沿回回复到00,开始始下一轮轮计数.此外,当检测测到特殊殊情况(Holld=1)发生生时,计计数器暂暂停计数数,而系系统复位位号Reesett则使计计数器异异步清00。程序如下下:LIBRRARYY IEEEE; USE IEEEE.SSTD_LOGGIC_11664.AALL; ENTIITY couunteer IIS PORTT (cclocck:IIN SSTD_LOGGIC; reseet:iin sstd_loggic; Holdd:inn sttd_llogiic; ccounntNuum:BuFFFeRRINTTEGEERRAANGEE 0 TO 90);END;ARCHHITEECTUURE behhaviior OF couunteer IIS BEGIINproccesss(reesett,Cllockk)BEGIINIF RReseet=''1' THEENcounntNuum<=0;ELSIIF rrisiing_edgge(CClocck) THEENIF HHoldd='11' tthenncounntNuum<=couuntNNum;ELSEEIF ccounntNuum=990 TTHENNcounntNuum<=0;ELSEEcounntNuum<=couuntNNum+1;END IF;END IF;END IF;END PROOCESSS;END;(4)分分位译码码电路设设计-1LIBRRARYY IEEEE; USE IEEEE.SSTD_LOGGIC_11664.AALL; ENTIITY Fennweii ISSPORTT(Nummin:IN inttegeerRAANGEE 0 TO 45;NumAA,NuumB:OUTTInttegeerRAANGEE 0 to 9);END;ARCHHITEECTUURE behhaviior OF Fennweii ISS BEGIINproccesss(Nuuminn)BEGIINIF NNumiin>=40 THEENNumAA<=44;NumBB<=NNumiin-440;ELSIIF NNumiin>=30 THEENNumAA<=33;NumBB<=NNumiin-330;ELSIIF NNumiin>=20 THEENNumAA<=22;NumBB<=NNumiin-220;ELSIIF NNumiin>=10 THEENNumAA<=11;NumBB<=NNumiin-110;ELSEE NumAA<=00;NumBB<=NNumiin;END IF;END PROOCESSS;END;(5)分分位译码码电路设设计2USE IEEEE.SSTD_LOGGIC_11664.AALL; ENTIITY Fennweii2 IISPORTT(Nummin:IN inttegeerRAANGEE 0 TO 45;NumCC,NuumD:OUTTInttegeerRAANGEE 0 to 9);END;ARCHHITEECTUURE behhaviior OF Fennweii2 IIS BEGIINproccesss(Nuuminn)BEGIINIF NNumiin>=40 THEENNumCC<=44;NumDD<=NNumiin-440;ELSIIF NNumiin>=30 THEENNumCC<=33;NumDD<=NNumiin-330;ELSIIF NNumiin>=20 THEENNumCC<=22;NumDD<=NNumiin-220;ELSIIF NNumiin>=10 THEENNumCC<=11;NumDD<=NNumiin-110;ELSEE NumCC<=00;NumDD<=NNumiin;END IF;END PROOCESSS;END;(6)数数码管驱驱动设计计LIBRRARYY IEEEE; USE IEEEE.SSTD_LOGGIC_11664.AALL; ENTIITY bcdd_daata ISPORTT(bcdd_daata:in STDD_LOOGICC_VEECTOOR(33 doowntto 00); seggoutt: oout STDD_LOOGICC_VEECTOOR(66 doowntto 00);END;ARCHHITEECTUURE behhaviior OF bcdd_daata IS BEGIINproccesss(bccd_ddataa)BEGIINcasee bccd_ddataa iss whhen "00000""=>ssegoout<<="1111111100" wheen ""00001"=>seegouut<="011100000"" whhen "000100"=>>seggoutt<=""110011001" whenn ""00111" =>ssegoout<<="1111110011" ; wheen "01100"" =>>seggoutt<=""011100111" ; wheen "01101""=>ssegoout<<="1101110111" ; whhen "001100"=>>seggoutt<=""001111111" ; whhen "01111""=>ssegoout<<="1111000000" ; wheen "10000"" =>>seggoutt<=""111111111" ; whhen "10001"" =>>seggoutt<=""111100111" wheen ootheers =>nnulll;END CASSE;END PROOCESSS;END;LIBRRARYY IEEEE; USE IEEEE.SSTD_LOGGIC_11664.AALL;USE IEEEE.SSTD_LOGGIC_unssignned.ALLL; ENTIITY dtssm IISPORTT(cllk:iin SSTD_LOGGIC; NummA,NNumBB,NuumC,NummD: in STDD_LOOGICC_VEECTOOR(33 doowntto 00);segoout11:ouut SSTD_LOGGIC_VECCTORR(6 dowwntoo 0);led_sell: oout STDD_LOOGICC_VEECTOOR(33 doowntto 00);END dtssm;archhiteectuure bhvv off dttsm iscompponeent bcdd_daata is portt (bbcd_datta:iin SSTD_LOGGIC_VECCTORR(3 dowwntoo 0); ssegoout:outt STTD_LLOGIIC_VVECTTOR(6 ddownnto 0);end commponnentt; siggnall x:STDD_LOOGICC_VEECTOOR(33 doowntto 00); siggnall q:STDD_LOOGICC_VEECTOOR(11 doowntto 00);begiinp1:pproccesss(cllk)begiinif cclk''eveent andd cllk ='1'' thhen Q<= Q + ''1'end if;end proocesss;p2:pproccesss(Q) beggin casse QQ isswhenn"000"=>>ledd_seel<="11110""x<<=NuumD;whenn"011"=>>ledd_seel<="11101""x<<=NuumC;whenn"100"=>>ledd_seel<="10011""x<<=NuumB;whenn"111"=>>ledd_seel<="01111""x<<=NuumA;whenn ottherrs=>>nulll;end casse;end proocesss;u1:bbcd_dattaPOORT mapp(bccd_ddataa=>xx,seegouut=>>seggoutt1);end 五设计计创新1模块块化编程程,模块块化接线线,再编编译总原原理图,思路比比较清楚楚解容易易。2可以以比较容容易的改改变红绿绿灯的时时间。3有的的模块可可以供其其它任务务通用。六心得得体会EDA设设计我感感觉程序序调试最最重要,试试验软件件、硬件件熟悉其其次。我我在编完完各模块块程序之之后,编编译查错错最初有有三十几几个错误误,有输输入错误误、语法法错误。一一遍一遍遍的变异异查错,直直到没有有错误。必必须注意意工程名名和实体体名一致致,不然然一般会会出错。在在没有错错误之后后可以进进行波型型仿真。若若与理想想的不同同,再查查看程序序,有无无原理上上的编辑辑错误或或没有查查出的输输入错误误。都通通过可以以进行管管脚配对对,把程程序烧入入芯片,在在实物机机上看结结果,从从显示中中得出还还需改正正的地方方,再去去改程序序。必须须注意没没改一次次都要编编译,重重新烧入入。七参考考文献 (11)潘松松,黄继继业.20006.EDAA技术使使用教程程.北京京:科学学出版社社。 (22)黄任任;20005;VHDDL入门门.解惑惑.经典典实例.经验总总结.北北京:北北京航空空航天大大学出版版社。 (33)徐志志军,徐徐光辉.20002.CCPLDD/FPPGA的的开发与与应用.北京:电子工工业出版版社。 (44)褚振振勇.FFPGAA设计与与应用.西安:西安电电子科技技大学出出版社。21