2016-11-08 72 views
0

當嘗試使用Vivado HLS到sythnise,我得到這個誤差的同一行:C++ HLS合成警告

CRITICAL警告:[SYNCHK 200-43] pcd_triangulation/pcd_triangulation.cpp:156 :使用或分配非靜態指針'current.0.i.reg2mem'(該指針可能指 不同的存儲器位置)。

CRITICAL警告:[SYNCHK 200-11] pcd_triangulation/pcd_triangulation.cpp:156:常數 '開始' 具有 unsynthesizable類型「lass.triangle.2.28.31 =類型{[3× 小姑娘。三角形2.28.3 ...'(可能的原因:指向指針的指針或全局指針的指針 )。

CRITICAL警告:[SYNCHK 200-11] pcd_triangulation/pcd_triangulation.cpp:156:常數 '開始' 具有 unsynthesizable類型「^ lass.triangle.2.28.31 =類型{[3× 小姑娘(可能的原因:結構變量 不能被分解,因爲(1)不支持的類型轉換;(2) 存儲器複製操作;(3)結構體中使用的函數指針;( 4) 不支持的指針比較)。

CRITICAL警告:[SYNCHK 200-42] pcd_triangulation/pcd_triangulation.cpp:156:指針比較不是 支持。

代碼是用C++編寫的。因此,這是其給出上面的警告的代碼:

if(start->child[0]==NULL && start->child[1]==NULL && start->child[2]==NULL) 

start是一個全球性的指針類(triangle *start)和child[i]是一個數組指向類(部件)內的同一類(triangle *child[3])。

class triangle { 
    public: 
    triangle *child[3]; 
    ... 
} 

triangle *start; 

inline triangle *mylocate(int p) { 
    if (start->child[0] == NULL && start->child[1] == NULL && 
     start->child[2] == NULL) { 
     return start; 

     ... 
    } 
} 

任何人都可以幫助我解決這些問題嗎?

+0

請問您可以爲您的問題添加一些上下文嗎?事實上,你的問題是無法回答的。 – damienc

+0

你也可以安排你的代碼嗎? – Stacked

+0

對不起,我無法上傳我的所有代碼,太大了。我會盡力找到處理同樣問題的人來幫助我。我是新來的,我不知道如何安排我的問題。 – Marios

回答

1

我對vivado一無所知,但它聲稱「不支持指針比較」。 你在比較指針。

所以它不被支持。所以你不能做指針比較:/

0

當你使用Vivado HLS時,你必須記住一些重要的事情:你正在用硬件翻譯C或C++代碼。這是什麼意思?那麼,就不可能分配內存,合成功能必須有一些PHISICAL端口(用於輸入,輸出和控制)以及其他很多重要的問題。在這個特定的內容中,一個指針是一個端口的地址,只要硬件在創建位流時保持不變,指針就不會改變。爲了得出結論:如果你想用晶體管連接來合成,你必須以特定的方式重新編寫C或C++代碼。如果你有寫VHDL或Verilog的經驗,這是一個最佳的起點。你應該重寫你的功能,看看this document