2024年寒假练 - 用小脚丫FPGA核心板制作秒表
该项目使用了Lattice MXO2的小脚丫FPGA核心板 - Type C接口,实现了具有启动、停止、递增和清除功能的秒表的设计,它的主要功能为:通过小脚丫FPGA核心板上的2个数码管和轻触按键制作一个秒表,通过按键来控制秒表的功能,并在数码管上显示数值。。
标签
FPGA
数字逻辑
何小强
更新2024-04-01
24

虽然我在大学期间研修过电子相关的科目,但一直到了工作之后,都没接触过FPGA。刚好电子森林在“2024寒假在家一起练”的活动中,提供了一个让电子爱好者学习FPGA的机会。苏州思得普信息科技公司开发了STEP小脚丫FPGA学习平台,专门针对FPGA初学者(尤其是学习数字电路的在校同学)提供了性价比高、学习门槛低的学习模块系列。板上选用的芯片兼具了FPGA和CPLD的优点,瞬时上电启动,无需外部重新配置FPGA,是学习数字逻辑绝佳的选择。

最新推出的STEP-MXO2-LPC在易用性方面做了大幅升级:

  • 使用了USB Type C接口提供板上+5V供电、FPGA的配置,并新增了UART通信的功能,因此无需再通过其它端口与PC进行数据通信
  • 支持U盘模式(连接到上位机的USB端口,上位机自动弹出StepFPGA的U盘盘符)的下载,直接将生成的jed配置文件发送到StepFPGA盘中即可完成编程
  • 升级的Web IDE系统可在任何一款电脑上通过浏览器进行FPGA的编程和编译。图形化的界面使得操作非常直观、便捷

这些亮点对初学者特别友好,极大地简化了开发流程,用户不必再下载安装Diamond软件,节省了大量不必要的时间精力。这一点对于仅仅是尝鲜的业余爱好者来说简直是福音。

因为也仅仅是尝鲜,我就选择了比较简单的第一个任务,实现一个具有启动、停止、递增和清除功能的秒表。具体要求是:

  1. 使用七段显示器作为输出设备,在小脚丫FPGA核心板上创建一个2位数秒表。 秒表应从0.0秒计数到9.9秒,然后翻转,计数值每0.1秒精确更新一次。秒表使用四个按钮输入:开始、停止、增量和清除(重置)。
  2. 开始输入使秒表开始以10Hz时钟速率递增(即每0.1秒计数一次);停止输入使计数器停止递增,但使数码管显示当前计数器值;每次按下按钮时,增量输入都会导致显示值增加一次,无论按住增量按钮多长时间;复位/清除输入强制计数器值为零。


学习了培训教材《STEP-MXO2 快速入门》之后,我明白了这个任务考察的就是译码器和时钟分频的应用,事实上它与《实验八:计时控制》非常相似。

在小脚丫上有两位独立的共阴极七段数码管。数码管所有的信号都连接到FPGA的管脚,作为输出信号控制。FPGA只要输出这些信号就能够控制数码管的那一段LED亮或者灭。这样我们通过组合逻辑的输出来控制数码管显示数字。下面是数码管显示的表格:

image.png


至于时钟分频,我直接参考率入门材料的实验六和实验八的代码,只是因为时钟频率从1Hz改成10Hz,那么计数要从12_000_000改成1_200_000。整体而言,本任务与实验八的设计非常接近:

image.png


4-10编码器是个很常见的功能模块,除了参考入门资料,网络上的资源非常多,甚至可以尝试一下最近很流行的大模型。翻墙不易,我们尝试一下国内的智谱清言,结果还是比较靠谱的。

image.png

目前看起来,AI给出来的代码已经可以用于参考了。加上小数点,LED显示代码的实现是这样子的:

module display(
seg_led_tens,
seg_led_ones,
cnt_ones,
cnt_tens
);

input [3:0] cnt_ones, cnt_tens;
output [8:0] seg_led_tens, seg_led_ones;

reg [6:0] seg [9:0];

initial
begin
seg[0] = 7'b0111111; // 0
seg[1] = 7'b0000110; // 1
seg[2] = 7'b1011011; // 2
seg[3] = 7'b1001111; // 3
seg[4] = 7'b1100110; // 4
seg[5] = 7'b1101101; // 5
seg[6] = 7'b1111101; // 6
seg[7] = 7'b0000111; // 7
seg[8] = 7'b1111111; // 8
seg[9] = 7'b1101111; // 9
end

assign seg_led_tens[8:0] = {2'b01,seg[cnt_tens]};
assign seg_led_ones[8:0] = {2'b00,seg[cnt_ones]};

endmodule

相对于教程,这个任务多了个增量的选项,跟递增一起实现,需要添加的代码并不多,编译很容易通过了。

image.png


点击WebIDE的"FGPA映射",可以看到编译结果,里面包括有硬件资源使用情况,比如使用的寄存器大小,LUT的个数等。总的来说,这个秒表应用只使用了很少一部分的硬件资源。所以我们可以利用这块核心板实现很多有趣的应用。

image.png


通过仿真对显示功能进行了单元测试。

image.png

最后把生成的jed文件拷贝到StepFPGA的U盘盘符中,就可以把程序写入小脚丫开发板里面。然后按下四个轻触按钮,重置、开始、停止、增量四个功能都工作正常。


总结,通过这个多功能秒表的简单实现,我总算解除了FPGA,收获还是满满的。

感恩,比心~

附件下载
archive.zip
源代码
run.log
团队介绍
就我自己啦~
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号