FPGA设计实例——基于FPGA的简易数字时钟设计_OLED显示
一、概述
基于橙月FPGA开发板设计一个简易数字时钟,并显示到OLED显示屏中,要求能够显示星期几、时钟、分钟和秒钟,并且板载的4个按键分别可以进行天数增加、时钟增加、分钟增加和分钟减小,同时即将到达整点时,LED闪烁进行报时。
本工程参考的是微信公众号“FPGA之旅”的开源工程:Oled数字时钟,以及本公众号上一篇文章《基于FPGA的IIC OLED字符显示系统》的内容,并在此基础上进行修改得到,如增加自定义的数字时钟计时模块、修改状态机跳转逻辑,直接上电后即可依次实现初始化和清零操作,并进入数字时钟的显示界面。
二、实验平台搭建
本系统整体连接如图1所示,将OLED模块直接插入FPGA开发板,FPGA开发板通过IIC接口驱动显示屏显示字符。
主控芯片采用Intel的Cyclone IV E系列FPGA,具体型号是EP4CE6E22C8N,该芯片具有6272个逻辑单元,270kbits嵌入式存储器,2个通用PLL,逻辑资源丰富。开发板具有摄像头接口、VGA接口和SDRAM芯片,是一款性价比极高的图像处理开发板,同时包含按键、LED灯和OLED模块,适合于各种逻辑设计。
图1 系统整体连接实物图
本实验使用的OLED模块为0.96寸的蓝色OLED 4P模块,控制接口为IIC接口,分辨率为128*64,使用3.3V供电(也可以是5V供电),OLED屏幕内部驱动芯片为SSD1306。
三、关键模块介绍
接下来介绍本实验的关键模块:
(1)IIC总线驱动模块(I2C_Master.v):实现了IIC总线协议,直接用于控制外部的IIC OLED设备。
(2)初始化模块(Oled_Init.v):通过IIC接口,往OLED显示屏中特定的寄存器写入指令,完成OLED的初始化。
(3)屏幕清除模块(Oled_Clear.v):初始化完成后,OLED显示的数据杂乱无章,本模块将OLED的8个Page中的各列写0,实现屏幕清除操作。
(4)显示控制模块(Oled_DClock_control.v):本模块输出待显示字符的x、y坐标和显示字符索引,用于后续的字符显示。如果需要修改显示字符,则需要修改本模块中的字符数量和对应字符的x、y坐标。
(5)字符显示模块(Oled_DClock_Info.v):本模块内部实例化字符数据子模块,主要功能是根据显示控制模块的x、y坐标和显示字符索引,读取字符数据子模块的数据,通过IIC写入OLED中,完成对应字符的显示。
(6)字符数据模块(DClock_font_data.v):内部存储了取模软件生成的对应字模数据,如果需要修改待显示的字符,则需要同步修改本模块保存的字符。
(7)1s计数模块(clock_divide.v):本模块使用计数器,对50MHz的系统时钟进行1s计数,每计数1s,则生成一个时钟周期高电平的脉冲信号,用于后续的数字时钟计数。
(8)计时模块(clock_timer.v):数字时钟核心计时模块,输入包括4个校时按键消抖后的标志信号、1s计数标志信号等,输出星期几、小时数高位、小时数低位、分钟数高位、分钟数低位、秒钟数高位和秒钟数低位。
(9)按键消抖模块(key_filter.v):本模块实现的功能是对按键进行消抖,确保每按下一次按键,则输出一个时钟周期高电平的脉冲信号。
四、实验验证
本工程的管脚绑定结果如图2所示。
图2 管脚绑定
本工程的RTL视图如图3所示。
图3 RTL视图
本工程编译后的总结界面如图4所示。
图4 工程总结界面
最后,将编译生成的sof文件下载到FPGA开发板,OLED显示结果如图5所示。
图5 数字时钟显示结果
各个外设功能说明,如图6所示,具备天数调节、时钟调节、分钟调节和整点报时功能。
图6 各个外设功能说明
五、工程获取方法
加入知识星球——FPGA设计入门与提高,获取工程源码。
目前知识星球包括的优质FPGA工程如下:
【2-FPGA视频图像处理】_1_Sobel边缘检测
【3-FPGA数字信号处理】_1_DDS信号发生器
【3-FPGA数字信号处理】_2_CORDIC旋转模式实现sin和cos运算
【3-FPGA数字信号处理】_3_CORDIC向量模式实现arctan运算
【3-FPGA数字信号处理】_5_基于FPGA的CORDIC旋转模式实现sin和cos运算
【5-FPGA设计实例】_1_IIC OLED字符显示
【5-FPGA设计实例】_2_OLED 数字时钟
【5-FPGA设计实例】_3_DS18B20温度检测,OLED显示
【5-FPGA设计实例】_4_蓝牙通信_EGo1开发板
【5-FPGA设计实例】_5_超声波测距系统
【5-FPGA设计实例】_6_LCD1602驱动
