前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >源码系列:基于FPGA实时时钟的设计(附源工程)

源码系列:基于FPGA实时时钟的设计(附源工程)

作者头像
FPGA技术江湖
发布2020-12-30 11:18:35
6390
发布2020-12-30 11:18:35
举报
文章被收录于专栏:FPGA技术江湖
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。

今天给大侠带来基于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

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FPGA技术江湖 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档