1 報錯類型
[filemgmt 20-1741] File ‘xxx.h’ is used by one or more modules;
[filemgmt 20-1741] File ‘xxx.v’ is used by one or more modules, but with different contents, and may lead to unpredictable result
相關的問題(都說是軟件版本問題,沒有給出實際的解決方法):
(1)https://www.origin.xilinx.com/support/answers/65783.html
(2)https://www.xilinx.com/support/answers/69459.html
2 解決方式
2.1問題分析
目前在做的一個項目,裏面用HLS分別實現了OFDM通信系統中的加擾interleaver和星座映射constellation等多個模塊並在Vivado中調用,在沒加入星座映射模塊時工程正常,加入constellation後綜合時報錯,提示加擾和星座映射同時調用了同樣的模塊(module),刪除加擾或者星座映射中的其中之一就沒問題,經過分析給出的報錯和警告信息,發現兩個模塊在HLS中都用了兩個for循環,綜合成Verilog後都存在Loop_2_proc.v文件,Vivado調用時沒有區分這兩個不同模塊下的同名文件(兩者實際上也都存在Loo_1_proc,但是默認做了區分,在生成.v文件時換了不同的名字,不知道爲什麼Loop_2_proc區分不了)。
2.2解決方法
(1)嘗試了直接更改Vivado的IP核目錄下的.v文件,將名稱全部換掉,發現不行,只要一綜合就會恢復成沒改之前的;
(2)在Vivado HLS中更改生成的.v文件之後再打包IP去Vivado調用,發現還是不行,在打包之前就會被恢復成沒改之前的狀態;
(3)考慮在最初的地方做約束,使得HLS綜合時就能綜合成指定的特殊名稱的文件。觀察HLS綜合信息,對於下圖中的兩個for循環,默認爲第一個for循環的名稱爲爲Loop_1,第二個爲Loop_2,綜合後即爲Loop_1_proc.v和Loop_2_proc.v,
考慮指定for循環的名稱,在for循環之前加上標籤Label:
綜合後變爲Loop_constel_1_Loops.v和Loopconstel_2_Loop_s.v等,這樣就能和其他文件的for循環區分開,不再衝突。