EDA课设定时器Word格式文档下载.docx
- 文档编号:18094425
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:15
- 大小:549.79KB
EDA课设定时器Word格式文档下载.docx
《EDA课设定时器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《EDA课设定时器Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
1、2 设计任务1
1、3设计要求1
2 原理设计及层次划分1
2、1 工作原理ﻩ1
2、2层次划分2
3软件设计ﻩ2
3、1控制计数模块模块代码设计ﻩ2
3、2报警器模块代码设计ﻩ4
3、3译码器模块代码设计ﻩ5
3、4定时器原件例化模块代码设计ﻩ5
4仿真及测试6
4、1控制计数模块仿真6
4、2报警器模块仿真ﻩ8
4、3译码器模块代码仿真9
4、4定时器原件例化模块代码仿真10
5总结11
6参考文献11
1概述
1、1设计背景与意义
EDA技术就是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术得最新成果,进行电子产品得自动设计。
利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图得整个过程得计算机上自动处理完成。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线与仿真,直至对于特定目标芯片得适配编译、逻辑映射与编程下载等工作。
EDA技术得出现,极大地提高了电路设计得效率与可操作性,减轻了设计者得劳动强度。
1、2设计任务
通过设计,定时器可以整体清零;
可以定时最高到99MIN;
以秒速度递增至预定时间,以秒速度递减至零。
1、3设计要求
具有整体清零(reset)功能,定时99分钟。
以秒速度递增至99分钟停止,启动报警(cout)5秒钟。
具有置位(cn)控制,即cn高电平时,clk脉冲上升沿到来,计数加一;
cn低电平时,置位结束,进入倒计时阶段,以秒速度使输出计数减一至零结束,并同时报警(cout)5秒钟。
时钟信号提供秒信号(1HZ);
四位数码管静态显示,高位high(3 downto0)显示分,低位low(3downto0)显示秒
2 原理设计及层次划分
2、1工作原理
1、系统设计方案
时钟信号a
通过记数器控制中心输入秒信号,并输出两个四位得BCD码,可分别来表示各位与十位,也可整体复位清零。
通过该记数器实现以秒速度递增至清零,该记数器以秒得速度递增至99来实现置位,而以秒得速度递减至零以实现定时功能。
当以秒速度递增至99分钟停止,启动报警(cout)5秒钟。
cn低电平时,置位结束,进入倒计时阶段,以秒速度使输出计数减一至零结束时也同时报警(cout)5秒钟。
通过二选一选择器对个位与十位进行扫描输出,并将输出送到译码器,通过译码器对输入得四位BCD码进行七段码编译,然后输出到数码管。
2、2层次划分
2、2、1控制计数模块
Aaa控制计数模块,就是该定时器得核心部分、res为复位端,用来清零,采用异步复位方式;
cn用于置位,高电平有效。
cout端将在定时结束时产生高电平。
Low与high为四位BCD码输出端口,可用于显示。
当cn有效时,clk脉冲上升沿到来,计数加1;
当cn为低电平时,置位结束,进入计时阶段,每1个时钟周期发出一个脉冲,使输出记数减1,直到记时结束,令cout位为高电平为止。
2、2、2报警器模块
主要功能就是计数器以秒速度递增至99分钟停止时启动报警(cout)5秒钟。
倒计时阶段,计时器以秒速度使输出计数减一至零结束时也同时报警(cout)5秒钟。
当始终把脉冲clk上升沿到来时count开始计数,同时speak置高电平开始报警,当计数达到5s后speak置0,停止报警。
它得操作源程序如下:
2、2、3 译码器模块
译码器yima就是对四位BCD码进行七段码译码,其输出p0~p6分别接数码管各段进行显示输出。
2、2、4定时器原件例化模块
3软件设计
3、1控制计数模块代码设计
Aaa控制计数模块,就是该定时器得核心部分、res为复位端,用来清零,采用异步复位方式;
cout端将在定时结束时产生高电平。
Low与high为四位BCD码输出端口,可用于显示。
当cn有效时,clk脉冲上升沿到来,计数加1;
当cn为低电平时,置位结束,进入计时阶段,每1个时钟周期发出一个脉冲,使输出记数减1,直到记时结束,令cout位为高电平为止。
该模块得源程序如下:
libraryieee;
useieee、std_logic_1164、all;
useieee、std_logic_unsigned、all;
entityjsq is
port(cn,res,clk:
in std_logic;
cout:
out std_logic;
flow,fhigh,mlow,mhigh:
outstd_logic_vector(3downto0));
endjsq;
architectureart ofjsq is
signal fdisplow,fdisphigh,mdisplow,mdisphigh:
std_logic_vector(3 downto0);
--定义信号分别表示分钟与秒钟得十位与个位
begin
process(clk,cn,res)
begin
if(res='
1')then
mdisplow<
="
0000"
;
mdisphigh<="
;
fdisplow<
="0000"
fdisphigh<
0000"
cout<
='
0'
--res高电平执行复位
elsif (clk'eventand clk='1'
)then
ifcn='1'
then
if mdisplow<
9then
mdisplow<=mdisplow+1;
--秒钟个位数小于9时执行计数加1
cout<
='
0';
elsifmdisplow="1001"andmdisphigh<
5then
mdisplow<
0000"
mdisphigh<=mdisphigh+1;
--秒钟十位进位加1
elsifmdisphigh="
0101"and fdisplow<
9 then
mdisplow<="0000"
mdisphigh<
0000"
fdisplow<
=fdisplow+1;
--满59秒后分钟个位加1
elsiffdisplow="
1001"
andfdisphigh<9 then
mdisplow<
0000"
mdisphigh<="0000";
fdisplow<
fdisphigh<
=fdisphigh+1;
--满9分59秒后分钟十位加1
elsif fdisplow="
1000"
and fdisphigh="
1001"
then
mdisplow<="0000";
mdisphigh<="0000"
fdisplow<
="
1001"
--计时至99分停止
elsiffdisplow="
1001"and fdisphigh="
1001"then
cout<
='1';
--计时停止cout变为高电平
endif;
elsif cn='
then --cn为0进入倒计时
if mdisplow>
0then
mdisplow<
=mdisplow-1;
--秒钟减1
='0'
elsifmdisplow="
andmdisphigh>0then
mdisplow<="1001";
mdisphigh<
=mdisphigh-1;
--个位0时十位减1
elsif mdisphigh="
and fdisplow>0then
mdisplow<
1001"
mdisphigh<
0101";
fdisplow<
=fdisplow-1;
--分减1
elsiffdisplow="
0000"
andfdisphigh>
0 then
mdisplow<
mdisphigh<
="0101"
fdisplow<
fdisphigh<
=fdisphigh-1;
--分减10
elsiffdisphigh="
andfdisplow="
andmdisphigh="0000"andmdisplow="0000"then
cout<
1'
--倒计时结束cout变为高电平
endif;
end if;
endif;
endprocess;
mhigh<
=mdisphigh;
mlow<
=mdisplow;
fhigh<
=fdisphigh;
flow<
=fdisplow;
endart;
3、2 报警器模块代码设计
主要功能就是计数器以秒速度递增至99分钟停止时启动报警(cout)5秒钟。
倒计时阶段,计时器以秒速度使输出计数减一至零结束时也同时报警(cout)5秒钟。
当始终把脉冲clk上升沿到来时count开始计数,同时speak置高电平开始报警,当计数达到5s后speak置0,停止报警。
libraryieee;
useieee、std_logic_1164、all;
useieee、std_logic_unsigned、all;
entitycou5is
port(clk,reset,en:
instd_logic;
speak:
outstd_logic);
end cou5;
architecturebehaviorof cou5is
signal count:
std_logic_vector(2downto0);
--定义计数信号
begin
process(reset,clk)
begin
ifreset='
1'oren='
then
count(2downto0)<
000"
speak<
0'
--有复位信号或始能端低电平时输出0
else
if(clk'eventandclk='
)then
count<
=count+1;
speak<='
1';
--有时钟上升沿计数加1,报警信号speak高电平
ifcount>
5then
speak<='0';
--5秒之后停止报警speak为0
end if;
endif;
endif;
end process;
end behavior;
3、3译码器模块代码设计
译码器yima就是对四位BCD码进行七段码译码,其输出p0~p6分别接数码管各段进行显示输出,它得操作源程序如下:
libraryieee;
use ieee、std_logic_1164、all;
entityyimais
port(a:
in std_logic_vector(3 downto0);
p:
out std_logic_vector(6downto 0));
endyima;
architecturearcofyimais
begin
process(a)
begin
case ais
when"
0000"=>p<
0111111";
when"
0001"=>
p<
0000110"
when"0010"
=>
1011011";
when"
0011"=>p<="
1001111"
when"0100"
p<
1100110"
when"
0101"
="1101101"
when"
0110"
1111101"
0111"
0000111";
when"
1000"
1111111"
="1101111"
--七段译码器显示0—9
whenothers=>
0000000"
endcase;
endprocess;
endarc;
3、4定时器原件例化模块代码设计
libraryieee;
use ieee、std_logic_1164、all;
entityyjlh is
port(sen,resa,clka,resb:
instd_logic;
myimal:
outstd_logic_vector(6downto0);
--秒钟个位译码输出
myimah:
outstd_logic_vector(6downto0);
--秒钟十位译码输出
fyimal:
outstd_logic_vector(6downto0);
--分钟个位译码输出
fyimah:
outstd_logic_vector(6downto0);
--分钟十位译码输出
baoj:
outstd_logic
);
endentity yjlh;
architecture artof yjlhis
ponentjsq is
port(cn,res,clk:
instd_logic;
cout:
outstd_logic;
flow,fhigh,mlow,mhigh:
outstd_logic_vector(3 downto0));
endponentjsq;
--jsq控制模块
ponentyimais
port(a:
in std_logic_vector(3downto 0);
p:
outstd_logic_vector(6 downto0));
endponentyima;
--译码模块
ponentcou5 is
port(clk,reset,en:
in std_logic;
speak:
outstd_logic);
endponentcou5;
--报警模块
signals1,s2,s3,s4:
std_logic_vector(3 downto 0);
signals5:
std_logic;
u1:
jsqportmap(sen,resa,clka,s5,s1,s2,s3,s4);
u2:
yima portmap(s1,fyimal);
u3:
yimaport map(s2,fyimah);
u4:
yimaport map(s3,myimal);
u5:
yima port map(s4,myimah);
u6:
cou5 portmap(clka,resb,s5,baoj);
--各模块通过位置关联
endarchitectureart;
4仿真及测试
4、1控制计数模块仿真
该计数器生成得原件如下图所示:
图一计数器原件生成图
计数器波形仿真图如下图所示:
图二计数器波形仿真
Aaa控制计数模块,就是该定时器得核心部分、res为复位端,用来清零,采用异步复位方式;
cout端将在定时结束时产生高电平。
Low与high为四位BCD码输出端口,可用于显示。
当cn有效时,clk脉冲上升沿到来,计数加1;
当cn为低电平时,置位结束,进入计时阶段,每1个时钟周期发出一个脉冲,使输出记数减1,直到记时结束,令cout位为高电平为止。
4、2 报警器模块仿真
该报警器生成得原件图如下:
图三 报警器原件生成图
该报警器波形仿真图如下:
图四 报警器波形仿真
主要功能就是计数器以秒速度递增至99分钟停止时启动报警(cout)5秒钟。
当始终把脉冲clk上升沿到来时count开始计数,同时speak置高电平开始报警,当计数达到5s后speak置0,停止报警。
4、3 译码器模块仿真
该译码器原件生成图如下:
图五译码器原件生成图
该译码器波形仿真图如下:
图六译码器波形仿真
译码器yima就是对四位BCD码进行七段码译码,其输出p0~p6分别接数码管各段进行显示输出。
4、4定时器原件例化模块仿真
定时器原件例化后生成得原件图如下:
图七 定时器原件生成图
3、定时器原件例化后波形仿真图如下:
图八定时器原件例化后波形仿真
5总结
在这次课程设计中,基本完成了99分钟定时器得设计,实现了其所有功能。
但就是在此过程中,遇到了很多困难,如编写程序过程中出现错误语句,或者编写得语句不能完成预期得功能等。
但经过反复修改与调试,程序没有了错误,尽管如此,该程序也未能编译成功,后来才发现只有把要编译得文件指成当前文件才可进行编译。
又如在设计原理图过程当中保存该文件时名字命名得问题,又有了新得认识,进一步掌握了VHDL得命名规则。
同时原理图设计必须要规范,连线必须要严谨,且每一个步骤与过程都必须要编译通过,才可逐步进行下一环节。
当然还有很多问题都出现在设计过程中,但就是经过反复琢磨、推敲与老师得指导都完全解决了。
最终完成了99分钟定时器得设计。
通过这本得VHDL课程设计,既锻炼了我得动手能力,也让我加深了对课堂上所学到得理论知识得理解,这给我提供了一个在学习生活中很难得得理论联系实际得机会,让了深刻体验到在对于设计时遇到得不同问题时,首先应该理解问题关键所在,因为用语言编写程序需要仔细认真得态度,一点点错误漏洞将导致整个源程序无法编译运行,阻碍下一步工作完成进度
6 参考文献
[[1]赵全利,秦春赋、EDA技术及应用教程[M]、北京:
机械工业出版社,2009、
[2]江国强、EDA技术与应用[M]、北京:
电子工业出版社,2007、
[3] 黄仁欣、EDA技术实用教程[M]、 北京:
清华大学出版社,2006、
[4] 王道宪、CPLD/FPGA可编程逻辑器件应用与开发[M]、北京:
国防工业出版社,2004、
[5]崔秀敏、EDA技术实验指导书 [M]、沈阳:
沈阳理工大学出版社,2013
[6]杨晓慧,杨永健、基于FPGA得EDA/SOPC技术与VHDL、北京:
国防工业出版社,2007,7、
[7]王诚,吴继华等,ALTERA FPGA/CPLD设计(基础篇)、北京:
人民邮电出版社,2008,12
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 定时器