资源描述
湖北大学物电学院
EDA课程设计报告(论文)
题目:多功能数字钟设计
专业班级: 14微电子科学与工程
姓 名: 黄山
时 间: 2016年12月20日
指导教师: 万美琳 卢仕
完成日期: 2015年 12月 20日
20
多功能数字钟设计任务书
1. 设计目的与要求
了解多功能数字钟的工作原理,加深利用EDA技术实现数字系统的理解
2.设计内容
1, 能正常走时,时分秒各占2个数码管,时分秒之间用小时个位和分钟个位所在数码管的小数点隔开;
2, 能用按键调时调分;
3, 能整点报时,到达整点时,蜂鸣器响一秒;
4, 拓展功能:秒表,闹钟,闹钟可调
3.编写设计报告
写出设计的全过程,附上有关资料和图纸,有心得体会。
4.答辩
在规定时间内,完成叙述并回答问题。
目录 (四号仿宋_GB2312加粗居中)
(空一行)
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(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程,解决了传统硬件电路连线麻烦,出错率高且不易修改,很难控制成本的缺点。利用软件电路设计连线方便,修改容易;电路结构清楚,功能一目了然
2 总体设计方案
2.1 设计思路
根据系统设计的要求,系统设计采用自顶层向下的设计方法,由时钟分频部分,计时部分,按键调时部分,数码管显示部分,蜂鸣器四部分组成。这些模块在顶层原理图中相互连接作用
蜂鸣器
计时器
2.2 总体设计框图
分频器
数码管
状态机
晶振
秒表
3 设计原理分析
3.1 分频器
分频模块:将20Mhz晶振分频为1hz,100hz,1000hz分别用于计数模块,秒表模块,状态机模块
module oclk(CLK,oclk,rst,clk_10,clk_100);
input CLK,rst;
output oclk,clk_10,clk_100;
reg [32:0]cnt,cnt1,cnt2;
reg oclk,clk_10,clk_100;
always@(posedge CLK or negedge rst)
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@(posedge CLK or negedge rst)
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@(posedge CLK or negedge rst)
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计时器和时间调节
计时模块:检测posedge clk_10 并进行计数,同时能调时调分,
最后是整点报时部分
module cni(clk_10,rst,tiaoshi,tiaofen,ge,shi,bai,qian,wan,shiwan,bee);
input clk_10,rst,tiaoshi,tiaofen;
output reg[3:0]ge,shi,bai,qian,wan,shiwan,bee;
always@(posedge clk_10 or negedge rst)
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;
else begin
if((!tiaofen)&&(qian<5))
begin bai<=0;qian<=qian+1;end
if((!tiaoshi)&&(wan<9))
wan<=wan+1;
else begin
if((!tiaoshi)&&(shiwan<2))
begin wan<=0;shiwan<=shiwan+1;end
else begin
if((shiwan==2)&&(wan==4))
begin ge<=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@(posedge clk_10)
begin
if((ge==0)&&(shi==0)&&(bai==0)&&(qian==0))
bee=0;
else
bee=1;
end
endmodule
3.3秒表模块
与计时部分类似,总体思想是调整进制和提高信号频率,如下
module miaobiao(clk_100,tm,m6,m5,m4,m3,m2,m1);
input tm,clk_100;
output m6,m5,m4,m3,m2,m1;
reg [3:0] m6,m5,m4,m3,m2,m1;
always@(posedge clk_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状态机模块
一般通过逻辑抽象,得出状态转换图,状态化简,状态分配,用三段式写法入下
module state(clk1k,rst,tm,num,wela,ge,shi,bai,qian,wan,shiwan,m6,m5,m4,m3,m2,m1);
input clk1k,rst,tm,ge,shi,bai,qian,wan,shiwan,m6,m5,m4,m3,m2,m1;
output num,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@(posedge clk1k or negedge rst)
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:begin num=ge;wela=6'b111110;
if(clk1k)
next_state=D01;
else
next_state=D1;
end
D01:begin num=15;wela=6'b111101;
if(clk1k)
next_state=D2;
else
next_state=D01;
end
D2:begin num=shi;wela=6'b111101;
if(clk1k)
next_state=D02;
else
next_state=D2;
end
D02:begin num=15;wela=6'b111011;
if(clk1k)
next_state=D3;
else
next_state=D02;
end
D3:begin num=bai;wela=6'b111011;
if(clk1k)
next_state=D03;
else
next_state=D3;
end
D03:begin num=15;wela=6'b110111;
if(clk1k)
next_state=D4;
else
next_state=D03;
end
D4:begin num=qian;wela=6'b110111;
if(clk1k)
next_state=D04;
else
next_state=D4;
end
D04:begin num=15;wela=6'b101111;
if(clk1k)
next_state=D5;
else
next_state=D04;
end
D5:begin num=wan;wela=6'b101111;
if(clk1k)
next_state=D05;
else
next_state=D5;
end
D05:begin num=15;wela=6'b011111;
if(clk1k)
next_state=D6;
else
next_state=D05;
end
D6:begin num=shiwan;wela=6'b011111;
if(clk1k)
next_state=D06;
else
next_state=D6;
end
D06:begin num=15;wela=6'b111110;
if(clk1k)
next_state=D1;
else
next_state=D06;
end
default: next_state=D1;
endcase
end
end
endmodule
3.5数码管显示模块
module SEG7(num,wela,SEG);
input [3:0]num;
input [5:0]wela;
output SEG;
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顶层模块
所有模块通过元件例化进顶层模块
module clock(tm,clk,rst,tiaoshi,tiaofen,wela,SEG,bee);
input clk,rst,tiaoshi,tiaofen,tm;
output [5:0]wela;
output [7:0]SEG;
output bee;
wire net1;
wire net9;
wire net10;
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;
oclk u1(.CLK(clk),.oclk(net1),.rst(rst),.clk_10(net9),.clk_100(net10));
state u2(.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));
SEG7 u3(.num(net2),.wela(wela),.SEG(SEG));
cni u4(.clk_10(net9),.rst(rst),.tiaoshi(tiaoshi),.tiaofen(tiaofen),.ge(net3),.shi(net4),.bai(net5),.qian(net6),.wan(net7),.shiwan(net8),.bee(bee));
miaobiao u5(.tm(tm),.clk_100(net10),.m6(m6),.m5(m5),.m4(m4),.m3(m3),.m2(m2),.m1(m1));
endmodule
3.7管脚绑定和顶层原理
4总结与体会
通过学习,我对多功能数字钟已经有过一定的了解,对于程序,不断的调试仿真过程是必不可少的,无论多么仔细的编程,思路上的漏洞总是存在的,并且会完全体现在实验结果上,在不断的调试仿真过程中,许多问题的暴露使得我们不仅对数字电路原理有了更加深刻的了解也使我们对QUARTUSII平台的使用规则有了更多的了解。在经过了这一切之后,实现创新功能就会变得不再那么困难。目 录
第一章 总论 1
一、项目概况 1
二、项目提出的理由与过程 6
三、项目建设的必要性 8
四、项目的可行性 12
第二章 市场预测 15
一、市场分析 15
二、市场预测 16
三、产品市场竞争力分析 19
第三章 建设规模与产品方案 22
一、建设规模 22
二、产品方案 22
三、质量标准 22
第四章 项目建设地点 25
一、项目建设地点选择 25
二、项目建设地条件 25
第五章 技术方案、设备方案和工程方案 28
一、技术方案 28
二、产品特点 30
三、主要设备方案 32
四、工程方案 32
第六章 原材料与原料供应 35
一、原料来源及运输方式 35
二、燃料供应与运输方式 35
第七章 总图布置、运输、总体布局与公用辅助工程 37
一、总图布置 37
二、 运输 38
三、总体布局 38
四、公用辅助工程 39
第八章 节能、节水与安全措施 44
一、主要依据及标准 44
二、节能 44
三、节水 45
四、消防与安全 45
第九章 环境影响与评价 47
一、法规依据 47
二、项目建设对环境影响 48
三、环境保护措施 48
四、环境影响评价 49
第十章 项目组织管理与运行 50
一、项目建设期管理 50
二、项目运行期组织管理 52
第十一章 项目实施进度 55
第十二章 投资估算和资金筹措 56
一、投资估算 56
二、资金筹措 58
第十三章 财务评价与效益分析 61
一、项目财务评价 61
二、财务评价结论 65
三、社会效益 68
四、生态效益 68
第十四章 风险分析 70
一、主要风险分析识别 70
二、风险程度分析及防范风险的措施 70
第十五章 招标方案 72
一、招标范围 72
二、招标组织形式 72
三、招标方式 72
第十六章 结论与建议 74
一、可行性研究结论 74
二、建议 75
附 件 77
一、附表 77
二、附件 77
三、附图 77
展开阅读全文