基于FPGA的数字钟设计.docx
《基于FPGA的数字钟设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的数字钟设计.docx(9页珍藏版)》请在冰豆网上搜索。
基于FPGA的数字钟设计
目录
摘要1
Ⅰ设计任务与要求2
Ⅱ系统整体方案及设计原理2
Ⅲ各模块电路设计与实现2
1分频模块2
2计数模块4
3数码管显示模块7
Ⅳ硬件下载及调试10
Ⅴ试验中出现的问题及解决办法11
Ⅵ设计总结11
参考文献12
摘要
FPGA是可编程逻辑器件,在早期可编程逻辑器件PAL和GAL的基础上发展而来,但电路规模更大。
同时FPGA具有许多优点,在数字电路设计中得到广泛的应用。
本次设计过程中,我们使用了Altera公司开发的CycloneⅡ芯片,使用EP2C8Q208C8开发板,完成我们的设计。
在设计过程中,主要使用Verilog编程语言进行编程,由于它和C语言有一定的相似之处,使用起来较为方便。
本次课程设计,我们通过编程来控制八段数码管显示我们要的时钟数字,我们通过编程控制交通灯的变换并且利用数码管显示剩余时间,根据EP2C8Q208C8使用说明,合理安排引脚和时序,顺利完成预定的功能,同时也了解了FPGA和其编程控制过程,为以后的设计奠定了基础。
Ⅰ设计任务与要求。
1.设计一个数字计时器,可以完成00:
00:
00到23:
59:
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
always@(posedgeclk_50MHz)
beginif(cnt3==24999)
begincnt3<=0;
clk_1KHz=~clk_1KHz;//20MHz分为1kHz
end
elsecnt3<=cnt3+1'b1;
end
endmodule
分频模块时序仿真图如下:
2计数模块。
秒计时模块:
秒是60进制,所以秒计时模块是60进制。
程序如下:
modulecet60(clk,cen,a,b);
inputclk;
outputcen;
output[3:
0]a,b;
reg[3:
0]a,b;
regcen;
always@(posedgeclk)
begin
if(a==9)
begina=0;
if(b==5)b=0;
elseb=b+1;
end
elsebegin
a=a+1;
b=b;
end
end
always@(posedgeclk)
begin
if((a==9)&(b==5))cen=1;
elsecen=0;
end
endmodule
秒及时模块时序仿真图如下:
分计时模块也是60进制,同上。
小时计时模块:
小时使用的24小时制,故使用的是24进制计数,程序如下:
modulecounter24(a,b,nCR,EN,clk);
inputclk,nCR,EN,nCR;
output[3:
0]a,b;
reg[3:
0]a,b;
always@(posedgeclkornegedgenCR)
begin
if(~nCR){a,b}<=8'h00;
elseif(~EN)
{a,b}<={a,b};
elseif((a>2)||(b>9)||((a==2)&&(b>=3)))
{a,b}<=8'h00;
elseif((a==2)&&(b<3))
begina<=b;b<=b+1'b1;
end
elseif(b==9)
begina<=a+1'b1;b<=4'b0000;
end
else
begina<=a;b<=b+1'b1;
end
end
endmodule
小时计数模块时序仿真图如下:
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;//数码管位选
output[7:
0]seg;//数码管段选
reg[7:
0]seg_reg;//定义数码管段选寄存器
reg[7:
0]dig_reg;//定义数码管位选寄存器
reg[3:
0]dat_reg;
reg[2:
0]count;//定义计数器
always@(posedgeclk_1kHz)//定义上升沿触发进程
begin
if(count==5)count<=0;
elsecount<=count+1'b1;
end
always@(posedgeclk_1kHz)
begin
case(count)//选择扫描显示数据
3'd0:
begindat_reg<=hour_ten[3:
0];dig_reg<=8'b01111111;end//第一个数码管显示小时的十位
3'd1:
begindat_reg<=hour_one[3:
0];dig_reg<=8'b10111111;end//第二个数码管显示小时的个位
3'd2:
begindat_reg<=min_ten[3:
0];dig_reg<=8'b11011111;end//第三个数码管显示分钟的十位
3'd3:
begindat_reg<=min_one[3:
0];dig_reg<=8'b11101111;end//第四个数码管显示分钟的个位
3'd4:
begindat_reg<=sec_ten[3:
0];dig_reg<=8'b11110111;end//第五个数码管显示秒的十位
3'd5:
begindat_reg<=sec_one[3:
0];dig_reg<=8'b11111011;end//第六个数码管显示秒的个位
default:
begindat_reg<=0;dig_reg<=6'b000000;end
endcase
end
always@(dat_reg)
begin
case(dat_reg)
4'h0:
seg_reg<=8'hc0;//显示"0"
4'h1:
seg_reg<=8'hf9;//显示"1"
4'h2:
seg_reg<=8'ha4;//显示"2"
4'h3:
seg_reg<=8'hb0;//显示"3"
4'h4:
seg_reg<=8'h99;//显示"4"
4'h5:
seg_reg<=8'h92;//显示"5"
4'h6:
seg_reg<=8'h82;//显示"6"
4'h7:
seg_reg<=8'hf8;//显示"7"
4'h8:
seg_reg<=8'h80;//显示"8"
4'h9:
seg_reg<=8'h90;//显示"9"
default:
seg_reg<=8'hff;//不显示
endcase
end
assigndig=dig_reg;
assignseg=seg_reg;
endmodule
Ⅳ硬件下载及调试。
数字时钟模块搭建图:
下载:
选择“Processing-startcomplication”进行全编译,编译通过后要进行管脚分配,选择“AssignmentsPins”,在打开的对话框中的“Location”栏中选择相应的管脚填入,并将未用到的管脚置为三态,最后将程序下载到SmartSOPC实验系统中运行,检验结果是否正确。
Ⅴ试验中出现的问题及解决办法。
在设计分频模块的时候,由于没有考虑整体功能实现需要多个不同频率的输出,而只把1HZ作为我们的目标,导致后来用到时又返回去增加输出,导致模块的变动,也给整个工程带来了麻烦。
Ⅵ设计总结。
本次试验一方面需要我们掌握数字逻辑电路的知识,另一方面又要适应新的软件QuartusⅡ和试验箱的用法。
虽说和电工电子实验的内容基本一样,但用的方法却不一样。
上次实验除了理论知识外,还需要相当高的人品,万一哪边没接地或哪个孔差错了可能害你花掉整个小时的时间去查错,而且万一芯片坏了也很麻烦,效率比较低,而且眼花缭乱。
而这一次,可以利用软件仿真,观察波形,调试,而且不会发生芯片烧坏的情况。
参考文献:
[1]闫石.数字电子技术基础.第五版.高等教育出版社.
[2]杨晓慧.杨旭.FPGA系统设计与实例.人民邮电出版社.
[3]杨军.基于QUARTUSⅡ计算机组成与体系实验教程.
[4]侯伯亨.VHDL硬件描述语言与数字逻辑电路设计.西安电子科技大学出版社.
[5]任勇峰.VHDL与硬件实现速成.国防工业出版社.