1、电子沙漏实验报告数字电路与逻辑设计实验报告题目: 电子沙漏姓 名 学 院 信息与通信工程学院班 级 任课教师 2019年 12月摘要和关键字一、 任务要求二、 系统设计(设计思路、总体框图、分块设计)三、 仿真波形及波形分析四、 代码及注释五、 所实现功能说明及资源利用情况六、 故障问题分析七、 总结和结论八、参考文献摘要和关键字摘要沙漏是一种古老的计时工具,也是一种玩具。西方沙漏由两个玻璃球和一个狭窄的连接管道组成的。通过充满了沙子的玻璃球从上面穿过狭窄的管道流入底部玻璃球所需要的时间来对时间进行测量。电子沙漏用发光二极管表示沙粒,模拟沙漏的运动过程。电子沙漏会像真正的沙漏一样,上部的沙粒(
2、点亮的发光二极管)一粒一粒往下掉,下部的沙粒一粒一粒堆起来。 本次课程设计中,使用EPM1270T144C5N、Quartus ii来完成设计要求。关键词EPM1270T144C5N,按键消抖,时钟分频,扫描输出一、任务要求:1、相关知识:沙漏是一种古老的计时工具,也是一种玩具。电子沙漏用发光二极管表示沙粒,模拟沙漏的运动过程。电子沙漏会像真正的沙漏一样,上部的沙粒(点亮的发光二极管)一粒一粒往下掉,下部的沙粒一粒一粒堆起来。 在结构上,两组各16 个发光二极管分别排列成为两个三角形,如图1 所示。其中:VD0 VD15位于上部,排列成倒三角形;VD0VD15位于下部,排列成正三角形。两个三角
3、形的顶尖相对,组成沙漏形状。当上部有一个发光二极管熄灭时,相应地下部就有一个发光二极管点亮,模拟了沙粒的运动。2、基本要求:1采用8*8双色点阵显示电子沙漏的开机界面,如图2所示。其中红色LED代表沙漏的上半部分沙粒VD0VD15,绿色LED代表沙漏的下半部分VD0VD15。 2用拨码开关SW1模拟重力感应器。当SW1为低电平时,沙粒从VD0VD15向VD0VD15移动;当SW1为高电平时,沙粒从VD0VD15向VD0VD15移动。3按键BTN0作为计时启动停止按键,启动后沙粒即可按照SW1设定的方向移动,以SW1为低电平时为例,LED移动的顺序与对应关系如图3的116所示(若SW1为高电平,
4、则点阵显示移动顺序为161)。每颗沙粒的移动时间为1秒,当移动到图3的16时,若SW1仍为低电平,则保持沙粒不动,但计时继续,直到SW1的电平发生变化或者BTN0计时停止。4设计实现一个60秒计时器,当按键BTN0启动时开始工作,用于在沙粒移动过程中进行计时校准,并用数码管DISP0DISP1显示计时结果。 3、提高要求:1可以调节控制电子沙漏的流动速度。2用多种方式呈现电子沙漏界面。3自行设定沙粒的移动路径,显示每颗沙粒的移动过程。2、系统设计:总体框图:分块设计:1按键计数模块control:process(timm,reset,shuzi) -按键计数beginif (timmevent
5、 and timm=1) and (reset=1)then shuzi= shuzi+1;end if; end process;2数码管控制模块controlsmg: process(clk2,shownum,shuzi,reset,count) -数码管控制begin if(shownum(1)6) then if reset=0 and (shuzi rem 2 =0) and (count=5)then if (clk2event and clk2=1) then if(shownum(1)=5) thenif(shownum(0)=9) thenshownum(0)=0;shown
6、um(1)=shownum(1)+1; elseshownum(0)= shownum(0)+1; end if;end if; end if; else shownum(1)=shownum(1); shownum(0)= shownum(0); end if; elsif( reset =1) then shownum(1)=0; shownum(0)catcatsevensevensevensevensevensevensevensevensevensevenseven=0000000;end case;end if;end process;4分频模块: clktim:process(c
7、lk) -分频模块variable cout1: integer:=0;variable cout2: integer:=0;variable cout3: integer:=0;variable cout4: integer:=0;begin if clkevent and clk = 1 then -扫描点阵和数码管 cout1:= cout1+1; if cout1= 25 then tim = 0; elsif cout1 50 then tim = 1; else cout1:=0; end if; cout2:=cout2+1; -扫描按键if cout2= 4500000 the
8、n timm=0;elsif cout2 9000000 then timm=1;else cout2:=0;end if; cout3:=cout3+1; -沙漏快速移动 if cout3= 6250000 then clk1=0; elsif cout3 12500000 then clk1=1; else cout3:=0; end if; cout4:=cout4+1; -时钟计时及沙漏常规移动 if cout4= 25000000 then clk2=0; elsif cout4 50000000 then clk2=1; else cout4:=0; end if; end if;
9、end process;流程图:3、仿真波形及波形分析:点阵显示采用行扫描模式四、代码及注释(见附件)5、功能说明及资源利用情况:本次实验完成了题目的所有基本要求以及调节速度的提高要求,即用8*8双色点阵模拟了电子沙漏,实现了沙粒的流动;用拨码开关sw1模拟了重力感应器;用DISP0DISP1模拟了60秒计时器;用按键btn0控制启动和暂停,btn1实现复位,btn2实现三种速度的切换。器件资源使用情况如下:Total logic elements:272/1270(21%)Total pins:43/116(37%)管脚定义如下 六、故障及问题分析:1编写VHDL源程序时,应确保实体名与工程
10、名一致,否则会发生编译错误;存盘时也要确保文件名与工程名一致;2下载后按键按下无反应,检查代码多次后发现是管脚设置出错,浪费了很多时间。3各个process之间为并行关系,编写代码时经常造成冲突。在编写代码前就规划好全局,理清各个模块的关系,做到统筹全局。七、总结和结论:本实验对我来说是一次重要的经历,我第一次接触到VHDL代码,虽然教材上使用的就是VHDL,但是平常都使用的是Verilog HDL。上手一个全新的代码是较为困难的,在网上查阅前人做过的类似的模块和实验,学习代码的语法和用法。在这种“照葫芦画瓢”的过程中,我逐渐熟悉了VHDL代码。回首学习经历,令我感到满足。能够如此快速的从学习代码到最终完成实验代码的设计,老师的指导是不可或缺的。刚开始布置下实验时,老师就为我们讲解了EPM1270T144C5N开发板的多种功能和常见的使用方法。并且在我们实际动手实验的时候多次提醒我们要分模块来完成,这大大减少了我们的查错量,每个模块正确完成后,实验的脉络自然就清晰了。并且分模块完成让我们能够互相学习一些内容,不同实验安排的同学们却有些模块是相同的。“兵教兵”的教学方式让我们的学习环境十分融洽。本次实验让我对于如何独立编写一个完整的VHDL程序有了更深刻的认识。我更懂得了设计实验的难点并不是代码的编写,而是系统模块的划分和设计,规划好全局后在着手编写代码会事半功倍。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1