欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    基于verilog-HDL数字系统设计--交通灯.docx

    • 资源ID:845438       资源大小:35.41KB        全文页数:5页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于verilog-HDL数字系统设计--交通灯.docx

    交通灯控制器数字系统设计文档姓名:学号:一.课题简介:我在本课程中所选择的课题是用VerilogHDL实现的交通灯控制器。该交通灯控制器处在一个城乡结合处的十字路口,这个十字路口分为主干道和乡村公路,由于主干道的车流量远大于乡村公路的车流量,所以这个交通灯控制器不同于常见的交通灯控制器。这个交通控制器的功能有如下几点:1 .当乡村公路无车时,始终保持乡村公路红灯亮,主干道绿灯亮。2 .当乡村公路有车时,而主干道通车时间已经超过它的最短通车时间时,禁止主干道通行,让乡村公路通行。主干道最短通车时间为25s。3 .当乡村公路和主干道都有车时,按主干道通车25s,乡村公路通车16s交替进行。4 .不管主干道情况如何,乡村公路通车最长时间为16s5 .在每次由绿灯亮变成红灯亮的转换过程中间,要亮5s时间的黄灯作为过渡。6 .用开关代替传感器作为检测车辆是否到来的信号。用红、绿、黄三种颜色的发光二极管作交通灯。要求显示时间,倒计时。二.控制抱图和设计流程图:1 .这个交通灯控制器由三个主要局部组成一核心控制器以及、译码器、分频器。2 .流程图的内容同上面交通灯的功能,这里不再多做解释。三.各局部组件的具体实现和分析:1.核心控制器实现根本功能:(1)它的输入端有4个输入信号C、RST、ST、CLKoC信号是一个检测信号,检测乡村公路是否有车,C=O示无车,这种情况下乡村公路一直亮红灯,主干道一直亮红灯,并且两个计数器都同步30秒重复计数,直到C=I即乡村公路有车是才跳变到其他情况。RST信号是复位信号,当RST=O时,这个交通灯控制器才能正常工作。当RST=I时,所有计数器都立刻赋初值,并且乡村公路和主干道都亮红灯,表示交通灯控制器出了故障,为防止意外发生,禁止通行。ST信号表示使能信号,当ST=I时,交通灯控制器才能正常工作。ST=O时,所有计数器都停止计数,并且乡村公路和主干道都亮红灯,表示交通灯控制器出了故障,为防止意外发生,禁止通行。CLK信号是时钟信号,通过分频器产生适宜的时钟信号驱动计数器实现实时计数。(2)它还有22个输出端,MR、MY、MG、CR、CY、CG分别表示主干道的红灯、黄灯、绿灯,乡村公路的红灯、黄灯、绿灯。在我的代码中这6组字母用于储存相应的亮灯时间,而用LAMPR和LAMPC表示实际的灯,LAMPR2、LAMPRkLAMPRo分别表示主干道的红灯、绿灯、黄灯:LAMPC2,LAMPCkLAMPCO分别表示乡村公路的红灯、绿灯、黄灯。还有CoUNTR【7:0】、COUNTC7:016个计数的输出端,通过译码器译码实现驱动7段数码管计数功能。(3)下列图是核心控制器的编译成功截图:从图中可以看出文件名为:下面的几张图为核心控制器的功能仿真图,分为不同情况下的仿真。上图中,可以看出C=I表示乡村公路没有车,RST=O并且ST=I说明交通灯控制器正常工作。由CoUNTC和COUNTR中的两行计数可以看出,当计数从30减到01后又从30开始递减计数。LAMPC=4表示乡村公路亮红灯,LAMPR=2表示主干道亮绿灯。当乡村公路没有车时,乡村公路一直亮红灯,主干道一直亮绿灯,并且同步计数(每30秒重复),符合要求。从上图可以看出RST=O并且ST=I说明交通灯控制器正常工作。C在15秒时发生了跳变,表示乡村公路由没车的状态变为了有车,在这15秒里,LAMPC=4,LAMPR=2表示乡村公路依然亮红灯,主干道依然亮绿灯,待本次计数到Ol后,由图可以看出,乡村公路的计数器从30开始计时,而主干道的计数器从25开始计数,表示乡村公路还要继续亮30秒的红灯,而主干道还要继续亮25秒的绿灯。这正是我的代码的最大的缺陷,会让司机多等一段时间(这里是15秒,但可能是0-30秒内的任一一个时间段,假设司机在第25秒的时候来到路口,那么他就得多等25秒)。由于我的代码计数模块的特殊性(计数模块有四个,计数过程被复杂化),所以这个缺陷我一直没法修改。从上图可以看出,RST=O并且ST=I说明交通灯控制器正常工作。最开始,LAMPC=2表示乡村公路亮绿灯,LAMPR=4表示主干道亮红灯,在乡村公路计数器COUNTC=5主干道计数器COUNTr=IO时,检测信号C由1跳变到0,表示乡村公路由有车变为了无车。所以等乡村公路亮完绿灯经过黄灯缓冲后,由于乡村公路此时没有车,两个计数器都从30开始同步计数,并且LAMPC=4,LAMPR=2表示乡村公路一直亮红灯,主干道一直亮绿灯。从上图可以看出,在计数到20时,ST跳变为0,使得交通灯控制器瘫痪,计数器停止计数,保持19这个数字,同时乡村公路和主干道都亮红灯,禁止通行,防止意外发生。从上图可以看出,在计数到11时,RST跳变为1,使得交通灯控制器瘫痪,计数器停止计数,保持U这个数字,同时乡村公路和主干道都亮红灯,禁止通行,防止意外发生。在该图最后RST=O并且ST=I,保证交通灯控制器正常工作;C=I表示乡村公路有车,所以LAMPC=4,LAMPR=2,CoUNTC=30,CoUNTR=25表示控制器恢复正常后重新启动,由于乡村公路有车所以乡村公路亮30秒红灯,而主干道亮25秒绿灯。从上图可以看出,进行的时功能仿真,选择的仿真输入为:核心控制器模块的芯片图如下:该局部的实现代码如下:产值号定义说明,CLKi同步时IhC为传M作检,车柄是否到来的信号,CE衰示多村公路有车RST.仅位信号,RST=I时直位STi使能信号.ST=I交通灯开0工作MR*主干道红灯时间MGt主干MT时间MY.主干道黄灯片间CR:多村公略红灯时间CG.学村公略量灯时间CY.乡村公踞黄灯叫1.AMPR:挂主干亮灭,其中IAMPRO-LANPR2分现控制红灯,雨,黄灯IAMPCi控制多HT的充灭.其中LAMpCl,AMPC分刷控制砌,n.收C()LVR*用于Ktt.可里动两个数日*COUNTC*用于多指畔间Jl示,8位,可蟹动两个数码管*,11M)dukfuhaislian080(HM19(CLK.C,RSTT.LAMPR.LAMPC,COllNTR,COCNTCKinputCLKCSTfRST;output5:0LMPR,I.MPu(pu<|7:0)COIlNTR,COUres|7:0)MRM(kMCK,('<re(7:0NUMRUMC;reg(3:0LAMPR,LAMPC;re|2:0countr,countc;Etemprempc:regCViintECoungFvSCOUNTCC,CNTRR:always(STorRST)begin(!ST)IKgln神各冷灯的计效的初值.当有直位信号网者使能信号为H时执行MR<=8'b(MI100001;MG<-K,hOO!OOIOI;MY<M<,bOOO(三)l01;CR<=8'h00IKMM)0;CG<>8'bOOOIOIIO:CY<=8'MHMW0101;endekei11RST)beinMR<=rwwooooi;M(;<=X,MM)100101;MY<>8'bOOOOOIOI;CR<=,M)0ll<MM)0;CG<=S'bU001011U;CY<"R'hOOOOOIOl;vndendaignCOUNTRNUMR;assignCOUNTC三NUMC;!ways(PoSedKeCLK拄1M主干It方向的三JbTbeelnlf(ST&C)"当使能信号为I且检寓信号示多村公明T车时井beginInitcmprll>cinkmpr<=l:CasegUntr>,拄灯亮的IlMFO:beginNUMRvMG;IAMPR<-2;countr<-1:COIINTRR<>I;end1:MginNlMR<=MY:LAMPR<=lcountr<=2:ei»d2:beginNLMR<=MR;LAMPR<=4;cmintr<=O:enddefault:1.MPR<4;dcseend"和正上方的begin相对应elsebegin倒计时iANMMRX)iRM;MR|3:0|=0)beginNl:MK|3:0|V=4%1001:NuMRl7:4<=NUMR|7:4pi:endekeheinNUMR3:0<三NUMR3rOl;end/¥¥¥¥¥¥¥1117be«inendInNlMR三=2)beginkmpr<=4Htn<l/*¥¥¥¥¥¥加了beginendendendelseinST&!C),当使俺信号为1且检信号工承乡村公Ie没有车时begini!tenpr)beginIempr<=1;Case(CoUntrr)0:heENUMR<*CR;LAMPR<三2end1:beginNUMR<三CYLAMPRQLenddefault:LAMPR<三2;endcaseend"卸正上方的Mgin对应.elsebeginif4N(IMR>l)if(NCMR(3:0=0)M&inNUMR3:0<M'blOOI;NL'MR(7:41<«NUMR7:4<l;endelwNUMR3:0|<aNUMR3:0l;W(NuMRH2begintempr<=O;ift!C)begincountrr<=0;i11countr=l)beincounlrr<l;a>unlr<=2:endendendendendelsebeginLAMPR<=4:countr<=O;tempr<=0endendalways(PaSedReCl-K/,ItM多村公IB方向的三灯KginI(ST&C)xgin/当使能信号ST=I且检费信号示女村公1车时if(!tempcIbegintempc<sl;CaMMCCUlHe)拄灯亮的IluFO:beginNUMC<=CR;LAMPC<=4;count<-<三1;end1:beginNUMC<=CGLAMPC,<=2;countc<=2:CoUyTCC<=1;Cnd/11了COUntCC2:heinNUMCVCY;LAMPC<a|;countc<三0;enddefault:LAMPC<=4;endcaseendelseMgin/#it#MNUMC>1)if(N(JMC3<!)heinNUMcl3:0<-4,bl(M)lN(JMC7z4v、l:MC7:4.1;enddebeginNUMC3:0<=NUMC3:01;endiflNUMC=2)begintempc<=0;endend血<1thei11S&C)Fin,当使健信号ST=I且检信号乩示多打公路没车酎i11!tempc>hegintempc<!;Cftse(CounlCC)O:IMKinNVMC<=CR:LAMPC<=4:endI:WQnNUMC<三CYJ.MPC<al;enddefault:LAMPC<=4;endcaseenddsebegin*计时if(NL'M:>1)河、IMCI3:0=0>beginNLMC|3:0)<=4'bI(M)I;Nt'MC|7:4|<=NUMC|7:4|<l:endeM、UMC3:0<Nl:MC|3:0-I;I11NlMC=三2lbegintempc<=0;ifCC)bej*nmuntccV=U;Iftcounlc""2heincountcc<Iicountc<三0:endendendendendel«beginLAMPC<*4tempc<*0:countc<*O;endrndendmodule这段代码的编写着实花了不少时间,而且功能还有缺陷,这段代码一共有四块计数模块,计数过程很多时候是需要两块计数模块共同来完成的,说一上面说的司时机多等一段时间的缺陷一直无法改变,就是由这4块繁杂的计数模块造成的。2 .分频器的实现:由于试验箱上提供的时钟频率为2MHz,为了实现实时计数必须进行分频,得到频率为IHz的CLK信号。图一中,elk为2MHz的输入信号,clk_ll为IHZ的输出信号,reset为复位信号,当reset=O时,分频器正常工作。由图像可知输出信号ck_ll一直等于0,这不表示分频不成功,而是因为要将2MHz的信号经过分频器变为IHZ的信号要进行1000000(一百万)分频,所以在下列图所能显示的时间范围内还不能显示超过半个周期的clk_ll信号。为了证明我的分频器能够正常工作,我将程序代码中的分频数由IOooooO该为10,重新仿真的到下面的第二个图,从该图中就可以看出我的分频器能够正常工作。(图一)图二分频器的芯片图为:分频器的实现代码为:nw)dul<*flelk,dk_11,!iethinputelk.reset:outputclk-ll;Inlegerk;regclk_ll;always(PoKedgeelkorpmedgemw<lbeginif(resetlbegink<=O:clk_ll<=O:endekeMQnifl(kal0000(M)heinclk_H<三clk-ll+1;k<*O;en<lelsebegink<=k÷hendendendendmodule在编写分频器代码的时候,先做的的io分频的分频器,最初k的定义我定义为regk;输出一直为ClkJl=O;思来想去也不知道是哪里出了问题,通过和室友的讨论,终于知道regk:这句定义中,k只有一位,不是0就上1,所以k不可能有其他的值。发现了问题,改变了k的定义,结果就正确了。3 .译码器的实现:计数器计数是用的16进制,为了能够在7段数码管上显示,必须经过译码。译码器的仿真图如下:由于输入的选择不上太好,所以输出是重复的译码。(图一)(图二译码器的芯片图为:实现代码为:ItMiduIrff(ina.inh>utal,*uta2.outbI,oUlb2);input|7:0|ina,inb:output|7:0|outal,outa2,nuth!,outh2;reg7:0n»uUI,>uta2,routbI,>utb2;reg(3:0InahJnaUnbhUnbI;aw4nnutal*rtA;a6nouta2=roula2;assignoutbl-routbl:aignnuth2三rnutb2;alwaysUna)begininah|3:0«ina|7:4|;CaSedmh)Oibeginroutal<=8'M)000<M)ll;endI:beginrnutal<*X'hl(M)ll1;end2:begin>uUl<=,bOOI(M)IOl;r#id3:beginroutal<-8,h0(>0010kend4:heginroutal<"X,bl001HMll:end5:beginn»uU1<=,b1001IM)1;end6:beginroutal<WbO100000Lend7:heginroutal<>X'hO<M)!llll;vnd8:begin>uU1<=8'b00000001;end9:bcginroutal<-8'b0(>000<n:enddefaultrheinroutal<"S'b11ll1lll;endendeseendalwaysdraHheninal|3:0=ina|3:0):*sc<inal)0:beinrula2<=R'b0fi(MXM)ll;wdIrbeginrouta2<=8'bl0011111:end2zheinrnuta2<*8'hOO100IOl;end3:begin>uti*2<=,MOOOlIOhend4:beginn»uta2<=rbl(M)l1(MH;endSrbeginrouta2<tl't>010010<kend6:beginrnuta2<"8'h010(H>0<H;en<i7:beginrt>uu2<=8'bOOOll1ll;en(l8:beginrouta2<=X'b0(»0000<H:end9:hcginmuta2<"X'h0<*00l<MH;en<idrfuull:beginroula2<=8lbl1111Ilhendendcaseendalways(lnb)hcgiinhh|3:O|-inh|7:4;cae<lnbh)Orbeginroutbl<=8'b00000011;endl:heQurnuthl<*8'blOOIH1l;«nd2:beginrt>uthl<=8,b0010010i;end3:beginroutbl<=S,NM)(M)IIOhend4:beginrnuthl<BX'blOOI100I;endS=TWglnmuthl<=»4b41»0lft0i;eikd6:beginroutbl<M,b01(KMMM)l!end7:beginrnuthl<BX'b4M)0lIlll;end8:beginrt>utbi<=8bOOOOOOOIjend9:beginroutb1<=8,NM)(M)1OO1:enddefaultrheinrouthl<H8'bll1ll111:endendes*endalways(inb)begininbll3:0尸inb3:0:easelinbl)0:bclnrouth2<=8,b(NMM)0<Ml;endIrbeginroutb2<S'bl0011111:end2:heginrnutl2<*X,MM)lOOIOI;end3:beginroutb2<=8bOOOOIIOI;end4:begin>utb2<=8,b!00ll0<11zend5:heginmuth2<-X,b1001001;end6:bt*ginrt>utb2<=8,bI(MXMM)I;end7:beginroutb2<=S,b4M)011111:end8:heginmuth2<-S,h4M)<>OOOOhend9:beginrt>utb2<=8,b0000100henddefault:beginroutb2<8,blllIlllkendendcaseendendmodule8.蒸片的封装和引片的分配U局部过程图如下:通过在试验箱上进行试验,各局部均能正常工作,试验根本符合要求。五.忌结:通过这个课程,我对VeriIOgHDL语言有了一个根本的了解,对QUatUS软件的应用有了初步的认识。对简单的EDA设计的流程也有所了解,提高了我的动手能力,并且锻炼了自己的耐心,收获颇多。我会把在这次课程设计中学到的东西应用到以后的学习生活中,最后感谢老师和同学在这次课程中给予我的帮助。

    注意事项

    本文(基于verilog-HDL数字系统设计--交通灯.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开