99分钟定时器的VHDL设计.docx

上传人:b****1 文档编号:23111765 上传时间:2023-04-30 格式:DOCX 页数:20 大小:515.15KB
下载 相关 举报
99分钟定时器的VHDL设计.docx_第1页
第1页 / 共20页
99分钟定时器的VHDL设计.docx_第2页
第2页 / 共20页
99分钟定时器的VHDL设计.docx_第3页
第3页 / 共20页
99分钟定时器的VHDL设计.docx_第4页
第4页 / 共20页
99分钟定时器的VHDL设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

99分钟定时器的VHDL设计.docx

《99分钟定时器的VHDL设计.docx》由会员分享,可在线阅读,更多相关《99分钟定时器的VHDL设计.docx(20页珍藏版)》请在冰豆网上搜索。

99分钟定时器的VHDL设计.docx

99分钟定时器的VHDL设计

课程设计报告

 

设计名称EDA(VHDL)课程设计

专业班级电子0942

姓名任泓铭

学号0904451219

 

成绩评定

考核

内容

平时

表现

设计

报告

设计成果和答辩

综合评

定成绩

成绩

 

电气与信息工程学院

二0一二年一月

课程设计要求和成绩考核办法

 

1.不允许在教室或实验室内吸烟、吃零食,不准带无关人员到教室或实验室活动,否则扣平时表现分。

2.凡病事假超过3天(每天7小时),或迟到早退三次以上,或旷课两次(1天)以上,不得参加本次考核,按不及格处理,本次课程设计不能通过。

3.病事假必须有请假条,需经班主任或有关领导批准,否则按旷课处理。

4.课程设计的考核由指导教师根据设计表现(出勤、遵守纪律情况等)、设计报告、设计成果、答辩等几个方面,给出各项成绩或权重,综合后给出课程设计总成绩。

该设计考核须经教研室主任审核,主管院长审批备案。

5.成绩评定采用五级分制,即优、良、中、及格和不及格。

6.课程设计结束一周内,指导教师提交成绩和设计总结。

7.设计过程考核和成绩在教师手册中要有记载。

实习报告要求

实习报告内容、格式各专业根据实习(设计)类别(技能实习、认识实习、生产实习、毕业实习等)统一规范,经教研室主任审核、主管院长审批备案。

注意:

1.课程设计任务书和指导书在课程设计前发给学生,设计任务书放置在设计报告封面后和正文目录前。

2.为了节省纸张,保护环境,便于保管设计报告,统一采用A4纸,课程设计报告建议双面打印(正文采用宋体五号字)或手写,左侧装订,订两个钉。

基于FPGA的半整数分频器设计

一.系统设计任务及功能概述

1.系统设计任务基于FPGA的半整数分频器设计

任务要求:

设有一个5MHz(或7、9、11、13、15、17、19、21、23、25MHz)的时钟源,但电路中需要产生一个2MHz的时钟信号,由于分频比为2.5(或3.5、4.5、5.5、6.5、7.5、8.5、9.5、10.5、11.5、12.5),因此采用小数分频。

2.小数分频的基本原理

小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需要的小数分频值。

如设计一个分频系数为10.1的分频器时,可以将分频器设计成9次10分频,1次11分频,这样总的分频值为:

F=(9×10+1×11)/(9+1)=10.1

3.系统功能概述

本系统是一个基于FPGA的半整数分频器,具有以下功能:

有一个5MHz的时钟源,通过半整数分频器后电路中可以产生的是一个2MHz的时钟信号

二.系统设计方案和程序设计

1.系统设计方案

由于分频比为2.5,因此采用小数分频。

分频系数为N-0.5的分频器,其电路可由一个异或门、一个模N计数器和二分频器组成。

下图给出了通用半整数分频器电路组成。

由于分频比为2.5则本实验中先要设计一个模3的计数器,然后建立模三计数器的元件,再利用原理图设计完成分频器的设计

2.VHDL程序设计

模七计数器VHDL程序如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycounter7is

port(clk,rst,en:

instd_logic;

qa,qb,qc:

outstd_logic);

endcounter7;

architecturebehavioralofcounter7is

signalcount:

std_logic_vector(2downto0);

begin

process(clk,rst)

begin

if(rst='1')then

count(2downto0)<="000";

