基于VHDL语言的电子表设计毕业设计论文.docx
- 文档编号:60453
- 上传时间:2022-10-01
- 格式:DOCX
- 页数:24
- 大小:150.81KB
基于VHDL语言的电子表设计毕业设计论文.docx
《基于VHDL语言的电子表设计毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于VHDL语言的电子表设计毕业设计论文.docx(24页珍藏版)》请在冰豆网上搜索。
基于VHDL语言的电子表设计毕业设计论文
装订线
2012--2013学年第一学期物电学院期末考试卷
EDA大作业《设计制作电子表》(课程论文等试卷样式)
学号:
姓名:
班级:
成绩:
评语:
(考试题目及要求)
利用VHDL语言设计一个电子时钟,可以显示时、分、秒,具有时间设置功能,要求走时误差不大于每天10秒。
可采用数码管或液晶显示,最好设计出个性化显示界面。
注意事项:
1.上述三题任选一题,采用标准的作业考核类封面,A4打印。
2.第一题40分,液晶+3分,个性化界面+3分。
3.第二题45分,幅度调整+3分,频率测量及显示+5分。
4.第三题48分,频率分段设置+3分,频率微调+5分,频率范围酌情加分。
5.雷同的程序和算法满分值只计原题分值的三分之二,将依据设计报告的质量和实验结果的描述计分。
设计上的创新会酌情加分,实现上的偏离会酌情扣分。
6.本门课程成绩中,实验操作和实验报告占50%,本次作业考核占50%。
目录
一、设计要求1
二、设计思路1
三、程序设计2
1.置数还是计数2
2.在哪一位置数2
3.计数单位2
4.秒3
5.分4
6.时4
7.数码管显示5
四、仿真结果6
五、实验结果8
1.连线8
2.设计结果8
六、实验心得9
电子表源程序10
设计制作电子表
一、设计要求
利用VHDL语言设计一个电子时钟,可以显示时、分、秒,具有时间设置功能,要求走时误差不大于每天10秒。
可采用数码管或液晶显示,最好设计出个性化显示界面。
二、设计思路
电子表其实质为计数器,计数单位为1秒。
由秒,分,时组成,秒和分是60进制,用十进制和六进制组成,时是24进制,直接设计一个24进制计数器即可。
要让结果显示出来,则用七段式数码管输出显示计数值。
此电子表需要有置数功能,加一个控制开关,当开关为低电平时计数,当开关为高电平时置数。
设计思路如下图所示:
三、程序设计
1.置数还是计数
电子表有计数和指数两种状态,工作时执行计数还是执行置数则由一控制使能端EN决定,当EN为低电平时,电子表计数,当EN为高电平时,电子表置数。
2.在哪一位置数
该电子表有秒低位,秒高位,分低位,分高位,时低位,时高位组成,共有六位,置数由位选决定给哪一位置数。
设置一个三位的二进制开关p2,p1,p0,通过编码电路实现选择置数位。
①当p2p1p0为“000”时,不选择任何位,此时电子表只是停止计数,不置数。
②当p2p1p0为“001”时,秒低位置数。
③当p2p1p0为“010”时,秒高位置数。
④当p2p1p0为“011”时,分低位置数。
⑤当p2p1p0为“100”时,分高位置数。
⑥当p2p1p0为“101”时,时低位置数。
⑦当p2p1p0为“110”时,时高位置数。
关键程序:
ift'eventandt='1'then
ifen='0'then
计数语句
elsifen='1'andp="001"thens0<=num;
endif;
endif;
3.计数单位
首先脉冲频率要足够大,提供一个较快的扫描频率,时数码管稳定地显示计数值。
计数单位为1秒,对脉冲clk进行分频,得到周期为1秒的计数单位t。
程序中对clk进行512分频,所以需要一个相近的脉冲,试验箱上的CLK4的频率范围为625KHz~19.5Hz,通过跳线帽选择可以调出624Hz的频率。
所以脉冲频率选用624Hz。
关键程序:
ifclk'eventandclk='1'then
count:
=count+1;
endif;
t<=count(9);
4.秒
秒是60进制的,可以用一个十进制计数器和一个六进制计数器实现。
秒的低位为十进制,当第10个计数单位到达时,计数值清零,并产生一个进位信号,用以更高位的计数,而其他时候进位信号为低电平,既没有进位输出。
秒的高位为六进制,每一个来自低位的进位信号高电平到达时计一次数,当第六个进位信号到达时,计数值清零,同样的产生一个进位信号。
关键程序:
-----秒低位--------
ss0:
process(t)is
begin
ift'eventandt='1'then
ifen='0'then
ifs0=9thens0<=0;
c0<='1';---进位
elses0<=s0+1;
c0<='0';
endif;
elsifen='1'andp="001"thens0<=num;
endif;
endif;
endprocess;
-------秒高位----
ss1:
process(c0)is
begin
ifc0'eventandc0='1'then
ifen='0'then
ifs1=5thens1<=0;
c1<='1';---进位
elses1<=s1+1;
c1<='0';
endif;
elsifen='1'andp="010"thens1<=num;
endif;
endif;
endprocess;
5.分
分与秒类似,也是一个60进制的计数器,可用十进制和六进制组合实现。
这里不再赘述。
6.时
时位不同于秒和分,因为时的低位不是任何进制的计数器,因此不能像上面那样用两个计数器组合,而只能将时的高低位作为一个整体,为一个二十四进制计数器,接受来自分位的进位信号,计数满24时清零。
由于数码管只能显示0~9的数字,所以数码管显示时仍然要分高低位分别显示。
对于如何用两个数码管显示着24个数,用分段的方法解决。
h表示时位的计数值,h1表示时的高位,h0表示时的低位
1h在0~9范围内,则h1=0,h0=h;
2h在10~19范围内,则h1=1,h0=h-10;
3h在20~23范围内,则h1=2,h0=h-20;
关键程序:
hh:
process(c3,h)is
begin
ifc3'eventandc3='1'then
ifh=23thenh<=0;
elseh<=h+1;
endif;
endif;
casehis
when0to9=>h1<=0;h0<=h;
when10to19=>h1<=1;h0<=h-10;
when20to23=>h1<=2;h0<=h-20;
whenothers=>null;
endcase;
endprocess;
7.数码管显示
秒分时个两位,分与秒,时与分之间用短线隔开,所以需要用8个数码管,从右到左分别为秒低位,秒高位,短线,分低位,分高位,短线,时低位,时高位。
时高位h1
时低位h0
—
分高位m1
分低位m0
—
秒高位s1
秒低位s0
关键程序:
process(clk,w)is
begin
ifclk'eventandclk='1'then
ifw="111"thenw<="000";
else
w<=w+1;
endif;
endif;
casewis
when"000"=>n<=s0;
when"001"=>n<=s1;
when"010"=>n<=10;---第10种状态,显示分与秒之间的短线。
when"011"=>n<=m0;
when"100"=>n<=m1;
when"101"=>n<=10;---第10种状态,显示时与分之间的短线。
when"110"=>n<=h0;
when"111"=>n<=h1;
whenothers=>null;
endcase;
endprocess;
sel<=w;
四、仿真结果
1.clk分频后用以计数,s0为十进制,仿真结果如下:
2.s1为六进制
3.m0为十进制
4.m1为六进制
5.h为二十四进制
五、实验结果
1.连线
设定器件为EPM7128LC84-6,按分配好的引脚在试验箱上连线。
输入管脚有:
脉冲clk,使能控制端en,置数选择p2p1p0,置数端x3x2x1x0。
输出管脚有:
数码管位选输出sel~sel0,数码管段选输出d6~d0。
连线照片如下:
2.设计结果
电子表实物照片如下:
从左到右为时,分,秒。
六、实验心得
本次实验花费了较长时间,刚开始想电子表就是一个计数器,之前实验做过计数器,应该很快能做出来,但当开始写程序时发现有很多不同,也遇到了比较困难的问题,要让计数单位为1秒,脉冲还要比较快,脉冲的选择和分频就是一个重要问题。
还有时的高低位如何在数码管上显示出来的问题,因为时是二十四进制的,自己想了很久也没有办法解决,后来请教同学,经同学点拨,采用分段赋值的方法让时的地高位分别显示。
觉得自己还是思维方式太狭窄,解决问题的方法太单一,以后要扩展思维,一条路行不通就换另一种方法,也许会更简单。
总的来说,本次设计受益匪浅,一方面巩固了EDA所学知识,另一方面对自己的思维方式也有一些反思。
七、附录
电子表源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitydzbis
port(clk:
instd_logic;
en:
instd_logic;---置数开关
p:
instd_logic_vector(2downto0);--置数选择
x:
instd_logic_vector(3downto0);--置数值
sel:
outstd_logic_vector(2downto0);---扫描
d:
outstd_logic_vector(6downto0));
enddzb;
architecturebehaverofdzbis
signalt:
std_logic;--计数单位,即1秒
signalnum:
integerrange0to9;--置数值
signaln:
integerrange0to10;--数码管显示值
signals0,s1,m0,m1,h0,h1:
integerrange0to10;--秒,分,时
signalh:
integerrange0to23;
signalc0,c1,c2,c3:
std_logic;---进位信号
signalw:
std_logic_vector(2downto0);--位选
begin
------分频----
fenpin:
process(clk)is
variablecount:
std_logic_vector(9downto0);
begin
ifclk'eventandclk='1'then
count:
=count+1;
endif;
t<=count(9);
endprocess;
-----秒低位--------
ss0:
process(t)is
begin
ift'eventandt='1'then
i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL 语言 电子表 设计 毕业设计 论文