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
相关推荐
嵌入式-老费32 分钟前
Linux Camera驱动开发(fpga + csi rx/csi tx)
fpga开发
ALINX技术博客13 小时前
【202601芯动态】全球 FPGA 异构热潮,ALINX 高性能异构新品预告
人工智能·fpga开发·gpu算力·fpga
JJRainbow20 小时前
SN75176 芯片设计RS-232 转 RS-485 通信模块设计原理图
stm32·单片机·嵌入式硬件·fpga开发·硬件工程
s91236010121 小时前
FPGA眼图
fpga开发
北京青翼科技21 小时前
【PCIe732】青翼PCIe采集卡-优质光纤卡- PCIe接口-万兆光纤卡
图像处理·人工智能·fpga开发·智能硬件·嵌入式实时数据库
minglie11 天前
verilog信号命名规范
fpga开发
XINVRY-FPGA1 天前
中阶FPGA效能红线重新划定! AMD第2代Kintex UltraScale+登场,记忆体频宽跃升5倍
嵌入式硬件·fpga开发·硬件工程·dsp开发·fpga
南檐巷上学1 天前
基于FPGA的音频信号监测识别系统
fpga开发·音频·verilog·fpga·傅立叶分析·fft·快速傅里叶变换
Aaron15882 天前
基于RFSOC的数字射频存储技术应用分析
c语言·人工智能·驱动开发·算法·fpga开发·硬件工程·信号处理
碎碎思2 天前
当 FPGA 遇见怀旧计算:486 与 Atari ST 的硬件级重生
fpga开发