今天给大侠带来基于 FPGA 实时时钟的设计,附源码,获取源码,请在“FPGA 技术江湖”公众号内回复“基于 FPGA 实时时钟的设计源码”,可获取源码文件。话不多说,上货。
本次设计采用了美国 DALLAS 公司推出的一种高性能、低功耗、带 RAM 的实时时钟电路 DS1302,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为 2.5V~5.5V。采用三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据。DS1302 内部有一个 31×8 的用于临时性存放数据的 RAM 寄存器。
DS1302 芯片的封装如下:
DS1302 芯片有 8 个引脚,在本次的设计中只要驱动 3 个引脚就可以了,其他的引脚都是和硬件相连接的,和 FPGA 连接的有时钟 sclk,串行数据数据接口 IO,以及 CE。
其工作原理就是在数据的传送过程中先把 CE 拉高,在每个数据的上升沿写入数据,在下降沿输入数据,一次只能读写一位数据。最初我们通过一个 8 位的控制指令来选择读写,如果控制指令是单字节模式,连续的 8 个脉冲上升沿写入,下降沿读出数据,一次只能读取一个字节,如果是突发模式通过连续的脉冲一次性的写完 7 个字节的时间寄存器也可以一次性的读完 8--328 位的 ram 数据
控制指令有 8 位,第七位必须为高,如果是 0 写入被禁止,第六位 0 是对时钟寄存器的读写操作,为 1 对是控制对 RAM 区的读写操作。
bit1 -- 5 是对相关寄存器的操作,bit0 是读写操作。
各个寄存器的的设置,和每位的表示如下图,从图中我们了解到读写时控制字是多少以及写入寄存器的地址,和写入的 8 位的时间表示。我们可以通过下表来设置一个初始的时间。
涓流寄存器主要决定了 DS1302 的充电特性,涓流充电选择位 4--7 位,1010 涓流充电其他禁止充电,二级管选择位 3--2 位,电阻选择 1--0 位具体的选择如下表 。
突发模式下,表示我们可以连续写,连读,连续写时必须写满 7 个时钟寄存器。时序图如下,SPI 通信 。
下表表示数据传送过程中数据的延迟,时钟的周期等时间。
本次设计是通过配置 DS1302 芯片来实现实时时钟的监测,通过控制 2 个按键来选择我们要在数码管上显示的时间,按下按键 1 来显示周几,按下按键 2 来显示年月日,不按显示时分秒,这样显示符合实时钟的显示。思路是先打开写保护,一个一个寄存器的写进去,然后关闭写保护,然后再读出数据。
设计架构图:
设计代码:(源码文件可从公众号内部获取)
总模块:
控制模块:(由于控制模块代码较多,只展示部分关键信号,具体代码如有需要,请公众号内自行获取)
数码管模块:
测试模块:(Mmodelsim 仿真)
仿真图:
从仿真测试图中,可以清楚的看到在发送的寄存器命令时,收回总线控制权,读数据时,释放了总线控制权。
下图是突发读的时序图,此次设计是一个一个的写寄存器,必须写满 7 个时钟寄存器,然后突发的读,突发读的时候拉高 CE,然后不停的读接收数据。拓展也可以做突发读写,原理一样,感兴趣的可以试一试。
END
作者:FPGA佚名侠客
来源:FPGA技术江湖
相关文章推荐
- 基于 FPGA 的 IIC 设计(附源工程)
- 使用 IP 核和开源库减少 FPGA 设计周期
- 基于 FPGA 的任意波形发生器(DDS)设计(附源工程)
- 基于 FPGA 的中值滤波器设计(附源码)
- RTL 与 HLS 强强联合打造 FPGA 新开发之路
更多 FPGA 干货请关注 FPGA 的逻辑技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。