【FPGA开源项目分享】中国铁路网的 Dijkstra 算法实现

这篇具有很好参考价值的文章主要介绍了【FPGA开源项目分享】中国铁路网的 Dijkstra 算法实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如果本文图片和视频无法显示,请直接跳转到 友晶科技公众号FPGA开源项目分享——中国铁路网的 Dijkstra 算法实现 阅读原文。

前言

常春藤名校之一——康奈尔大学有一门名叫ECE 5760的FPGA 课程,网站(

Final Projects ECE 5760)公开了该课程讲师Bruce Land与学生们的项目作品(包含源码和说明)。

【FPGA开源项目分享】中国铁路网的 Dijkstra 算法实现,【FPGA开源项目分享】,fpga开发,arm开发,算法

课程中的每一个实验都是他们精心设计的,内容从基础的手控电玩游戏到复杂的演算法运算等,可谓包罗万象。如果把这些资料好好利用起来,将可以给我们的FPGA学习带来更多新想法和新方案。

近期小编将会选取其中一些典型案例跟大家分享。

【FPGA开源项目分享】中国铁路网的 Dijkstra 算法实现,【FPGA开源项目分享】,fpga开发,arm开发,算法

项目网址:

Starter Template for Bootstrap

项目说明:

该项目分别在DE1-SOC开发板的FPGA和HPS上实现了Dijkstra算法,能在中国铁路网中找到两站之间的最短距离和路线。

这个项目包含304个中国主要火车站。运行程序时,首先在VGA上显示包含所有火车站及站点之间连线的完整地图:

然后用户可以通过输入两个站点的名称,或在VGA屏幕相应的站点上点击鼠标以选择任意两个站点作为起点和目的地,程序会根据Dijkstra算法很快返回它们之间的最小距离、沿路站点以及计算所耗费时长,并在VGA显示器上显示出详细的路线。

最后他们将两套方案进行了对比,结果显示Dijkstra算法在FPGA上实现比仅在HPS上实现的计算速度快10倍。所以利用FPGA并行数据处理的优势来加速Dijkstra算法是个非常不错的选择。

Dijkstra算法

Dijkstra算法用于计算点网络中两点之间的最小距离和路径。由计算机科学家Edsger W. Dijkstra于1956年提出。下图是这个算法的一个概念解释:

【FPGA开源项目分享】中国铁路网的 Dijkstra 算法实现,【FPGA开源项目分享】,fpga开发,arm开发,算法

圆圈内的数字代表火车站,连接两个圆的线代表铁路,线旁边的数字是铁路的距离。例如,从1号站到4号站有多种选择,Dijkstra算法将帮助我们找到1号站到4号站的最短距离。

表1红框中的第1行表示节点1与其他每个节点之间的最小距离。

表1

【FPGA开源项目分享】中国铁路网的 Dijkstra 算法实现,【FPGA开源项目分享】,fpga开发,arm开发,算法

把1当作起点。为了获得 1 与其余每个站点之间的最小距离,需多次更新表1红框中的第 1 行。

首先,从点 1 到点 1 本身,距离为 0,这肯定是最短,因此不会再更新这个值,这里把0设定为固定值。

然后找到表1红框第 1 行中与1连接的最小距离对应的点,即距离为7的点 2 。此时不会再更新 7这个值,因为可以确保它是从点 1 到点 2 的最短距离。这里把7设定为固定值。

接下来,点2 将被视为下一个起点。如果第 1 行 x 列的距离大于第 1 行第 2 列和第 2 行 x 列的距离之和,则将第 1 行 x 列更新为距离之和。x 可以来自 {3,4,5,6} 中的任意数字。这样第一行就更新如下:

表2

【FPGA开源项目分享】中国铁路网的 Dijkstra 算法实现,【FPGA开源项目分享】,fpga开发,arm开发,算法

现在,除了固定值 0 和 7 之外,第 1 行中的最小值是 9,对应于点 3。它是从点 1 到点 3 的最短距离,所以此处9也被设定为固定值。

接下来,第 1 行将从第 3列更新。如果第1行x列的距离大于第1行第3列和第3行x列的距离之和,则将第1行x列更新为距离之和。x 可以来自 {4,5,6} 中的任意数字。第 1 行更新为:

表3

【FPGA开源项目分享】中国铁路网的 Dijkstra 算法实现,【FPGA开源项目分享】,fpga开发,arm开发,算法

用同样的方法,分别更新第1行的4、5和6列。结果如下所示:

表4

【FPGA开源项目分享】中国铁路网的 Dijkstra 算法实现,【FPGA开源项目分享】,fpga开发,arm开发,算法

这样就得到了点1与其他每个节点之间的最小距离。

