基于FPGA的数字钟设计.docx
- 文档编号:9108512
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:10
- 大小:227KB
基于FPGA的数字钟设计.docx
《基于FPGA的数字钟设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的数字钟设计.docx(10页珍藏版)》请在冰豆网上搜索。
基于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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 数字 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)