数字秒表课设.docx

上传人:b****6 文档编号:8929056 上传时间:2023-02-02 格式:DOCX 页数:17 大小:1.06MB
下载 相关 举报
数字秒表课设.docx_第1页
第1页 / 共17页
数字秒表课设.docx_第2页
第2页 / 共17页
数字秒表课设.docx_第3页
第3页 / 共17页
数字秒表课设.docx_第4页
第4页 / 共17页
数字秒表课设.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

数字秒表课设.docx

《数字秒表课设.docx》由会员分享,可在线阅读,更多相关《数字秒表课设.docx(17页珍藏版)》请在冰豆网上搜索。

数字秒表课设.docx

数字秒表课设

 

电子课程设计

——数字秒表

 

学院:

电子工程学院

专业班级:

通信121502

姓名:

xxxxxx

学号:

xxxxxxxxxxxx

指导教师:

xxxxxx

2014年12月31日

 

目录

引言1

绪论1

一、课程设计的目的 3

二、设计的任务与要求3

三、设计原理3

1.实验设计方案3

2.设计实验说明3

四、总体框图5

1.实验原理框图5

2.实验生成原理框图6

五、选择器件6

六、软件设计与波形仿真6

1.秒表计数单位与对应信号输出6

2.秒表总程序7

七、时序仿真12

八、硬件实现14

(一)在实验箱上验证14

(二)实验连线说明及管脚分配15

九、实验结果图16

十、总结18

致谢19

参考文献19

 

数字秒表

引言

随着人们生活水平的日益提高,社会体系的日益完善,人们对于各种应用器件的要求也越来越高。

秒表作为日常生活中,特别是体育运动中应用的特别广泛,所以精确且方便使用的秒表就被越来越多的人所选择。

本秒表计时器用于体育竞赛及各种要求有较精确时的各领域,往常利用中小规模集成电路实现,但一般体积大,使用携带不方便。

利用Verilog在FPGA或CPLD上实现1/100秒计时控制器,能充分发挥verilog与可编程逻辑器件灵活、高效、集成度高的特点。

利用verilog语言设计基于计算机电路中时钟脉冲原理的数字秒表。

该秒表能对0秒~59分59.59秒范围进行计时,显示最长时间是59分59秒。

计时精度达到10ms。

设计了复位开关和启停开关。

复位开关可以在任何情况下使用,使用以后计时器清零,并做好下一次计时的准备。

绪论

在科技高度发展的今天,集成电路和计算机应用得到了告诉发展,尤其是计算机应用的发展,它在人们日常生活已逐渐崭露头角。

大多数电子产品多是由计算机电路组成,如:

手机、Mp3等。

而在将来的不就他们的身影将会更频繁的出现在我们身边呢。

各种家用电器多会实现微电脑技术。

电脑各部分在工作时多是以时间为基准的。

本文就是基于计算机电路的时钟脉冲信号、状态控制等原理设计出的数字秒表。

秒表在很多领域充当中一个重要的角色。

在各类比赛中对秒表的精度要求很高,尤其是一些科学实验,他们对时间的精度达到几纳米级别。

Verilog语言简介

VerilogHDL是目前应用最为广泛的硬件描述语言,适合算法级,寄存器级,逻辑级,门级和版图级等各个层次的设计和描述,优点是其工艺无关性。

这使得工程师在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束条件。

VerilogHDL可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等。

 

VerilogHDL适合算法级,寄存器级,逻辑级,门级和版图级等各个层次的设计和描述。

Verilog HDL语言作为硬件描述语言的一种,它在现代电子设计中发挥了巨大作用。

用该语言可以对波形和电路进行描述。

用该语言可以进行仿真验证和面向硬件实现的可综合设计。

Verilog HDL语言可以用于模拟和数字电路硬件描述。

1983年GDA公司的Phil Moorby 首创Verilog HDL。

1989年Cadence公司收购了GDA。

2001年IEEE发布了Verilog语言的Verilog  HDL IEEE1364-2001国际标准。

Verilog HDL 是一种通用的硬件描述语言。

它的语法和C语言有很多相似之处,所以有C编程经验的人容易学习掌握。

Verilog语言适用于不同层次的描述,它可用于行为级、寄存器传输级、和门级以及电路开关级等设计。

Verilog HDL语言得到绝大多数流行EDA开发软件的支持。

绝大多数的制造厂商都支持Verilog HDL设计,所以用Verilog HDL进行IC设计容易选择制造厂商。

Verilog 具有编程语言接口(PLI),它可以支持C语言对Verilog内部的访问。

 

一、课程设计的目的 

