欢迎来到天天文库
浏览记录
ID:14497984
大小:325.00 KB
页数:7页
时间:2018-07-29
《pld与数字系统设计创新报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、PLD与数字系统设计创新报告A组实验二:运动计时器1实验要求使用Xilinx公司的Spartan3S 400AN开发板上的相关模块,利用ISE开发软件完成数字密码锁的设计,要求实现如下功能:(1)在LED数码管上显示分钟和秒,最长的计时时间为59:59。(2)自定义清零按键,按下该按键,在液晶显示屏上显示的时间为00:00。(3)自定义启动/暂停按键,按下该按键,则启动或暂停计时器计时。其功能与实际的计时器的开始/停止按钮功能相同。2实验原理实验开发板提供4个LED七段数码管,可显示数字,直接与FPGA相
2、连。其控制方法为扫描式,如图所示,若要控制左边第一个七节灯管输出“2”的字型,可以先输出“0010010”到CA~DP,然后输出“0111”到A1~A4即可。七段数码管段排列如下图:图1七段数码管段排列七段数码管从内部接线上分共阳和共阴两种:如图2所示,左为共阴,右为共阳。在电路设计时应根据情况决定采用共阳或共阴,开发板上采用的是共阴的,即:低电平亮。6图2七段数码管内部接线类型其控制方法为扫描式,如图3所示,若要控制左边第一个七段数码管输出“2”的字型,可以先输出“11011010”到CA~DP,然后输
3、出“0111”到A1至A4即可。A1A2A3A4图3显示数字“2”3实验仪器1.XUP(FPGA:spartan3S400AN)实验开发板2.安装ISE软件的电脑4实验主要操作步骤4.1实验设计思想实验采用分层次设计的方法,用硬件描述语言分别实现计数器计时和LED七段数码管显示功能模块,具体方法如下:1.通过ISE开发工具,新建3个模块,分别为计数器计时模块,LED七段数码管显示模块和计时器暂停启动控制模块。 2.计数器计时模块:每一个时钟周期到来时判断秒使能信号是否为1,即是否计数了1秒钟
4、的时间,若是则逐步判断分钟十位、分钟个位、秒钟十位和秒钟个位计数器是否需要进位和归零,以及加1操作。3.LED七段数码管显示模块:根据6LED显示模块的原理,先设计一个扫描计数器(实验中每1ms扫描一个数码管)循环扫描四个数码管,即同一时刻仅有一个数码管亮,而1ms后,下一个数码管亮,如此循环。由于人眼分辨率限制,使得观看起来的效果是所有的数码管一直在显示。再设计一个十进制数到数码管显示的译码器,将需要显示的数字转换成符合数码器显示规则的数字。3.计时器暂停启动模块:设置一个使能信号,使得使能信号为高时,
5、计数器计时模块工作,否则不工作,如此实现计时器的启动和暂停功能。4.2创新思想1.并没有分频出一个周期为1s占空比1:1的时钟信号,而是以一个每1s产生一个高脉冲的秒使能信号去触发计时器工作。这样做很好地避免了分频后的时钟信号会产生毛刺,而不正确的触发计数。两者的区别如下图所示:图4占空比1:1的分频时钟信号图5秒使能信号2.所有计数器都是在同一时钟信号触发下工作,而不是像传统前级触发后级的设计。传统设计是,秒个位每计数到9就会向秒十位发送一个信号,触发秒十位加1;秒十位计数到9再向分个位发送触发信号。像
6、这样前级触发后级的思想是一种门控时钟的思想,容易产生不必要的竞争冒险而导致计数错误。本实验的思路是所有计数器在50MHz时钟信号控制下,由高位向地位逐位判断是否需要进行进位、归零和加1操作,这样既可避免竞争冒险也使程序简洁明了。4.2程序源代码moduleclock(clk,res,start,clockout);inputclk,res,start;outputreg[11:0]clockout;parameterT1s=2500_0000-1;//onesecond(0~2500_0000-1)par
7、ameterT1m=59;parameterT1h=59;reg[7:0]sec,min;reg[21:0]counter;regsec_en;always@(posedgeclkornegedgeres)//secondenablesignalblockif(!res)6begincounter<=22'd0;sec_en<=0;endelseif(counter==T1s)begincounter<=22'd0;sec_en<=1;endelsebegincounter<=counter+1;sec_
8、en<=0;endalways@(posedgeclkornegedgeres)//secondandminutecounterblockbeginif(!res)beginsec<=0;min<=0;endelseif(sec_en&&start)if(min[7:4]==4'h5&&min[3:0]==4'h9)min[7:0]<=0;elseif(min[3:0]==4'h9)beginmin[7:4]<=min[7:4
此文档下载收益归作者所有