还剩18页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
本科毕业论文(设计、创作)题 目环形计数器和扭环形计数器设计 学生姓名 学号院(系)电子信息工程学院专业通信工程 入学时间 年 月导师姓名 职称/学位 导师所在单位 完成时间 2014 年 5 月环形计数器和扭环形计数器设计摘要现代世界的快速发展,夜生活已成为大多数城市不可缺少的生活,在夜生活中,五彩斑斓,形状不断变化的LED灯走入了大家的生活而各种形状的LED灯,随着技术的不断发展,EDA设计得到不断地发展和应用,LED灯所表示的图案多种多样,LED灯中最简单的就数流水灯,而流水灯可以由环形计数器或扭环形计数器控制本文以环形计数器和扭环形计数器为设计对象,根据其相关规律,设计其运行电路,以及用verilog硬件描述语言实现内容主要涉及计数器的循环与自启动以及最后整个计数器的检测方案和仿真本设计可以实现计数器的一些简单的控制,并用modelsim进行仿真关键词环形计数器和扭环形计数器设计;Verilog;modelsimTwistedringcounterringcounteranddesignAbstractTherapiddevelopmentofthemodernworldnightlifehasbecomeindispensableinthelifemostofthecityinthenightlifecolorfulshapechangingLEDlightswentintopeopleslives.AndvariousshapesofLEDlightswiththecontinuousdevelopmentoftechnologyEDAdesigngetcontinuouslydevelopmentandapplicationofLEDlamprepresentspatternisvariedthemost______severalwaterlightLEDlightslightsandrunningwatercanbecontrolledbytheringcounterortwistingtheringcounter.Thisarticleisbasedonthecircularcounterandtwistingtheringcounterasthedesigno__ect.Accordingtothecounterrelevantlawsthecounteristodesigntheoperationcircuit.thisdesignadoptshierarchicalmethodandveriloghardwaredescriptionlanguagetorealize.Thisarticleis__inlyrelatedtocountercirculationandsin__thestartandfinalofthetestschemeandsimulationThisdesigncanrealizesome______controlcounterandmodelsimsimulationKeywords:ringcounterandtwistingtheringcounterdesign;Verilog;modelsim.目录TOC\o1-2\h\z\u
1.引言
12.设计任务和要求
12.1设计任务
22.2设计要求33.设计原理
33.1环形计数器定义
33.2环形计数器工作原理
33.3扭环形计数器定义
33.4扭环形计数器工作原理
34.环形计数器的设计
35.扭环形计数器设计
66.环形计数器的自启动设计
97.扭环形计数器的自启动设计
118.结束语13主要____15致谢161引言随着社会的不停发展,越来越多的LED灯用于城市的装饰,让城市在夜晚也可以变得炫彩夺目,熠熠生辉而LED灯的简单控制,使其产生各种绚丽的拼图,分而视之可以用一些简单的设计控制细小的模块而成其中最简单的可以用环形计数器和扭环形计数器的原理和电路来控制,产生一种流水灯的效果在此基础上,本文对环形计数器和扭环形计数器的的实现做了简单的设计,对两种计数器的原理,自启动,电路图进行简单的分析和设计,并用Verilog硬件描述语言进行编写以及Altera公司的modelsim仿真工具进行仿真硬件描述语言的发展硬件描述语言HDL是一种用形式化方法描述数字电路和系统的语言利用这种语言,数字电路系统的设计可以从上层到下层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统然后,利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表接下去,再用专用集成电路ASIC或现场可编程门阵列FPGA自动布局布线工具,把网表转换为要实现的具体电路布线结构目前,这种高层次(high-level-design)的方法已被广泛采用据统计,目前在美国硅谷约有90%以上的ASIC和FPGA采用硬件描述语言进行设计硬件描述语言HDL的发展至今已有20多年的历史,并成功地应用于设计的各个阶段建模、仿真、验证和综合等到20世纪80年代,已出现了上百种硬件描述语言,对设计自动化曾起到了极大的促进和推动作用但是,这些语言一般各自面向特定的设计领域和层次,而且众多的语言使用户无所适从因此,急需一种面向设计的多领域、多层次并得到普遍认同的标准硬件描述语言20世纪80年代后期,VHDL和VerilogHDL语言适应了这种趋势的要求,先后成为IEEE标准目前,硬件描述语言可谓是百花齐放,有VHDLVerilog等等VHDL虽然是1995年以前唯一制定为标准的硬件描述语言,但它却比较麻烦,而且其综合库至今也没有标准化,不具有晶体管开关级的描述能力和模拟设计的描述能力目前的看法是,对于大型的系统级数字电路设计,VHDL是较为合适的实质上,在底层的VHDL设计环境是由VerilogHDL描述的器件库支持的,因此,它们之间的互操作性十分重要目前,Verilog和VHDL的两个国际组织OVI、VI正在筹划这一工作,准备成立专门的工作组来协调VHDL和VerilogHDL语言的互操作性OVI也支持不需要翻译,由VHDL到Verilog的自由表达VerilogHDL是在1983年,由GDAGateWayDesignAuto__tion公司的Philmoorby首创的Philmoorby后来成为Verilog-XL的主要设计者和Caden__公司的第一合伙人在1984~1985年,Philmoorby设计出来第一个名为Verilog-XL的仿真器;1986年,他对VerilogHDL的发展又作出了另一个巨大的贡献提出了用于快速门级仿真的XL算法随着Verilog-XL算法的成功,VerilogHDL语言得到迅速发展19__年,Caden__公司收购了GDA公司,VerilogHDL语言成为Caden__公司的私有财产1990年,Caden__公司决定公开VerilogHDL语言,于是成立了OVI(OpenVerilogInternation)组织,负责促进VerilogHDL语言的发展基于VerilogHDL的优越性,IEEE与1995年制订了VerilogHDL的IEEE标准,及VerilogHDL1364-1995;2001年发布了VerilogHDL1364-2001标准这个标准中,加入了VerilogHDL-A标准,是Verilog有了模拟设计描述的能力随着电子产业不断发展与推进,硬件描述语言也会不断的发展以适合现实情况的要求,VerilogHDL可能发展成为更高等级的语言,或者被跟高级的语言所替代和兼容Modelsim仿真工具Modelsim是ModelTechnologyMentorGraphics的子公司的DHL硬件描述语言的仿真软件,该软件可以用来实现对设计的VHDL、Verilog或者是两种语言混合的程序进行仿真,同时也支持IEEE常见的各种硬件描述语言标准无论从有毫的使用界面和调试环境来看,还是从仿真速度和仿真效果来看,Modelsim都可以算得上是业界最优秀的DHL语言仿真软件他是唯一的单核内支持VHDL和Verilog混合仿真的仿真器,是做FPJA/ASIC设计的RTL级和门级电路仿真的首选;他采用直接优化的编译技术,TCL/TK技术和单一内核仿真技术,具有仿真速度快,编译代码与仿真平台无关,便于IP核保护和加快程序错位定位等优点Modelsim最大的特点是其强大的调试功能先进的数据流窗口,可以迅速追踪到产生错位或者不确定状态的原因性能分析工具帮助分析性能瓶颈,加速仿真代码覆盖率检测确保测试的完备多种模式的波形比较功能先进的SignalSpy功能,可以方便地访问VHDL、Verilog或两者混合设计中的底层__支持加密IP目前常见的Modelsim分为几个不同的版本ModelsimSE、ModelsimPE、ModelsimLE和ModelsimOEM其中ModelsimSE是主要版本2设计任务和要求
2.1设计任务设计一个环形计数器和扭环形计数器
2.2设计要求熟悉数字电路,语言编辑以及相应的仿真软件仿真3设计原理
3.1环形计数器定义环形计数器是由移位寄存器加上一定的反馈电路构成的,它是由一个移位寄存器和一个组合反馈逻辑电路闭环构成,反馈电路的输出接向移位寄存器的串行输入端,反馈电路的输入端根据移位寄存器类型的不同,可接向移位寄存器的串行输入端或某些触发器的输出端
3.2环形计数器工作原理四位环形计数器,它是把移位寄存器最低一位的串行输出作为高一级移位寄存器的串行输入环形计数器常用来实现脉冲顺序分配的功能(分配器)假设寄存器的初始状态为1000,那么在移位脉冲的作用下其状态变为0100到0010到0001最后又返回到1000的顺序转换,并且不断循环往复的执行这一过程由上述可知,该计数器的计数长度为N=n
3.3扭环形计数器定义扭环形计数器的定义同环形计数器的定义基本类似,只是在反馈电路上略有差别扭环形计数器的反馈在高位端进过一个反向后再输出移位寄存器的最低位串行输入端
3.4扭环形计数器工作原理四位扭环形计数器,它是把移位寄存器最低一位的串行输出作为高一级移位寄存器的串行输入,最后的反馈电路却是将最高位串行输出加个反向器后输入到最低位串行输入端假设寄存器的初始状态为0000,那么在一位脉冲的作用下其状态变为1000到1100……0011到0001最后又返回到0000的转换,并且不断循环这一过程由上述可知,该计数器的计数长度为N=2n
4.环形计数器的设计设计一个四位环形计数器步骤如下对于设计一个四位环形计数器,共有16个状态,状态转移表如下表所示:QQQQQQQQ00010010001001000100100010000001100100110011011001101100110010011110110111011011101101110111111001011010101001010000000011111111其中只有4个是有效状态设其有效状态图如图
4.1所示图
4.1设其无效状态如图
4.2所示图
4.2可得如下表达式Q=QQ=QQ=QQ=Q驱动方程D=QD=QD=QD=Q用D触发器构成的电路图如下图
4.3所示用CP代替图中VCC图
4.3用Verilog语言描述如下modulecircle_counterrstclkcnt;parameterCNT_SIZE=4;inputrst;inputclk;output[CNT_SIZE-1:0]cnt;reg[CNT_SIZE-1:0]cnt;always@posedgeclkif!rstcnt=4b0001;//初始值elsecnt={cnt[CNT_SIZE–2:0]cnt[CNT_SIZE-1]};//注意是循环左移位,而非简单的移位endmodule输入激励如下`timescale1ns/1nsmodulecircle_counter_tb;parameterCNT_SIZE=4;regrstclk;wire[CNT_SIZE-1:0]cnt;parameterDELY=100;circle_countermycounter.rstrst.clkclk.cntcnt;//例化,对源文件代码调用always#DELY/2clk=~clk;//生成时钟initialbeginclk=0;rst=0;#2*DELYrst=1;#10*DELYrst=0;#3*DELY$finish;endinitial//检测不同时间cnt和rst的值$monitor$timecnt=%drst=%dcntrst;Endmodule显示仿真结果如下图
4.4所示图
4.4由上述仿真可知该循环只能在0001,001001001000内循环才是正确有效地,当跳出这个循环时,该程序不能保持在有效地循环内循环而其他的状态均成无效状态而被浪费,而且一旦出错将很难回到有效状态继续循环
5.扭环形计数器设计设计一个四位扭环形计数器步骤如下对于设计一个四位扭环形计数器,共有16个状态状态转移表如下表所示:QQQQQQQQ00000001000100110011011101111111111111101110110011001000100000000101101110110110011011011101101010100100010010011001001000100101得其状态图如下图
5.1所示(有效状态(左图),无效状态(右图)),该计数器的计数状态被等分成两半,每个循环的模都是8,即2N因此,只需要规定其中一个为有效循环,则另一个就是无效循环通常选择左边这个循环作为工作循环,因为在每次状态改变时,系统内只有一个触发器状态是改变的,这就避免了时序电路中得冒险现象图
5.1表达式为Q=Q=QQ=QQ=Q驱动方程D=D=QD=QD=Q用D触发器构成的电路图如下图
5.2所示用CP代替图中VCC图
5.2用Verilog语言描述如下modulejohn_counterrst,clk,cnt;inputrstclk;parameterCNT_SIZE=4;output[CNT_SIZE-1:0]cnt;reg[CNT_SIZE-1:0]cnt;always@posedgeclkif!rstcnt=4b0000;//初始值elsecnt={~cnt[CNT_SIZE-2:0]cnt[CNT_SIZE-1]};//注意是循环移位,而非简单的移位endmodule激励代码`timescale1ns/1nsmodulejohn_counter_tb;parameterCNT_SIZE=4;regrstclk;wire[CNT_SIZE-1:0]cnt;parameterDELY=100;john_countermycounter.rstrst.clkclk.cntcnt;always#DELY/2clk=~clk;initialbeginclk=0;rst=0;#2*DELYrst=1;#10*DELYrst=0;#3*DELY$finish;endinitial$monitor$timecnt=%drst=%dcntrst;Endmodule显示仿真结果如下图
5.3所示图
5.
36.环形计数器的自启动设计以上方法设计出的环形计数器其0001~1000为有效循环,其余均为无效循环一旦计数器进入无效循环,将保持无效循环计数,从而不能够转入有效循环因此,该计数器不具备自启动功能为了确保环形计数器工作在有效循环内,可以对上述电路进行改进,使之具有自启动功能将Q,Q,Q的输出经由或非门反馈入D端,即可实现自启动功能电路图如下图
6.1所示用CP代替图中VCC图
6.1状态方程Q=Q=QQ=QQ=Q状态转移图如下图
6.2所示图
6.2用Verilog语言描述如下modulejohn_counterrstclkcntD0D1D2D3LD;inputrstclkD0D1D2D3LD;wire[3:0]DIN;output[3:0]cnt;reg[3:0]cnt;assignDIN[3:0]={D3D2D1D0};//addDINtoexplaincntinuselessstatealways@posedgeclkif!rstcnt=4b0000;elseif!LD//LDhelptocontroltheuselessdataintothecirclecnt=DIN;elsecnt={cnt[2:0]~cnt
[2]|cnt
[1]|cnt
[0]};endmodule激励程序`timescale1ns/1nsmodulejohn_counter_tb;regrstclkD3D2D1D0LD;wire[3:0]cnt;parameterDELY=100;john_countermy_counter.rstrst.clkclk.cntcnt.D3D
3.D2D
2.D1D
1.D0D
0.LDLD;always#DELY/2clk=~clk;initialbeginclk=0;rst=0;LD=1;{D3D2D1D0}=4b0000;#DELYrst=1;LD=1;#8*DELYLD=0;{D3D2D1D0}=4b0110;//chageDINtoexaminuselessstatecanenterintotheusefulstate#3*DELYLD=1;#10*DELY$finish;endendmodule显示仿真结果如下图
6.3所示图
6.3由上述分析可知,由触发器构成环形计数器时,有大量的电路状态被当作无效的状态而被舍弃掉修改反馈输入端,不仅能够实现电路的自启动功能,而且也能提高电路状态的使用效率
7.扭环形计数器的自启动设计在上述设计中,扭环形计数器也是不能自启动的,对反馈电路进行适当的修改,就可以得到可自启动的扭环形计数器,能使计数器在任何状态下都能进入有效循环中进行计数修改后电路图如下图
7.1所示用CP代替图中VCC图
7.1状态转移图如下图
7.2所示图
7.2用Verilog语言描述如下modulejohn_counterrstclkcntD0D1D2D3LD;inputrstclkD0D1D2D3LD;wire[3:0]DIN;output[3:0]cnt;reg[3:0]cnt;assignDIN[3:0]={D3D2D1D0};//addDINtoexplaincntinuselessstatealways@posedgeclkif!rstcnt=4b0000;elseif!LD//LDhelptocontroltheuselessdataintothecirclecnt=DIN;elsecnt={cnt[2:0]~~~cnt
[2]cnt
[1]cnt
[3]};endmodule测试代码`timescale1ns/1nsmodulejohn_counter_tb;regrstclkD3D2D1D0LD;wire[3:0]cnt;parameterDELY=100;john_countermy_counter.rstrst.clkclk.cntcnt.D3D
3.D2D2D1D
1.D0D
0.LDLD;always#DELY/2clk=~clk;initialbeginclk=0;rst=0;LD=1;{D3D2D1D0}=4b0000;#DELYrst=1;LD=1;#8*DELYLD=0;{D3D2D1D0}=4b1101;//chageDINtoexaminuselessstatecanenterintotheusefulstate#1*DELYLD=1;#10*DELY$finish;endendmodule显示仿真结果如下图
3.7所示
8.结束语在本次毕设中,设计了环形计数器和扭环形计数器的非自启动和自启动的两种方式对于不同的电路和实际要求,采用不同的方式设计过程中,我熟悉了Verilog得基本语法,测试程序的简单编写和modelsim的使用对相关书籍的阅读,使我完成这次毕设的设计这次设计,让我对数字电路有了更深刻的了解和认识,对以后数字电路这一块的设计,让我有了更多的方式可供选择短暂的对Verilog硬件描述语言和modelsim仿真软件的接触,让我看到了我的不足,看到与社会企业的脱轨,鼓励着我不断地学习已有的知识,紧跟变化潮流,不能抓住一种方法,不懂思辨对于这次毕设让我学到很多很多,我会不断努力充实自己,学习更多知识,当然还会对Verilog硬件描述语言和modelsim仿真软件进行更深入的研究主要____
[1]王钿,卓兴旺《基于VerilogHDL的数字系统应用技术》国防工业出版社,2006
[2]李晓辉《数字电路与逻辑设计》国防工业出版社,
2012.
[3]康磊,宋彩利,李润洲.《数字电路设计及VerilogHDL实现》西安电子科技大学出版社,
2010.致谢0001001010000100__EMBEDEquation.3__EMBEDEquation.30011011110010110101101011111101000001110110011010000100000110001101101010100011111001111111011011001001010100110__EMBEDEquation.3__EMBEDEquation.30000100000110001101101010100011111001111111011011001001010100110__EMBEDEquation.3__EMBEDEquation.30000100000110001101101010100011111001111111011011001001010100110__EMBEDEquation.3__EMBEDEquation.3。