数字秒表设计EDA课设报告Word文档下载推荐.docx
《数字秒表设计EDA课设报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数字秒表设计EDA课设报告Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
![数字秒表设计EDA课设报告Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/12/df603307-933b-4e73-ab68-63ab8d3f36f8/df603307-933b-4e73-ab68-63ab8d3f36f81.gif)
1十进制计数器…………………………………………………………1
2.六进制计数器…………………………………………………………2
3.时间数据分时扫描模块………………………………………………3
4.显示译码模块…………………………………………………………4
5.报警电路模块…………………………………………………………6
四、顶层文件原理图 …………………………………………………………7
五、硬 件要求 …………………………………………………………8
六、实 验连线…………………………………………………………8
七、实验总结 …………………………………………………………8
八、心得体会…………………………………………………………9
九、参考 文献…………………………………………………………10
课程设计任务书
课题名称
数字秒表设计
完成时间
2010年12月1日
指导教师
崔瑞雪
职称
副教授
学生姓名
赵天娇
班级
B08221
总体设计要求和技术要点
秒表共有6个输出显示,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之相对应,6个计数器的输出全都为BCD码输出,这样便于和显示译码器的连接。
当计时达60分钟后,蜂鸣器鸣响10声。
除此之外,整个秒表还需有一个启动信号和一个归零信号,以便秒表能随意停止及启动。
秒表的逻辑结构较简单,它主要由显示译码器、十进制计数器、六进制计数器和报警器组成。
用层次设计概念将此设计任务分成若干模块,规定每一模块的功能和各模块之间的接口,然后再将各模块合起来联试。
工作内容及时间进度安排
第13周:
立题、论证方案设计,编程,调试程序
第14周:
硬件仿真实验验收答辩
课程设计成果
1.与设计内容对应的软件程序
2.课程设计报告书
3.成果使用说明书
4.设计工作量要求
一、概述
秒表的逻辑结构较简单,它主要由显示译码器、分频器、十进制计数器、六进制计数器和报警器组成。
秒表共有6个输出显示,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之相对应,6个计数器的输出全都为BCD码输出,这样便于和显示译码器的连接。
当计时达60分钟后,蜂鸣器鸣响10声。
除此之外,整个秒表还需有一个启动信号和一个归零信号,以便秒表能随意停止及启动。
二、实验目的(看课设报告模板)
1.掌握多位计数器相连的设计方法
2.掌握十进制、六进制计数器的设计方法
3.巩固多位共阴极扫描显示数码管的驱动及编码
4.掌握扬声器的驱动
5. 掌握EDA技术的层次化设计方法
三、单元模块设计
1.十进制计数器(count10.vhd)
用来分别对百分之一秒、十分之一秒、秒和分进行计数,其程序如下:
libraryieee;
useieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitycount10is
port(
clr,start,clk:
in std_logic;
cout:
outstd_logic;
daout:
bufferstd_logic_vector(3downto0));
endcount10;
architecturebehaveofcount10is
begin
process(clr,start,clk)
begin
ifclr='1'
then daout<
="0000"
;
cout<
='
0'
;
elsif( clk'
event andclk='
1'
)then
if start='1'
then
ifdaout="
1001"thendaout<
="
0000";
cout<='
else daout<=daout+1;
='
0'
endif;
endif;
endif;
end process;
endbehave;
对程序进行编译仿真后,仿真结果如下图:
2.六进制计数器(count6.vhd)
两个6进制计数器:
用来分别对十秒和十分进行计数,其程序如下:
libraryieee;
use ieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitycount6is
port(
clr,start,clk:
instd_logic;
cout:
outstd_logic;
daout:
bufferstd_logic_vector(3downto0));
endcount6;
architecture behaveofcount6is
process(clr,start,clk)
ifclr='
1'thendaout<
0000"
cout<
='0'
elsif(clk'
eventandclk='1')then
ifstart='1' then
if daout="
0101"
then daout<
="
0000"
cout<='
elsedaout<
=daout+1;
cout<
endif;
endif;
endif;
endprocess;
endbehave;
对程序进行编译仿真后,仿真结果如下图:
3.时间数据分时扫描模块(seltime.vhd)
其程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entityseltime is
port(
clr,clk:
instd_logic;
dain1:
instd_logic_vector(3downto0);
dain2:
instd_logic_vector(3downto0);
dain3:
instd_logic_vector(3downto 0);
dain4:
instd_logic_vector(3downto 0);
dain5:
instd_logic_vector(3downto0);
dain6:
instd_logic_vector(3downto0);
sel:
out std_logic_vector(2downto 0);
daout:
outstd_logic_vector(3downto0));
end seltime;
architecturebehaveofseltimeis
signalcount:
std_logic_vector(2downto0);
sel<
=count;
process(clr,clk)
begin
if(clk'eventandclk='
)then
ifclr='1'
then
count<
000";
elsifcount="
101"then count<="
elsecount<
=count+1;
endif;
endif;
casecountis
when"
000"
=>
daout<
=dain1;
when"
001"
=>daout<=dain2;
when"010"
daout<
=dain3;
when"
011"
=>
daout<
=dain4;
100"
daout<=dain5;
when"
101"
daout<=dain6;
whenothers=>
null;
endcase;
endprocess;
end behave;
4.显示译码模块(deled.vhd)
其程序如下:
library ieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitydeled is
port(
num:
instd_logic_vector(3downto0);
led:
outstd_logic_vector(6downto0));
end deled;
architecturebehaveofdeledis
begin
process(num)
--abcdefg
begin
case numis
when"
0000"=>
led<
="1111110"
0001"=>
led<
="0110000"
0010"
led<
1101101"
when"0011"
=>led<="
1111001"
when"0100"
0110011"
when"0101"=>
="1011011"
when"0110"
led<="
1011111"
when"
0111"
1110000"
when"1000"=>led<
1111111"
1001"=>
1111011";
whenothers=>
null;
endcase;
endprocess;
end behave;
对程序进行编译仿真后,仿真结果如下图:
5.报警电路模块(alarm.vhd)
libraryieee;
useieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entity alarm is
port(
clk,i:
instd_logic;
q:
outstd_logic);
endalarm;
architecture behave ofalarmis
signalcount:
integerrange0to 20;
signal q0:
std_logic;
begin
process(clk,i)
if(clk'
eventandclk='
1'
)then
ifi='
0'then count<
=0;
q0<
elsif i='
then
ifcount<
=19then
count<
=count+1;
q0<=notq0;
endif;
endif;
endif;
endprocess;
q<
=q0;
endbehave;
四、顶层文件原理图
1. 总原理图(second_top.gdf)
2.编译过程
3.仿真结果
五、硬件要求:
1. 主芯片EPF10K10LC84-4。
2.6位八段扫描共阴极数码显示管。
3. 二个按键开关(归零,启动)。
六、实验连线:
下载程序到主芯片后,按适配划分后的管脚定位,连接线路。
输入接口:
1.代表归零,启动信号RESET、START的管脚分别连接按键开关
2.
蜂鸣器鸣响信号SPEAKER接蜂鸣器的输入
3.代表计数时钟信号CLK的管脚同2.5MHZ时钟源相连
输出接口:
代表扫描显示的驱动信号管脚SEL2,SEL1,SEL0和A~G分别连接到数码管相应接口。
七、实验总结
1.严禁带电插拔“JTAG”下载电缆!
为了安全地使用下载电缆,防止损坏下载电缆中的器件和计算机主板的并口,应在计算机及实验箱均断电的情况下,插入或拔出下载电缆。
插入下载电缆的步骤:
确认完全断电——下载电缆并口与计算机并口相连——下载电缆JTAG口与实验箱的JTAG口相连——接通实验箱电源——接通计算机电源;
拔出下载电缆的步骤:
关闭实验箱电源——拔下JTAG电缆插头——实验箱内部连线——接通实验箱电源——进行功能验证。
测试完毕,先断掉EDA实验箱的电源,再把JTAG电缆的小插头插入实验箱的JTAG插座,然后接通实验箱电源,准备下一次的设计下载。
2.所有文件应放在同一个文件夹下,文件夹名应符合要求,文件名应与实体名一致,先录入底层文件,把某个底层文件设为当时的顶层,保存、编译、仿真、退出,再录入另一个底层文件,这样把所有的文件都一一录入,最后录入顶层文件,并保存、编译、仿真,再下载顶层文件到指定器件,实现功能。
八、心得体会
通过这次课程设计,我对电子设计自动化技术(EDA)有了进一步的了解,在设计过程中,计数器的设计让我对数字电路加深了了解,在一开始时总是会出现多多少少的错误,通过课本、翻阅资料,对照教材上类似的时钟设计的相关文件,对模块的结构及原理有了更深的认识,所以后才编程的时候写的得心应手。
顶层文件编写完后,编译仿真,结果没有一点错误,让我很高兴。
但进入实验室,下载带芯片上,在器件上运行的程序,却没有想象的那么完美,时钟信号源频率需要精确的100HZ,否则秒表走的不是慢了就是快了,要想得到精确地计数频率,就需要不断实验各个频率,以得到最精确的时钟信号。
刚开始的时候,秒表计数到60分时,秒表不能停下来,我们想了很多方法后,最后把秒表达到六十分时的进位信号取非后和时钟信号源用一个与门连接作为clk信号。
还有就是,秒表计数到60分的时候,蜂鸣器只响一声,但是看报警电路的仿真结果没有错误,于是我们另外采用一个时钟信号源作为蜂鸣器的时钟信号,成功的达到要求——达到60分后蜂鸣10声。
还有就是CLR信号在START为高电平时清零,但当CLR信号恢复为低电平后,秒表又从清零前的数值开始计数,针对这个问题,我们讨论后修改了数据选择模块,之后又进行那个了多次修改,最后实现了正确的清零作用。
还有很多硬件实验时候出现的问题也都在我们的努力下解决了。
虽然这并不是什么伟大的设计,但是我们了解软件的元件管理深层含义,以及模块元件之间的连接概念,熟悉了FPGA设计的调试过程中手段的多样化,看着自己的成果,让我们感到一种小小的成就感,对电子系统的设计有了浓厚的兴趣。
课设对于我们来说是锻炼,是成长,短短的几天,虽然忙碌,却很充实。
在以后的学习工作中,这次课设带给我锻炼一定会有更深的意义和影响。
九、参考文献
《电子技术基础(数字部分)》康光华主编,高等教育出版社
《数字电子技术基础》阎石主编,高等教育出版社
《EDA技术与实验》李国洪、胡辉、沈明山主编,机械工业出版社
指导教师评语及设计成绩
评 语
课程设计成绩:
指导教师:
日期:
年月日