电子沙漏实验报告.docx

上传人:b****6 文档编号:8363358 上传时间:2023-01-30 格式:DOCX 页数:12 大小:562.84KB
下载 相关 举报
电子沙漏实验报告.docx_第1页
第1页 / 共12页
电子沙漏实验报告.docx_第2页
第2页 / 共12页
电子沙漏实验报告.docx_第3页
第3页 / 共12页
电子沙漏实验报告.docx_第4页
第4页 / 共12页
电子沙漏实验报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

电子沙漏实验报告.docx

《电子沙漏实验报告.docx》由会员分享,可在线阅读,更多相关《电子沙漏实验报告.docx(12页珍藏版)》请在冰豆网上搜索。

电子沙漏实验报告.docx

电子沙漏实验报告

数字电路与逻辑设计实验报告

 

题目:

电子沙漏

姓名

学院信息与通信工程学院

班级

任课教师

2019年12月

摘要和关键字

一、任务要求

二、系统设计(设计思路、总体框图、分块设计)

三、仿真波形及波形分析

四、代码及注释

五、所实现功能说明及资源利用情况

六、故障问题分析

七、总结和结论

八、参考文献

摘要和关键字

摘要

沙漏是一种古老的计时工具,也是一种玩具。

西方沙漏由两个玻璃球和一个狭窄的连接管道组成的。

通过充满了沙子的玻璃球从上面穿过狭窄的管道流入底部玻璃球所需要的时间来对时间进行测量。

电子沙漏用发光二极管表示沙粒,模拟沙漏的运动过程。

电子沙漏会像真正的沙漏一样,上部的沙粒(点亮的发光二极管)一粒一粒往下掉,下部的沙粒一粒一粒堆起来。

本次课程设计中,使用EPM1270T144C5N、Quartusii来完成设计要求。

 

关键词

EPM1270T144C5N,按键消抖,时钟分频,扫描输出

 

一、任务要求:

1、相关知识:

沙漏是一种古老的计时工具,也是一种玩具。

电子沙漏用发光二极管表示沙粒,模拟沙漏的运动过程。

电子沙漏会像真正的沙漏一样,上部的沙粒(点亮的发光二极管)一粒一粒往下掉,下部的沙粒一粒一粒堆起来。

在结构上,两组各16个发光二极管分别排列成为两个三角形,如图1所示。

其中:

VD0~VD15位于上部,排列成倒三角形;VD0'~VD15'位于下部,排列成正三角形。

两个三角形的顶尖相对,组成沙漏形状。

当上部有一个发光二极管熄灭时,相应地下部就有一个发光二极管点亮,模拟了沙粒的运动。

2、基本要求:

1 采用8*8双色点阵显示电子沙漏的开机界面,如图2所示。

其中红色LED代表沙漏的上半部分沙粒VD0~VD15,绿色LED代表沙漏的下半部分VD0'~VD15'。

2 用拨码开关SW1模拟重力感应器。

当SW1为低电平时,沙粒从VD0~VD15向VD0'~VD15'移动;当SW1为高电平时,沙粒从VD0'~VD15'向VD0~VD15移动。

3 按键BTN0作为计时启动停止按键,启动后沙粒即可按照SW1设定的方向移动,以SW1为低电平时为例,LED移动的顺序与对应关系如图3的1~16所示(若SW1为高电平,则点阵显示移动顺序为16~1)。

每颗沙粒的移动时间为1秒,当移动到图3的16时,若SW1仍为低电平,则保持沙粒不动,但计时继续,直到SW1的电平发生变化或者BTN0计时停止。

4 设计实现一个60秒计时器,当按键BTN0启动时开始工作,用于在沙粒移动过程中进行计时校准,并用数码管DISP0~DISP1显示计时结果。

3、提高要求:

1 可以调节控制电子沙漏的流动速度。

2 用多种方式呈现电子沙漏界面。

3 自行设定沙粒的移动路径,显示每颗沙粒的移动过程。

2、系统设计:

总体框图:

 

分块设计:

1 按键计数模块

control:

process(timm,reset,shuzi)    --按键计数

begin

