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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714844.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714844.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714844.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java面試技巧

一、面試前準備 復習基礎知識:深入理解Java核心概念,如JVM、JDK、JRE等。熟悉Java基本語法、面向對象編程、異常處理、集合類、IO流等。同時,對Java的新特性,如Lambda表達式、Stream API等也要有所了解。強化算法和數據結構&…

簡易內存池2 - 華為OD統一考試(C卷)

OD統一考試(C卷) 分值: 200分 題解: Java / Python / C 題目描述 請實現一個簡易內存池,根據請求命令完成內存分配和釋放。 內存池支持兩種操作命令,REQUEST和RELEASE,其格式為: REQUEST請求的內存大小 …

Redis 【1】—— 安裝 與 配置

Redis 【1】—— 安裝 與 配置 一、安裝 與 配置(一)使用 yum 安裝(二)創建符號鏈接1. 軟鏈接2. 相關指令 (三)修改配置文件(四)Redis 的啟停 一、安裝 與 配置 (一&…

Java的強引用、軟引用、弱引用和虛引用詳解。

Java的強引用、軟引用、弱引用和虛引用 1. 強引用2. 軟引用3. 弱引用4. 虛引用 總結 Java的強引用、軟引用、弱引用和虛引用可以用來標識GC時判斷對象是否達到回收的條件,下面結合Java代碼看看這四類引用吧。 1. 強引用 是最普通的引用方式,通過new關鍵…

外貿業務員沒客戶的7大原因+解決辦法!

業務員沒有客戶,就是無源之水,無本之木,這自然也就沒有業績。那些吃空餉的業務員,遲早會拖垮公司。所以不管是什么原因導致的業務員沒客戶,都要一一查驗清楚。七個業務員沒有客戶的原因,七種對策&#xff0…

華為數通方向HCIP-DataCom H12-821題庫(多選題:21-40)

第21題 管理員在配置 VRRP 時,下面哪些不是必須配置的? A.搶占模式 B.搶占延時 C.虛擬IP 地址 D.虛擬路由器的優先級 【參考答案】ABD 【答案解析】 VRRP的作用之一是提供一個虛擬的IP地址,用作默認網關,用來實現冗余和故障轉移。因此,配置虛擬IP地址是必須的。華為設備vr…

hcip交換

交換機功能 無限的傳輸距離——識別,重寫電信號(幀)保證信息完整徹底解決了沖突二層單播——MAC地址表提高端口密度 單播地址:MAC地址第一個字節第8位為0 組播地址:MAC地址第一個字節第8位為1 廣播地址:全1…

滲透測試靶場環境搭建

1.DVWA靶場 DVWA(Damn Vulnerable Web Application)是一個用來進行安全脆弱性鑒定的PHP/MySQL Web應用,包含了OWASP TOP10的所有攻擊漏洞的練習環境,旨在為安全專業人員測試自己的專業技能和工具提供合法的環境,同時…

Mybatis批量更新對象數據的兩種方法

說明:遇到一次需要批量修改對象的場景。傳遞一個對象集合,需要根據對象ID批量修改數據庫數據,使用的是MyBatis框架。查了一些資料,總結出兩種實現方式。 創建Demo 首先,創建一個簡單的Demo; &#xff08…

SpringBoot+Jwt+Redis

大致流程: 參照: 史上最全面的基于JWT token登陸驗證_完整的基于jwt的登陸認證-CSDN博客 springboot整合JWTRedis_springboot jwt redis-CSDN博客

鴻蒙Harmony應用開發—ArkTS聲明式開發(通用屬性:浮層)

設置組件的遮罩文本。 說明: 從API Version 7開始支持。后續版本如有新增內容,則采用上角標單獨標記該內容的起始版本。 overlay overlay(value: string | CustomBuilder, options?: { align?: Alignment; offset?: { x?: number; y?: number } })…

劍指offer面試題28:對稱的二叉樹

#試題28:對稱的二叉樹 題目: 請設計一個函數判斷一棵二叉樹是否 軸對稱 。 示例 1: 輸入:root [6,7,7,8,9,9,8] 輸出:true 解釋:從圖中可看出樹是軸對稱的。示例 2: 輸入:root …

【合宙ESP32C3 Arduino開發】第四篇:TFT_eSPI 驅動 合宙Air101 ST7735 LCD 顯示普通時鐘,模塊化編程

忘記過去,超越自己 ?? 博客主頁 單片機菜鳥哥,一個野生非專業硬件IOT愛好者 ???? 本篇創建時間 2024-03-02???? 本篇更新時間 2024-03-02??🎉 歡迎關注 🔎點贊 👍收藏 ??留言📝🙏…

白話大模型② | 如何提升AI分析的準確性?

白話大模型系列共六篇文章,將通俗易懂的解讀大模型相關的專業術語。本文為第二篇:如何提升AI分析的準確性? 作者:星環科技 人工智能產品部 面對AI分析落地時的數量化、準確性、泛化性等問題,讓我們稍微深入了解下當前…

pycharm專業版本的安裝

一 、到官網下載對應的pycharm安裝包 也可以把安裝軟件(用物理機下載到共享文件夾) 然后進入Ubuntu系統把下載大的安裝包剪貼到目標路徑 1 在ubuntu中創建一個用來存放pycharm安裝包的文件夾 rootzmq-virtual-machine:/home/zmq/Desktop# mkdir pycha…

京東云硬鋼阿里云:承諾再低10%

關注盧松松,會經常給你分享一些我的經驗和觀點。 阿里云剛剛宣布史上最大規模的全線產品降價20%,這熱度還沒過,京東云當晚就喊話:“隨便降、比到底!,全網比價,擊穿低價,再低10%”,并…

[技巧]Arcgis之圖斑四至范圍批量計算

ArcGIS圖層(點、線、面三類圖形)四至范圍計算 例外一篇介紹:[技巧]Arcgis之圖斑四至點批量計算 說明:如下圖畫出來的框(范圍標記不是很準) ,圖斑的x最大和x最小,y最大,…

專為大模型訓練優化,百度集合通信庫 BCCL 萬卡集群快速定位故障

1 集合通信對分布式訓練至關重要 在分布式訓練中,每一塊 GPU 只負責處理部分模型或者數據。集群中不同 GPU 之間通過集合通信的方式,完成梯度同步和參數更新等操作,使得所有 GPU 能夠作為一個整體加速模型訓練。 如果有一塊 GPU 在集合通…

C++調用PyTorch模型教程

在人工智能的世界中,PyTorch已經成為了研究人員和工程師們廣泛使用的深度學習框架之一。它以其靈活性和動態計算圖而聞名,非常適合快速原型設計和實驗。然而,當我們想要將訓練好的模型部署到生產環境中時,我們可能會傾向于使用C這…

老衛帶你學---leetcode刷題(172. 階乘后的零)

172. 階乘后的零 問題 給定一個整數 n ,返回 n! 結果中尾隨零的數量。 提示 n! n * (n - 1) * (n - 2) * … * 3 * 2 * 1 示例 1: 輸入:n 3 輸出:0 解釋:3! 6 ,不含尾隨 0 示例 2: 輸入…