当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]这个项目是我首次在FPGA上实现RTL设计,用于与外部组件进行接口连接。此前我曾尝试使用Altera MAX II EPM240 CPLD来实现简单的数字逻辑,例如多路复用器、解码器、用于闪烁LED的计数器,甚至UART发送器。尽管编程过程非常有趣,但很快我就意识到,仅靠240个逻辑单元难以完成太多功能。于是我投资购买了一块FPGA板,并最终在AliExpress上选择了Altera Cyclone IV EP4CE6E22C8N板,因其成本相对较低且内置多种外设,而成为我的首选。

这个项目是我首次在FPGA上实现RTL设计,用于与外部组件进行接口连接。此前我曾尝试使用Altera MAX II EPM240 CPLD来实现简单的数字逻辑,例如多路复用器、解码器、用于闪烁LED的计数器,甚至UART发送器。尽管编程过程非常有趣,但很快我就意识到,仅靠240个逻辑单元难以完成太多功能。于是我投资购买了一块FPGA板,并最终在AliExpress上选择了Altera Cyclone IV EP4CE6E22C8N板,因其成本相对较低且内置多种外设,而成为我的首选。

作为我新电路板上的第一个项目,我决定做一个“Hello World”式的简单程序,但这次不使用LED闪烁,因为我之前已经用CPLD试过这个功能。最终我选择了电路板上的4位7段数码管,并给自己设定任务:设计一个计数器,从0开始递增到9999,每秒加1,当达到最大值9999时自动回零。当时我选择的硬件描述语言是VHDL,因为这是我在那时最熟悉的语言。

硬件

EP4CE6E22C8N板上的4位7段数码管采用共阳极结构。由于阳极连接到公共端子,因此需要施加高电压来激活器件的每个数码,从而使各段LED能够独立控制(通过低电压即可点亮)。四个数码共用同一组引脚来控制各个段(实现多路复用)。由于引脚经过复用,只有在每次选择7段数码中的一个时,才能显示不同数字的数据,从而逐个显示每个数码的数值,并快速切换至下一个,使人类肉眼无法察觉过渡过程。

RTL设计

该设计包含三个VHDL文件/模块,分别为:seg_display.vhd、seg_counter.vhd和seg_rom.vhd。用于显示数字0到9的逻辑/位组合存储在ROM模块中。计数器模块根据七段数码管上各位数字的位值,以相应速率从0递增到9。共有四个数字位:个位、十位、百位和千位。计数器被实例化以更新各数字的值,使得下一个数字(左侧)的计数器速度比前一个慢10倍。尽管这种设计可以工作,但效率极低,因为它需要四个活动的计数器。更好的解决方案是使用双达布算法(我几个月后才了解到这一点)将要显示的数值从二进制转换为BCD。七段数码管的VHDL模块会实例化计数器和ROM模块,并切换七段数码管上的各个数字,以实现如本文硬件部分所述的正确显示不同数字的效果。

建设项目

多年来,我通过使其在一定程度上独立于平台,对项目进行了一些调整。使用Tcl脚本,在Windows和Ubuntu系统上均可顺利构建,不会出现问题。

代码

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