FPGA Verilog时钟设计

基于FPGA的电子时钟设计

1、设计目的:

(1)掌握Verilog HDL模块的基本结构 (2)掌握计数器的设计方法 (3)掌握分频器的设计方法 (4)掌握模块的调用方法

(5)掌握基于Quartus II的CPLD/FPGA开发流程

2、设计内容:

(1)设计有两个数码管能够实现秒钟显示,数字一秒钟变化一次。 (2)按下复位键时,计时器所有能够复位清零。 (3)利用Quartus II软件进行综合、适配

3、设计方案

(1)编写题目要求的程序;

(2)按照要求将相关程序进行检测和调试,运行正确的程序; (3)程序完成后,将其与开发板连接; (4)下载程序到芯片内;

(5)观察程序功能是否成功实现。

4、总体结构设计

总体结构设计如上图所示,从开发板提供的6MHz时钟信号分频得到周期为1s的控制信号,控制计数器改变状态,秒钟利用模60的BCD码计数器实现,BCD码通过4-7译码器译码后驱动两个数码管显示。

5、系统模块化设计

5.1 分频器

根据需求分析的要求,从6MHz系统时钟分频得到1Hz(周期1s)的控制信号,利用计数器实现分频然后能够异步复位。

程序入下:

module clock(clk,rest,clk_1s); input clk; input rest;

output clk_1s; reg clk_1s;

integer count=0;

always@(posedge clk or negedge rest) begin

if(rest==0) begin count=0; clk_1s=0; end else

begin

if(count==2999999) begin count<=0; clk_1s<=~clk_1s; end else count=count+1; end end

endmodule

5.2 模60的BCD加法计数器

模60BCD码加法计数器,计数器分为高4位与低4位分别控制,低4位每秒钟加1,变化状态为0~9,低4位状态变化到9时,高4位加1,变化状态为0~2。 VerilogBCD24程序如下

output [5:0] second; //输出秒 reg [5:0] second=0; //初始化秒为0

always@(posedge clk_1s)

if(second==24) //判断是否到24秒 begin

second<=second+1; //没到加1 end else begin

second<=0;//到24秒置0 End

5.3 4-7译码器

将4位二进制代码转换为驱动数码管的7位段选信号。 output SEG_L; output SEG_H; reg[6:0] SEG_L; reg[6:0] SEG_H;

always@(posedge second) begin

SEG_L=second; case(SEG_L)

4'd0:SEG_L=7'b1000000; 4'd1:SEG_L=7'b1111001; 4'd2:SEG_L=7'b0100100; 4'd3:SEG_L=7'b0110000; 4'd4:SEG_L=7'b0011001; 4'd5:SEG_L=7'b0010010; 4'd6:SEG_L=7'b0000010; 4'd7:SEG_L=7'b1111000; 4'd8:SEG_L=7'b0000000; 4'd9:SEG_L=7'b0010000; default: SEG_L=7'b1001000; endcase end

always@(posedge second) begin

SEG_H=second/10; case(SEG_H)

4'd0:SEG_H=7'b1000000; 4'd1:SEG_H=7'b1111001; 4'd2:SEG_H=7'b0100100; 4'd3:SEG_H=7'b0110000;

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4