数字电子技术课程设计报告——
EDA实现多功能数字钟
专业班级:
姓 名:
学 号:
指导教师:
设计日期:
目录
一、实验任务 ................................................................................................................ 1
二、关键词 .................................................................................................................. 1
三、内容摘要 .............................................................................................................. 1
四、数字钟电路系统组成框图 .............................................................................. 2
五、各个功能模块的实现 ..................................................................................... 3
(1)小时计时 ................................................................................................................ 3 (2)分钟计时 ................................................................................................................ 3
................................................................................................................ 4 (3)秒钟计时
(4)校时校分................................................................................................................... 5 (5)整点报时................................................................................................................... 6 (6)时段控制................................................................................................................... 6 六、数字钟的顶层文件 ............................................................................................ 7
七、下载 ....................................................................................................................... 8
(1)添加译码模块后的原理图 ....................................................................................... 8 (2)选用芯片 .................................................................................................................... 8 (3)分配引脚号 ................................................................................................................ 9 (4)器件下载 .................................................................................................................... 9 (5)效果显示 .................................................................................................................... 9 八、遇到的问题及解决办法 ................................................................................. 12
九、《课程设计》中设计项目完成最终结论 ............................................ 13
十、结束语 ................................................................................................................ 13
十一、附录 ................................................................................................................... 14
一、实验任务:
用FPGA器件和EDA技术实现多功能数字钟的设计
已知条件:1、QuartusП软件
2、FPGA实验开发装置
基本功能:1、以数字形式显示时、分、秒的时间;
2、小时计数器为24进制;
3、分、秒计数器为60进制。
拓展功能:1、校时、校分(有两个使能端构成,分别为校时、校分功能,同
时按无效)
2、仿电台报时(每个小时的59分51、53、55、57、59分别以四
长声一短声进行报时)
3、时段控制(让信号显示灯在晚上19点至早上5点灭。之后亮) 二、关键词
小时、分钟计时模块、顶层文件、整点报时、时段控制、下载模块 三、内容摘要
1、设计要求:(1)小时计数器为8421BCD码24制;分和秒计数器为8421BCD码60进制计数器;(2)拓展功能:?校正“时”和“分”;?整点报时;?时段控制。
2、硬件描述语言设计(Verilog HDL语言)
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
在QuartusП软件系统平台上建立数字电子钟电路的顶层文件并完成编译和仿真。
3、输入变量:时钟CPS,直接清零RD;输出变量:小时计时H[7..4]、H[3..0]为8421BCD码输出,其时钟为CPH;之后的分计时、秒计时均为8421BCD码输出,其时钟为CPS等。
4、在顶层文件中,由若干低层模块“打包”组成整个多功能数字钟,分别对各模块作设计及仿真,最后级联各模块,统调、仿真及下载,从而实现各项功能。
四、数字钟电路系统组成框图:
时显示器 分显示器 秒显示器
仿电台报时 主 时译码器 分译码器 秒译码器
体 时段控制 电 时计数器 分计数器 秒计数器
路
定点闹时
校时电路
拓展电路 五、各个功能模块的实现
(1)小时计时
模块图如下:
对该模块进行编译及波形仿真如下:
分析及结论:由仿真图看出,当小时的高四位为0、1时,小时的低四位为九时,在下一个时钟的上跳延来了之后,高四位加一;当小时的高四位为2,同时低四位为3时,小时的高低四位都清零。从而实现00—24分的记数功能。仿真波形显示里23小时到00分的循环的过程仿真到位。
对上述仿真波形图进行打包工作,将24进制图建立成模块:
(2)分钟计时
模块原理图如下:
对该图进行编译及波形仿真如下:
EDA实现多功能数字钟
分析及结论:分计数器是60进制的。当分钟的高四位0、1、2、3、4时,小时的低四位为九时,在下一个时钟的上跳延来了之后,高四位加一;当分钟的高四位为5,同时低四位为9时,分钟的高低四位都清零。从而实现00—59秒的记数功能。Cp60S为向分的进位信号上跳沿有效。仿真波形显示里59秒到00秒的循环的过程,仿真到位。
对上述仿真波形图进行打包工作,将60进制图建立成模块: (3)秒钟计时
模块原理图如下:
EDA实现多功能数字钟
对该图进行编译及波形仿真如下
分析及结论:仿真实现00—59秒的记数功能。Cp60S为向分的进位信号上跳沿有效。仿真波形显示里59秒到00秒的循环的过程,仿真到位。
对上述仿真波形图进行打包工作,将60进制图建立成模块:
(4)校时校分模块
模块原理图如下
EDA实现多功能数字钟
对该图进行编译及波形仿真如下
分析及结论:由仿真图可以看出,当SWM为0时,用秒时钟CPS对分钟进行校对。当SWH、SWM都不为0时、分钟、小时正常计数。验证了本模块的逻辑功能
(5)整点报时模块
对该图进行编译及波形仿真如下
由仿真图波形图可以看出,当为59分51秒53秒55秒57秒时,以低音报时,当以59分59秒时以高音报时。验证了本模块的逻辑功能正确。 (6)时段控制模块
EDA实现多功能数字钟
对该图进行编译及波形仿真如下
由仿真图波形图可以看出,从6点到18点,路灯灭,从19点到凌晨5点(包
括5点)路灯亮,验证了本模块的逻辑功能正确。
六、多功能数字钟的顶层文件部分
原理图如下:
对该图进行编译及波形仿真如下
EDA实现多功能数字钟
由仿真波形分析:?电子钟走时正常;?通过对SWH和SWM的操作,能“校时”“校分”;?整点高音低音报时;?时段控制路灯的亮灭。 七、下载
1、添加译码模块后的原理图
2、选用芯片
EDA实现多功能数字钟 3、分配引脚号
4、对器件进行下载
在电脑上安装实验板驱动然后下载模块进行验证时钟功能。 5、效果显示
?校时
EDA实现多功能数字钟
?校分
EDA实现多功能数字钟
?整点报时
EDA实现多功能数字钟
八、《课程设计》中遇到的问题及解决办法:
(1)在用verilog HDL描述模块时一些语言的理解不是很熟悉也不是很理解的到位,通过查找其他
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
籍和询问老师才得以理解。
(2)模块编译成功了进行仿真的时候有些时候得不到相应的结果,会有错误出现,通过回头检查,发现是自己没有按照操作步骤中的setting进行设置所以得不到相应的仿真图形。
(3)在最后的所有打包模块级联的时候,很多相应的细节没有注意,例如,有些管脚需要输入这个管脚而我没有给,还有一些管脚之间的链接,我由于疏忽有些标明是大写,有些标明是小写,因此,联接不成功。后来反复的检查就成功了。
(3)在实验板上验证效果的时候在QuartusП9.1软件上进行操作,且发现该软件中没有相对应的芯片后咨询老师才知应在更高级版本QuartusП11.0中操作。
(4)在效果显示上面我一开始的效果是秒钟走时正常,到了分钟该进制它不进制。老师说是级联有问题,经过返回去修改模块、仿真均没有问题。后来就将分钟、时钟的模块换成了用图形仿真进行打包然后级联在进行下载显示效果,效
EDA实现多功能数字钟
果是成功的。后来也有部分同学也出现了这样的状况,老师好好的看了各模块,原来一些模块有着相应的问题。
九、《课程设计》中设计项目完成最终结论
特点: 将我们所学的知识来运用实现具有以二十四小时计时、显示、整
点报时、时间设置和时段控制的功能。
实用性: 数字电子钟在我们平常生活中很常用,应用比较广泛,而经过
我所设计的这款数字钟设计过程也比较简单,通过编程就能达
到相应的功能。
心得体会:纵使有很多问题,但最终都被解决了,虽然有的问题是和同学讨
论解决的,有些东西是请教老师的但还是很高兴的。在这些错误
中也透露了自己对现有数电知识掌握的不牢固,对很多概念仍处
于朦胧状态。以及对软件的使用不是很熟悉。因此这些是我以后
还需要加强学习的地方。
十、结束语
通过这次VHDL课程设计,我学到了很多,对于原本掌握的不好
的数字逻辑相关知识,在课程设计具体实践中有了很深刻的认识,在
对于QuartusП的操作上也有很大的提高,增加了操作的熟练程度,
现在我已经有信心做任何的设计课题。
在学到新知识的同时,我也认识到了VHDL设计的困难性。同
时我也觉得将所学的知识融会贯通的运用到实际操作中还是需要一
些更多的锻炼。
最后,感谢老师们帮我处理一些解决不了的问题,还要感谢在我
思维陷入困境时给予我指点,让我获得灵感的同学们以及来帮助我解
决问题的同学,谢谢大家~
EDA实现多功能数字钟
十一、附录
1、分频模块程序
module div_zh(f,_500HzOut,_1KHzOut,
ncR,CLOCK_50,s);
input ncR,CLOCK_50,s;
output _500HzOut,_1KHzOut,f;
wire _1HzOut,_5HzOut;
assign f=s?_5HzOut:_1HzOut;
divn #(.WIDTH(26),.N(50000000))
u0(.clk(CLOCK_50),
.rst_n(ncR),
.o_clk(_1HzOut)
);
divn #(.WIDTH(17),.N(100000))
u1(.clk(CLOCK_50),
.rst_n(ncR),
.o_clk(_500HzOut)
);
divn #(.WIDTH(16),.N(50000))
u2(.clk(CLOCK_50),
.rst_n(ncR),
.o_clk(_1KHzOut)
);
divn #(.WIDTH(24),.N(10000000))
u3(.clk(CLOCK_50),
.rst_n(ncR),
.o_clk(_5HzOut)
);
endmodule
module divn(o_clk,clk,rst_n);
input clk,rst_n;
output o_clk;
parameter WIDTH=3;
parameter N=6;
reg [WIDTH-1:0] cnt_p;
reg [WIDTH-1:0] cnt_n;
reg clk_p;
reg clk_n;
assign o_clk=(N==1)?
clk:(N[0]?(clk_p|clk_n):clk_p);
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
EDA实现多功能数字钟
cnt_p<=0;
else if(cnt_p==N-1)
cnt_p<=0;
else
cnt_p<=cnt_p+1;
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
clk_p<=0;
else if(cnt_p<(N>>1))
clk_p<=1;
else
clk_p<=0;
end
always @(negedge clk or negedge rst_n)
begin
if(!rst_n)
cnt_n<=0;
else if(cnt_n==N-1)
cnt_n<=0;
else
cnt_n<=cnt_n+1;
end
always @(negedge clk or negedge rst_n)
begin
if(!rst_n)
clk_n<=0;
else if(cnt_n<(N>>1))
clk_n<=1;
else
clk_n<=0;
end
endmodule
2、译码模块程序
module decode4_7 (
input [3:0]
indec_0,indec_1,indec_2,indec_3,indec_4,indec_5,indec_6,indec_7,
output reg [6:0]
dout_0,dout_1,dout_2,dout_3,dout_4,dout_5,dout_6,dout_7
);
EDA实现多功能数字钟
always@(indec_0 or indec_1 or indec_2 or indec_3 or indec_4 or indec_5
or indec_6 or indec_7 )
begin
case(indec_0)
4'h1: dout_0 = 7'b111_1001; // ---0----
4'h2: dout_0 = 7'b010_0100; // | |
4'h3: dout_0 = 7'b011_0000; // 5 1
4'h4: dout_0 = 7'b001_1001; // | |
4'h5: dout_0 = 7'b001_0010; // ---6----
4'h6: dout_0 = 7'b000_0010; // | |
4'h7: dout_0 = 7'b111_1000; // 4 2
4'h8: dout_0 = 7'b000_0000; // | |
4'h9: dout_0 = 7'b001_1000; // ---3----
4'ha: dout_0 = 7'b000_1000;
4'hb: dout_0 = 7'b000_0011;
4'hc: dout_0 = 7'b100_0110;
4'hd: dout_0 = 7'b010_0001;
4'he: dout_0 = 7'b000_0110;
4'hf: dout_0 = 7'b000_1110;
4'h0: dout_0 = 7'b100_0000;
endcase
case(indec_1)
4'h1: dout_1 = 7'b111_1001; // ---0----
4'h2: dout_1 = 7'b010_0100; // | |
4'h3: dout_1 = 7'b011_0000; // 5 1
4'h4: dout_1 = 7'b001_1001; // | |
4'h5: dout_1 = 7'b001_0010; // ---6----
4'h6: dout_1 = 7'b000_0010; // | |
4'h7: dout_1 = 7'b111_1000; // 4 2
EDA实现多功能数字钟
4'h8: dout_1 = 7'b000_0000; // | |
4'h9: dout_1 = 7'b001_1000; // ---3----
4'ha: dout_1 = 7'b000_1000;
4'hb: dout_1 = 7'b000_0011;
4'hc: dout_1 = 7'b100_0110;
4'hd: dout_1 = 7'b010_0001;
4'he: dout_1 = 7'b000_0110;
4'hf: dout_1 = 7'b000_1110;
4'h0: dout_1 = 7'b100_0000;
endcase
case(indec_2)
4'h1: dout_2 = 7'b111_1001; // ---0----
4'h2: dout_2 = 7'b010_0100; // | |
4'h3: dout_2 = 7'b011_0000; // 5 1
4'h4: dout_2 = 7'b001_1001; // | |
4'h5: dout_2 = 7'b001_0010; // ---6----
4'h6: dout_2 = 7'b000_0010; // | |
4'h7: dout_2 = 7'b111_1000; // 4 2
4'h8: dout_2 = 7'b000_0000; // | |
4'h9: dout_2 = 7'b001_1000; // ---3----
4'ha: dout_2 = 7'b000_1000;
4'hb: dout_2 = 7'b000_0011;
4'hc: dout_2 = 7'b100_0110;
4'hd: dout_2 = 7'b010_0001;
4'he: dout_2 = 7'b000_0110;
4'hf: dout_2 = 7'b000_1110;
4'h0: dout_2 = 7'b100_0000;
endcase
case(indec_3)
EDA实现多功能数字钟
4'h1: dout_3 = 7'b111_1001; // ---0----
4'h2: dout_3 = 7'b010_0100; // | |
4'h3: dout_3 = 7'b011_0000; // 5 1
4'h4: dout_3 = 7'b001_1001; // | |
4'h5: dout_3 = 7'b001_0010; // ---6----
4'h6: dout_3 = 7'b000_0010; // | |
4'h7: dout_3 = 7'b111_1000; // 4 2
4'h8: dout_3 = 7'b000_0000; // | |
4'h9: dout_3 = 7'b001_1000; // ---3----
4'ha: dout_3 = 7'b000_1000;
4'hb: dout_3 = 7'b000_0011;
4'hc: dout_3 = 7'b100_0110;
4'hd: dout_3 = 7'b010_0001;
4'he: dout_3 = 7'b000_0110;
4'hf: dout_3 = 7'b000_1110;
4'h0: dout_3 = 7'b100_0000;
endcase
case(indec_4)
4'h1: dout_4 = 7'b111_1001; // ---0----
4'h2: dout_4 = 7'b010_0100; // | |
4'h3: dout_4 = 7'b011_0000; // 5 1
4'h4: dout_4 = 7'b001_1001; // | |
4'h5: dout_4 = 7'b001_0010; // ---6----
4'h6: dout_4 = 7'b000_0010; // | |
4'h7: dout_4 = 7'b111_1000; // 4 2
4'h8: dout_4 = 7'b000_0000; // | |
4'h9: dout_4 = 7'b001_1000; // ---3----
4'ha: dout_4 = 7'b000_1000;
4'hb: dout_4 = 7'b000_0011;
EDA实现多功能数字钟
4'hc: dout_4 = 7'b100_0110;
4'hd: dout_4 = 7'b010_0001;
4'he: dout_4 = 7'b000_0110;
4'hf: dout_4 = 7'b000_1110;
4'h0: dout_4 = 7'b100_0000;
endcase
case(indec_5)
4'h1: dout_5 = 7'b111_1001; // ---0----
4'h2: dout_5 = 7'b010_0100; // | |
4'h3: dout_5 = 7'b011_0000; // 5 1
4'h4: dout_5 = 7'b001_1001; // | |
4'h5: dout_5 = 7'b001_0010; // ---6----
4'h6: dout_5 = 7'b000_0010; // | |
4'h7: dout_5 = 7'b111_1000; // 4 2
4'h8: dout_5 = 7'b000_0000; // | |
4'h9: dout_5 = 7'b001_1000; // ---3----
4'ha: dout_5 = 7'b000_1000;
4'hb: dout_5 = 7'b000_0011;
4'hc: dout_5 = 7'b100_0110;
4'hd: dout_5 = 7'b010_0001;
4'he: dout_5 = 7'b000_0110;
4'hf: dout_5 = 7'b000_1110;
4'h0: dout_5 = 7'b100_0000;
endcase
case(indec_6)
4'h1: dout_6 = 7'b111_1001; // ---0----
4'h2: dout_6 = 7'b010_0100; // | |
4'h3: dout_6 = 7'b011_0000; // 5 1
4'h4: dout_6 = 7'b001_1001; // | |
EDA实现多功能数字钟
4'h5: dout_6 = 7'b001_0010; // ---6----
4'h6: dout_6 = 7'b000_0010; // | |
4'h7: dout_6 = 7'b111_1000; // 4 2
4'h8: dout_6 = 7'b000_0000; // | |
4'h9: dout_6 = 7'b001_1000; // ---3----
4'ha: dout_6 = 7'b000_1000;
4'hb: dout_6 = 7'b000_0011;
4'hc: dout_6 = 7'b100_0110;
4'hd: dout_6 = 7'b010_0001;
4'he: dout_6 = 7'b000_0110;
4'hf: dout_6 = 7'b000_1110;
4'h0: dout_6 = 7'b100_0000;
endcase
case(indec_7)
4'h1: dout_7 = 7'b111_1001; // ---0----
4'h2: dout_7 = 7'b010_0100; // | |
4'h3: dout_7 = 7'b011_0000; // 5 1
4'h4: dout_7 = 7'b001_1001; // | |
4'h5: dout_7 = 7'b001_0010; // ---6----
4'h6: dout_7 = 7'b000_0010; // | |
4'h7: dout_7 = 7'b111_1000; // 4 2
4'h8: dout_7 = 7'b000_0000; // | |
4'h9: dout_7 = 7'b001_1000; // ---3----
4'ha: dout_7 = 7'b000_1000;
4'hb: dout_7 = 7'b000_0011;
4'hc: dout_7 = 7'b100_0110;
4'hd: dout_7 = 7'b010_0001;
4'he: dout_7 = 7'b000_0110;
4'hf: dout_7 = 7'b000_1110;
EDA实现多功能数字钟
4'h0: dout_7 = 7'b100_0000;
endcase
end
endmodule
3、参考文献
[1]、康华光主编。电子技术基础数字部分(第五版).高等教育出版社,2006年 [2]、夏雨闻.Verilog 数字系统设计教程.北京航空航天大学出版社,2003 [3]、www.altera.com
[4]、姜雪松,吴钰淳,等.VHDL设计实例与仿真.北京:机械工业出版社,2007 [5]、www.semilattice.com