• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

数字钟设计Verilog代码远程云端平台Quartus

06/03 13:33
712
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-23121G559491I.docx

共1个文件

名称:数字钟设计Verilog代码远程云端平台Quartus

软件:Quartus

语言:Verilog

代码功能:

数字钟设计要求:

1.由100MHZ的系统时钟分频得到秒时基。

2.对秒时基计数,在数码管上显示小时,分钟和秒的计时信息。

3.可对分和时进行校准。

使用BTN1和BTN0两个按键完成校准。

其中BTN1用于切换三种模式:正常计时,分校准,时校准、在校准时或分模式时,相应的地位数码管要闪烁。

BTN0案件用于在校准时,调整具体的计数值。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

本代码已在远程云端平台验证,远程云端平台如下,其他远程云端平台可以修改管脚适配:

远程平台照片.png

演示视频:

设计文档:

设计要求:

1.由100MHZ的系统时钟分频得到秒时基

2.对秒时基计数,在数码管上显示小时,分钟和秒的计时信息。

3.可对分和时进行校准

使用BTN1和BTN0两个按键完成校准。

其中BTN1用于切换三种模式:正常计时,分校准,时校准、

在校准时或分模式时,相应的地位数码管要闪烁

BTN0案件用于在校准时,调整具体的计数值

Quartus内创建工程时如此设置

语言选择Verilog hdl

引脚编译完后,如此设置

第一个模块为分频模块产生1HZ的时钟信号

参数化任意进制加计数器的 Veriog HDL 描述。

module counter #(parameter COUNT_MAX = 60, parameter N = 6)(

input clk, rst_n,

input cin,

output reg [N-1:0] count,

output reg cout

);

always@(posedge clk, negedge rst_n)

if(!rst_n)

count<= 0;

else begin

cout <= 0;

if (cin) begin

if(count < (COUNT_MAX - 1))

count <= count + 1;

else begin

count<= 0;

cout <= 1;

end

end

end

endmodule

第二个模块为计时模块,以下代码为例

任意进制bcd码计数

module bcd_ counter #(parameter M=60, parameter N = 6)(

input clk, rst_n,

input cin,

output [9:0] bcd,

output cout

);

wire [N-1:0] count;

counter #(. COUNT_MAX (M), . N(N))

U1(. clk(clk),

. rst_n(rst_n),

. cin(cin),

. count (count),

. cout (cout)); //调用自然二进制码的六十进制计数器

bin2bcd U2(. bin(count), . bcd(bcd)); //调用代码转换模块, 转换为 BCD码

endmodule

第三个模块为用于产生扫描信号分频器

module divider # ( parameter CLK_FREQ = 25000000,//系统时钟输入频率: 25 MHz

parameter CLK_OUT_FREQ = 1) //分频器输出时钟频率: 1 Hz

( input clk, rst_n,

output reg clk_out );

parameter integer N = CLK_FREQ/ (2 * CLK_OUT_FREQ) - 1;

// log2 constant function

function integer log2(input integer x);

integer i;

begin

i = 1;

while (2**i< x)

begin

i = i +1;

end

log⁡2=i;

end

endfunction

parameter M = log2(N ) -1;

reg [M:0] counter; //内部结点

always @ (posedge cl k or negedge rst_n)

begin

if(!rst_n) begin //异步清零

clk_out <= 0;

counter <= 0;

end

else  begin

if ( counter < N)

counter <= counter +1'b1; //分频计数器加1计数

else begin

counter <= 0;

clk_out <= ~ clk_out;

end

end

end

endmodule

第四个模块为显示模块 数码管动态显示

module indicator_scan_top(

input clk, rst_n,

input [15:0] data1,

input [15:0] date2,

output reg [7:0] seg,

output reg [7:0] an

);

reg [2:0] sel;

reg [4:0] disp;

always @ (posedge clk or negedge rst_n) begin

if( !rst_n ) begin

an =8'b00000000;

部分代码展示:

module Digital_clock(
input clk_in,
input key_1,//设置修改--BTN1
input key_0,//修改时分秒--BTN0
output[7:0] SEG1,//段选显示
output[3:0] SEL1, //位选显示
output[7:0] SEG2,//段选显示
output[3:0] SEL2 //位选显示
);
wire [7:0] hour_time;//时
wire [7:0] minute_time;//分
wire [7:0] second_time;//秒
wire key_1_negedge;
wire key_0_negedge;
wire [1:0] state_o;
wire clk_1Hz;
fenping fenping_Hz(
. clk_in(clk_in),
. clk_1Hz(clk_1Hz)
);
key_jitter key_1_jitter(
. clkin(clk_in),     
. key_in(key_1),
. key_negedge(key_1_negedge)
);
key_jitter key_0_jitter(
. clkin(clk_in),     
. key_in(key_0),
. key_negedge(key_0_negedge)
);
jishi i_jishi(
. clk_in(clk_in),
. clk_1Hz(clk_1Hz),
. set_time_key(key_1_negedge),//设置时间
. change_time_key(key_0_negedge),//设置时分秒
. state_o(state_o),
. hour_time(hour_time),//时
. minute_time(minute_time),//分
. second_time(second_time)//秒
);
display i_display(
. clk(clk_in),
. state_o(state_o),
. hour_time(hour_time),//时
. minute_time(minute_time),//分
. second_time(second_time),//秒
. SEG1(SEG1),//段选显示
. SEL1(SEL1), //位选显示
. SEG2(SEG2),//段选显示
. SEL2(SEL2) //位选显示
);
endmodule

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=349

  • 2-23121G559491I.docx
    下载

相关推荐