注:本文由不愿透露姓名的 @Cardia 同学撰写。以下为正文。
在上一篇文章中,通过LED灯的实例介绍了时序逻辑的实现,其文章链接如下:
人生状态机:[走近FPGA]之点亮LEDzhuanlan.zhihu.com本文的所有实例都使用硬木课堂Xilinx Aritx 7 FPGA板进行上实现,且附有上板演示视频,该开发板的链接如下:
硬木课堂 Xilinx Aritx 7 FPGA板 Arm Cortex-M SoC设计 集创赛item.taobao.com在这篇文章中,将结合之前介绍的模块化设计思想以及数字电路中组合逻辑与时序逻辑的知识,分享三个在FPGA开发板上实现的数码管动态显示的案例。
数码管动态显示原理
在介绍实例之前,我们需要先了解一下数码管动态显示的原理。在之前的文章中,曾介绍过数码管的显示原理,且实例中涉及到了数码管的静态显示,该文章链接如下:
人生状态机:[走近FPGA]之组合逻辑进阶——模块化设计zhuanlan.zhihu.com由于多位数码管的段选信号是连接在一起的,即数码管是共享段码的,那么所有点亮的数码管在同一时刻只能显示相同的图案。这看似大大局限了数码管的显示效果,但其实也有办法让多位的数码管在人眼看来能“同时”显示不同的图案,以获得更多样性的显示效果。其实现方法就是利用人眼的视觉暂留效应,轮流点亮数码管,并且在各位数码管点亮的期间给出对应的段码,只要进行这一过程的速度控制得当,人眼就来不及观察到各个数码管依次点亮,而是能看到多位数码管稳定地显示各自的图案。
在上个链接的文章,即介绍模块化设计的文章中,有一个实例是利用拨码开关手动地控制数码管的位选。而在实现数码管动态显示时,这个轮流选通的过程其实也是类似的,不过该过程需要电路能“自动”完成,且对位选通的时间间隔有一定要求,这一时间间隔既不能过长,否则人眼观察时有闪烁感,也不能过短,否则观察时数码管亮度会比较低。对于这篇文章中演示时使用的FPGA开发板来说,板载数码管共有六位,可以将数码管位选通的时间间隔设置为1ms。
实例一
实例一将分享一个基本的数码管动态显示案例。其实现目标是通过开发板上的三组拨码开关SW3-SW0、SW7-SW4、SW11-SW8分别控制三位数码管进行十六进制显示。根据数码管动态显示的原理和模块化设计的思想,该实例的电路框图设想如下: