1. 項目概述
項目說明
該項目分別在DE1-SOC開發(fā)板的FPGA和HPS上實現(xiàn)了Dijkstra算法,能在中國鐵路網(wǎng)中找到兩站之間的最短距離和路線。
這個項目包含304個中國主要火車站。運(yùn)行程序時,首先在VGA上顯示包含所有火車站及站點(diǎn)之間連線的完整地圖:
然后用戶可以通過輸入兩個站點(diǎn)的名稱,或在VGA屏幕相應(yīng)的站點(diǎn)上點(diǎn)擊鼠標(biāo)以選擇任意兩個站點(diǎn)作為起點(diǎn)和目的地,程序會根據(jù)Dijkstra算法很快返回它們之間的最小距離、沿路站點(diǎn)以及計算所耗費(fèi)時長,并在VGA顯示器上顯示出詳細(xì)的路線。
最后他們將兩套方案進(jìn)行了對比,結(jié)果顯示Dijkstra算法在FPGA上實現(xiàn)比僅在HPS上實現(xiàn)的計算速度快10倍。所以利用FPGA并行數(shù)據(jù)處理的優(yōu)勢來加速Dijkstra算法是個非常不錯的選擇。
2. Dijkstra算法
Dijkstra算法用于計算點(diǎn)網(wǎng)絡(luò)中兩點(diǎn)之間的最小距離和路徑。由計算機(jī)科學(xué)家Edsger W. Dijkstra于1956年提出。下圖是這個算法的一個概念解釋:
圓圈內(nèi)的數(shù)字代表火車站,連接兩個圓的線代表鐵路,線旁邊的數(shù)字是鐵路的距離。例如,從1號站到4號站有多種選擇,Dijkstra算法將幫助我們找到1號站到4號站的最短距離。
表1紅框中的第1行表示節(jié)點(diǎn)1與其他每個節(jié)點(diǎn)之間的最小距離。
表1
把1當(dāng)作起點(diǎn)。為了獲得 1 與其余每個站點(diǎn)之間的最小距離,需多次更新表1紅框中的第 1 行。
首先,從點(diǎn) 1 到點(diǎn) 1 本身,距離為0,這肯定是最短,因此不會再更新這個值,這里把0設(shè)定為固定值。
然后找到表1紅框第 1 行中與1連接的最小距離對應(yīng)的點(diǎn),即距離為7的點(diǎn) 2 。此時不會再更新 7這個值,因為可以確保它是從點(diǎn) 1 到點(diǎn) 2 的最短距離。這里把7設(shè)定為固定值。
接下來,點(diǎn)2 將被視為下一個起點(diǎn)。如果第 1 行 x 列的距離大于第 1 行第 2 列和第 2 行 x 列的距離之和,則將第 1 行 x 列更新為距離之和。x 可以來自{3,4,5,6}中的任意數(shù)字。這樣第一行就更新如下:
表2
現(xiàn)在,除了固定值0和 7 之外,第 1 行中的最小值是 9,對應(yīng)于點(diǎn) 3。它是從點(diǎn) 1 到點(diǎn) 3 的最短距離,所以此處9也被設(shè)定為固定值。
接下來,第 1 行將從第 3列更新。如果第1行x列的距離大于第1行第3列和第3行x列的距離之和,則將第1行x列更新為距離之和。x 可以來自{4,5,6}中的任意數(shù)字。第 1 行更新為:
表3
用同樣的方法,分別更新第1行的4、5和6列。結(jié)果如下所示:
表4
這樣就得到了點(diǎn)1與其他每個節(jié)點(diǎn)之間的最小距離。
審核編輯:劉清
-
FPGA
+關(guān)注
關(guān)注
1626文章
21665瀏覽量
601828 -
VGA
+關(guān)注
關(guān)注
5文章
532瀏覽量
62825 -
HPS
+關(guān)注
關(guān)注
0文章
6瀏覽量
3219
原文標(biāo)題:FPGA開源項目分享——中國鐵路網(wǎng)的 Dijkstra 算法實現(xiàn)
文章出處:【微信號:友晶FPGA,微信公眾號:友晶FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論