基于FPGA的数字钟设计Word格式.docx
- 文档编号:19969234
- 上传时间:2023-01-13
- 格式:DOCX
- 页数:9
- 大小:158.77KB
基于FPGA的数字钟设计Word格式.docx
《基于FPGA的数字钟设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于FPGA的数字钟设计Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
59的计时功能。
2.具体要求如下:
1)能进行正常的时、分、秒计时功能,最大计时显示23小时59分59秒。
2)分别由六个数码管显示时分秒的计时。
Ⅱ系统整体方案及设计原理。
数字计时器是由计时电路、译码显示电路、脉冲发生电路等几部分组成的。
其中,脉冲发生电路将试验箱提供的50Mhz的频率分成电路所需要的频率;
计时电路与动态显示电路相连,将时间显示在八段数码管上。
原理框图如下:
Ⅲ各模块电路设计与实现。
1分频模块。
分频模块程序:
modulediv_clk(clk_50MHz,clk_1Hz,clk_1KHz);
inputclk_50MHz;
//20M时钟频率
outputclk_1Hz,clk_1KHz;
//20M时钟频率分为1Hz,200Hz,1MHz,1kHz,500Hz时钟频率
regclk_1Hz,clk_1KHz;
reg[24:
0]cnt;
//计数器
reg[14:
0]cnt3;
always@(posedgeclk_50MHz)
beginif(cnt==24999999)//20MHz分为1Hz,当计数器到9999999时,时钟反转一次
begincnt<
=0;
//即20000000次为一个时钟周期,即周期为1Hz
clk_1Hz=~clk_1Hz;
//时钟翻转
end
elsecnt<
=cnt+1'
b1;
end
beginif(cnt3==24999)
begincnt3<
=0;
clk_1KHz=~clk_1KHz;
//20MHz分为1kHz
elsecnt3<
=cnt3+1'
endmodule
分频模块时序仿真图如下:
2计数模块。
秒计时模块:
秒是60进制,所以秒计时模块是60进制。
程序如下:
modulecet60(clk,cen,a,b);
inputclk;
outputcen;
output[3:
0]a,b;
reg[3:
regcen;
always@(posedgeclk)
begin
if(a==9)
begina=0;
if(b==5)b=0;
elseb=b+1;
elsebegin
a=a+1;
b=b;
always@(posedgeclk)
if((a==9)&
(b==5))cen=1;
elsecen=0;
秒及时模块时序仿真图如下:
分计时模块也是60进制,同上。
小时计时模块:
小时使用的24小时制,故使用的是24进制计数,程序如下:
modulecounter24(a,b,nCR,EN,clk);
inputclk,nCR,EN,nCR;
output[3:
0]a,b;
always@(posedgeclkornegedgenCR)
if(~nCR){a,b}<
=8'
h00;
elseif(~EN)
{a,b}<
={a,b};
elseif((a>
2)||(b>
9)||((a==2)&
&
(b>
=3)))
elseif((a==2)&
(b<
3))
begina<
=b;
b<
=b+1'
elseif(b==9)
=a+1'
=4'
b0000;
else
=a;
end
小时计数模块时序仿真图如下:
3数码管显示模块:
数码管显示模块程序如下:
moduledecode(clk_1kHz,hour_ten,hour_one,min_ten,min_one,sec_ten,sec_one,dig,seg);
inputclk_1kHz;
//输入时钟1kHz
input[3:
0]hour_ten,hour_one,min_ten,min_one,sec_ten,sec_one;
output[7:
0]dig;
//数码管位选
0]seg;
//数码管段选
reg[7:
0]seg_reg;
//定义数码管段选寄存器
0]dig_reg;
//定义数码管位选寄存器
reg[3:
0]dat_reg;
reg[2:
0]count;
//定义计数器
always@(posedgeclk_1kHz)//定义上升沿触发进程
if(count==5)count<
elsecount<
=count+1'
always@(posedgeclk_1kHz)
case(count)//选择扫描显示数据
3'
d0:
begindat_reg<
=hour_ten[3:
0];
dig_reg<
=8'
b01111111;
end//第一个数码管显示小时的十位
d1:
=hour_one[3:
b10111111;
end//第二个数码管显示小时的个位
d2:
=min_ten[3:
dig_reg<
b11011111;
end//第三个数码管显示分钟的十位
d3:
=min_one[3:
b11101111;
end//第四个数码管显示分钟的个位
d4:
=sec_ten[3:
b11110111;
end//第五个数码管显示秒的十位
d5:
=sec_one[3:
b11111011;
end//第六个数码管显示秒的个位
default:
=6'
b000000;
endcase
always@(dat_reg)
case(dat_reg)
4'
h0:
seg_reg<
hc0;
//显示"
0"
h1:
hf9;
1"
h2:
ha4;
2"
h3:
hb0;
3"
h4:
h99;
4"
h5:
h92;
5"
h6:
h82;
6"
h7:
hf8;
7"
h8:
h80;
8"
h9:
h90;
9"
default:
hff;
//不显示
endcase
assigndig=dig_reg;
assignseg=seg_reg;
Ⅳ硬件下载及调试。
数字时钟模块搭建图:
下载:
选择“Processing-startcomplication”进行全编译,编译通过后要进行管脚分配,选择“AssignmentsPins”,在打开的对话框中的“Location”栏中选择相应的管脚填入,并将未用到的管脚置为三态,最后将程序下载到SmartSOPC实验系统中运行,检验结果是否正确。
Ⅴ试验中出现的问题及解决办法。
在设计分频模块的时候,由于没有考虑整体功能实现需要多个不同频率的输出,而只把1HZ作为我们的目标,导致后来用到时又返回去增加输出,导致模块的变动,也给整个工程带来了麻烦。
Ⅵ设计总结。
本次试验一方面需要我们掌握数字逻辑电路的知识,另一方面又要适应新的软件QuartusⅡ和试验箱的用法。
虽说和电工电子实验的内容基本一样,但用的方法却不一样。
上次实验除了理论知识外,还需要相当高的人品,万一哪边没接地或哪个孔差错了可能害你花掉整个小时的时间去查错,而且万一芯片坏了也很麻烦,效率比较低,而且眼花缭乱。
而这一次,可以利用软件仿真,观察波形,调试,而且不会发生芯片烧坏的情况。
参考文献:
[1]闫石.数字电子技术基础.第五版.高等教育出版社.
[2]杨晓慧.杨旭.FPGA系统设计与实例.人民邮电出版社.
[3]杨军.基于QUARTUSⅡ计算机组成与体系实验教程.
[4]侯伯亨.VHDL硬件描述语言与数字逻辑电路设计.西安电子科技大学出版社.
[5]任勇峰.VHDL与硬件实现速成.国防工业出版社.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 数字 设计