elsif(clk'eventandclk='1')then

if(en='1')then

if(count="110")thencount<="000";

elsecount<=count+1;

endif;

endif;

endif;

endprocess;

qa<=count(0);

qb<=count

(1);

qc<=count

(2);

endbehavioral;

3.模七计数器仿真波形图

图1模七计数器仿真波形图

 

4.输入、输出接口说明

表1输入、输出接口

接口

名称

类型

(输入/输出)

结构图上

的信号名

引脚号

说明

INCLK

IN

inclock

2

系统时钟7MHz

OUTCLK

OUT

outclk

3

系统输出

Q

OUT

q

4

系统输出

5.模七计数器元件图

图2模七计数器元件图

6.半整数分频器原理图

图3半整数分频器原理图

7.半整数分频器仿真波形图

图4半整数分频器仿真波形图

三.课程设计总结

通过本次实习我学会了如何操作max2软件来编辑计数器程序,画出了利用计数器原理的分频器原理图,掌握了利用max2软件绘制原理图和程序编程的方法,同时还学会了用max2软件来形象的仿真计数器和分频器的波形,以及器件的波形图。

在软件的实际操作过程中通过具体的方法结合图形将从书上学到的理论知识进行分析实践,从而更好的理解和掌握了如何用软件设计图形和实际仿真的方法,以及max2软件应用方面的知识,为以后的实践积累了宝贵的经验,打下了坚实的基础。

四.参考文献

[1]谭会生,张昌凡.EDA技术及应用.西安:

西安电子科技大学出版社,2006,12.

[2]潘松,王国栋编著.VHDL实用教程.成都:

电子科技大学出版社,2006.

[3]徐志军,徐光辉编著.CPLD/FPGA的开发与应用.北京:

电子工业出版社.2002.

[4]杨晓慧,杨永健.基于FPGA的EDA/SOPC技术与VHDL.北京:

国防工业出版社,2007,7.

[5]王诚,吴继华等,ALTERAFPGA/CPLD设计(基础篇).北京:

人民邮电出版社,2008,12.

[6]陈雪松,滕立中编著.VHDL入门与应用.北京:

人民邮电出版社.2000.

[7]张凤祥.第22届全国计算机新科技与计算机教育学术会议论文集.北京:

科学教育出版社,2011.

 

99分钟定时器的VHDL设计

一.系统设计任务及功能概述

1.系统设计任务

任务要求:

通过设计,定时器可以整体清零;可以定时最高到99MIN;以秒速度递增至预定时间,以秒速度递减至零。

2.系统功能概述

本系统是一个99分钟的定时器,具有以下功能:

具有整体清零(reset)功能,定时99分钟。

以秒速度递增至99分钟停止,启动报警(cout)5秒钟。

具有置位(cn)控制,即cn高电平时,clk脉冲上升沿到来,计数加一;cn低电平时,置位结束,进入倒计时阶段,以秒速度使输出计数减一至零结束,并同时报警(cout)5秒钟。

时钟信号提供秒信号(1HZ);四位数码管静态显示,高位high(3downto0)显示分,低位low(3downto0)显示秒

二.系统设计方案和程序设计

1.系统设计方案

图1系统设计框图

通过记数器控制中心输入秒信号,并输出两个四位的BCD码,可分别来表示各位与十位,也可整体复位清零。

通过该记数器实现以秒速度递增至清零,该记数器以秒的速度递增至99来实现置位,而以秒的速度递减至零以实现定时功能。

当以秒速度递增至99分钟停止,启动报警(cout)5秒钟。

cn低电平时,置位结束,进入倒计时阶段,以秒速度使输出计数减一至零结束时也同时报警(cout)5秒钟。

通过二选一选择器对个位和十位进行扫描输出,并将输出送到译码器,通过译码器对输入的四位BCD码进行七段码编译,然后输出到数码管。

2.VHDL程序设计

Aaa控制计数模块,是该定时器的核心部分.res为复位端,用来清零,采用异步复位方式;cn用于置位,高电平有效。

cout端将在定时结束时产生高电平。

Low和high为四位BCD码输出端口,可用于显示。

当cn有效时,clk脉冲上升沿到来,计数加1;当cn为低电平时,置位结束,进入计时阶段,每1个时钟周期发出一个脉冲,使输出记数减1,直到记时结束,令cout位为高电平为止。

该模块的源程序如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityaaais

port(cn,res,clk:

instd_logic;

cout:

outstd_logic;

flow,fhigh,mlow,mhigh:

outstd_logic_vector(3downto0));

endaaa;

architectureartofaaais

signalfdisplow,fdisphigh,mdisplow,mdisphigh:

std_logic_vector(3downto0);

--定义信号分别表示分钟和秒钟的十位和个位

begin

process(clk,cn,res)

begin

if(res='0')then

mdisplow<="0000";

mdisphigh<="0000";

fdisplow<="0000";

fdisphigh<="0000";

cout<='0';--res低电平执行复位

elsif(clk'eventandclk='1')then

ifcn='1'then

ifmdisplow<9then

mdisplow<=mdisplow+1;--秒钟个位数小于9时执行计数加1

cout<='0';

elsifmdisplow="1001"andmdisphigh<5then

mdisplow<="0000";

mdisphigh<=mdisphigh+1;--秒钟十位进位加1

elsifmdisphigh="0101"andfdisplow<9then

mdisplow<="0000";

mdisphigh<="0000";

fdisplow<=fdisplow+1;--满59秒后分钟个位加1

elsiffdisplow="1001"andfdisphigh<9then

mdisplow<="0000";

mdisphigh<="0000";

fdisplow<="0000";

fdisphigh<=fdisphigh+1;--满9分59秒后分钟十位加1

elsiffdisplow="1000"andfdisphigh="1001"then

mdisplow<="0000";

mdisphigh<="0000";

fdisplow<="1001";--计时至99分停止

elsiffdisplow="1001"andfdisphigh="1001"then

cout<='1';--计时停止cout变为高电平

endif;

elsifcn='0'then--cn为0进入倒计时

ifmdisplow>0then

mdisplow<=mdisplow-1;--秒钟减1

cout<='0';

elsifmdisplow="0000"andmdisphigh>0then

mdisplow<="1001";

mdisphigh<=mdisphigh-1;--个位0时十位减1

elsifmdisphigh="0000"andfdisplow>0then

mdisplow<="1001";

mdisphigh<="0101";

fdisplow<=fdisplow-1;--分减1

elsiffdisplow="0000"andfdisphigh>0then

mdisplow<="1001";

mdisphigh<="0101";

fdisplow<="1001";

fdisphigh<=fdisphigh-1;--分减10

elsiffdisphigh="0000"andfdisplow="0000"andmdisphigh="0000"andmdisplow="0000"then

cout<='1';--倒计时结束cout变为高电平

endif;

endif;

endif;

endprocess;

mhigh<=mdisphigh;

mlow<=mdisplow;

fhigh<=fdisphigh;

flow<=fdisplow;

endart;

Aaa控制计数模块仿真波形图:

图2Aaa控制计数模块仿真波形图

器件仿真图:

图3器件仿真图

译码器disp是对四位BCD码进行七段码译码,其输出Q0~Q6分别接数码管各段进行显示输出,它的操作源程序如下:

libraryieee;

useieee.std_logic_1164.all;

entitydispis

port(a:

instd_logic_vector(3downto0);

p:

outstd_logic_vector(6downto0));

enddisp;

architecturedisp_arcofdispis

begin

process(a)

begin

caseais

when"0000"=>p<="0111111";

when"0001"=>p<="0000110";

when"0010"=>p<="1011011";

when"0011"=>p<="1001111";

when"0100"=>p<="1100110";

when"0101"=>p<="1101101";

when"0110"=>p<="1111101";

when"0111"=>p<="0000111";

when"1000"=>p<="1111111";

when"1001"=>p<="1101111";--七段译码器显示0—9

whenothers=>p<="0000000";

endcase;

endprocess;

enddisp_arc;

译码器disp仿真波形图如图三:

图4译码器disp仿真波形图

器件仿真图如图四:

图5器件仿真图

报警器模块主要功能是计数定时器以秒速度递增至99分钟停止时启动报警(cout)5秒钟。

倒计时阶段,计时器以秒速度使输出计数减一至零结束时也同时报警(cout)5秒钟。

它的操作源程序如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycou5is

port(clk,reset,en:

instd_logic;

speak:

outstd_logic);

endcou5;

architecturebehaviorofcou5is

signalcount:

std_logic_vector(2downto0);--定义计数信号

begin

process(reset,clk)

begin

ifreset='1'oren='0'then

count(2downto0)<="000";

speak<='0';--有复位信号或始能端低电平时输出0

else

if(clk'eventandclk='1')then

count<=count+1;

speak<='1';--有时钟上升沿计数加1,报警信号speak高电平

ifcount="101"then

speak<='0';

count<="101";--5秒之后停止报警speak为0

endif;

endif;

endif;

endprocess;

endbehavior;

 

报警器模块仿真波形图:

图6报警器模块仿真波形图

 

器件仿真图:

图7器件仿真

根据定时器要实现的功能对以上程序进行元件例化,例化程序如下:

定时器例化程序

libraryieee;

useieee.std_logic_1164.all;

entitydsqis

port(sna,resa,clka,resb,clkb:

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

);

endentitydsq;

architectureartofdsqis

componentaaais

port(cn,res,clk:

instd_logic;

cout:

outstd_logic;

flow,fhigh,mlow,mhigh:

outstd_logic_vector(3downto0));

endcomponentaaa;--aaa控制模块

componentdispis

port(a:

instd_logic_vector(3downto0);

p:

outstd_logic_vector(6downto0));

endcomponentdisp;--译码模块

componentcou5is

port(clk,reset,en:

instd_logic;

speak:

outstd_logic);

endcomponentcou5;--报警模块

signals1,s2,s3,s4:

std_logic_vector(3downto0);

signals5:

std_logic;

begin

u1:

aaaportmap(sna,resa,clka,s5,s1,s2,s3,s4);

u2:

dispportmap(s1,fyimal);

u3:

dispportmap(s2,fyimah);

u4:

dispportmap(s3,myimal);

u5:

dispportmap(s4,myimah);

u6:

cou5portmap(clkb,resb,s5,baoj);--各模块通过位置关联

endarchitectureart;

定时器仿真波形图:

图8定时器仿真波形图

器件仿真图:

图9器件仿真图

3.输入、输出接口说明

表1输入、输出接口

接口

名称

类型

(输入/出)

结构图上的信号名

说明

I0

IN

sna

计数控制模块Aaa置位控制端

CLK

IN

clka

系统时钟1Hz

CLK

IN

clkb

系统时钟1Hz

I1

IN

resa

计数控制模块Aaa复位控制端

I2

IN

resb

报警模块复位控制端

Q0..6

OUT

myimal

译码器对秒钟的个位译码输出

Q7..12

OUT

myimah

译码器对秒钟的十位译码输出

Q13..18

0UT

fyimal

译码器对分钟的个位译码输出

Q19..24

OUT

fyimah

译码器对分钟的十位译码输出

Q25

OUT

baoj

报警模块输出端接报警器

三.课程设计总结

通过上一个实验“基于FPGA的半整数分频器设计”的实际操作经验,我又试着做了一个定时器,在这个试验的实际操作过程中,我分别设计了Aaa控制计数模块、译码器disp、报警器等模块用来共同实现定时器的功能。

在对各个模块和例化程序进行仿真地过程中,通过仿真波形图来分析判断程序设计的正确性。

在全部的操作过程中尽管有很多不懂的知识点,但是在同学间的相互交流下,大部分都得到了有效的解决,加深了我对理论知识的理解,增强了实际动手用max2软件编程和仿真的能力,不仅让我积累了宝贵的经验,更为了我以后的实际工作做了很好的铺垫。

四.参考文献

[1]谭会生,张昌凡.EDA技术及应用.西安:

西安电子科技大学出版社,2006,12.

[2]潘松,王国栋编著.VHDL实用教程.成都:

电子科技大学出版社,2006.

[3]徐志军,徐光辉编著.CPLD/FPGA的开发与应用.北京:

电子工业出版社.2002.

[4]杨晓慧,杨永健.基于FPGA的EDA/SOPC技术与VHDL.北京:

国防工业出版社,2007,7.

[5]王诚,吴继华等,ALTERAFPGA/CPLD设计(基础篇).北京:

人民邮电出版社,2008,12.

[6]陈雪松,滕立中编著.VHDL入门与应用.北京:

人民邮电出版社.2000.

[7]张凤祥.第22届全国计算机新科技与计算机教育学术会议论文集.北京:

科学教育出版社,2011.

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

当前位置:首页 > PPT模板 > 图表模板

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

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