1、学习利用Verilog HDL语言完成基于FPGA的数字钟设计,最后完成在EDA实验箱上的下载和调试。1.功能描述该电子钟可以实现以数字形式(hhffmm)显示时、分、秒的时间和复位以及调时功能。(1)“SW0”键时,数字钟复位;(2)“SW1”键控制“秒”调整;(3)“SW2”键控制“分”调整;(4)“SW3”键控制“时”调整;2.其他要求掌握用Verilog HDL语言的设计思想以及整个数字系统的设计。利用编译仿真软件Quartus实现其基本功能,然后结合EDA试验箱,在试验箱上演示具体功能。本实验设计采用试验箱上的模式5,时、分、秒的计时结果通过8个数码管动态显示。二、总体设计1.设计思
2、路利用Verilog HDL语言编程实现电子时钟的功能,显示电路利用七段数码管进行显示。芯片采用Cyclone系列中的EP3C10E144C8。秒计数器的计数时钟clk1为1Hz的标准信号。数码管的动态扫描时钟clk2为1kHz的标准信号。本设计中clk1和clk2分别采用试验箱上的信号F0、F1来实现。时钟的段选数据和位选数据通过EP3C10E144C8芯片的I/O口送给数码管,从而实现时间显示。时间的复位和调整通过外加独立按键(SW0,SW1,SW2,SW3)来控制。2.器件选型器件名称EP3C10E144C8LED数码管独立按键数量1片8只4个三、硬件设计1.硬件框图硬件框图如下所示:2
3、.硬件模块因该设计非常简单,硬件模块很少,只有显示模块和按键模块。3.硬件电路图硬件电路如下图所示:四、软件设计1.软件框图软件总体框图2.软件流程图及其程序代码软件总体流程图如下:2.1分、时、秒(24*60*60)计时模块程序代码如下:always ( posedge clk1 )beginif(!reset)sec=0;min=0;hour=0;endelsesec=sec+1;if(sec=60)min=min+1;if(min=60)hour=hour+1;if(hour=24)2.2 译码及数码管显示模块always (negedge clk2) /clk2为1kHz的数码管动态扫
4、描时钟 begin scan= scan + 3b001; -数码管的位选和段选控制- case(scan) 3h0 : begin wei = 8hFE; seg=d0; end依次选中每个数码管,并将它要显示的数据给segh1 :hFD; seg=d1; end h2 :hFB; seg=d2;h3 :hF7; seg=d3;h4 :hEF; seg=d4;h5 :hDF; seg=d5;h6 :hBF; seg=d6;h7 :h7F; seg=d7; endcase -译码部分- case(seg) 4 duan= 8h3F; /数字“0”的译码h06; /数字“1”的译码h5B; /数
5、字“2”的译码h4F; /数字“3”的译码h66; /数字“4”的译码h6D; /数字“5”的译码h7D; /数字“6”的译码h07; /数字“7”的译码h8 : /数字“8”的译码h9 :h6F; /数字“9”的译码 default :duan= 8h40; /符号“-”的译码 endcase2.3数据处理子模块:对当前的时钟数据进行处理,实现原理是分别用时、分、秒这3个数据除以10,将得到的十位和个位分别存在2个单独的存储器里。模块代码为:always ( posedge clk0)d0=(sec%10);d1=(sec/10);d2=10;d3=(min%10);d4=(min/10);
6、d5=10;d6=(hour%10);d7=(hour/10);五、测试效果经过软件仿真,测试效果良好,上述功能基本都能实现。一下给出基本的仿真效果。仿真效果如下所示:1.时、分、秒计时仿真结果:2.译码显示仿真结果:3.EDA实验箱上的调试效果:六、问题分析1.实现过程中遇到的问题及解决方法分析刚开始因为不太懂Verilog语言,所以在实验过程中遇到了不小的麻烦。我所写的程序总是出现很多语法错误,最后通过查阅资料和同学们的帮助才是问题得以解决。另外,在EDA试验箱上调试时,因为对试验箱的硬件不是很了解,调试一直不成功。最后,通过查看EDA实验指导书,才知道是时钟信号的跳线帽没有接好。最后,经
7、过仿真,该设计虽能达到预期的要求,但也存在不足之处。因为时间仓促,该设计未能实现调时模块。2.收获与体会经过本次实验设计的学习,收获颇丰。首先,对FPGA有了一定的了解,同时锻炼了我的动手能力。其次,我学习了Verilog语言,会用Verilog语言编写简单的程序。特别是体会到了Verilog语言与C语言的不同。Verilog语言虽然语法与C语言很相似,但它与C语言还是有很大的差别的。C语言是串行的思想,而Verilog语言很多语句是并行的。全部代码如下:module clock(clk,clk0,sec,min,hour,wei,duan,reset);input clk,clk0,rese
8、t;output sec,min,hour,wei,duan;reg 7:0sec;0min;0hour;reg 2:0scan;0wei;0duan;reg 3:0 d7:0;0seg;0set;always ( posedge clk ) if(! sec=0; min=0; hour=0; else sec=sec+1; if(sec=60) min=min+1; if(min=60) hour=hour+1; if(hour=24) d0=(sec%10); d1=(sec/10); d2=10; d3=(min%10); d4=(min/10); d5=10; d6=(hour%10); d7=(hour/10);always (negedge clk0) case(seg)endmodule
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1