if(timm'eventandtimm='1')and(reset='1')then 

    shuzi<=shuzi+1;

endif;

endprocess;

2 数码管控制模块

controlsmg:

process(clk2,shownum,shuzi,reset,count)      --数码管控制

begin   

    if(shownum

(1)<6)then 

   if reset='0'and (shuzirem2=0)and(count=5)then 

    if(clk2'eventandclk2='1')then 

        if(shownum

(1)<=5)then

if(shownum(0)=9)then 

shownum(0)<=0;

shownum

(1)<=shownum

(1)+1;

  else

shownum(0)<=shownum(0)+1;

  endif;

endif;

   endif;

   else

   shownum

(1)<=shownum

(1);

   shownum(0)<=shownum(0);

  endif; 

  elsif(reset='1')then

  shownum

(1)<=0;

  shownum(0)<=0;

  endif;

endprocess;

 

3 扫描显示数码管

timeshow:

process(reset,tim)  

variablesstate:

integerrange0to1:

=0;

begin

iftim'eventandtim='1' then 

sstate:

=sstate+1;

casesstateis

when1=>cat<="111101"; 

when0=>cat<="111110"; 

 endcase;

caseshownum(sstate)is 

  when0=>seven<="1111110";

when1=>seven<="0110000";

when2=>seven<="1101101";

when3=>seven<="1111001";

when4=>seven<="0110011";

when5=>seven<="1011011";

when6=>seven<="1011111";

when7=>seven<="1110000";

when8=>seven<="1111111";

when9=>seven<="1111011";

whenothers=>seven<="0000000";

endcase;

endif;

endprocess; 

 

4 分频模块:

clktim:

process(clk)   --分频模块

 variablecout1:

integer:

=0;

 variablecout2:

integer:

=0;

 variablecout3:

integer:

=0;

 variablecout4:

integer:

=0;

begin

  ifclk'eventandclk='1'then --扫描点阵和数码管

   cout1:

=cout1+1;

    ifcout1<=25thentim<='0';

    elsifcout1<50thentim<='1';

    elsecout1:

=0;

    endif;

   cout2:

=cout2+1;--扫描按键

ifcout2<=4500000thentimm<='0';

elsifcout2<9000000thentimm<='1';

elsecout2:

=0;

endif;

   cout3:

=cout3+1;    --沙漏快速移动

    ifcout3<=6250000 thenclk1<='0';

      elsifcout3<12500000thenclk1<='1';

      elsecout3:

=0;

    endif;  

   cout4:

=cout4+1; --时钟计时及沙漏常规移动

    ifcout4<=25000000thenclk2<='0';

      elsifcout4<50000000thenclk2<='1';

      elsecout4:

=0;

     endif; 

  endif;

endprocess;

 

流程图:

 

 

3、仿真波形及波形分析:

点阵显示采用行扫描模式

 

 

四、代码及注释

(见附件)

5、功能说明及资源利用情况:

本次实验完成了题目的所有基本要求以及调节速度的提高要求,即用8*8双色点阵模拟了电子沙漏,实现了沙粒的流动;用拨码开关sw1模拟了重力感应器;用DISP0~DISP1模拟了60秒计时器;用按键btn0控制启动和暂停,btn1实现复位,btn2实现三种速度的切换。

器件资源使用情况如下:

Totallogicelements:

272/1270(21%)

Totalpins:

43/116(37%)

 

管脚定义如下

六、故障及问题分析:

1 编写VHDL源程序时,应确保实体名与工程名一致,否则会发生编译错误; 存盘时也要确保文件名与工程名一致;

2 下载后按键按下无反应,检查代码多次后发现是管脚设置出错,浪费了很多时间。

3 各个process之间为并行关系,编写代码时经常造成冲突。

在编写代码前就规划好全局,理清各个模块的关系,做到统筹全局。

七、总结和结论:

本实验对我来说是一次重要的经历,我第一次接触到VHDL代码,虽然教材上使用的就是VHDL,但是平常都使用的是VerilogHDL。

上手一个全新的代码是较为困难的,在网上查阅前人做过的类似的模块和实验,学习代码的语法和用法。

在这种“照葫芦画瓢”的过程中,我逐渐熟悉了VHDL代码。

回首学习经历,令我感到满足。

能够如此快速的从学习代码到最终完成实验代码的设计,老师的指导是不可或缺的。

刚开始布置下实验时,老师就为我们讲解了EPM1270T144C5N开发板的多种功能和常见的使用方法。

并且在我们实际动手实验的时候多次提醒我们要分模块来完成,这大大减少了我们的查错量,每个模块正确完成后,实验的脉络自然就清晰了。

并且分模块完成让我们能够互相学习一些内容,不同实验安排的同学们却有些模块是相同的。

“兵教兵”的教学方式让我们的学习环境十分融洽。

本次实验让我对于如何独立编写一个完整的VHDL程序有了更深刻的认识。

我更懂得了设计实验的难点并不是代码的编写,而是系统模块的划分和设计,规划好全局后在着手编写代码会事半功倍。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1