EDA课设实验报告.docx
《EDA课设实验报告.docx》由会员分享,可在线阅读,更多相关《EDA课设实验报告.docx(9页珍藏版)》请在冰豆网上搜索。
EDA课设实验报告
北华航天工业学院
综合实践总结报告
综合实践名称:
EDA技术与实践
数字秒表设计
综合实践地点、时间:
专业班级:
一、概述
秒表的逻辑结构主要由显示译码器、分频器、十进制计数器、六进制计数器和报警器组成。
在整个秒表中最关键的是如何获得一个精确的100Hz计时脉冲,除此之外,整个秒表还需有一个启动信号和一个归零信号,以便秒表能随意停止及启动。
秒表共有6个输出显示,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之相对应,6个计数器的输出全都为BCD码输出,这样便于和显示译码器的连接。
当计时达60分钟后,蜂鸣器报警。
二、综合实践目的
1.掌握多位计数器相连的设计方法
2.掌握十进制、六进制计数器的设计方法
3.巩固多位共阴极扫描显示数码管的驱动及编码
4.掌握扬声器的驱动
5.掌握EDA技术的层次化设计方法
三、综合实践具体内容和记录
1、硬件电路设计
计数器设计
这里需要四个十进制计数器(分别作为数字秒表的百分之一秒、十分之一秒、秒和分)和两个六进制计数器(分别作为数字秒表的十秒和十分),当要停止计数时,START端置0;当要计数器清零时,CLR端置0.
2.程序设计及仿真波形
十进制计数器(count10.vhd)
四个10进制计数器:
用来分别对百分之一秒、十分之一秒、秒和分进行计数,其程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitycount10is
port(
clr,start,clk:
instd_logic;
cout:
outstd_logic;
daout:
bufferstd_logic_vector(3downto0));
endcount10;
architecturebehaveofcount10is
begin
process(clr,start,clk)
begin
ifclr='1'thendaout<="0000";
elsif(clk'eventandclk='1')then
ifstart='1'then
ifdaout="1001"thendaout<="0000";cout<='1';
elsedaout<=daout+1;cout<='0';
endif;
endif;
endif;
endprocess;
endbehave;
六制计数器(count6vhd)
两个6进制计数器:
用来分别对十秒和十分进行计数,其程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycount6is
port(clk,clr,start:
instd_logic;
daout:
outstd_logic_vector(3downto0);
cout:
outstd_logic);
endcount6;
architecturebehaveofcount6is
signaltemp:
std_logic_vector(3downto0);
begin
process(clk,clr)
begin
ifclr='1'thentemp<="0000";
cout<='0';
elsifclk'eventandclk='1'then
ifstart='1'then
iftemp>="0101"thentemp<="0000";
cout<='1';
elsetemp<=temp+1;cout<='0';
endif;
endif;
endif;
endprocess;
daout<=temp;
endbehave;
蜂鸣器(alarm.vhd)
其程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityalarmis
port(clk,I:
instd_logic;
q:
outstd_logic
);
endalarm;
architecturebehaveofalarmis
signaln:
integerrange0to20;
signalq0:
std_logic;
begin
process(clk)
begin
ifclk'eventandclk='1'
then
ifi='0'thenq0<='0';
n<=0;
elsifn<=19andi='1'then
q0<=notq0;
n<=n+1;
elseq0<='0';
endif;
endif;
endprocess;
q<=q0;
endbehave;
显示译码器(deled.vhd)
显示译码器:
完成对显示的控制。
其程序如下:
libraryieee;
useieee.std_logic_1164.all;
entitydeledis
port(num:
instd_logic_vector(3downto0);
led:
outstd_logic_vector(6downto0));
enddeled;
architecturebehaveofdeledis
begin
process(num)
begin
casenumis
when"0000"=>led<="1111110";
when"0001"=>led<="0110000";
when"0010"=>led<="1001101";
when"0011"=>led<="1111001";
when"0100"=>led<="0110011";
when"0101"=>led<="1011011";
when"0110"=>led<="1011111";
when"0111"=>led<="1110000";
when"1000"=>led<="1111111";
when"1001"=>led<="1111011";
whenothers=>led<="1111111";
endcase;
endprocess;
endbehave;
选择器(seltime.vhd)
其程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityseltimeis
port(clr,clk:
inbit;
dain0,dain1,dain2,dain3,dain4,dain5:
instd_logic_vector(3downto0);
sel:
outstd_logic_vector(2downto0);
daout:
outstd_logic_vector(3downto0));
endseltime;
architecturebehaveofseltimeis
signaltemp:
integerrange0to5;
begin
process(clk)
begin
if(clr='1')then
daout<="0000";
sel<="000";
temp<=0;
elsif(clk='1'andclk'event)then
iftemp=5thentemp<=0;
elsetemp<=temp+1;
endif;
casetempis
when0=>sel<="000";daout<=dain0;
when1=>sel<="001";daout<=dain1;
when2=>sel<="010";daout<=dain2;
when3=>sel<="011";daout<=dain3;
when4=>sel<="100";daout<=dain4;
when5=>sel<="101";daout<=dain5;
endcase;
endif;
endprocess;
endbehave;
四:
数字秒表的原理图
系统仿真结果:
五:
心得体会:
通过这次课程设计,我对用EDA技术设计简单器件有了进一步的了解,在设计过程中,计数器的设计让我对数字电路加深了了解,在一开始时总是会出现多多少少的错误,通过课本、翻阅资料,对照教材上类似的秒表设计的相关文件,对模块的结构及原理有了更深的认识,所以编程的时候才能得心应手。
对VHDL语言的使用也有了进一步的加强,对所用到的软件有了更加深刻的了解,这对我们以后的学习和工作有很大的帮助。
本实验综合性较高,让我们学习到了怎么去下载程序,也懂得了分频原理,懂得LED灯的显示原理,使得我们的知识更加丰富与实用。
课设期间也发现了自己的很多不足,但是通过自己动手动脑,既增加了知识,又对专业知识得到了提升。
课设对于我们来说是锻炼,是成长,短短的几天,虽然忙碌,却很充实。
虽然这并不是什么伟大的设计,但是我们了解软件的元件管理深层含义,以及模块元件之间的连接概念,熟悉了FPGA设计的调试过程中手段的多样化,看着自己的成果,让我们感到一种小小的成就感,对电子系统的设计有了浓厚的兴趣。
这次课设带给我锻炼一定会有更深的意义和影响。