Vivado中綜合,實現,編程和調試工程可能會出現的問題及解決方案


Xilinx公司的IDE(集成開發環境) Vivado用處廣泛,學會使用Vivado對FPGA的學習至關重要,這里以PRX100-D開發板為例,對Vivado的學習使用進行探討。本文將會持續更新,列出一些常見的Vivado使用過程中出現的問題,供大家參考。

在Vivado使用過程中 出現的問題,主要會分為以下幾類:

  1. 與Vivado軟件本身相關的問題
  2. Vivado綜合,仿真,實現過程中出現的問題
  3. 編程和調試PRX100-D開發板注意事項

 

1.與Vivado軟件本身相關的問題

  • Vivado在添加新的工程/HDL文件后會自動崩潰退出

這一問題出現在2018.2版本中。Xilinx官方網站上說明在2017.1版本后都出現過該問題。該問題的出現可能是與srcscanner.exe(用於刷新工程文件的hierarchy結構) 和低端的啟動庫有關。解決方法為先嘗試重啟系統,如果不能解決這個問題,可以嘗試安裝Xilinx提供windows操作系統下的boot可執行文件,文件在bootSharedDirFixApp.zip(附在文后)里面。直接解壓縮和執行就能解決這個問題。

  • Vivado出現內部異常,如圖1.1所示

vivado_internal_e

圖1.1 Vivado出現內部異常

導致內部異常的原因有很多,但是可行的解決方法有非常直接的,經測試后可行的就是關閉Vivado窗口,再次重新打開。

 

 

2.Vivado綜合,仿真,實現過程中 出現的問題

  • 在Vivado綜合時,出現如圖2.1所示錯誤

error

圖2.1 Vivado綜合錯誤

圖2.1顯示了沒有錯誤信息,只有警告信息,但是工程綜合失敗。這種情況可能是由於工程的路徑名上出現了中文導致的。所以可以將工程路徑全改成由英文/數字/下划線組成。Vivado只支持由Ascii字符組成的名字,包括:A-Z,a-z,0-9和下划線。

 

  • Vivado錯誤:Vivado [Common 17-180] Spawn failed: No error

這個錯誤出現的原因是工程的路徑名太長,超過了80個字符。解決方法也很簡單,縮短工程路徑即可。

 

  • Vivado在編寫和genvar有關的代碼時,出現的錯誤:[Synth 8-196] conditional expression could not be resolved to a constant

錯誤原因不明,也沒有官方的解決方法,已知都是與genvar有關。嘗試過有效的解決方式是將聲明的genvar的名字更改的更特別,比如從genvar u換成genvar uu_var。

 

  • Vivado綜合時出現錯誤:[Synth 8-3352] multi-driven net…

在使用D flip-flop時,錯誤將輸出Q端在不同的代碼塊內被賦值了兩次。簡易的D flip-flop如圖2.2所示。解決辦法是把兩次不同的賦值集中到一個代碼塊,並且添加不同的條件限制,使其不是同時被執行。

dff

圖2.2 D flip-flop簡單示意圖

 

  • Vivado仿真出現錯誤:ERROR: [Simulator 45-7] No such file ‘C:/FII_RISCV_V2.01_2020_0724/FII_RISCV_V2.01.srcs/sources_1/new/cpu_sys/fii_rv32i_core.v’ in the design.

錯誤出現原因是將工程轉移到了另外的文件路徑下。解決方法有以下幾種:

    • 換一種文件途徑名,避免出現不支持的字符,比如空格,中文等
    • 挪回原來的文件夾
    • 重啟工程/仿真
    • 刪掉C:\FII_RISCV_V2.01_2020_0724\FII_RISCV_V2.01.sim\sim_1\behav\xsim(這里是示例文件途徑,可針對性自己的文件途徑修改)

經過測試,最后一種方法解決了這個問題。

 

  • Vivado仿真出現錯誤:ERROR: [XSIM 43-3322] Static elaboration of top level Verilog design unit(s) in library work failed.

在網上查詢得到的是Vivado軟件的錯誤,但實際測試后發現,該錯誤出現的原因是仿真讀取十六進制數據時(使用的是readmemh),模塊的路徑錯誤。已知readmemh的用法如下:

reg [<memory_width>] <reg_name> [<memory_depth>];

initial
$readmemh ("<file_name>", <reg_name>, <start_address>, <end_address>);

 

實際用法如下所示,在將紅體標記的路徑改正后,可以正常進行仿真:

localparam FILE_NAME = "../../../f_seg.HEX";
integer file_handle = 0;
initial begin
file_handle = $fopen(FILE_NAME,"r");
if(!file_handle)
begin
$display("Could not open File \r");
$stop;
end
$readmemh (FILE_NAME, fii_cpu_sys_inst.fii_riscv_cpu_inst.fii_rv32i_core_inst.fii_instr_rib_inst.program_inst.inst.native_mem_module.blk_mem_gen_v8_4_1_inst.memory);

$fclose(file_handle); 
end

 

 

3.編程和調試PRX100-D開發板注意事項

  • 連接到JTAG后,在Vivado中找不到相應的硬件

可能原因有PRX100-D上JTAG的跳線位置不對,注意在圖3.1所示的跳線中,應當連接內部JTAG,也就是2-3。並使用對應的線連接上PRX100-D和電腦。

jumper

圖3.1 JTAG跳線

還有一種可能是連接JTAG和電腦的線纜供電不足,這種情況可以通過用外部12V電源供電的方式,如圖3.2所示,將電源線接到電源口,並且將電源跳線連接EXT-5V和PWR_5V(用連接JTAG和電腦的線供電時,需要將電源跳線跳到USB_5V和PWR_5V),如圖3.3所示,即可緩解單根JTAG到電腦線的供電不足問題。也可以嘗試同時連接JATG端口,UART端口和電腦,用兩根線纜同時供電。

 

power_supply

圖3.2 電源接口

power_jumper

圖3.3 電源選擇跳線

最后,注意在連接好PRX100-D和電腦后,需要將開發板的電源按鈕按下啟動。電源啟動按鈕如圖3.4所示。

power_bnutton

圖3.4 電源啟動按鍵

 

  • 連接到UART接線后,在windows下的設備管理器下沒有出現相應的端口。

正確的設備管理器發現UART接線的情況,如圖3.5所示。但可能有少數情況下,UART的硬件無法被windows系統發現,這時,則需要重新安裝CP210x的驅動程序,可以從Silicon Lab上官方網站上下載(點擊這里到相應的界面)對應的驅動。

UART

圖3.5 設備管理器中出現正常的UART接線

 

  • Vivado錯誤:ERROR: [Common 17-70] Application Exception: CORE_LOCATION mismatch

錯誤出現的步驟一般是在添加debug core后上板調試時,錯誤原因不明。Xilinx官方技術人員提供的解決方法都沒有效果。實際有效的操作為關閉Vivado窗口,再次重新打開。

 

 

4.文章參考

[1] Xilinx官方論壇:https://www.xilinx.com/support.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM