eda课程设计报告多功能数字钟设计大学论文.docx

上传人:b****4 文档编号:11403337 上传时间:2023-05-31 格式:DOCX 页数:24 大小:153.32KB
下载 相关 举报
eda课程设计报告多功能数字钟设计大学论文.docx_第1页
第1页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第2页
第2页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第3页
第3页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第4页
第4页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第5页
第5页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第6页
第6页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第7页
第7页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第8页
第8页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第9页
第9页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第10页
第10页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第11页
第11页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第12页
第12页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第13页
第13页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第14页
第14页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第15页
第15页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第16页
第16页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第17页
第17页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第18页
第18页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第19页
第19页 / 共24页
eda课程设计报告多功能数字钟设计大学论文.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

eda课程设计报告多功能数字钟设计大学论文.docx

《eda课程设计报告多功能数字钟设计大学论文.docx》由会员分享,可在线阅读,更多相关《eda课程设计报告多功能数字钟设计大学论文.docx(24页珍藏版)》请在冰点文库上搜索。

eda课程设计报告多功能数字钟设计大学论文.docx

eda课程设计报告多功能数字钟设计大学论文

 

湖北大学物电学院

EDA课程设计报告(论文)

题目:

多功能数字钟设计

 

专业班级:

14微电子科学与工程

姓名:

黄山

时间:

2016年12月20日

指导教师:

万美琳卢仕

 

完成日期:

2015年12月20日

多功能数字钟设计任务书

1.设计目的与要求

了解多功能数字钟的工作原理,加深利用EDA技术实现数字系统的理解

2.设计内容

1,能正常走时,时分秒各占2个数码管,时分秒之间用小时个位和分钟个位所在数码管的小数点隔开;

2,能用按键调时调分;

3,能整点报时,到达整点时,蜂鸣器响一秒;

4,拓展功能:

秒表,闹钟,闹钟可调

3.编写设计报告

写出设计的全过程,附上有关资料和图纸,有心得体会。

4.答辩

在规定时间内,完成叙述并回答问题。

目录(四号仿宋加粗居中)

(空一行)

1引言………………………………………………………………………………1

2总体设计方案……………………………………………………………………1

2.1设计思路………………………………………………………………………1

2.2总体设计框图……………………………………………………………2

3设计原理分析………………………………………………………………3

3.1分频器…………………………………………………………………………4

3.2计时器和时间调节…….……………………………………………………4

3.3秒表模块…………………………………………………………………………5

3.4状态机模块…………………………………………………………………6

3.5数码管显示模块…………………………………………………………………7

3.6顶层模块……………………………………………………………8

3.7管脚绑定和顶层原理图…………………………………………………………9

4总结与体会……………………………………………………………………11

 

多功能电子表

摘要:

本EDA课程主要利用QuartusII软件Verilog语言的基本运用设计一个多功能数字钟

,进行试验设计和软件仿真调试,分别实现时分秒计时,闹钟闹铃,时分手动较时,时分秒清零,时间保持和整点报时等多种基本功能

关键词:

Verilog语言,多功能数字钟,数码管显示;

1引言

QuartusII是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程,解决了传统硬件电路连线麻烦,出错率高且不易修改,很难控制成本的缺点。

利用软件电路设计连线方便,修改容易;电路结构清楚,功能一目了然

2总体设计方案

2.1设计思路

根据系统设计的要求,系统设计采用自顶层向下的设计方法,由时钟分频部分,计时部分,按键调时部分,数码管显示部分,蜂鸣器四部分组成。

这些模块在顶层原理图中相互连接作用

2.2总体设计框图

 

3设计原理分析

3.1分频器

分频模块:

将20Mhz晶振分频为1hz,100hz,1000hz分别用于计数模块,秒表模块,状态机模块

moduleoclk(CLK,oclk,rst,clk_10,clk_100);

inputCLK,rst;

outputoclk,clk_10,clk_100;

reg[32:

0]cnt,cnt1,cnt2;

regoclk,clk_10,clk_100;

always@(posedgeCLKornegedgerst)

begin

if(!

rst)

begin

cnt<=0;

oclk<=0;

end

else

if(cnt<10000-1)

cnt<=cnt+1;

else

begin

cnt<=0;

oclk=~oclk;

end

end

always@(posedgeCLKornegedgerst)

begin

if(!

rst)

begin

cnt1<=0;

clk_10<=0;

end

else

if(cnt1<=10000000-1)

cnt1<=cnt1+1;

else

begin

cnt1<=0;

clk_10<=~clk_10;

end

end

always@(posedgeCLKornegedgerst)

begin

if(!

rst)

begin

cnt2<=0;

clk_100<=0;

end

else

if(cnt2<100000-1)

cnt2<=cnt2+1;

else

begin

cnt2<=0;

clk_100=~clk_100;

end

end

endmodule

3.2计时器和时间调节

计时模块:

检测posedgeclk_10并进行计数,同时能调时调分,

最后是整点报时部分

modulecni(clk_10,rst,tiaoshi,tiaofen,ge,shi,bai,qian,wan,shiwan,bee);

inputclk_10,rst,tiaoshi,tiaofen;

