基于FPGA的数字钟设计.docx

上传人:b****8 文档编号:9108512 上传时间:2023-02-03 格式:DOCX 页数:10 大小:227KB
下载 相关 举报
基于FPGA的数字钟设计.docx_第1页
第1页 / 共10页
基于FPGA的数字钟设计.docx_第2页
第2页 / 共10页
基于FPGA的数字钟设计.docx_第3页
第3页 / 共10页
基于FPGA的数字钟设计.docx_第4页
第4页 / 共10页
基于FPGA的数字钟设计.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

基于FPGA的数字钟设计.docx

《基于FPGA的数字钟设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的数字钟设计.docx(10页珍藏版)》请在冰豆网上搜索。

基于FPGA的数字钟设计.docx

基于FPGA的数字钟设计

基于FPGA的数字钟系统

姓名:

蒋佳霖

学号:

1023000657

学院:

物理与电子学院

 

摘要:

本文利用FPGA的Verilog语言设计数字钟系统。

并采用Quartuse进行综合,仿真,实验。

经过测试,本文所设计的系统基本可以实现数字的计时和显示,调整时间的功能。

关键字:

FPGA,Verilog语言,数字钟系统

1、设计所实现的功能

本文所设计的数字钟系统能进行时,分,秒的显示,和对时间的校正。

能够利用按键进行“调时”,“调分”,“清秒”的功能,随时对数码管进行调整和校正。

数字钟系统是由系统时钟,数码管,FPGA,三个功能键组成。

 

2、设计所采用的思想

本文所设计的数字钟系统采用Veriloig自顶而下的设计方法。

在编程中,通过键位的数值的判断来调用例化语句实现控制模块对计时模块和分频模块的控制。

3、各模块的代码及测试情况

分频模块的代码:

moduleszz_fenpin(clk,clk_1HZ);

inputclk;

outpitclk_1HZ;

reg[31:

0]count;

always@(posedgeclk)

begin

if(count

begin

count<=count+1;

end

else

begin

count<=0;

clk_1HZ<=~clk_1HZ;

end

end

endmodule

注:

本文所使用的分频模块只能进行偶数分频。

M为分频的倍数。

计时模块:

moduleszz_js(clk_1HZ,num1,num2,num3,num4,num5,num6);

inputclk_1HZ;

outputreg[3:

0]num1,num2,num3,num4,num5,num6;

always@(posedgeclk_1HZ)

begin

if((num6==4'b10)&&(num5==4'b100))

begin

num5=4'b0;

num6=4'b0;

end

elseif(num5==4'b1001)

begin

num6=num6+4'b1;

num5=4'b0;

end

elseif(num4==4'b0110)

begin

num5=num5+4'b1;

num4=4'b0;

end

elseif(num3==4'b1001)

begin

num3=4'b0;

num4=num4+4'b1;

end

elseif(num2==4'b0110)

begin

num2=4'b0;

num3=num3+4'b1;

end

elseif(num1==4'b1001)

begin

num1=4'b0;

num2=num2+4'b1;

end

else

begin

num1=num1+4'b1;

end

end

endmodule

注:

本文所使用的计时模块的代码采用状态机,非阻塞语句赋值,所以在判以后不会立即清零,所以判断采用是当其为5的时候才进行下一次状态,并在下一次状态进行清零。

控制语句:

moduleszz_kz(clk,rst,turn1,turn2,turn3,n1,n2,n3,n4,n5,n6,rs1,rs2,rs3,rs4,rs5,rs6);

inputclk,turn1,turn2,turn3,rst;

input[3:

0]n1,n2,n3,n4,n5,n6;

outputreg[3:

0]rs1,rs2,rs3,rs4,rs5,rs6;

reg[3:

0]num1,num2,num3,num4,num5,num6;

always@(posedgeclk)

begin

if(!

rst)

begin

rs1=n1;

rs2=n2;

rs3=n3;

rs4=n4;

rs5=n5;

rs6=n6;

end

else

begin

rs1=n1;

rs2=n2;

rs3=n3;

rs4=n4;

rs5=n5;

rs6=n6;

rs5=rs5+num5;

rs3=rs3+num3;

if(turn1)

begin

rs5=n5;

num5=num5+4'b1;

end

if(turn2)

begin

rs3=n3;

num3=num3+4'b1;

end

if(turn3)

begin

rs2=0;

rs1=0;

end

end

endmodule

注:

本控制程序是对键位的高电平进行监测,则进行清秒,调分,调时的功能。

4、程序的测试图

图为计数模块的部分的图形。

图为程序调试以后的结果

5、程序代码

注:

因为在FPGA的试验台上有1HZ的CLK信号,所以在实现时可以将CLK信号直接设置为1HZ,故省略例化分频语句。

moduleszz_js(clk_1HZ,num1,num2,num3,num4,num5,num6);

inputclk_1HZ;

outputreg[3:

0]num1,num2,num3,num4,num5,num6;

always@(posedgeclk_1HZ)

begin

if((num6==4'b10)&&(num5==4'b100))

begin

num5=4'b0;

num6=4'b0;

end

elseif(num5==4'b1001)

begin

num6=num6+4'b1;

num5=4'b0;

end

elseif(num4==4'b0110)

begin

num5=num5+4'b1;

num4=4'b0;

end

elseif(num3==4'b1001)

begin

num3=4'b0;

num4=num4+4'b1;

end

elseif(num2==4'b0110)

begin

num2=4'b0;

num3=num3+4'b1;

end

elseif(num1==4'b1001)

begin

num1=4'b0;

num2=num2+4'b1;

end

else

begin

num1=num1+4'b1;

end

end

endmodule

moduleszz_kz(clk,rst,turn1,turn2,turn3,n1,n2,n3,n4,n5,n6,rs1,rs2,rs3,rs4,rs5,rs6);

inputclk,turn1,turn2,turn3,rst;

input[3:

0]n1,n2,n3,n4,n5,n6;

outputreg[3:

0]rs1,rs2,rs3,rs4,rs5,rs6;

reg[3:

0]num1,num2,num3,num4,num5,num6;

always@(posedgeclk)

begin

if(!

rst)

begin

rs1=n1;

rs2=n2;

rs3=n3;

rs4=n4;

rs5=n5;

rs6=n6;

end

else

begin

rs1=n1;

rs2=n2;

rs3=n3;

rs4=n4;

rs5=n5;

rs6=n6;

rs5=rs5+num5;

rs3=rs3+num3;

if(turn1)

begin

rs5=n5;

num5=num5+4'b1;

end

if(turn2)

begin

rs3=n3;

num3=num3+4'b1;

end

if(turn3)

begin

rs2=0;

rs1=0;

end

end

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1