基于Verilog语言方案设计书的数码管电子钟.docx

上传人:b****8 文档编号:28368431 上传时间:2023-07-10 格式:DOCX 页数:22 大小:109.13KB
下载 相关 举报
基于Verilog语言方案设计书的数码管电子钟.docx_第1页
第1页 / 共22页
基于Verilog语言方案设计书的数码管电子钟.docx_第2页
第2页 / 共22页
基于Verilog语言方案设计书的数码管电子钟.docx_第3页
第3页 / 共22页
基于Verilog语言方案设计书的数码管电子钟.docx_第4页
第4页 / 共22页
基于Verilog语言方案设计书的数码管电子钟.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

基于Verilog语言方案设计书的数码管电子钟.docx

《基于Verilog语言方案设计书的数码管电子钟.docx》由会员分享,可在线阅读,更多相关《基于Verilog语言方案设计书的数码管电子钟.docx(22页珍藏版)》请在冰豆网上搜索。

基于Verilog语言方案设计书的数码管电子钟.docx

基于Verilog语言方案设计书的数码管电子钟

EDA技术及其嵌入式系统设计课程设计

 

基于MAX+PLUSII平台的

多功能数字钟

设计报告

 

指导教师:

专 业:

姓名:

学号:

 

目录

一、序言………………………………………………………………………………2

二、实验要求及目的…………………………………………………………………2

三、实验原理…………………………………………………………………………3

四、运行环境…………………………………………………………………………3

五、运行过程…………………………………………………………………………3

六、试验结果…………………………………………………………………………8

七、各模块源程序………………………………………………………………………………8

八、心得体会…………………………………………………………………………16

参考文献……………………………………………………………………………16

 

基于MAX+PLUSII数字钟的实现

一序言

电子设计自动化(EDAElectronicDesignAutomation)技术是一种以计算机作为工作平台,以EDA软件工具为开发环境,以硬件描述语言和原理图描述为设计入口,以可编程逻辑器为实验载体,以ASIC、SOC和SOPC嵌入式系统为设计目标,以数字系统系统设计为应用方向的电子产品自动化设计技术。

它是融入了电子技术、计算机技术、信息处理技术、智能化技术等最新成果而开发的高新技术,是现代电子系统设计、制造不可缺少的技术。

EDA技术涉及面广,包括描述语言、软件、硬件等方面知识。

它的电子仿真软件的仿真功能强大,具有完备的文件库,具有选用元器件创建电路、仿真模拟运行电路的功能,并且在输入信号的加入、输出信号的显示上能完全模拟实际和调制过程中的各种波型和操作过程。

因此,EDA可作为辅助实验教育和实验训练的手段之一,以弥补在经费和实验仪器、元器件缺乏情况下的不足,并可节约材料消耗和减少仪器故障,通过仿真可熟悉常用电子仪器的使用方法和测量方法,并锻炼学生电路设计和调试能力,提高学生的分析与解决问题、故障排除的能力,进一步挖掘学生的开发和创新能力。

VerilogHDL是一种优秀的硬件描述语言,尤其在ACIC设计领域更是占主导地位。

VerilogHDL与C语言有许多相似之处,并继承和借鉴了C语言的多种操作符和语法结构,有C语言基础的人很快就能够学习并使用该语言。

目前国外教学将VerilogHDL作为主要的硬件描述语言,在国内,该语言的使用人数也逐渐增多。

自上而下的电子系统设计是一种传统的设计思路。

这种设计思想更符合人们的逻辑思维习惯,也容易是设计者对复杂的系统进行合理的划分以及不断的优化。

现代EDA数字控制系统设计充分利用了自上而下的设计思想,并且许多软件都支持高层的设计和仿真。

二、实验要求及目的:

本设计的数字钟,要求显示格式为小时—分钟—秒钟,分别在8个七段LED数码管上以动态分时扫描的方式显示。

系统有两个时钟基准,CLK1为4HZ,分频后用来作为计时基准时钟。

CLK2为10KHZ,用来作为扫描基准时钟,分频后作为百分秒计时时钟。

附加功能:

有调时模式,增加秒表功能。

数字钟的显示格式如图所示:

实验目的:

1.初步了解可编程逻辑器件的基本原理

2.初步掌握Altera公司的可编程逻辑器件开发软件MAX+PLUSп的使用方法

3.掌握可编程逻辑器件的编程/配置方法

4.学会使用EDA实验系统

5.熟悉使用VerilogHDL语言

三、实验原理:

本系统采用的是Altera公司的FPGA器件Flex10KEPF10K10LC84-4,FLEX(灵活逻辑单元矩阵)系列是Altera应用非常广泛的产品,这些器件具有比较高的集成度及丰富的寄存器资源,采用了快速,可预测延时的连续式布线结构,是一种将CPLD和FPGA的优点结合于一体的器件;硬件描述语言VerilogHDL。

