I2C接口RTC实时时钟pcf8563读写Verilog驱动源码Quartus工程文件,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。
module rtc(
//system clock
input sys_clk , // 系统时钟
input sys_rst_n , // 系统复位
//pcf8563 interface
output rtc_scl , // i2c时钟线
inout rtc_sda , // i2c数据线
//user interface
input key2 , // 开关按键
output [5:0] sel , // 数码管位选
output [7:0] seg_led // 数码管段选
);
//parameter define
parameter SLAVE_ADDR = 7'h51 ; // 器件地址
parameter BIT_CTRL = 1'b0 ; // 字地址位控制参数(16b/8b)
parameter CLK_FREQ = 26'd50_000_000; // i2c_dri模块的驱动时钟频率(CLK_FREQ)
parameter I2C_FREQ = 18'd250_000 ; // I2C的SCL时钟频率
parameter POINT = 6'b010100 ; // 控制点亮数码管小数点的位置
//初始时间设置,从高到低为年到秒,各占8bit
parameter TIME_INI = 48'h18_05_23_09_30_00;
//wire define
wire clk ; // I2C操作时钟
wire i2c_exec ; // i2c触发控制
wire [15:0] i2c_addr ; // i2c操作地址
wire [ 7:0] i2c_data_w; // i2c写入的数据
wire i2c_done ; // i2c操作结束标志
wire i2c_ack ; // I2C应答标志 0:应答 1:未应答
wire i2c_rh_wl ; // i2c读写控制
wire [ 7:0] i2c_data_r; // i2c读出的数据
wire [23:0] num ; // 数码管要显示的数据
wire key_value ; // 按键消抖后的数据
//*****************************************************
//** main code
//*****************************************************
//例化i2c_dri,调用IIC协议
i2c_dri #(
.SLAVE_ADDR (SLAVE_ADDR), // slave address从机地址,放此处方便参数传递
.CLK_FREQ (CLK_FREQ ), // i2c_dri模块的驱动时钟频率(CLK_FREQ)
.I2C_FREQ (I2C_FREQ ) // I2C的SCL时钟频率
) u_i2c_dri(
//global clock
.clk (sys_clk ), // i2c_dri模块的驱动时钟(CLK_F