基于Verilog语言方案设计书的数码管电子钟.docx
- 文档编号:28368431
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:22
- 大小:109.13KB
基于Verilog语言方案设计书的数码管电子钟.docx
《基于Verilog语言方案设计书的数码管电子钟.docx》由会员分享,可在线阅读,更多相关《基于Verilog语言方案设计书的数码管电子钟.docx(22页珍藏版)》请在冰豆网上搜索。
基于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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Verilog 语言 方案设计 数码管 电子钟