由设计的芯片输出稳定的高频脉冲信号作为时间基准,经芯片的CLK分频输出标准的秒脉冲,秒计数器满60向分计数器进位,分计数器满60向小时计数器进位,小时计数器按“24翻1”规律计数,计数器经译码送到数码管中,基于芯片动态分时扫描的方式显示数字时间,动态显示所显示的若干位数是逐位轮流显示的,周而复始不断循环,只要轮流的速度足够快(每秒轮流50次以上),由于人眼“视觉暂留”的特性,感觉不到显示器的闪动,所看到的是连续显示一组数字,采用静态显示一个LED数码管数字,例如数码管的abcdef笔段亮时,显示数字“0”,bc亮时显示“1”,abdeg亮时显示“2”等等。

本设计芯片的输入端为:

CLK1,CLK2,KEY1,MADD,MDEC,HADD输出端为:

ZX[6…0]、ZW[7…0]。

ZX[6…0]实现数码管的显示,ZW[7…0]实现八个数码管的显示。

四、运行环境:

MUX+PLUSⅡ集成开发环境。

五、运行过程:

1、程序思想:

利用自顶而下的设计思想,将整个数字钟进行模块划分为:

数码管扫描显示模块、数码管译码模块、时钟走时模块、时间调整模块、秒表走时模块以及综合时的附加模块等。

2、主要模块仿真效果:

(1)时钟走时模块

 

(2)数码管扫描显示模块

 

(3)时钟走时模块

 

(4)数码管译码模块

 

(5)跑表走时模块

 

(3)四输入或门模块

 

3、顶层电路图(旋转后):

2、管脚分配:

脚名

脚号

输入输出类型

脚名

脚号

输入输出类型

RST

60

Input

ZX4

22

Output

CLK4

1

Input

ZX5

23

Output

CLK10K

43

Input

ZX6

24

Output

MADD

65

Input

ZW0

5

Output

MDEC

62

Input

ZW1

6

Output

HADD

64

Input

ZW2

7

Output

KEY1

61

Input

ZW3

8

Output

ZX0

17

Output

ZW4

9

Output

ZX1

18

Output

ZW5

10

Output

ZX2

19

Output

ZW6

11

Output

ZX3

21

Output

ZW7

16

Output

LED1

27

Output

LED2

28

Output

3、输入输出功能说明:

RST:

数字系统复位键,高电平有效

CLK4、CLK10:

分别输入4Hz、10KHz时钟信号

KEY1:

多功能数字钟功能选择键

MADD:

时钟调时模式下为分钟加键,跑表模式下时跑表启停键

MDEC:

调时模式下的分钟减1键

HADD:

调时模式下小时加1键

LED1:

调时模式指示灯

LED2:

跑表模式指示灯

六、试验结果:

本文就自己设计多功能数字式电子时钟的过程进行了介绍,在整个设计过程中采用了模块化设计思想,对各个模块逐一进行设计,最终完成整个设计任务。

所设计的多功能数字式电子时钟,要求具备24小时循环计时功能,并要求采用动态显示技术来实现LED的显示。

附加功能为有调时模式,秒表功能。

本次设计在实验室中利用Altera公司的可编程逻辑器件开发软件MAXplusII进行实验电路的设计和仿真,并利用EDA实验系统,通过下载到FLEX10K芯片基本实现了多功能数字钟的各项功能。

七、各模块源程序:

1、调时模块

//时间调整模块,led1指示进入调整模式

moduletune(clk4,da,ga,ea,ha,madd,mdec,hadd,mode,led1);

inputclk4;

inputmadd,mdec,hadd;

input[1:

0]mode;

output[3:

0]da,ga;

output[2:

0]ea;

output[1:

0]ha;

reg[3:

0]da,ga;

reg[2:

0]ea;

reg[1:

0]ha;

outputled1;//指示是否处于调时模式

regclk1,clk2,led1;

always@(posedgeclk4)

clk2<=!

clk2;

always@(posedgeclk2)

clk1<=!

clk1;

always@(posedgeclk2)

begin

if(mode==1)

begin

led1<=1;

if(madd)

begin

da<=da+1;

if(da==9)

beginea<=ea+1;da<=0;end

if(ea==5&&da==9)ea<=0;

end

elseif(mdec)

begin

da<=da-1;

if(da==0)

beginea<=ea-1;da<=9;end

if(ea==0&&da==0)ea<=5;

end

elseif(hadd)

begin

ga<=ga+1;

if(ga==9)

beginha<=ha+1;ga<=0;end

if(ha==2&&ga==4)beginha<=0;ga<=0;end

end

end

end

endmodule

2、模式控制模块

//控制模块,包括模式选择,调时功能

modulecontrol(mode,key1,rst);