本次设计的目的就是在掌握EDA实验开发系统的初步使用基础上,了解EDA技术,对计算机系统中时钟控制系统进一步了解,掌握状态机工作原理,同时了解计算机时钟脉冲是怎么产生和工作的。

在掌握所学的计算机组成与结构课程理论知识时。

通过对数字秒表的设计,进行理论与实际的结合,提高与计算机有关设计能力,提高分析、解决计算机技术实际问题的能力。

通过课程设计深入理解计算机结构与控制实现的技术,达到课程设计的目标。

 

二、设计的任务与要求

1.数字秒表的计时范围是0~59’59.99”,显示的最长时间为59’59”。

2.数字秒表的计时精度是10ms。

3.复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时器就会清零,并做好下次计时的准备。

三、设计原理

1.实验设计方案

利用一块芯片完成除时钟源,按键和显示器之外的所有数字电路功能。

所有数字逻辑功能都在FPGA器件上用verilog语言实现。

这样设计具有体积小,设计周期短,调试方便等特点。

本设计采用分频,分屏,数码管动态扫描,显示(译码)和计数的设计方法。

2.设计实验说明

数字秒表可以划分为三个功能块:

计时控制器,计时电路和显示电路。

这些模块根据需要可以继续分割为更小的模块,由分频器,显示译码器,十进制计数器和六进制计数器电路组成。

在整个秒表中最为关键的是如何获得一个精确的100hz计时脉冲,除此之外,数字秒表需有清零/启动控制端,以及暂停控制端,以便数字秒表能随意停止启动及暂停。

3.模块功能

计时控制器的作用是对计时进行控制,由clr和pause按键开关实现启动清零和暂停的功能。

计时电路的作用是计时,计时的一般方法是对时钟脉冲进行计数。

计数器可以继续分割为时基分频器和计数器两部分。

分频器:

用来产生100hz计时脉冲;计时电路的输入信号为50MHZ,计数允许/清零信号、暂停信号和分屏信号;输出为毫秒,秒,分的计时数据。

显示电路的作用是将计时值在LED七段译码数码管上显示出来。

计时电路产生的计时值经过BCD七段译码后,驱动LED数码管。

计时显示电路的实现方案采用扫描显示,即每次只驱动一位数码管,各位数码管轮流驱动对应的数码管进行显示。

分频:

为了产生秒脉冲,可以把50MHz的时钟进行250000分频(可用计数器统计分频次数),变为100Hz(即周期为0.01s),然后,使秒信号second每0.01s取反一次,则秒信号second为50Hz的信号(即周期为0.02s)。

在计时处理电路中,设置了一个毫秒处理寄存器msec[7:

0],秒处理寄存器sec[7:

0]和分处理寄存器min[7:

0],它们都是8位寄存器,分别存放毫秒的低位和高位,秒的低位和高位,以及分的低位和高位。

其中,msec[3:

0]存放毫秒信号的个位,msec[7:

4]存放毫秒信号的十位,sec[3:

0]存放秒信号的个位,sec[7:

4]存放秒信号的十位,min[3:

0]存放分信号的个位,min[7:

4]存放分信号的十位。

毫秒信号处理的过程是:

在毫秒信号(second)的上升沿,如果毫秒信号个位msec[3:

0]满10,清0毫秒个位msec[3:

0],同时毫秒的十位msec[7:

4]加1;如果毫秒信号十位msec[7:

4]满10,清0毫秒十位msec[7:

4],同时向秒产生进位信号cn1,即cn1置1。

秒信号处理的过程是:

在进位信号cn1的上升沿,秒的个位sec[3:

0]加1;如果秒信号个位sec[3:

0]满10,清0秒个位sec[3:

0],同时秒的十位信号sec[7:

4]加1。

如果秒信号十位sec[7:

4]满6,清0秒十位sec[7:

4]。

分信号的处理过程是:

在进位信号cn2的上升沿,分的个位min[3:

0]加1;如果分信号个位min[3:

0]满10,清0分个位min[3:

0],同时分的十位信号min[7:

4]加1。

如果分信号十位min[7:

4]满6,清0分十位min[7:

4]。

这里由于未设小时显示部分,所以,分信号不必考虑其进位情况。

四、总体框图

1.实验原理框图

 

 

 

2.实验生成原理框图

 

五、选择器件

EL-EMCU-I实验箱、CPU板(EXP-EP3C10)、EXP-EP4CE6&10V1.0,FPGA器件(CycloneIVE,EP4CE6E22C8)

六、软件设计与波形仿真

1.秒表计数单位与对应信号输出

msec[3:

0]

百分之一秒

