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

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

前言

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

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

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

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

项目网址:

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年提出。下图是这个算法的一个概念解释:

图片

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

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

表1

图片

把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

图片

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

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

表3

图片

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

表4

图片

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

视频演示

原文里面有视频演示:

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

源码下载

1. Algorithm on C
2. DE1_SoC_Computer.v
3. Algorithm on FPGA
4. Translated map
5. Coordinate of each station

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值