您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 基于verilog语言编程的数字秒表设计
数字秒表设计系别:电子通信工程系专业:电子信息工程班级:学号:姓名:数字秒表(基于verilong语言编程)课程设计1一、设计要求用verilong语言编写程序,结合实际电路,设计一个4位LED数码显示“秒表”,显示时间为99.9~00.0秒,每秒自动减一,精度为0.1。另设计一个“开始”按键和一个“复位”按键。再增加一个“暂停”按键。按键说明:按“开始”按键,开始计数,数码管显示从99.9开始每秒自动减一;按“复位”按键,系统复位,数码管显示99.9;按“暂停”按键,系统暂停计数,数码管显示当时的计数。二、设计目的1、通过本次课程设计加深对verilong语言课程的全面认识、复习和掌握,对EPM7064芯片的应用达到进一步的了解。2、掌握定时器、外部中断的设置和编程原理。3、通过此次课程设计能够将软硬件结合起来,对程序进行编辑,调试。使其能够通过电脑下载到芯片,正常工作。4、实际操作QuartusII软件,复习巩固以前所学知识。三、总体设计本秒表系统具有复位、暂停、秒表计时等功能。clk为系统工作时钟,采用AlteraDE2上的50M时钟信号,经过分频器产生秒表计时周期为0.01s的时钟,再经过计数器,分别对秒表的百分位、十分位、秒、秒十位、分、分十位进行计数。onoff为启动/暂停控制信号,当它为0时,启动计时,当它为1时,计时暂停。clr为复位信号,当该信号有效时,计数器和译码清零,此时数码管显示输出为00:00:00。在总体电路图中,根据设计要求,需要两个输入控制信号onoff和clr。由于开发板上除了拨动开关就是瞬时的按键开关,且按键开关平时都呈高电平,按一下为低电平。故在实际测试时采用了拨动开关SW0来控制秒表的启动/暂停,通过KEY0来控制秒表的清零。四、设计思路描述该实验要求进行计时并在数码管上显示时间,通过相关软件QuartusII编译,利用JTAG下载电路到核心芯片,驱动硬件工作。Altera_EPM7064(84PIN)有四个引脚GCLK1(83脚),GCLRn(1脚),OE1(84脚),OE2(2脚)。GCLK1是全局时钟,GCLRn(1脚是全局清零,OE1(84脚),OE2(2脚)是全局使能实现“开始”按键的功能;实现“清零(复位)”按键的功能;做为时钟信号CLK输入的入口地址。可将开关设计与此,其优势在在于到达延迟时间相等。其中“开始”按键当开关由1拨向0(由上向下拨)时开始计时;“清零(复位)”按键当开关由1拨向0(由上向下拨)时数码管清零(复位),此时若再拨“开始”按键则又可重新开始计时。1)电源部分需要并联四个电容,以达到滤波作用,获得实验所需的电压;2)利用三极管分别连接LED数码管和EPM7064,起到放大(电流)作用;3)本实验时钟信号的产生有晶振直接提供,同时由编写的子程序决定输出频率;4)芯片所需程序由计算机编译,采用QuartusII软件,编译调试无误后,进行下载;5)IDI、TMS、TCK、TDO是JTAG的标准线。用来实现连接芯片,实现下载功能。五、原理图2跟据数字秒表的原理图如图一所示,为设计项目选定CyclongII系列中的EP2C35F672C6器件,锁定顶层设计中各端口所对应的引脚号,并编译通过。然后对器件编程,使用USB-Blaste下载电缆把项目以在线配置的方式下载到AlteraDE2实验板的EP2C35F672C6器件中。该数字式秒表具有清零功能,通过KEY0来控制,能够在计时过程中随时清零。用SW0键来控制锁存/计时,能在计时过程中通过按SW0键,SW0拨动开关打上时计时暂停,打下时仍继续。实验证明该秒表工作正常,基本上已达到了预期的设计要求。图一、数字秒表原理图3六、PCB图七、系统软件设计在设计电路时,要遵循从上到下的设计原则。首先从系统设计入手,在顶层进行功能划分和结构设计,顶层模块的每个层次模块均可完成一个较为独立的功能,次模块在调试成功后可生成一个默认符号,以供上一层模块调用。本系统由4个模块组成,分别是分频电路模块、模10计数模块和动态译码显示模块。本设计最小计时单位为0.1s,设计时需获得一个比较精确的10Hz(周期为0.1s)的计时脉冲。由于最终的设计结果要下载到可编程逻辑器件中测试,因此可利用AlteraDE2开发板的12M晶振时钟。将12M时钟信号CLK送到分频器CLKGEN进行60万分频后,得到10Hz的频率由NEWCLK输出。采用Verilog语言编程,编译无误通过后创建默认文件符号CLKGEN以供上层电路调用。程序实现如下:moduleclock(clk,key,dig,seg);//模块名clockinputclk;//输入时钟input[1:0]key;//输入按键output[7:0]dig;//数码管选择输出引脚output[7:0]seg;//数码管段输出引脚reg[7:0]seg_r;//定义数码管输出寄存器reg[7:0]dig_r;//定义数码管选择输出寄存器reg[3:0]disp_dat;//定义显示数据寄存器reg[24:0]count;//定义计数寄存器reg[15:0]hour;//定义现在时刻寄存器图二、数字秒表PCB图4regsec,keyen;//定义标志位reg[1:0]dout1,dout2,dout3;//寄存器wire[1:0]key_done;//按键消抖输出assigndig=dig_r;//输出数码管选择assignseg=seg_r;//输出数码管译码结果//秒信号产生部分always@(posedgeclk)//定义clock上升沿触发begincount=count+1'b1;if(count==25'd6000000)//0.5S到了吗?begincount=25'd0;//计数器清零sec=~sec;//置位秒标志endend//按键消抖处理部分assignkey_done=(dout1|dout2|dout3);//按键消抖输出always@(posedgecount[17])begindout1=key;dout2=dout1;dout3=dout2;endalways@(negedgekey_done[0])beginkeyen=~keyen;//将琴键开关转换为乒乓开关end//数码管动态扫描显示部分always@(posedgeclk)//count[17:15]大约1ms改变一次begincase(count[17:15])//选择扫描显示数据3'd0:disp_dat=hour[3:0];//秒个位3'd1:disp_dat=hour[7:4];//秒十位3'd2:disp_dat=hour[11:8];//分个位3'd3:disp_dat=hour[15:12];//分十位endcasecase(count[17:15])//选择数码管显示位53'd0:dig_r=8'b11111110;//选择第一个数码管显示3'd1:dig_r=8'b11111101;//选择第二个数码管显示3'd2:dig_r=8'b11111011;//选择第三个数码管显示3'd3:dig_r=8'b11110111;//选择第四个数码管显示endcaseendalways@(posedgeclk)begincase(disp_dat)4'h0:seg_r=8'hc0;//显示04'h1:seg_r=8'hf9;//显示14'h2:seg_r=8'ha4;//显示24'h3:seg_r=8'hb0;//显示34'h4:seg_r=8'h99;//显示44'h5:seg_r=8'h92;//显示54'h6:seg_r=8'h82;//显示64'h7:seg_r=8'hf8;//显示74'h8:seg_r=8'h80;//显示84'h9:seg_r=8'h90;//显示9//4'ha:seg_r=8'hbf;//显示-default:seg_r=8'hff;//不显示endcase//if((count[17:15]==3'd2)&sec)//seg_r=8'hff;end//计时处理部分always@(negedgesecornegedgekey_done[1])//计时处理beginif(!key_done[1])//是清零键吗?beginhour=16'h0;//是,则清零endelseif(!keyen)beginhour[3:0]=hour[3:0]+1'b1;//秒加1if(hour[3:0]==4'ha)beginhour[3:0]=4'h0;hour[7:4]=hour[7:4]+1'b1;//秒的十位加一if(hour[7:4]==4'h6)begin6hour[7:4]=4'h0;hour[11:8]=hour[11:8]+1'b1;//分个位加一if(hour[11:8]==4'ha)beginhour[11:8]=4'h0;hour[15:12]=hour[15:12]+1'b1;//分十位加一if(hour[15:12]==4'h6)hour[15:12]=4'h0;endendendendendendmodule在QuartusII环境下,打开一个新的原理图编辑窗口,然后调入秒表电路设计所需要的50万分频器CLKGEN、十进制计数器/分频器CNT10(4片),译码器DISP,以及电路需要的输入/输出元件。完成电路元件之间和输出/输入之间的连接,并通过QuartusII的编译八、焊接调试电路板组装心得:收集资料,设计出电路原理图,选择元件型号,清点元器件的个数。测试元件,包括测电阻的阻值,根据电路图和电路板本身的实际连通情况开始整体布局连接电路。电路板焊接心得:在设计过程中,应该了解其难易,考虑一下焊接的难度。如果比较难就要追求速度(但是也要尽量焊好),如果简单一点,那么在焊接的同时要考虑到焊接工艺。一般情况下,工艺方面的要求就是焊点的光滑、亮度、毛刺这几个方面。一般不会要求电阻的方向之类的。焊接的方式:焊接前看一下元器件,了解一下它们的尺寸规格。然后从低到高开始焊接。电路板调试心得:首先,在上电源前先用万用表测试下电源和地之间是否有短路,这样可防止可能烧坏IC等元件。其次,测试电路板的各项功能,须从极端的角度去测试可能会出现的问题。再次,根据产品的性能要求,逐次测试其各个功能是否符合产品要求。最后,调试过程中会遇到各种问题,下面一一分析:第一,电源连接不上,就要查查电源连接电路。第二,电源连接上了,却不能工作,查其他电源是不是供电正常,然后查晶振是否工作。第三,还是工作不正常,目测下主要元件是否有焊反、焊错、短路等现象出现。包括元件用错了,型号不对,元件方向反了,元件的脚有损坏、虚焊、短路等,连接线有损坏或接触不良,电容的正负极焊反等。第四,加密IC焊错了,或没有加载相应的程序。九、性能指标测试首先,按照性能指标,测试每项功能是否达到,记录实际测试结果,分析误差、误差原因,以及解决办法。严格按照测试步骤:首先认真调查测试需求和仔细分析测试任务,然后7才有可能做好测试的准备工作,只有对测试任务非常清楚,测试目标极其明确的前提下,我们才可能制定出切实可行的测试计划。明确测试目标,详尽测试计划在对测试需求充分了解的基础上,制定尽可能详细的测试计划,对测试的实施是大有裨益的。十、总结在QuartusII开发环境下,采用自顶向下的设计方法有利于在早期发现结构设计中的错误,避免不必要的重复设计。再结合基于FPGA的“在系统”可编程实验板,轻轻松松就能实现各种电子产品的设计,现场观察实验测试结果。大大缩短了产品的设计周期和调试周期,提高了设计的可靠性和成功率,充分体现了可编程逻辑器件在数字电路设计中的优越性。十一、心得体会两周时间的课程设计,终于达到了数字秒表系统的要求,尽管还不是十分完美,但从心底里说,还是很高兴的。通过以上步骤就可以完成对数字秒表的过程设计。这次设计,我克服了很多关于设计问题方面的困难,使我对ProtelDXP2004软件的使用有了更进
本文标题:基于verilog语言编程的数字秒表设计
链接地址:https://www.777doc.com/doc-2572681 .html