outputreg[3:

0]ge,shi,bai,qian,wan,shiwan,bee;

always@(posedgeclk_10ornegedgerst)

begin

if(!

rst)

begin

ge<=0;

shi<=0;

bai<=0;

qian<=0;

wan<=0;

shiwan<=0;

end

else

begin

if((!

tiaofen)&&(bai<9))

bai<=bai+1;

elsebegin

if((!

tiaofen)&&(qian<5))

beginbai<=0;qian<=qian+1;end

if((!

tiaoshi)&&(wan<9))

wan<=wan+1;

elsebegin

if((!

tiaoshi)&&(shiwan<2))

beginwan<=0;shiwan<=shiwan+1;end

elsebegin

if((shiwan==2)&&(wan==4))

beginge<=0;shi<=0;bai<=0;qian<=0;wan<=0;shiwan<=0;end

if(ge<9)

ge<=ge+1;

else

begin

ge<=0;

if(shi<5)

shi<=shi+1;

else

begin

shi<=0;

if(bai<9)

bai<=bai+1;

else

begin

bai<=0;

if(qian<5)

qian<=qian+1;

else

begin

qian<=0;

if(wan<3)

wan<=wan+1;

else

begin

wan<=0;

if(shiwan<2)

shiwan<=shiwan+1;

else

shiwan<=0;

end

end

end

end

end

end

end

end

end

end

always@(posedgeclk_10)

begin

if((ge==0)&&(shi==0)&&(bai==0)&&(qian==0))

bee=0;

else

bee=1;

end

endmodule

 

3.3秒表模块

与计时部分类似,总体思想是调整进制和提高信号频率,如下

modulemiaobiao(clk_100,tm,m6,m5,m4,m3,m2,m1);

inputtm,clk_100;

outputm6,m5,m4,m3,m2,m1;

reg[3:

0]m6,m5,m4,m3,m2,m1;

always@(posedgeclk_100)

begin

if(tm)

begin

m6<=0;

m5<=0;

m4<=0;

m3<=0;

m2<=0;

m1<=0;

end

else

begin

if(m1<9)

m1<=m1+1;

else

begin

m1<=0;

if(m2<9)

m2<=m2+1;

else

begin

m2<=0;

if(m3<9)

m3<=m3+1;

else

begin

m3<=0;

if(m4<9)

m4<=m4+1;

else

begin

m4<=0;

if(m5<9)

m5<=m5+1;

else

begin

m5<=0;

if(m6<9)

m6<=m6+1;

else

m6<=0;

end

end

end

end

end

end

end

endmodule

3.4状态机模块

一般通过逻辑抽象,得出状态转换图,状态化简,状态分配,用三段式写法入下

modulestate(clk1k,rst,tm,num,wela,ge,shi,bai,qian,wan,shiwan,m6,m5,m4,m3,m2,m1);

inputclk1k,rst,tm,ge,shi,bai,qian,wan,shiwan,m6,m5,m4,m3,m2,m1;

outputnum,wela;

wire[3:

0]ge,shi,bai,qian,wan,shiwan,m6,m5,m4,m3,m2,m1;

reg[3:

0]num;

reg[5:

0]wela;

reg[3:

0]current_state,next_state;

parameter[3:

0]D1=1;

parameter[3:

0]D2=2;

parameter[3:

0]D3=3;

parameter[3:

0]D4=4;

parameter[3:

0]D5=5;

parameter[3:

0]D6=6;

parameter[3:

0]D01=7;

parameter[3:

0]D02=8;

parameter[3:

0]D03=9;

parameter[3:

0]D04=10;

parameter[3:

0]D05=11;

parameter[3:

0]D06=12;

always@(posedgeclk1kornegedgerst)

begin

if(!

rst)

current_state<=D1;

else

current_state<=next_state;

end

always@(current_state)

begin

if(tm==0)

begin

case(current_state)

D1:

begin

num=m1;

wela=6'b111110;

if(clk1k)

next_state=D01;

else

next_state=D1;

end

D01:

begin

num=12;

wela=6'b1111101;

if(clk1k)

next_state=D2;

else

next_state=D01;

end

D2:

begin

num=m2;

wela=6'b111101;

if(clk1k)

next_state=D02;

else

next_state=D2;

end

D02:

begin

num=12;

wela=6'b111011;

if(clk1k)

next_state=D3;

else

next_state=D02;

end

D3:

begin

num=m3;

wela=6'b111011;

if(clk1k)

next_state=D03;

else

next_state=D3;

end

D03:

begin

num=12;

wela=6'b110111;

if(clk1k)

next_state=D4;

else

next_state=D03;

end

D4:

begin

num=m4;

wela=6'b110111;

if(clk1k)

next_state=D04;

else

next_state=D4;

end

D04:

begin

num=12;

wela=6'b101111;

if(clk1k)

next_state=D5;

else

next_state=D04;

end

D5:

begin

num=m5;

wela=6'b101111;

if(clk1k)

next_state=D6;

else

next_state=D05;

end

D05:

begin

num=12;

wela=6'b011111;

if(clk1k)

next_state=D6;

else

next_state=D05;

end

D6:

