HarbinInstituteofTechnology数字电子技术基础课程名称:数字电子技术课程大作业设计题目:基于VerilogHDL语言的519电进制计数器设计院系:班级:设计者:学号:指导教师:设计时间:2011.12.032/12哈尔滨工业大学目录第一章引言………………………………………………...…31.1计数器简介……………………………….…….………...31.2用可编程逻辑器件实现基本逻辑电路…….………...……31.3VerilogHDL硬件描述语言简介……………………..……41.4VerilogHDL硬件描述语言主要功能简介………………..4第二章510进制计数器设计……………..………….………62.1510进制计数器设计要求………………….……………...62.2510进制计数器设计思路……………….………………...62.2.1逻辑电路描述方法的选择…………………………….62.2.2设计流程图…………………………………………….62.3利用QuartusII软件仿真实现………………………………62.3.1新建工程count510………………………………………62.3.2设计输入………………………………………………...72.3.3Verilog语言描述………………………………………...72.3.4仿真电路图………………………………………………72.3.5创建波形文件……………………………………………82.3.6QuartusII仿真设置……………………………………….82.3.7仿真结果………...……………………………………….8第三章总结…………………………………………….………11参考文献…………………………………………………..………123/12第一章引言1.1计数器简介计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能,计数器是由基本的计数单元和一些控制门所组成,计数单元则由一系列具有存储信息功能的各类触发器构成,这些触发器有RS触发器、T触发器、D触发器及JK触发器等。计数器在数字系统中应用广泛,如在电子计算机的控制器中对指令地址进行计数,以便顺序取出下一条指令,在运算器中作乘法、除法运算时记下加法、减法次数,又如在数字仪器中对脉冲的计数等等。计数器可以用来显示产品的工作状态,一般来说主要是用来表示产品已经完成了多少份的折页配页工作。它主要的指标在于计数器的位数,常见的有3位和4位的。很显然,3位数的计数器最大可以显示到999,4位数的最大可以显示到9999。1.2用可编程逻辑器件实现基本逻辑电路传统的电子设计通常是自底向上的,即首先确定构成系统的最底层的电路模块或原件的结构和功能,然后根据主系统的功能要求,将它们组合成更大的功能块,使它们的结构和功能满足上层系统的要求,以此流程,逐步向上递推,直至完成整个目标系统的设计。自底向上设计方法的特点是,必须首先关注并致力于解决系统最底层硬件的可获得性及具体目标器件的技术细节。在这个设计过程中的任一时刻,最底层目标器件的更换,如某些技术参数不满足总体要求、缺货、由于市场竞争的变化临时提出降低系统成本以及要求提高运行速度等不可预测的外部因素,都可能需要重新开始设计。因此,在某些情况下自底向上的设计方法是一种低效、低可靠性、费时费力且成本高昂的设计方法。PLD(可编程逻辑器件)的设计为自顶向下的设计方法,只有在EDA技术得到快速发展和成熟应用的几天才成为可能。自顶向下设计方法的有效应用必须给予功能强大的EDA工具,具备集系统描述、行为描述和结构描述为一体的硬件描述语言,以及先进的ASIC制造工艺和FPGA开发技术。当今,自顶向下的设计方法已是EDA技术的首选设计方法,是ASIC和FPGA开发的主要设计手段。目前常用的可编程数字系统设计输入方式分别为原理图输入方式、硬件描述4/12语言输入方式和二者的混合输入方式。常见的硬件描述语言有VHDL和VerilogHDL语言等。1.3VerilogHDL硬件描述语言简介VerilogHDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。VerilogHDL描述逻辑电路时常用3种描述方式,分别为:行为型描述、数据流型描述和结构型描述。行为型描述指对行为与功能进行描述,它只描述行为特征,而没有涉及用什么样的逻辑电路来实现,因此是一种高级语言描述方式,具有很强的通用性与有效性;数据流型描述指通过assign连续赋值实现组合逻辑功能的描述方式;结构型描述指描述实体连接的结构方式,这里的实体一般指Verilog语言已定义的基元,也就是说结构型描述指利用Verilog语言已定义的基元描述逻辑电路的描述方式。VerilogHDL的3种描述方式中,行为型描述方式注重整体与功能,语句可能更简略,但写出来的语句可能不能被硬件所实现,即不能被综合;结构型语句通常更容易被综合,但可能语句显得更复杂。在实际开发中往往结合使用多种描述方法。VerilogHDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。VerilogHDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,VerilogHDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。1.4VerilogHDL硬件描述语言主要功能简介*基本逻辑门,例如and、or和nand等都内置在语言中。*用户定义原语(UDP)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。*开关级基本结构模型,例如pmos和nmos等也被内置在语言中。*提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。*可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式—使用过程化结构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述建模。5/12*VerilogHDL中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。*能够描述层次设计,可使用模块实例结构描述任何层次。*设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。*VerilogHDL不再是某些公司的专有语言而是IEEE标准。*人和机器都可阅读Verilog语言,因此它可作为EDA的工具和设计者之间的交互语言。*VerilogHDL语言的描述能力能够通过使用编程语言接口(PLI)机制进一步扩展。PLI是允许外部函数访问Verilog模块内信息、允许设计者与模拟器交互的例程集合。*设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级,包括进程和队列级。*能够使用内置开关级原语在开关级对设计完整建模。*同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。*VerilogHDL能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。*在行为级描述中,VerilogHDL不仅能够在RTL级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。*能够使用门和模块实例化语句在结构级进行结构描述。*VerilogHDL的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。*VerilogHDL还具有内置逻辑函数,例如&(按位与)和|(按位或)。*对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。*可以显式地对并发和定时进行建模。*提供强有力的文件读写能力。*语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果;例如,事件队列上的事件顺序在标准中没有定义。6/12第二章510进制计数器设计2.1510进制计数器设计要求设计一个基于VerilogHDL语言的计数器,其计数长度为519,即可实现从000D~518D计数;同时该计数器还应具有异步清零的功能。要求编写设计源程序,并生成仿真电路图,最后通过仿真实验验证设计的可靠性并给出仿真波形图。2.2510进制计数器设计思路2.2.1逻辑电路描述方法的选择由于本次设计较为简单,对硬件的要求不高,为了使设计具有更强的通用性和有效性,初步选定采用行为型描述方法实现对逻辑电路的描述。2.2.2设计流程图图1510计数器设计流程图2.3利用QuartusII软件仿真实现7/122.3.1新建工程count510选择FileNewProjectWizard,新建工程文件,输入工程名为count510(注意此处工程名与工程的顶层实体名必须一致)。在Availabledevices列表中选择FPGA型号EP2C70F896C6。2.3.2设计输入在当前工程下,选择FileNew菜单,接着选择VerilogHDLFile,单击OK,打开TextEditor。选择FileSaveas菜单,将文件保存到工程下,文件名为count510,保存类型为VerilogHDLFile,则生成count510.v文件。2.3.3Verilog语言描述利用VerilogHDL语言编写的源程序如下:modulecount510(reset,clk,out);inputreset,clk;output[9:0]out;reg[9:0]out;always@(posedgeclkornegedgereset)beginif(!reset)out=0;elseif(out==10'd509)out=0;elseout=out+1;endendmodule2.3.4仿真电路图保存上述源程序,进行综合编译。编译无误后,生成仿真电路图(RTLviewer)如下图1所示:8/12图1-519计数器仿真电路图2.3.5创建波形文件在同一工程下创建波形文件(VectorWaveformFile)count519.vwf,设置终止时间EndTime为15us。波形文件如下图2所示:图2-519计数器波形文件图局部放大图如下图3、图4所示:图3-波形文件局部放大图19/12图4-波形文件局部放大图22.3.6QuartusII仿真设置选择AssignmentsSettings菜单,打开Settings窗口,单击SimulatorSettings,将Simulation设置为Functional,完成设置。用ProcessingGenerateFunctionalSimulationNetlist菜单产生功能仿真所需的网表。2.3.7仿真结果单击仿真按钮启动功能仿真。仿真结果如下图5所示:图5-519计数器仿真结果局部发大图如下图6、图7、图8、图9所示:图6-仿真结果局部放大图110/12图7-仿真结果局部放大图2图8-仿真结果局部放大图3图9-仿真结果局部放大图4从上述图5至图9可以看出:当复位信号有效,即reset=0时,不论时钟信号的上升沿有没有来临,输出out均清零,因此该设计实现了异步清零功能;当复位信号无效,即reset=1时,此时若时钟信号来了一个上升沿,则计数器开始计数,因此该计数器实现了计数功能;由图9可以看出,当计数器计数至518时,下一个时钟上升沿来临后,输出清零,即该计数器实现了000D-518D计数,为一519进制计数器。综上,本次实验完成设计要求。11/12第三章总结通过此次对VerilogHDL语言的学习,我认识到了可编程逻辑器件在当前生产科研中的重要地位,尤其是在一些逻辑功能十分复杂的电路设计时