FPGA开源项目分享——2D N-Body重力模拟器

news2024/9/17 7:27:31

​导语

今天继续康奈尔大学FPGA 课程ECE 5760的典型案例分享——2D N-Body重力模拟器。

(更多其他案例请参考网站:

Final Projects ECE 5760)

1. 项目概述

项目网址

Grav Sim

项目说明

该项目的目标是创建一个用DE1-SOC进行硬件加速的2D N-Body重力模拟器。

该模拟器拥有可定制的地图和基于鼠标的 GUI 交互功能。

视频参考:FPGA开源项目分享——2D N-Body重力模拟器

使用标准CPU模拟天体(恒星、行星、小行星等)之间的引力是有限的,因为它只能进行顺序计算,随着天体数量的增加,模拟时间会很长。而该项目是通过将每个天体的信息发送到FPGA来加速这些计算,让它并行计算其他天体之间的每次交互,然后将结果发送回ARM继而显示在显示器上。

2. 数学原理

加速器的数学基础从标准牛顿重力方程开始:

为了简化方程并减少 HPS 处理的计算量,先这样求解加速度:

然后用同样的方法计算其他加速度:

不过,对于这个计算,

这意味着如果物体靠得太近,会产生无限的加速度。这与现实不符,且由于该系统不处理对象的碰撞,因此需要添加不出故障的计算进去。

如果用一个偏移量epsilon来规范半径数学计算,就可阻止加速度增加到无穷大。

当选择epsilon取值是10的负8次方时,这意味着它不会明显超出尾数的精度也就是小数点后9位。

但是这只计算了总加速度。为了将加速度存储为矢量,则这里需要方向分量。为了计算这个,就用x和y的位移除以半径。

当应用到之前的加速度公式时得到了下面的方程:

给物体2的加速度加上一个负号因为位移是我们在原始x^计算中计算的负的位移。

由于无法快速执行浮点除法,因此在计算中只能进行3种不同的操作。加/减,乘和反平方根(使用快速反平方根算法)。下面的操作用于计算加速器中的最终结果。 首先用2个加法器计算半径的平方来计算x和y的位移,然后将输出与其自身相乘并求出它们的和,也就是半径的平方。

一旦有了半径的平方,就可以试着用半径平方的平方根的倒数来计算半径的倒数。

用半径平方和epsilon 平方之和的平方根的倒数,可以用下面的方法计算出前面所述的加速度方程:

更多原理介绍和方法实现请参考项目原文。

3. 视频演示

视频参考:

FPGA开源项目分享——2D N-Body重力模拟器

4. 源码下载

  1. GitHub - rafCodes/GravSim: 2D N-body, hardware accelerated gravity simulator with custom and interactive maps

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1482507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA-VGA成像原理与时序

什么是VGA: VGA, Video Graphics Array。即视频图形阵列,具有分辨率高、显示速率快、颜色丰富等优点。VGA接口不但是CRT显示设备的标准接口,同样也是LCD液晶显示设备的标准接口,具有广泛的应用范围。在FGPA中,常广泛用于图像处理等领域。 VGA 显示器成像原理 在 VGA 标准刚兴…

YOLO算法改进Backbone系列之:PVTv2

摘要:最近,Transformer在计算机视觉方面取得了令人鼓舞的进展。在本研究中,本文通过增加(1)线性复杂度注意层、(2)重叠贴片嵌入和(3)卷积前馈网络三种设计,改进了原始的金字塔视觉转换器(PVT v1),提出了新的基线。通过…

机器学习笔记 YOLOv9模型相关论文简读

一、YOLOv9简述 自 2015 年 Yolov1 推出以来,已经出现了多个版本。 基于Darknet的YOLOv2、YOLOv3和YOLOv4 YOLOv5 YOLOv8 基于 Ultralytics。 SCALED-YOLOv4 使用 Pytorch 而不是 Darknet。 YOLOR是YOLOv4的改进。 YOLOX是YOLOv3的改进。 YOLOv6专注于工业应用。 YOLOv7 来自 …

iOS消息转发流程

当向Objc对象发送消息时,如果找到对象对应的方法,就会进入消息转发流程,给开发者提供一些最后的机会处理消息无法发送问题,以免出现程序崩溃。 1. 回调对象的resolveInstanceMethod方法,在这个方法中,允许开…

【golang】go module依赖的git tag被覆盖 如何处理 | 因测试产生大量的git tag 如何清除 最佳实践