视频演示

原文里面有视频演示:

FPGA开源项目分享——中国铁路网的 Dijkstra 算法实现

源码下载

1. Algorithm on C
2. DE1_SoC_Computer.v
3. Algorithm on FPGA
4. Translated map
5. Coordinate of each station文章来源地址https://www.toymoban.com/news/detail-803873.html

到了这里,关于【FPGA开源项目分享】中国铁路网的 Dijkstra 算法实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 开源项目 | 详细介绍下基于PCIe通信的Verilog/FPGA开源项目KastnerRG/riffa

    目录 1. 项目背景 2. 项目特点 3. 项目结构 4. 项目应用 总结 第一时间更新,以及更多更及时的技术资讯和学习技术资料,请关注公众号: CTO Plus KastnerRG/riffa是一个基于PCIe通信的Verilog/FPGA开源项目,旨在提供一个高性能、低延迟和可扩展的通信解决方案。该项目由美国加州大

    2024年02月12日
    浏览(59)
  • 项目经验分享|openGauss 陈贤文:受益于开源,回馈于开源

    开源之夏 项目经验分享 2023 #08 #nbsp;关于 o penGauss nbsp;社区 openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性。同时openGauss也是一个开源的数据库平台,鼓励社

    2024年02月08日
    浏览(39)
  • Github、Gitee优秀的开源项目分享

    先赞后看,养成习惯!!!❤️ ❤️ ❤️ 资源收集不易,如果喜欢可以关注我哦! ​如果本篇内容对你有所启发,欢迎访问我的个人博客了解更多内容:链接地址 ​ javacore  -  Java  核心技术的经验总结。 在线文档 symphony  - 一款用  Java  实现的现代化 社区(论坛/问答

    2024年02月04日
    浏览(45)
  • WebRTC开源项目-分享搭建AppRTC过程

    目录 1. 服务器组成 2.准备工作 2.1 安装vim 2.2 安装ssh 2.3 安装ifconfig工具 2.4 更新源 2.5 安装git 3.安装AppRTC必须的软件 3.0 创建目录 3.1 安装JDK 3.2 安装node.js 3.3 安装Python和Python­webtest (python2.7) 3.4 安装google_appengine 3.5 安装go 3.6 安装apprtc 3.7 安装coturn 3.8 安装Nginx 4.配置与运行 4.

    2024年03月10日
    浏览(47)
  • FPGA优质开源项目 – UDP万兆光纤以太网通信

    本文开源一个FPGA项目:UDP万兆光通信。该项目实现了万兆光纤以太网数据回环传输功能。Vivado工程代码结构和之前开源的《UDP RGMII千兆以太网》类似,只不过万兆以太网是调用了Xilinx的10G Ethernet Subsystem IP核实现。 下面围绕该IP核的使用、用户接口,以及数据传输方案展开介

    2024年02月10日
    浏览(57)
  • FPGA优质开源项目 - UDP RGMII千兆以太网

    本文介绍一个FPGA开源项目:UDP RGMII千兆以太网通信。该项目在我之前的工作中主要是用于FPGA和电脑端之间进行图像数据传输。本文简要介绍一下该项目的千兆以太网通信方案、以太网IP核的使用以及Vivado工程源代码结构。 Vivado 的 Tri Mode Ethernet MAC IP核需要付费才能使用,因

    2024年02月14日
    浏览(76)
  • 开源游戏区块链项目分享:Unity开发的独立区块链

    ❗️ 千万别被误导,上图内容虽然都在项目中可寻,但与目前区块链的业务代码关联不大,仅供宣传作用(总得放些图看着好看)。之所以有以上内容是项目有个目标功能是希望每个用户在区块链上都有一个独一无二的AI虚拟角色,目前角色出来了,但AI还没有训练😂,也没有

    2024年02月09日
    浏览(55)
  • 毕设开题分享 stm32智能语音垃圾分类系统(项目开源)

    Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目 毕业设计 stm32智能语音垃圾分类系统(项目开源) 大家可用于 课程设计 或 毕业设计 🧿 项目分享: https://gitee.com/sinonfin/sharing 学长设计的系统主要使用 stm32单片机为基础设计并开发一个智能垃圾桶系统。该系

    2024年01月23日
    浏览(75)
  • Java web 2022跟学尚硅谷书城项目完整开源分享

    跟学了2022尚硅谷书城项目,自己的代码完成了,现在将整个项目的过程做一个分享: 码云地址如下,需要的可以自行fork 书城项目源码 书城的跟学步骤每一篇博客都有详细记录可以看下: 书城跟学推文1 书城跟学推文2 书城跟学推文3 根据项目类图,确定数据库各个实体之间

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包