inputkey1,rst;

output[1:

0]mode;

reg[1:

0]mode;

always@(posedgekey1)

begin

if(rst)

begin

mode<=2'b00;

end

else

begin

mode<=mode+2'b01;

if(mode==3)

mode<=0;

end

end

endmodule

2、走时模块

//时钟走时模块,clk4分频后为1s时钟信号,

modulezoushi(rst,a,clk4,b,c,d,e,f,g,h,da,ga,ea,ha,mode);

inputclk4;

inputrst;

input[3:

0]da,ga;

input[2:

0]ea;

input[1:

0]ha,mode;

output[3:

0]a,d,g,c,f;

output[2:

0]b,e;

output[1:

0]h;

reg[3:

0]a,d,g,c,f;

reg[2:

0]b,e;

reg[1:

0]h;

regclk1,clk2;

always@(posedgeclk4)

clk2<=!

clk2;

always@(posedgeclk2)

clk1<=!

clk1;

always@(posedgeclk1)

begin

if(mode==0)

begin

if(rst)

begin

a<=4'd0;

b<=4'd0;

c<=4'd10;

d<=da;

e<=ea;

f<=4'd10;

g<=ga;

h<=ha;

end

else

begin

c<=4'd10;

f<=4'd10;

if(a==9)

begina<=0;b<=b+1;end

else

a<=a+1;

if(b==5&&a==9)

begind<=d+1;b<=0;end

if(d==9&&b==5&&a==9)

begine<=e+1;d<=0;end

if((e==5&&d==9)&&(b==5&&a==9))

beging<=g+1;e<=0;end

if(g==9&&(e==5&&d==9)&&(b==5&&a==9))

beginh<=h+1;g<=0;end

if((h==2&&g==9)&&(e==5&&d==9)&&(b==5&&a==9))

beginh<=0;g<=0;end

end

end

end

endmodule

3、跑表模块

modulepaobiao(clk10k,mode,start,rst,a,b,c,d,e,f,g,h,led2);

inputclk10k,start,rst;

input[1:

0]mode;

output[3:

0]a,b,d,g,c,f;

output[2:

0]e,h;

outputled2;

regclk100,led2;

reg[3:

0]a,d,g,c,f,b,e,h;

reg[7:

0]m;

always@(posedgeclk10k)

begin

if(m==99)

begin

m<=0;

clk100<=!

clk100;

end

else

m<=m+1;

end

always@(posedgeclk100)

begin

if(mode==2)

beginled2<=1;

if(rst)

begin

a<=4'd0;

b<=4'd0;

c<=4'd10;

d<=0;

e<=0;

f<=4'd10;

g<=0;

h<=0;

end

elseif(start)

begin

c<=4'd10;

f<=4'd10;

if(a==9)

begina<=0;b<=b+1;end

else

a<=a+1;

if(b==9&&a==9)

begind<=d+1;b<=0;end

if(d==9&&b==9&&a==9)

begine<=e+1;d<=0;end

if((e==5&&d==9)&&(b==9&&a==9))

beging<=g+1;e<=0;end

if(g==9&&(e==5&&d==9)&&(b==9&&a==9))

beginh<=h+1;g<=0;end

if((h==5&&g==9)&&(e==5&&d==9)&&(b==9&&a==9))

beginh<=0;g<=0;end

end

end

end

endmodule

4、跑表模块

modulepaobiao(clk10k,mode,start,rst,a,b,c,d,e,f,g,h,led2);

inputclk10k,start,rst;

input[1:

0]mode;

output[3:

0]a,b,d,g,c,f;

output[2:

0]e,h;

outputled2;

regclk100,led2;

reg[3:

0]a,d,g,c,f,b,e,h;

reg[7:

0]m;

always@(posedgeclk10k)

begin

if(m==99)

begin

m<=0;

clk100<=!

clk100;

end

else

m<=m+1;

end

always@(posedgeclk100)

begin

if(mode==2)

beginled2<=1;

if(rst)

begin

a<=4'd0;

b<=4'd0;

c<=4'd10;

d<=0;

e<=0;

f<=4'd10;

g<=0;

h<=0;

end

elseif(start)

begin

c<=4'd10;

f<=4'd10;

if(a==9)

begina<=0;b<=b+1;end

else

a<=a+1;

if(b==9&&a==9)

begind<=d+1;b<=0;end

if(d==9&&b==9&&a==9)

begine<=e+1;d<=0;end

if((e==5&&d==9)&&(b==9&&a==9))

beging<=g+1;e<=0;end

if(g==9&&(e==5&&d==9)&&(b==9&&a==9))

beginh<=h+1;g<=0;end

if((h==5&&g==9)&&(e==5&&d==9)&&(b==9&&a==9))

beginh<=0;g<=0;end

end

end

end

endmodule

