湖北大学物电学院EDA课程设计报告(论文)题目:多功能数字钟设计专业班级: 14微电子科学与工程姓名:黄山时间:2016年12月20日指导教师:万美琳卢仕完成日期:2015年12月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 设计思路根据系统设计的要求,系统设计采用自顶层向下的设计方法,由时钟分频部分,计时部分,按键调时部分,数码管显示部分,蜂鸣器四部分组成。
这些模块在顶层原理图中相互连接作用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) beginif(!rst)begincnt<=0;oclk<=0;endelseif(cnt<10000-1)cnt<=cnt+1;elsebegincnt<=0;oclk=~oclk;endendalways@(posedge CLK or negedge rst) beginif(!rst)begincnt1<=0;clk_10<=0;endelseif(cnt1<=10000000-1)cnt1<=cnt1+1;elsebegincnt1<=0;clk_10<=~clk_10;endendalways@(posedge CLK or negedge rst)beginif(!rst)begincnt2<=0;clk_100<=0;endelseif(cnt2<100000-1)cnt2<=cnt2+1;elsebegincnt2<=0;clk_100=~clk_100;endendendmodule3.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)beginif(!rst)beginge<=0;shi<=0;bai<=0;qian<=0;wan<=0;shiwan<=0;endelsebeginif((!tiaofen)&&(bai<9))bai<=bai+1;else beginif((!tiaofen)&&(qian<5))begin bai<=0;qian<=qian+1;endif((!tiaoshi)&&(wan<9))wan<=wan+1;else beginif((!tiaoshi)&&(shiwan<2))begin wan<=0;shiwan<=shiwan+1;endelse beginif((shiwan==2)&&(wan==4))begin ge<=0;shi<=0;bai<=0;qian<=0;wan<=0;shiwan<=0;end if(ge<9)ge<=ge+1;elsebeginge<=0;if(shi<5)shi<=shi+1;elsebeginshi<=0;if(bai<9)bai<=bai+1;elsebeginbai<=0;if(qian<5)qian<=qian+1;elsebeginqian<=0;if(wan<3)wan<=wan+1;elsebeginwan<=0;if(shiwan<2)shiwan<=shiwan+1;elseshiwan<=0;endendendendendendendendendendalways@(posedge clk_10)beginif((ge==0)&&(shi==0)&&(bai==0)&&(qian==0))bee=0;elsebee=1;endendmodule3.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 ) beginif (tm)beginm6<=0;m5<=0;m4<=0;m3<=0;m2<=0;m1<=0;endelsebeginif(m1<9)m1<=m1+1;elsebeginm1<=0;if(m2<9)m2<=m2+1;elsebeginm2<=0;if(m3<9)m3<=m3+1;elsebeginm3<=0;if(m4<9)m4<=m4+1;elsebeginm4<=0;if(m5<9)m5<=m5+1;elsebeginm5<=0;if(m6<9)m6<=m6+1;elsem6<=0;endendendendendendendendmodule3.4状态机模块一般通过逻辑抽象,得出状态转换图,状态化简,状态分配,用三段式写法入下modulestate(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) beginif(!rst)current_state<=D1;elsecurrent_state<=next_state;endalways@(current_state )beginif(tm==0)begincase(current_state)D1:beginnum=m1;wela=6'b111110;if(clk1k)next_state=D01;elsenext_state=D1;endD01:beginnum=12;wela=6'b1111101;if(clk1k)next_state=D2; elsenext_state=D01;endD2:beginnum=m2;wela=6'b111101; if(clk1k)next_state=D02; elsenext_state=D2;endD02:beginnum=12;wela=6'b111011; if(clk1k)next_state=D3; elsenext_state=D02;endD3:beginnum=m3;wela=6'b111011; if(clk1k)next_state=D03; elsenext_state=D3;endD03:beginnum=12;wela=6'b110111; if(clk1k)next_state=D4; elsenext_state=D03;endD4:beginnum=m4;wela=6'b110111; if(clk1k)next_state=D04; elsenext_state=D4;endD04:beginnum=12;wela=6'b101111; if(clk1k)next_state=D5; elsenext_state=D04;endD5:beginnum=m5;wela=6'b101111; if(clk1k)next_state=D6; elsenext_state=D05;endD05:beginnum=12;wela=6'b011111;if(clk1k)next_state=D6;elsenext_state=D05;endD6:beginnum=m6;wela=6'b011111;if(clk1k)next_state=D06;elsenext_state=D6;endD06:beginnum=12;wela=6'b111110;if(clk1k)next_state=D1;elsenext_state=D06;endendcaseendelsebegincase(current_state)D1:begin num=ge;wela=6'b111110;if(clk1k)next_state=D01;elsenext_state=D1;endD01:begin num=15;wela=6'b111101;if(clk1k)next_state=D2;elsenext_state=D01;endD2:begin num=shi;wela=6'b111101;if(clk1k)next_state=D02;elsenext_state=D2;endD02:begin num=15;wela=6'b111011;if(clk1k)next_state=D3;elsenext_state=D02;endD3:begin num=bai;wela=6'b111011;if(clk1k)next_state=D03;elsenext_state=D3;endD03:begin num=15;wela=6'b110111;if(clk1k)next_state=D4;elsenext_state=D03;endD4:begin num=qian;wela=6'b110111;if(clk1k)next_state=D04;elsenext_state=D4;endD04:begin num=15;wela=6'b101111;if(clk1k)next_state=D5;elsenext_state=D04;endD5:begin num=wan;wela=6'b101111;if(clk1k)next_state=D05;elsenext_state=D5;endD05:begin num=15;wela=6'b011111;if(clk1k)next_state=D6;elsenext_state=D05;endD6:begin num=shiwan;wela=6'b011111;if(clk1k)next_state=D06;elsenext_state=D6;endD06:begin num=15;wela=6'b111110;if(clk1k)next_state=D1;elsenext_state=D06;enddefault: next_state=D1;endcaseendendendmodule3.5数码管显示模块module SEG7(num,wela,SEG);input [3:0]num;input [5:0]wela;output SEG;reg [7:0]SEG;always@(num)beginif((wela==6'b111011)||(wela==6'b101111))begincase(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;endcaseendelsebegincase(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;endcaseendendendmodule3.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));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));SEG7 u3(.num(net2),.wela(wela),.SEG(SEG));cniu4(.clk_10(net9),.rst(rst),.tiaoshi(tiaoshi),.tiaofen(tiaofen),.ge(net3),.shi(net4),.bai(ne t5),.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));endmodule3.7管脚绑定和顶层原理4总结与体会通过学习,我对多功能数字钟已经有过一定的了解,对于程序,不断的调试仿真过程是必不可少的,无论多么仔细的编程,思路上的漏洞总是存在的,并且会完全体现在实验结果上,在不断的调试仿真过程中,许多问题的暴露使得我们不仅对数字电路原理有了更加深刻的了解也使我们对QuartusII平台的使用规则有了更多的了解。