您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 计数器的VHDL设计与实现
滨江学院期末设计—EDA课程设计题目:计数器的VHDL设计与实现专业:电子工程系班级:电科1班姓名:xxxxxxxxxxx学号:20112321007指导老师:周欣计数器的VHDL设计与实现摘要:介绍了各种基本计数器的组成及其工作原理,重点研究了可变模计数器的设计与实现,在对现有的可变模计数器的研究基础上,在Quartus开发环境中,用VHDL语言设计一种功能更加强大的可变模计数器,它具有清零、置数、使能控制、可逆计数和可变模等功能,并且对传统的可变模计数器的计数失控问题进行研究,最终设计出一种没有计数失控缺陷的可变模计数器,并通过波形仿真和EPF10K20TI144-4系列实验箱,验证了其各项设计功能。结果表明该设计正确.功能完整。运行稳定。关键词:VHDL;计数器;可变模计数;可逆计数VHDLDesignandRealizationofCounterAbstract:Thispaperanalyzesallkindsofbasiccounteranditsworkingprinciple,focusonthecountervariablemodeofdesignandimplementation.IntheenvironmentofQuartusbasedonresearchoftheexistingmodule—alterablecounter,amodule—alterablecounterwithmorefunctions,suchasclear,set,enablecontrol,reversiblecount,module—alterablecountandsoon,whichisdesignedwithVHDL.Byresearchingtheproblemoflosingcontrolexistedintraditionalmodule—alterablecounter.Amodule—alterablecounterwithnofaultdesigned.AndthroughthewaveformsimulationandEPF10K20TI144-4seriesexperimentbox,allofthefunctionsareverified.Theresuitindicatesthatthecounterisdesignedcorrectly,andhasintegralfunctionsandstableoperation.Keywords:VHDL;counter;dividedfrequencyimpIement;reversible引言随着电子技术、计算机技术和EDA技术的不断发展,数字系统规模越来越大,传统的电路设计已难以适应复杂电子系统的设计要求。从而使得电子设计自动化(EDA)技术迅速发展,成为硬件电子电路设计领域中的主要设计手段。利用FPGA/CPLD进行数字系统的开发已被广泛应用于通信、航天、医疗电子、工业控制等领域。与传统电路设计方法相比,FPGA/CPLD具有功能强大,开发周期短,投资少,便于追踪市场变化及时修改产品设计,以及开发工具智能化等特点。近年来,FPGA/CPLD发展迅速,随着集成电路制造工艺的不断进步,高性价比的FPGA/CPLD器件推陈出新,使FPGA/CPLD成为当今硬件设计的重要途径。在FPGA/CPLD的应用设计开发中,VHDL语言作为一种主流的硬件描述语言,具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性,并在语言易读性和层次化、结构化设计方面,表现出了强大的生命力和应用潜力。QuartusⅡ是Ahera公司在21世纪初推出的FPGA/CPLD集成开发环境,是Ahera公司前一代FPGA/CPLD集成开发环境Max+Plus11的更新换代产品,其界面友好,使用便捷,功能强大,为设计者提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。计数器是数字系统中使用最多的时序电路之一,不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。可变模计数器由于计数容量可以根据需要进行变化,为其广泛使用创造了便利。这里在Quartus1I开发环境下,用VHDL语言设计了一种具有清零、置数、使能控制、可逆计数和可变模功能的计数器。1.基本模10计数器的设计VHDL设计代码如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycounter10isport(clk,clrn:instd_logic;cq:outstd_logic_vector(3downto0);cout:outstd_logic);endcounter10;architecturebhvofcounter10issignalcqi:std_logic_vector(3downto0);beginprocess(clk,cqi)beginifclrn='0'thencqi=0000;elsifclk'eventandclk='1'thenifcqi9thencqi=cqi+1;elsecqi=0000;endif;endif;ifcqi=9thencout='1';elsecout='0';endif;cq=cqi;endprocess;2.基本可变模计数器设计可变模计数器是指计数/模值可根据需要进行变化的计数器。电路符号如图1所示,clk为时钟脉冲输入端,clr为清零端,m为模值输入端,q为计数输出端。基本可变模计数器的VHDL代码如下所示:LIBRARYIEEE;USEieee.Std_logic_l164.AIL;USEieee.Std_logic_unsigned.ALL;USEieee.Std_logic_arith.All;ENTITYmchcounterISPORT(elk,elr:INstd_logic;m:inintegerrange0tO99;q:bufferintegerrange0tO99);ENDmchcounter;ARCHITECTUREone0FmchcounterIS------定义计数最大值m_tempsignalm_temp:integerrange0tO99;BEGINPROCESS(elk,clr,m)BEGINm_temp=m-1;ifelr=‘1’thenq=0;一一以时钟信号的上升沿为计数触发条件elsifclk’eventandclk=‘1’thenifq=m_tempthenq=0;elseq=q+1;endif;endif;------清零功能------加法计数ENDPROCESS;ENDARCHITECTUREone;说明:上述代码设计采用了常用的if语句结构,即“if条件句then顺序语句elsif条件句then顺序语句else顺序语句endif”结构,实现模值小于99的可变模计数。从上述的代码可以看出,基本的可变模计数器的功能单一。仿真验证则表明在进行模值变换时,基本的可变模计数器存在一些功能上的缺陷:计数器若是由较小的模值变化为较大的模值时,能正常的进行变模计数;但当其由较大的模值变化为较小的模值,则可能出现计数失控,如图2所示,图中显示了当模值由12变换为7时,即发生了计数失控。失控的原因是大于当模值由12变换为7时,计数输出为q为11,大于当前模值7的计数最大值6。由此产生了计数失控。3.改进的多功能可变模计数器为了克服上述基本可变模计数器的缺陷,并增加更多的控制功能,在此设计了一种改进的多功能可变模计数器,具有清零、置数、使能控制、可逆计数和可变模功能。其电路符号如图3所示,elk为时钟脉冲输入端,ITI为模值输入端,clr为清零控制端,8为置数控制端,d为置数输入端,en为使能控制端,updn为计数方向控制端,q为计数输出端,CO为进位输出端。这里所设计的多功能可变模计数器的VHDL代码如下所示:LIBRARYIEEE:USEieee.std_logic_1164.ALL;USEieee.std_logic_unsigned.ALL;USEieee.std_logie_arith.ALL;ENTlTYcounterISPoRT(clk,clr,S,en,updn:instd—logic;d:inintegerrange0to99;m:inintegerrange0to99;co:OUTstd_logic;q:bufferintegerrange0to99);ENDcounter:ARCHITECTUREoneofcounterIS------定义计数最大值m_tempsignalm_temp:integerrange0to99;BEGINPRoCESS(elk,clr,m)BEGINm_temp=m-1;------清零功能ifclr=’1’thenq=0;co=0;------以时钟信号的上升沿为计数触发条件elsifelk’eventandclk=’1’then------置数功能ifs=’1’thenq=d;------防止计数失控elsifqm_tempthenq=m_temp;------计数使能控制功能elsifen=’1’thenifupdn=’1’then------加法计数ifq=m_tempthenq=O;co=’1’;elseq=q+1;co=0;endif;elsifupdn=’0’then------减法计数ifq=Othenq=m_temp;co=‘1‘;elseq=q-1;co=’0’;endif;endif;endif;endif;ENDPROCESS;ENDARCHITECTUREone;值得注意的是,这里所设计的多功能可变模计数器具有如下特点:(1)该设计的多功能可变模计数器具有多个功能控制端。因此各个控制端的优先权顺序就成为设计的关键,经过理论分析和仿真调试,最终确认的优先权顺序为:clr(清零)一clk(时钟触发)一s(置数)一en(使能)---updn(计数方向)。这个优先权顺序可以有效地保证各个功能的完整实现,以及技术器的稳定运行。(2)为了防止出现计数失控,大多数计数器采用给计数器增加一个复位控制端的办法,当发现计数输出q发生了计数失控时,通过复位控制端将计数器复位来排除计数失控。这种方法虽然有效,但是每次出现计数失控都要手动控制复位,给实际使用带来了不便。该设计的多功能可变模计数器中,将当前的计数输出q与当前的计数最大值rn—temp进行比较,如果q比m—temp大,则强制将m—temp赋给q,这样就可以自动避免计数失控,不必再增加手动的复位控制端。4.仿真结果分析该多功能可变模计数器在Quartus11开发环境下。进行了仿真验证,功能仿真波形如图4所示,时序仿真波形如图5所示。仿真结果分析如下:(1)clk为时钟信号,由时钟信号的上升沿触发计数;(2)m为模值输入端,当其变化时,计数容量相应发生变化;(3)clr为清零控制端,当其为高电平时清零;(4)s为置数控制端,当其为高电平时将置数输入端d的数据加载到输出端q;(5)en为使能控制端,当其为高电平时正常计数,当其为低电平时暂停计数;(6)updn为计数方向控制端。当其为高电平时计数器加法计数,当其为低电平时计数器减法计数。5.结语在EDA实验课程的综合设计中,我完成的是一个4路抢答计分器的设计,在抢答器的设计中,多次用到了计数器这一基本数字电路元件,于是我想到对计数器做更加深入的研究,针对基本可变模计数器可能出现计数失控这一功能缺陷,对可变模计数器进行了改进。这里所设计的多功能可变模计数器在Quartus开发环境下进行了仿真验证后,下载到EPF10K20TI144-4型实验箱中进行了硬件验证。实验证明设计正确,功能完整,运行稳定。另外,
本文标题:计数器的VHDL设计与实现
链接地址:https://www.777doc.com/doc-2097269 .html