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

​导语

今天继续康奈尔大学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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记一次dockerfile无法构建问题追溯

我有一个dockerfile如下: ENTRYPOINT ["/sbin/tini","-g", "--"] CMD /home/scrapy/start.sh 我原本的用意是先启动tini,再执行下面的cmd命令启动start.sh。 为啥要用tini? 因为我的这个docker…

CleanMyMac X2024测评深度分析与功能全面介绍

一、软件概述 CleanMyMac X 是一款强大的Mac清理和优化工具,它可以帮助用户轻松管理和释放Mac上的空间,优化系统性能,提高运行速度。这款软件以其直观的用户界面和丰富的功能受到了广大Mac用户的欢迎。 CleanMyMac X4.14.6全新版下载如下: …

vue cesium加载点与定位到指定位置

vue cesium定位到指定位置 window.viewer.camera.flyTo({destination: Cesium.Cartesian3.fromDegrees(point.longDeg, point.latDeg, 6500000), orientation: {heading: 6.2079384332084935, roll: 0.00031509431759868534, pitch: -1.535}, duration: 3})vue cesium加载点 …

如何开好一家汽车美容店,汽车美容保养与装饰教学

一、教程描述 本套教程共由17张VCD组合而成,教程内容主要包括:美容店的设立和管理,汽车系统与内部结构,汽车美容工具与美容设备,美容用品的选择与使用,车身打蜡镀膜与内外清洁,车身抛光与漆面处…

List<Object>集合对象属性拷贝工具类

目录 问题现象: 问题分析: 解决方法: 问题现象: 最近在项目中经常会使用到BeanUtils工具类来作对象的属性字段拷贝,但如果应用到List集合的话就需要遍历去操作了,如下: 打印结果: …

IIS部署.Net 7项目

👨 作者简介:大家好,我是Taro,前端领域创作者 ✒️ 个人主页:唐璜Taro 🚀 支持我:点赞👍📝 评论 ⭐️收藏 文章目录 前言一、发布项目二、解决发布失败1.发布失败2.托管…

VMware虚拟机找不到*.vmdk文件

解决方法:查看这些文件序号是否连续,如果不是连续的,看看是否有其它软件误删了,如病毒防护软件,尝试恢复被删除的文件。 在这里恢复

逆变器专题(16)-构网型逆变器与跟网型逆变器

相应仿真原件请移步资源下载 现如今,常规的逆变器控制方法主要分为跟网型以及构网型逆变器 跟网型逆变器即常规意义上的并网逆变器,即输出电流直接接入大电网,通常为电流源型逆变器,其输出电流的相位与频率时随着电网电压而随时进…

C++ STL标准程序库开发指南学习笔记

一、类模板简介: 在现今的C标准模板库中,几乎所有的东西都被设计为template形式,不支持模板,就无法使用标准程序库。模板库可以认为是针对一个或多个尚未明确的类型而编写一套函数或类型。模板是C的一个新特性。通过使用模板&…

Netty5 入门HelloWorld

一、客户端代码及关键类说明 /*** netty5的客户端* author -zhengzx-**/ public class ClientSocket {public static void main(String[] args) {//服务类Bootstrap bootstrap new Bootstrap();//workerEventLoopGroup worker new NioEventLoopGroup();try {//设置线程池boo…

RabbitMQ-TTL/死信队列/延迟队列高级特性

文章目录 TTL死信队列消息成为死信的三种情况队列如何绑定死信交换机 延迟队列RabbitMQ如何实现延迟队列 总结来源B站黑马程序员 TTL TTLTTL(Time To Live):存活时间/过期时间当信息到达存活时间后,还没有被消费,会被自动清除。RabbitMQ可以对消息设置过…

【Web安全靶场】sqli-labs-master 54-65 Challenges 与62关二分法和like模糊搜索

sqli-labs-master 54-65 Challenges 其他关卡和靶场见专栏… 文章目录 sqli-labs-master 54-65 Challenges第五十四关-联合注入第五十五关-联合注入第五十六关-联合注入第五十七关-联合注入第五十八关-报错注入第五十九关-报错注入第六十关-报错注入第六十一关-报错注入第六十…

前端学习第三天-css基础

1. CSS简介 从HTML被发明开始,样式就以各种形式存在。不同的浏览器结合它们各自的样式语言为用户提供页面效果的控制。最初的HTML只包含很少的显示属性。 随着HTML的成长,为了满足页面设计者的要求,HTML添加了很多显示功能。但是随着这些功能…

消息队列+更新DB极易引发的DB并发修改bug

背景 我们在生产系统中和其他系统进行交互时一般都会通过消息队列来解耦生产者和消费者,然后通过每个使用方消费消息队列的消息的方式来完成消息的消费,并且一般来说我们消费消息后极有可能会操作DB,不过这种方式如果处理不够仔细&#xff0…

YOLOv9改进|加入AKConv模块!

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、改进点介绍 AKConv是一种具有任意数量的参数和任意采样形状的可变卷积核,对不规则特征有更好的提取效果。 论文速览:&am…

44岁香港乐队主唱无惧身份悬殊娶「十亿千金」,乐队因欠沟通解散

「豪门驸马」这个头衔听起来似乎是「人生赢家」,可其中无非就是想内涵女强男弱,靠老婆之类的意思,所以大部分男艺人都很排斥。 香港知名乐队Mr. 的主唱布志纶(Alan) 自从2014年娶了「玩具大王」千金陈雪莹后,也被外界封为「十亿驸…

H12-821_98

98.如图所示的广播网络中,OSPF运行在四台路由器上,且在同一区域和同一网段。OSPF会自动选举一个DR和一个BDR,其余的两台路由器会成为DRother,从而达到更好的备份效果。 A.对 B.错 答案:A 注释: 这道题需要注意的是,在…

Jupyter Notebook的安装和使用(windows环境)

一、jupyter notebook 安装 前提条件:安装python环境 安装python环境步骤: 1.下载官方python解释器 2.安装python 3.命令行窗口敲击命令pip install jupyter 4.安装jupyter之后,直接启动命令jupyter notebook,在默认浏览器中打开jupyte…

vulhub中Aapache Tomcat AJP 文件包含漏洞复现(CVE-2020-1938)

查看tomcat默认页面,此时通过AJP协议的8009端口亦可访问Tomcat。 利用如下工具均可测试漏洞: https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi 工具需要用到python2, 如果需要进一步利用需要向服务器的/webapps/ROOT目录下上传…

续上一篇---Jetson Xavier NX 开发板Yolov4 环境搭建和摄像头实时检测教程

1.已成功安装完CUDA,OpenCV,cuDNN,配置如下: 2.下载yolov4 自行去GitHub下载,然后再导入NX中,这样比较快且不容易出错。 https://github.com/AlexeyAB/darknet.git 3.配置 下载好包后解压缩,进…