msec[7:

4]

十分之一秒

sec[3:

0]

sec[7:

4]

十秒

min[3:

0]

min[7:

4]

十分

2.秒表总程序

moduleclock1(clr,clk,segdat,sl,pause,k1);

inputclr,clk;//clr为清零键

inputpause;//pause为暂停键

inputk1;

output[7:

0]segdat;//段码输出

output[3:

0]sl;//位码输出

reg[18:

0]count;//计数器

reg[7:

0]msec,sec,min;//毫秒和秒和分处理寄存器

reg[7:

0]segdat_reg;//段码寄存器

reg[3:

0]sl_reg;//位码寄存器

reg[3:

0]disp_dat;//显示数据寄存器

regmsecond;//毫秒信号

regcn1;//毫秒向秒进位信号

regcn2;//秒向分进位信号

always@(posedgeclk)//毫秒信号产生电路

begin

count=count+1;

if(count==19'd250000)//50M分频为100HZ信号

begin

count=19'd0;

msecond=~msecond;

end

end

always@(count[10:

9])

begin

if(k1)//k1为高电平的时候显示百分秒和秒

begin

case(count[10:

9])

2'b00:

disp_dat=msec[3:

0];//取毫秒的个位数据

2'b01:

disp_dat=msec[7:

4];//取毫秒的十位数据

2'b10:

disp_dat=sec[3:

0];//取秒的个位数据

2'b11:

disp_dat=sec[7:

4];//取秒的十位数据

endcase

end

else

begin

case(count[10:

9])

2'b00:

disp_dat=min[3:

0];//取分的个位数据

2'b01:

disp_dat=min[7:

4];//取分的十位数据

endcase

end

end

always@(disp_dat)

begin

case(disp_dat)

4'h0:

segdat_reg=8'h3f;//显示0

4'h1:

segdat_reg=8'h06;//显示1

4'h2:

segdat_reg=8'h5b;//显示2

4'h3:

segdat_reg=8'h4f;//显示3

4'h4:

segdat_reg=8'h66;//显示4

4'h5:

segdat_reg=8'h6d;//显示5

4'h6:

segdat_reg=8'h7d;//显示6

4'h7:

segdat_reg=8'h07;//显示7

4'h8:

segdat_reg=8'h7f;//显示8

4'h9:

segdat_reg=8'h6f;//显示9

endcase

end

always@(count[10:

9])

begin

case(count[10:

9])

2'b00:

sl_reg=4'b1110;//扫描最低位

2'b01:

sl_reg=4'b1101;//扫描次低位

2'b10:

sl_reg=4'b1011;//扫描次高位

2'b11:

sl_reg=4'b0111;//扫描最高位

endcase

end

else

begin

case(count[10:

9])

2'b00:

sl_reg=4'b1110;

2'b01:

sl_reg=4'b1101;

endcase

end

end

always@(posedgemsecondornegedgeclr)//毫秒和清零处理

begin

if(!

clr)//若按下清零键

begin

msec[7:

0]=8'h0;//则毫秒寄存器清零

cn1=0;//进位清零

end

else

begin

if(pause)

begin

cn1=0;//因为毫秒满60后cn置1,所以此处要清零

msec[3:

0]=msec[3:

0]+1;//毫秒加1

if(msec[3:

0]==4'd10)//若毫秒的个位为10(加1后的值)

begin

msec[3:

0]=4'd0;//毫秒个位清零

msec[7:

4]=msec[7:

4]+1;//毫秒十位加1

if(msec[7:

4]==4'd10)//若毫秒十位为10(加1后的值)

begin

msec[7:

4]=4'd0;//毫秒十位清零

cn1=1;//毫秒向秒的进位cn置1

end

end

end

end

end

always@(posedgecn1ornegedgeclr)//秒和清零处理

begin

if(!

clr)//若按下清零键

begin

sec[7:

0]=8'h0;//则秒寄存器清零

cn2=0;//进位清零

end

else

begin

cn2=0;//因为秒满60后cn置1,所以此处要清零

sec[3:

0]=sec[3:

0]+1;//秒加1

if(sec[3:

0]==4'd10)//若秒个位为10(加1后的值)

begin

sec[3:

0]=4'd0;//秒个位清零

sec[7:

4]=sec[7:

4]+1;//秒十位加1

if(sec[7:

4]==4'd6)//若秒十位为6(加1后的值)

begin

sec[7:

4]=4'd0;//秒十位清零

end

end

end

end

always@(posedgecn2ornegedgeclr)//分和清零处理

begin

if(!

clr)//若按下清零键

begin

min[7:

0]=8'h0;//则分寄存器清零

end

else

begin

min[3:

0]=min[3:

0]+1;//分加1

if(min[3:

0]==4'd10)//若分个位为10(加1后的值)

begin

min[3:

0]=4'd0;//分个位清零

min[7:

4]=min[7:

4]+1;//分十位加1

if(min[7:

4]==4'd6)//若分十位为6(加1后的值)

begin

min[7:

4]=4'd0;//分十位清零

end

end

end

end

assignsegdat=segdat_reg;//将段码寄存器的值送段码输出

assignsl=sl_reg;//将位码寄存器的值送位码输出

endmodule

七、时序仿真

仿真图介绍

从程序知:

clr低电平清零,k1低电平是显示分钟,pause低电平暂停。

故分析如下:

第一段(0~10ns):

clr为低电平清零,k1高电平显示秒和毫秒,pause高电平计数,但是因为clr是清零状态不计数,所以最后输出为0(3F)。

第二段(10ns~20ns):

clr为高电平计数,k1低电平显示分钟,pause高电平计数,但是因为k1显示分钟所以在时间没有计时到59’99”之前,数码管显示为0。

第三段(20ns~30ns):

clr为高电平计数,k1高电平显示毫秒和秒,pause低电平暂停,所以输出暂停在6D(01101101)。

第四段(30ns~):

clr,k1,pause全为高电平是,数字秒表计时,计时从6D开始继续往后计时。

 

八、硬件实现

(一)在实验箱上验证

1.以上数字秒表可以在quartusii上进行验证。

2.将软件导入到软件里进行器件选择和引脚锁定,然后进行编译。

3.用quartusii软件对程序进行编译,并下载到硬件FPGA板子上进行硬件实现。

板子上6个计数器与百分之一秒,十分之一秒,秒,十秒,分,十分相对应,并且开始00’00”00~59’59”99的计数,用数码管显示。

4.clk,k1和pause功能键由FPGA板子上的开关key[o],key[1]和key[2]代替。

按一下key[0]键,数码管计时清零,然后再按一下则计数重新开始;key[1]按下,分屏到显示分的数码管,再按一下则返回到显示秒和毫秒的数码管;key[2]按下,数码管上的时间停止计时,再次按下则数码管计时继续。

(二)实验连线说明及管脚分配

clk对应CPU板上的50M时钟。

将EDA/CPLD/FPGA侧的IO1-IO3,IO7-IO10,IO20分别连接到数码管的输入插孔LED_A、LED_B、LED_C、LED_D、LED_E、LED_F、LED_G、LED_P上,将IO21---IO24连接到数码管的输入插孔LED_C1---LED_C4上。

将IO17,IO18,IO19连接到KEY1,KEY2,KEY0上。

管脚分配示例

Nodename

(引脚名)

Pin

(引脚号)

Pintype

(输入/输出类型)

Nodename

(引脚名)

Pin

(引脚号)

Pintype

(输入/输出类型)

Segdat0

43

output

clk

24

input

Segdat1

39

output

k1

1

input

Segdat2

66

output

pause

7

input

Segdat3

52

output

clr

11

input

Segdat4

50

output

sl[0]

77

output

Segdat5

34

output

Sl[1]

85

output

Segdat6

71

output

Sl[2]

87

output

Segdat7

75

output

Sl[3]

101

output

九、实验结果图

 

 

十、总结

这个课程设计我还不是很熟悉,第一次做难免会生疏,而且对很多基本的东西都不是很清楚,使得我在开始做设计时总是会犯一些错误,这在一定程度上影响了我的课程设计的质量,希望能在以后的时间里认真学好这些基础的东西。

想要做好这个课程设计,再设计过程中,就要考虑到各个程序的功能,要翻阅大量资料,参靠别人的经验,不要怕麻烦,遇到不懂的就主动去问老师或者同学

只有经过不停的改错不停的编译得到正确的程序说明了作为软件编程人员是不能粗心大意的,一个程序的质量的高低与你细心与否有着一定的联系。

在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。

 

致谢

经过快两个星期的紧张工作,我终于完成了我的设计任务——设计数字秒表。

在这次课程设计中特别感谢老师对我的指导和同学对我的帮助,正是由于他们的督促和耐心指导,我才可以顺利完成这次的设计。

锻炼了动手能力,给以后的学习指出了一个方向。

 

参考文献

[1]张洪润张亚凡FPGA/CPLD应用设计200例.北京航空航天大学出版社.2009

[2]刘建清CPLD和VerilogHDL编程技术.国防工业出版社.2006

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

当前位置:首页 > 外语学习 > 英语学习

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

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