- 看看国外大学的FPGA开发项目
据我了解,目前国内很多大学是没有开设FPGA相关课程的,所以很多同学都是自学,但是自学需要一定的目标和项目,今天我们就去看看常春藤盟校Cornell University 康奈尔大学开设的FPGA项目课程,大部分课程是有源码的,而且和国内使用习惯类似都是Verilog开发,还是很有借鉴意义的。
项目链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/
项目介绍
Spring 2013 开发板 CycloneII
Upper body Motion Tracking - 上半身运动跟踪
在这个项目中,使用 FPGA、VGA 显示器和摄像头创建了一个基于皮肤检测的实时人体上半身跟踪系统。视频流从摄像头获得,经过过滤、平均并存储在下采样内存中。下采样帧用于计算用户头部和手臂的位置。3D 投影会根据用户的相机视图进行更改,创建更逼真的 3D 机器人。用户可以通过一组开关更改当前的 VGA 视图。上面制作的系统能够模仿用户的实时身体运动。
- 项目介绍
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/wd65/wd65_SP13/index.html
- 视频链接1
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/wd65/body_motion_2.MP4
- 视频链接2
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/wd65/body_motion_1.MP4
- 代码链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/wd65/wd65_SP13/files/DE2_TV.qar
Hand tracking Pong - 手部追踪乒乓球
这是一款在 VGA 显示器上进行的基于肤色检测的乒乓球游戏,两名玩家进行游戏,将球滑过对方的球拍,飞向边界。每个球拍通过 HTC 231x CCD 摄像头跟踪玩家手部在垂直方向上的运动。每当一名球员未能阻止球时,另一名球员就得一分。当任何一名玩家获得 5 分并且屏幕上显示相应的获胜消息时,游戏结束。每次球撞到边界并弹起时,都会有声音效果。
- 项目介绍
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/hl855_kre27/hl855_kre27/index.html
- hackaday项目介绍
http://hackedgadgets.com/2013/05/11/hand-tracking-pong/
- 视频链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/hl855_kre27/pong.MP4
- 代码链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/hl855_kre27/hl855_kre27/Hand_Tracking_Pong.zip
Multiple NTSC screen game battleship - 多NTSC画面战舰游戏
“在两台具有自定义 NTSC 视频生成功能的电视上玩经典《战舰》游戏”
- 项目介绍
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/mdr87/index.html
- 视频链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/video/battleship.MP4
- 代码链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/mdr87/code/Battleship.qar
Augmented Reality Ball Game - 增强现实球类游戏
该项目使用 Sobel 算子检测白板上绘制的地图边缘。Pancake 处理器(上一篇文章有介绍)上实现的物理引擎控制地图上球的运动。地图和球显示在 VGA 屏幕上。
通过控制开发板上的开关和按键来进行游戏。玩家 1 在地图上绘制任意数量的直线。玩家 1 和玩家 2 各自尝试将球移动到目的地。球的运动由可以施加在任何角度的固定脉冲控制。到达目的地所需的脉冲数被记录并显示在七段显示器上。对球施加最少数量脉冲的玩家获胜。然后玩家 2 在地图上画出障碍物,游戏像以前一样继续进行。
- 项目介绍
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/cwf38_as889_mao65/index.htm
- 视频链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/video/line_game.MP4
- 代码链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/cwf38_as889_mao65/code/ece5760-final-cwf38-mao65-as889.zip
Anti-tetris game - 反俄罗斯方块游戏
在这个项目中,我在FPGA板上构建了一个名叫“Anti Tetris”视频游戏。游戏捕捉手的移动和推动,目标是通过推动避免方块掉落。如果方块填满了屏幕,玩家就会失败。最终得分是玩家消除了多少方块以及游戏持续了多长时间。游戏屏幕是真实视频流和俄罗斯方块的结合,这样玩家就可以看到他们如何击中方块。
- 项目介绍
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/tg293/tg293/index.html
- hackaday项目介绍
http://hackaday.com/2013/05/22/anti-tetris-project-is-a-study-in-hand-tracking/
- 视频链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/video/push_game.MP4
- 代码链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/tg293/tg293/code/DE2_TV.v
- 代码链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/tg293/tg293/code/VGA_Square.v
Video Game Enhancer - 视频游戏增强系统
在 FPGA 上设计和实现视频游戏增强系统(包括模糊、边缘检测、边缘增强、颜色反转、红/蓝交换、频闪灯、管视角、屏幕预览)。我们的实现是将标准 2 人分屏游戏的视频信号划分为两个 VGA 信号,每个信号仅显示单个玩家的一半屏幕。每个玩家都可以从 8 种不同的视频“效果”中选择一种定期对对手使用。
- 项目介绍
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/spw54_as986/spw54_as986/index.htm
- 视频链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/video/split_screen.MP4
- 代码链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/spw54_as986/spw54_as986/index.htm
Hardware-Based FPGA AI for Super Mario Bros - 基于FPGA AI 的超级马里奥兄弟
构建了一个基于 FPGA 的 AI,使用 NES 控制台的视频输入来自动玩《超级马里奥兄弟》游戏。所有视频分析和 AI 技术均在 FPGA 上运行的 Verilog 编译硬件来执行。该项目结合了 NTSC 解码、VGA 输出、基于内核的模式匹配、实时图像处理和 NES 控制器仿真。
- 项目介绍
http://www.nintendoninja.com/
- hackaday项目介绍
http://hackaday.com/2013/05/19/fpga-plays-mario-like-a-champ/
- 视频链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/video/Mario%20AI.mp4
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/video/mario.MP4
- 代码链接
https://github.com/sciguy14/NintendoNinja-Website/archive/master.zip
Beat-Programmagle Gate Array - 一款交互式、有趣的合成音序器,具有采样和作曲能力
使用 FPGA 板进行音频处理并使用 MATLAB 作为用户界面构建了一个定序器/合成器。合成器使用采样和附加合成声音的组合来模拟各种乐器。基于 FPGA 的音序器从 MATLAB GUI 获取输入并对每个乐器单独进行音序,允许用户实时创作作品。此外,还实施了自动增益控制算法,以确保增益不会溢出导致输出失真。
- 项目介绍
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/and43_mms297/and43_mms297_Webpage/index.html
- 代码链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/and43_mms297/and43_mms297_Webpage/index.html
Piano Hero with Virtual Keyboard - 带虚拟键盘的钢琴英雄
实现了一个交互式钢琴游戏,即使屏幕不是触摸屏,但是用户也可以在屏幕上弹奏虚拟钢琴键盘。
通过在显示器上方连接摄像头,通过非常简单的校准步骤,显示器就变成了触摸屏!然后,通过敲击屏幕上显示的虚拟钢琴键,将获得像弹奏真实钢琴的声音。我们为用户提供了两种模式,一种是练习模式,用户可以按照自己的意愿随意玩;另一种模式是播放模式,在该模式中,用户将按照在给定时间按下哪个键的图形指示来播放歌曲,并且用户将获得他们播放歌曲的好坏的分数。
- 项目介绍
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/cl972_rh523/cl972_rh523/index.html
- hackaday项目介绍
http://hackaday.com/2013/05/20/camera-based-touchscreen-input-via-an-fpga/
- 视频链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/video/video_piano.MP4
- 代码链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/cl972_rh523/cl972_rh523/SourceCode.zip
Music Suite - 音乐组曲
音频作曲家和指挥套件。
- 项目介绍
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/esh64_er294_as885/esh64_er294_as885/index.html
- 视频链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/video/conductor.MP4
- 代码链接
代码未开放
Realtime image effects - 实时图像效果
使用 FPGA 实现图像膨胀、腐蚀、开运算、闭运算和边缘检测。源码极具参考~
- 项目介绍
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/xb46_jw937/xb46_jw937/index.html
- 视频链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/video/vid_filter.MP4
- 代码链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/xb46_jw937/xb46_jw937/index.html
Red tool revolver - 将红色螺丝刀变成数码射击器
摄像机输出 NTSC 信号进入FPGA,经过处理后从摄像机视野中的图像中提取 RGB 值。RGB 值通过阈值来挑选出独特的颜色值,并且该对象的中心用作我们手枪(数码射击器)的十字准线。VGA 控制器用于将视频输入输出到 VGA 监视器,并显示多个重叠对象,例如在视频图像上绘制的十字准线、目标和拍摄的镜头。我们使用 7 段显示器来跟踪玩家的得分,并使用开关控制游戏中的不同参数,例如难度级别。
- 项目介绍
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/em447_jm776/em447_jm776/index.html
- 代码链接
https://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/s2013/em447_jm776/em447_jm776/DE2_TVv10.zip
总结
项目很多,从2016~2023年,应该有一部分项目没有展现出来,大部分都有视频介绍,但是我看了一些视频,都是简单演示一下功能,并没有设计思路,所以需要自行查看源码中的文档。
原文:OpenFPGA
作者:碎碎思
相关文章推荐
- 国外大学生都用FPGA做什么项目(八)
- 国外大学生都用FPGA做什么项目(七)
- 国外大学生都用FPGA做什么项目(六)-游戏爱好者的福音
- 国外大学生都用FPGA做什么项目(五)
- 国外大学生都用FPGA做什么项目(四)
更多FPGA干货请关注FPGA的逻辑技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。