《VHDL与数字系统设计》课程设计报告(2014--2015年度第1学期)名称:VHDL与数字系统设计题目:八位可逆计数器电路设计院系:电气与电子工程学院班级:电子1301学号:1131230106学生姓名:韩辉指导教师:高雪莲设计周数:2周成绩:日期:2015年1月14日课程课程设计报告1一、课程设计的目的与要求1.设计目的:熟悉MAXPLUS2/QuartusII软件,掌握软件的VHDL程序输入、程序编译和程序仿真操作;学习利用VHDL语言设计数字时序电路程序;了解可逆计数器电路的工作方式。2.设计要求:利用VHDL语言设计八位可逆计数器电路,并利用相关软件进行编译和仿真。并通过其波形输入验证电路设计。二、设计正文1.八位可逆计数器根据计数脉冲的不同,控制计数器在同步信号脉冲的作用下,进行加1或减1操作。其真值表如下所示:表一八位可逆计数器的真值表CLRUPDOWNCLKQ0~Q71XX0000000001↑加100↑减1可逆计数器的计数方向,由特殊的控制端UPDOWN控制。当UPDOWN=1时,计数器进行加1操作;当UPDOWN=0时,计数器进行减1操作。2.八位可逆计数器电路设计的源程序:LIBRARYIEEE;——库USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;——程序包ENTITYcount8IS——实体说明PORT(clr,clk,updown:INSTD_LOGIC;——clr,clk,updown为标准逻辑输入q0,q1,q2,q3,q4,q5,q6,q7:OUTSTD_LOGIC);——q0—q7为标准逻辑输出ENDcount8;——结束实体ARCHITECTUREexamOFcount8IS——结构体说明SIGNALcount_8:STD_LOGIC_VECTOR(7DOWNTO0);BEGINq0=count_8(0);课程课程设计报告2q1=count_8(1);q2=count_8(2);q3=count_8(3);q4=count_8(4);q5=count_8(5);q6=count_8(6);q7=count_8(7);——q0—q7赋值PROCESS(clk,clr,updown)——进程BEGINIF(clr='1')THENcount_8=00000000;——当clr=‘1’时,count_8置零ELSIF(clk'EVENTANDclk='1')THEN——计数脉冲上升沿有效IF(updown='1')THENcount_8=count_8+'1';ELSEcount_8=count_8-'1';——updown为1时加法计数,ENDIF;为0时减法计数ENDIF;ENDPROCESS;——结束进程ENDexam;——结束exam三、课程设计的结论1.八位可逆计数器的仿真波形图及其分析如下:由图1分析可得如下结论:.波形出现延迟现象,延迟长度如图1两红线间距所示,延迟时间为6.72ns。图1八位可逆计数器的仿真波形图一课程课程设计报告3图3八位可逆计数器的仿真波形图三由图2、图3分析可得如下结论:图中的红框区域为两图的区别所在。当clr的输入为高电平1时,输出结果始终为00000000,updown和clk的变化均对输出结果无影响。说明该计数器为低电平有效,当clr的输入为低电平0时,计数器计数;当clr的输入为高电平1时,计数器置零。由图2、图3分析可得如下结论:图中红色区域为两图不同之处。当clr的输入为高电平1时,q的输出结果为0,与clk与updn的值无关。即clr为低电平有效(计数),高电平置零。图3八位可逆计数器的仿真波形图三图4八位可逆计数器的仿真波形图四图2八位可逆计数器的仿真波形图二课程课程设计报告4由图4分析可得如下结论:当clr为0时,处于计数状态,此时updn=1,即为加法计数器:初始值0在遇到时钟脉冲的上升沿时数值加1,在时钟脉冲的下降沿数值保持不变。由图5分析可得如下结论:当clr为0时,处于计数状态,此时updn=0,即为减法计数器:初始值0在遇到时钟脉冲的上升沿时数值减1,在时钟脉冲的下降沿数值保持不变。四、课程设计的总结与改进1.在原设计的源程序中定义标准逻辑输出q0---q7,导致最终的输出波形只能观察到二进制的波形,结果不够直观明了。可以尝试将其改进为如下源程序:(红色字体为修改部分)LIBRARYIEEE;——库USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;——程序包ENTITYcount8IS——实体说明PORT(clr,clk,updown:INSTD_LOGIC;——clr,clk,updown为标准逻辑输入q:OUTSTD_LOGIC_VECTOR(0to7));——q为标准逻辑矢量输出ENDcount8;——结束实体ARCHITECTUREexamOFcount8IS——结构体说明SIGNALcount_8:STD_LOGIC_VECTOR(7DOWNTO0);BEGINq(0)=count_8(0);q(1)=count_8(1);q(2)=count_8(2);q(3)=count_8(3);q(4)=count_8(4);q(5)=count_8(5);q(6)=count_8(6);图5八位可逆计数器的仿真波形图五课程课程设计报告5q(7)=count_8(7);——q0—q7赋值PROCESS(clk,clr,updown)——进程BEGINIF(clr='1')THENcount_8=00000000;——当clr=‘1’时,count_8置零ELSIF(clk'EVENTANDclk='1')THEN——计数脉冲上升沿有效IF(updown='1')THENcount_8=count_8+'1';ELSEcount_8=count_8-'1';——updown为1时加法计数,ENDIF;为0时减法计数ENDIF;ENDPROCESS;——结束进程ENDexam;——结束exam改进后的仿真波形图如下图所示:2.课程设计的总结:编程时应采用多种方法尝试编写,尽量做到波形结果简明易懂。图6改进后的八位可逆计数器的仿真波形图