EDA课程设计带报警的99分钟定时器分频器.docx
《EDA课程设计带报警的99分钟定时器分频器.docx》由会员分享,可在线阅读,更多相关《EDA课程设计带报警的99分钟定时器分频器.docx(25页珍藏版)》请在冰点文库上搜索。
EDA课程设计带报警的99分钟定时器分频器
课程设计报告
设计名称EDA(VHDL)课程设计
专业班级电子
姓名
学号
成绩评定
考核
内容
平时
表现
设计
报告
设计成果和答辩
综合评
定成绩
成绩
电气与信息工程学院
二0一一年一月
课程设计要求和成绩考核办法
(要求和成绩考核办法在封皮背面打印)
1.不允许在教室或实验室内吸烟、吃零食,不准带无关人员到教室或实验室活动,否则扣平时表现分。
2.凡病事假超过3天(每天7小时),或迟到早退三次以上,或旷课两次(1天)以上,不得参加本次考核,按不及格处理,本次课程设计不能通过。
3.病事假必须有请假条,需经班主任或有关领导批准,否则按旷课处理。
4.课程设计的考核由指导教师根据设计表现(出勤、遵守纪律情况等)、设计报告、设计成果、答辩等几个方面,给出各项成绩或权重,综合后给出课程设计总成绩。
该设计考核须经教研室主任审核,主管院长审批备案。
5.成绩评定采用五级分制,即优、良、中、及格和不及格。
6.课程设计结束一周内,指导教师提交成绩和设计总结。
7.设计过程考核和成绩在教师手册中要有记载。
实习报告要求
实习报告内容、格式各专业根据实习(设计)类别(技能实习、认识实习、生产实习、毕业实习等)统一规范,经教研室主任审核、主管院长审批备案。
注意:
1.课程设计任务书和指导书在课程设计前发给学生,设计任务书放置在设计报告封面后和正文目录前。
2.为了节省纸张,保护环境,便于保管设计报告,统一采用A4纸,课程设计报告建议双面打印(正文采用宋体五号字)或手写,左侧装订,订两个钉。
课程设计任务书
设计名称EDA(VHDL)课程设计
专业班级电子
指导教师
起止日期2011.1.4–2011.1.14
设计地点
电气与信息工程学院
课程设计任务书
设
计
内
容
在二周时间内,每个学生应完成四个题目中的二个。
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),因此采用小数分频。
其电路组成如下:
分频系数为N-0.5的分频器,其电路可由一个异或门、一个模N计数器和二分频器组成。
下图给出了通用半整数分频器电路组成。
为了防止雷同,建议每班1-4号设计2.5分频,5-8号设计3.5分频,9-12号设计4.5分频,13-16号设计5.5分频,17-20号设计6.5分频,21-24号设计7.5分频,25-28设计8.5分频,29-32设计9.5分频,33-36设计10.5分频,37-40号设计11.5分频,41-44号设计12.5分频计数器。
2.99分钟定时器的VHDL设计(每班1-30号的单号选择)
任务要求:
具有整体清零(reset)功能,定时99分钟。
以秒速度递增至99分钟停止,启动报警(cout)5秒钟。
具有置位(cn)控制,即cn高电平时,clk脉冲上升沿到来,计数加一;cn低电平时,置位结束,进入倒计时阶段,以秒速度使输出计数减一至零结束,并同时报警(cout)5秒钟。
时钟信号提供秒信号(1HZ);四位数码管静态显示,高位high(3downto0)显示分,低位low(3downto0)显示秒。
3.四组数字智力抢答器的VHDL设计(每班1-30号的双号选择)
系统设计要求是:
(1)设计制作一个可容纳四组参赛者的数字智力抢答器,每组设置一个抢答按钮供抢答者使用。
(2)电路具有第一抢答信号的鉴别和锁存功能。
(3)设置计分电路(根据实验箱条件,可以只完成二路计分电路设计)。
(4)设置犯规电路(选作)。
4.十字路口交通灯控制器的VHDL设计(每班31号以后选择)
系统设计要求:
设计一个由一条主干道和一条支干道的汇合点形成的十字交叉路口的交通灯控制器,具体要求如下:
(1)主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。
(2)主干道处于常允许通行状态,而支干道有车来才允许通行。
(3)当主、支道均有车时,两者交替允许通行,主干道每次放行45s,支干道每次放行25s,在每次由亮绿灯变成亮红灯的转换过程中,要亮5s的黄灯作为过渡,并进行减计时显示。
设计的基本要求
1.系统功能概述(建议采用:
本系统是…,具有以下功能:
)
阐述“小数分频”、“定时器”的设计思想、各部分实现方法,分析电路工作原理,在分析时注意语言的流畅。
2.系统结构描述
要求:
系统(或顶层文件)结构描述,各个模块(或子程序)的功能描述;
1)用原理图实现的,报告需包含以下内容:
a.系统原理图;
b.主要模块或符号说明;
2)用VHDL语言实现的,报告需包含以下内容:
a.原代码(即基于CPLD或FPGA器件的各功能模块的VHDL程序或逻辑原理图);
b.信号(SIGNAL)/变量(VARIABLE)的含义;[--以注释方式说明]
c.每一个进程(PROCESS)或子程序的主要功能;[--以注释方式说明]
d.关键语句;[--以注释方式说明]
3.输入、输出接口说明
4.报告中有分频器、定时器相关模块的功能仿真和时序仿真结果。
5.编写内容充实、完整和规范的课程设计报告书。
6.课程设计报告要求校对仔细,无错字,A4纸打印,左侧装订。
主要参考文献
[1]谭会生,张昌凡.EDA技术及应用.西安:
西安电子科技大学出版社,2006,12.
[2]潘松,黄继业.EDA技术实用教程.北京:
科学出版社,2008,8.
[3]美国ALTERA公司QuartusⅡ6.0用户指南.
[4]杨晓慧,杨永健.基于FPGA的EDA/SOPC技术与VHDL.北京:
国防工业出版社,2007,7.
[5]王诚,吴继华等,ALTERAFPGA/CPLD设计(基础篇).北京:
人民邮电出版社,2008,12.
进度计划表
序号
起止日期
课程设计内容
1
1月4日
上午:
定时器、半整数分频器的设计及脉冲吞吐计数器原理讲解;下午:
查资料
2
1月5日
上午:
交通灯控制器和智力抢答器的VHDL设计方案讲解,下午:
开始设计
3
1月5日~1月12日
在实验室进行设计、调试相关模块VHDL程序,绘制逻辑原理图,并进行时序仿真和波形仿真
4
1月13日~1月14日
编写并提交实习(设计)报告书,答辩
5
6
7
注意:
答辩验收时将根据老师现场提出的要求来改动,有关VHDL的基础知识、MaxplusⅡ操作和FPGA等内容将会被抽问,如果没能达到指定要求将不能及格。
成绩将根据出勤率、具体题目的难度、答辩和操作情况、设计报告是否有雷同和抄袭现象以及报告是否规范等考核标准酌情况给分。
实验一基于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;
entitycounter3is
port(clk,reset,en:
instd_logic;
qa,qb:
outstd_logic);
endcounter3;
architecturebehaviorofcounter3is
signalcount:
std_logic_vector(1downto0);--定义信号count传递计数器的值
begin
process(reset,clk)--进程开始实现复位和模三计数功能
begin
ifreset='1'then
count(1downto0)<="00";
else
if(clk'eventandclk='1')then
if(en='1')then
if(count="10")then
count<="00";
else
count<=count+1;--加1计数
endif;
endif;
endif;
endif;
endprocess;
qa<=count(0);
qb<=count
(1);
endbehavior;
3.模三计数器仿真波形图
接口
名称
类型
(输入/输出)
结构图上
的信号名
引脚号
说明
INCLK
IN
inclock
2
系统时钟5MHz
OUTCLK
OUT
outclk
3
系统输出
Q
OUT
q
4
系统输出
4.输入、输出接口说明
5.模三计数器元件图
6.半整数分频器原理图
7.半整数分频器仿真波形图
三.课程设计总结
通过本次实验用计算机操作的形式编辑计数器程序和绘制出了利用计数器原理的分频器原理图,了解了利用软件绘制原理图和编程的方法,以及用计算机形象的仿真计数器和分频器的波形,在实验中通过形象的方法结合图形进行分析把在书上学习的理论知识进行实践。
不仅更好的理解和掌握了用软件设计图形和运行仿真的方法,也通过实验把理论知识转化为实际的图形加以理解,更好的理解和掌握了此方面的知识。
为以后的实践积累了经验。
四.参考文献
[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.
实验二99分钟定时器的VHDL设计
一.系统设计任务及功能概述
1.系统设计任务
任务要求:
通过设计,定时器可以整体清零;可以定时最高到99MIN;以秒速度递增至预定时间,以秒速度递减至零。
2.系统功能概述
本系统是一个99分钟的定时器,具有以下功能:
具有整体清零(reset)功能,定时99分钟。
以秒速度递增至99分钟停止,启动报警(cout)5秒钟。
具有置位(cn)控制,即cn高电平时,clk脉冲上升沿到来,计数加一;cn低电平时,置位结束,进入倒计时阶段,以秒速度使输出计数减一至零结束,并同时报警(cout)5秒钟。
时钟信号提供秒信号(1HZ);四位数码管静态显示,高位high(3downto0)显示分,低位low(3downto0)显示秒。
二.系统设计方案和程序设计
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;endart;
Aaa控制计数模块仿真波形图
译码器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仿真波形图
报警器模块主要功能是计数定时器以秒速度递增至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;
报警器模块仿真波形图
根据定时器要实现的功能对以上程序进行元件例化,例化程序如下:
定时器例化程序
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;-