一、场景 当我们把本地和远程git仓库的 tag全部删除,我们另外的项目依赖于这个被删除tag无法更新版本 如何处理? 如上图: 这里我创建了一个 v0.0.1 的tag,然后删除了这个tag,然后又创建了一个新的 v0.0.1的tag&#xf…

【图论】【并集查找】【C++算法】928. 尽量减少恶意软件的传播 II

作者推荐 动态规划的时间复杂度优化 涉及知识点 图论 并集查找 LeetCode928. 尽量减少恶意软件的传播 II 给定一个由 n 个节点组成的网络,用 n x n 个邻接矩阵 graph 表示。在节点网络中,只有当 graph[i][j] 1 时,节点 i 能够直接连接到…

(每日持续更新)jdk api之PipedOutputStream基础、应用、实战

博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿&…

7. 构建简单 IPv6 网络

7.1 实验介绍 7.1.1 关于本实验 IPv6(Internet Protocol Version 6)也被称为IPng(IP Next Generation)。它是Internet工程任务组IETF(Internet Engineering Task Force)设计的一套规范,是IPv4…

Android minigbm框架普法

Android minigbm框架普法 引言 假设存在这么一个场景,我的GPU的上层实现走的不是标准的Mesa接口,且GPU也没有提专门配套的gralloc和hwcompoer实现。那么我们的Android要怎么使用到EGL和GLES库呢,并且此GPU驱动是支持drm实现的,也有…

Docker中使用Tomcat并部署war工程

系列文章目录 文章目录 系列文章目录前言一、构建镜像二、运行镜像三、列出正在运行的容器四、停止正在运行的容器 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文…

蓝桥杯Python B组练习——python复习2

蓝桥杯Python B组练习——python复习2 一、简介 复习python,参考书《Python编程从入门到实践》,[美]Eric Mathes著。前一部分见专栏——蓝桥杯Python B组练习 这一部分不全,不想写了 二、字典 1.一个简单的字典 来看一个游戏&#xff0…

Vue2:用node+express写一个轻量级的后端服务

1、桌面创建demo文件夹 进入demo,执行如下命令 npm init输入名称: test_server然后一路回车 2、安装express框架 npm i express3、新建server.js 在demo文件夹中,新建server.js const express require(express) const app express()…

系统集成Prometheus+Grafana

根据产品需求在自己的系统中添加一个系统监控的页面,其中有主机信息的显示,也有一些业务信息的显示。调研后的方案是 主机信息通过Prometheus采集和存储,业务信息通过自己系统的调度任务统计后存储在Mysql中,使用Grafana对接Prome…

LeetCode383. 赎金信(C++)

LeetCode383. 赎金信 题目链接代码 题目链接 https://leetcode.cn/problems/ransom-note/description/ 代码 class Solution { public:bool canConstruct(string ransomNote, string magazine) {int record[26] {0};if(ransomNote.size() > magazine.size()) return fa…

EasyRecovery2024国产免费的手机数据恢复软件

一、功能介绍 EasyRecovery手机数据恢复软件是一款功能全面的数据恢复工具,专为移动设备设计。其主要功能包括: 文件恢复:能够恢复手机中因各种原因丢失的文件,如照片、视频、音频、文档等。深度扫描:通过深度扫描手…

element-plus+vue3表单含图片(可预览)(线上图片)

一、要实现的效果: 二、如果期间出现这样的效果(表格穿透过来了),加上了这行代码就可以了: preview-teleported“true” 如果仅测试用,建议使用线上图片链接的形式,免得本地地址不生效&#xf…

Leetcoder Day25| 回溯part05:子集+排列

491.递增子序列 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。 示例: 输入:[4, 7, 6, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [6, 7], [7,7], [4,7,7]] 说明: 给定数组的长度不会超过15。数组中的整数范围是 [-100,100]。给定数…

2.模拟问题——1.输出梯形

补充:每行需要加两颗星 这种类型题目难度不大,一般是签到题。 规律总结 第一行是h个*;(h2*0)第二行是h2个*;(h2*1)…第i行是h2*(i-1)个*第h行是h2*(h-1)个* 注意,第h行表示梯形的底边长度&a…

Highest Price in Supply Chain (25)

1、题目: A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone involved in moving a product from supplier to customer. Starting …

MYSQL--锁机制*

一.对锁机制的大概介绍: 1.大概的来说,MYSQL当中的锁实际上就是合理的管理多个服务器对于同一个共享资源的使用,是计算机协调多个进程或者是线程并发访问某一资源的机制(避免争抢资源的现象发生) 2.在数据库当中,数据是一种可以供许多的用户进行共享使用的资源,如何保证数据并发…