5、数码管动态扫描模块

//数码管动态扫描

modulesaomiao(a,b,c,d,e,f,g,h,clk10k,zx,zw);

inputclk10k;

input[3:

0]a,d,g,c,f;

input[2:

0]b,e;

input[1:

0]h;

output[3:

0]zx;

output[7:

0]zw;

reg[3:

0]zx;

reg[7:

0]zw;

reg[2:

0]slip;

always@(posedgeclk10k)

begin

if(slip==100)

slip<=4'b000;

else

slip<=slip+4'b001;

end

always@(slip)

begin

case(slip)

4'd0:

beginzw=8'b00000001;zx=a;end

4'd1:

beginzw=8'b00000010;zx=b;end

4'd2:

beginzw=8'b00000100;zx=c;end

4'd3:

beginzw=8'b00001000;zx=d;end

4'd4:

beginzw=8'b00010000;zx=e;end

4'd5:

beginzw=8'b00100000;zx=f;end

4'd6:

beginzw=8'b01000000;zx=g;end

4'd7:

beginzw=8'b10000000;zx=h;end

default:

zw=8'bx;

endcase

end

endmodule

6、8输入或门模块

moduleor8(zw1,zw2,zw);

input[7:

0]zw1,zw2;

output[7:

0]zw;

reg[7:

0]zw;

always

begin

zw<=zw1|zw2;

end

endmodule

7、8输入或门模块

moduleor8(zw1,zw2,zw);

input[7:

0]zw1,zw2;

output[7:

0]zw;

reg[7:

0]zw;

always

begin

zw<=zw1|zw2;

end

endmodule

8、4输入或门模块

moduleor4(zx1,zx2,zx);

input[3:

0]zx1,zx2;

output[3:

0]zx;

reg[3:

0]zx;

always

begin

zx<=zx1|zx2;

end

endmodule

9、数码管译码模块

//气短数码管解码显示,输入为BCD码

moduledecoder(zx,seg);

input[3:

0]zx;

output[6:

0]seg;

reg[6:

0]seg;

always@(zx)

begin

case(zx)

4'b0000:

seg<=7'b0111111;

4'b0001:

seg<=7'b0000110;

4'b0010:

seg<=7'b1011011;

4'b0011:

seg<=7'b1001111;

4'b0100:

seg<=7'b1100110;

4'b0101:

seg<=7'b1101101;

4'b0110:

seg<=7'b1111101;

4'b0111:

seg<=7'b0000111;

4'b1000:

seg<=7'b1111111;

4'b1001:

seg<=7'b1101111;

4'b1010:

seg<=7'b0000000;

default:

seg<=7'bx;

endcase

end

endmodule

八、心得体会

通过本次课程程序设计使我们了解了CPLD,FPGA相关器件的异同和应用,以及FPGA器件的特点,如Altera公司的Felx10k产品,掌握了在系统编程(ISP)技术和边界扫描测试技术在PLD器件中的应用。

了解了数字系统设计的流程,掌握了EDA设计软件的应用,如Altera公司的MaxPlusII从设计输入,编译,仿真到下载的全过程。

通过课程设计的练习,掌握了用硬件描述语言VerilogHDL来设计数字电路,为将来设计数字模块和数字系统,系统芯片SOC(SystemOnChip)打下了基础。

从本次课程设计中是我获益匪浅。

首先对数字电路这门课程有了更深的了解,因为课程设计本身要求将以前所学的理论知识运用到实际的电路设计当中去,在电路的设计过程中,无形中便加深了对数字电路的了解及运用能力,对课本以及以前学过的知识有了一个更好的总结与理解;以前的数字实验只是针对某一个小的功能设计,而EDA课程设计对我们的总体电路的设计的要求更严格,需要通过翻阅复习以前学过的知识确立了实验总体设计方案,然后逐步细化进行各模块的设计;其次,在电路仿真的过程中总会出现一些问题,需要我们细心解决,所以通过这次课程设计,我对电路故障的排查能力有了很大的提高;再次,通过此次课程设计,我对实验所用到的软件有了初步的了解,这对我们以后的工作和学习的帮助都很有用处。

感谢学校给我们这次机会,锻炼了我们的动手能力。

通过这次课设让我明白了理论和实际操作之间差距,而且也让我很明确得意识到自己在数电上有很多的知识漏洞,以后应该多钻研一下。

最后再次感谢袁海林老师在课程设计的过程中的耐心指导以及同学的热心的帮助,只有通过不断的学习和练习才能不断发现问题,在实践提高自已。

参考文献:

[1]袁海林.EDA技术及其嵌入式系统设计.北京:

中央民族大学出版社,2007

[2]王金明等.数字系统设计与VerilogHDL.北京:

电子工业出版社,2002

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

当前位置:首页 > 农林牧渔 > 林学

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

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