begin

num=m6;

wela=6'b011111;

if(clk1k)

next_state=D06;

else

next_state=D6;

end

D06:

begin

num=12;

wela=6'b111110;

if(clk1k)

next_state=D1;

else

next_state=D06;

end

endcase

end

else

begin

case(current_state)

D1:

beginnum=ge;wela=6'b111110;

if(clk1k)

next_state=D01;

else

next_state=D1;

end

D01:

beginnum=15;wela=6'b111101;

if(clk1k)

next_state=D2;

else

next_state=D01;

end

D2:

beginnum=shi;wela=6'b111101;

if(clk1k)

next_state=D02;

else

next_state=D2;

end

D02:

beginnum=15;wela=6'b111011;

if(clk1k)

next_state=D3;

else

next_state=D02;

end

D3:

beginnum=bai;wela=6'b111011;

if(clk1k)

next_state=D03;

else

next_state=D3;

end

D03:

beginnum=15;wela=6'b110111;

if(clk1k)

next_state=D4;

else

next_state=D03;

end

D4:

beginnum=qian;wela=6'b110111;

if(clk1k)

next_state=D04;

else

next_state=D4;

end

D04:

beginnum=15;wela=6'b101111;

if(clk1k)

next_state=D5;

else

next_state=D04;

end

D5:

beginnum=wan;wela=6'b101111;

if(clk1k)

next_state=D05;

else

next_state=D5;

end

D05:

beginnum=15;wela=6'b011111;

if(clk1k)

next_state=D6;

else

next_state=D05;

end

D6:

beginnum=shiwan;wela=6'b011111;

if(clk1k)

next_state=D06;

else

next_state=D6;

end

D06:

beginnum=15;wela=6'b111110;

if(clk1k)

next_state=D1;

else

next_state=D06;

end

default:

next_state=D1;

endcase

end

end

endmodule

3.5数码管显示模块

moduleSEG7(num,wela,SEG);

input[3:

0]num;

input[5:

0]wela;

outputSEG;

reg[7:

0]SEG;

always@(num)

begin

if((wela==6'b111011)||(wela==6'b101111))

begin

case(num)

0:

SEG=8'b01000000;

1:

SEG=8'b01111001;

2:

SEG=8'b00100100;

3:

SEG=8'b00110000;

4:

SEG=8'b00011001;

5:

SEG=8'b00010010;

6:

SEG=8'b00000010;

7:

SEG=8'b01111000;

8:

SEG=8'b00000000;

9:

SEG=8'b00011000;

default:

SEG=8'b11111111;

endcase

end

else

begin

case(num)

0:

SEG=8'b11000000;

1:

SEG=8'b11111001;

2:

SEG=8'b10100100;

3:

SEG=8'b10110000;

4:

SEG=8'b10011001;

5:

SEG=8'b10010010;

6:

SEG=8'b10000010;

7:

SEG=8'b11111000;

8:

SEG=8'b10000000;

9:

SEG=8'b10011000;

default:

SEG=8'b11111111;

endcase

end

end

endmodule

3.6顶层模块

所有模块通过元件例化进顶层模块

moduleclock(tm,clk,rst,tiaoshi,tiaofen,wela,SEG,bee);

inputclk,rst,tiaoshi,tiaofen,tm;

output[5:

0]wela;

output[7:

0]SEG;

outputbee;

wirenet1;

wirenet9;

wirenet10;

wire[3:

0]net2;

wire[3:

0]net3;

wire[3:

0]net4;

wire[3:

0]net5;

wire[3:

0]net6;

wire[3:

0]net7;

wire[3:

0]net8;

wire[3:

0]m6,m5,m4,m3,m2,m1;

oclku1(.CLK(clk),.oclk(net1),.rst(rst),.clk_10(net9),.clk_100(net10));

stateu2(.clk1k(net1),.rst(rst),.num(net2),.tm(tm),.wela(wela),.ge(net3),.shi(net4),.bai(net5),.qian(net6),.wan(net7),.shiwan(net8),.m6(m6),.m5(m5),.m4(m4),.m3(m3),.m2(m2),.m1(m1));

SEG7u3(.num(net2),.wela(wela),.SEG(SEG));

cniu4(.clk_10(net9),.rst(rst),.tiaoshi(tiaoshi),.tiaofen(tiaofen),.ge(net3),.shi(net4),.bai(net5),.qian(net6),.wan(net7),.shiwan(net8),.bee(bee));

miaobiaou5(.tm(tm),.clk_100(net10),.m6(m6),.m5(m5),.m4(m4),.m3(m3),.m2(m2),.m1(m1));

endmodule

3.7管脚绑定和顶层原理

 

 

4总结与体会

通过学习,我对多功能数字钟已经有过一定的了解,对于程序,不断的调试仿真过程是必不可少的,无论多么仔细的编程,思路上的漏洞总是存在的,并且会完全体现在实验结果上,在不断的调试仿真过程中,许多问题的暴露使得我们不仅对数字电路原理有了更加深刻的了解也使我们对QuartusII平台的使用规则有了更多的了解。

在经过了这一切之后,实现创新功能就会变得不再那么困难。

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2