提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
Hello,大家好久不见,又过去了不知道多久,终于又来了一次更新,本次更新主要是在之前的文章基础上组合成一个完整的项目,在规划篇章中介绍了采用的FPGA开发板是小梅哥的ACX720开发板,内置pcf8563芯片,通过配置8563芯片可动态获取当前日期和时钟,好了话不多说,直接开始。
一、PCF8563介绍
本节主要是介绍PCF8563,PCF8563 是 PHILIPS 公司推出的一款工业级内含 I2C 总线接口功能的具有极低功耗的CMOS 多功能时钟/日历芯片。PCF8563 的多种报警功能、定时器功能、时钟输出功能以及中断输出功能能完成各种复杂的定时服务,甚至可为单片机提供看门狗功能。是一款性价比
极高的时钟芯片,它已被广泛用于电表、水表、气表、电话、传真机、便携式仪器以及电池
供电的仪器仪表等产品领域,其内部结构图如下:
从结构图可知,PCF8563配置是采用IIC配置,故直接调用之前文章的IIC代码即可。
二、PCF8563代码配置设计
PCF8563的配置主要分三步,第一步,上电初始化;第二步,配置时间日期;第三步,回读时间日期,话不多说,直上干货。
module i2c_pcf8563 #
(
parameter UCNT = 25 ,
parameter DWID = 8
)
(
input clk_sys ,
input rst_sys ,
//
input time_ena ,
input [23:0] time_dat ,
input data_ena ,
input [31:0] data_dat ,
//
input rw_mode ,
output reg[31:0] data_read ,
output reg[23:0] time_read
);
// ********************************************************
// localparam
// ********************************************************
localparam IDLE = 4'd0 ;
localparam INIT = 4'd1 ;
localparam INIT_DONE = 4'd2 ;
localparam TIME = 4'd3 ;
localparam TIME_DONE = 4'd4 ;
localparam DATA = 4'd5 ;
localparam DATA_DONE = 4'd6 ;
localparam READ = 4'd7 ;
localparam READ_DONE = 4'd8 ;
localparam PCF_INT = 8'h00 ;
localparam PCF_DAT = 8'h05 ;
localparam PCF_WEK = 8'h06 ;
localparam PCF_MON = 8'h07 ;
localparam PCF_YAR = 8'h08 ;
localparam PCF_SEC = 8'h02 ;
localparam PCF_MIN = 8'h03 ;
localparam PCF_HOU = 8'h04 ;
// ********************************************************
// signal
// ********************************************************
reg [3:0] cstate = IDLE ;
reg [3:0] nstate = IDLE ;
wire rst_nedge ;
wire i2c_w_done ;
wire i2c_r_done ;
wire done_nedge_w ;
wire done_nedge_r ;
reg [3:0] time_cnt = 0 ;
reg [3:0] data_cnt = 0 ;
reg [3:0] read_cnt = 0 ;
reg reg_dena = 0 ;
reg