在調試過程當中經常遇到的一個問題就是,xilinx工具在邏輯綜合的過程當中,將本身RTL代碼中的不少變量都優化掉了,使得調試的抓信號的過程很糾結。如下是解決方法:ide
1.右鍵synthesis,在綜合選項裏將keep hierarchy選擇YES ,或者選擇soft(在綜合時保持層次,在實現時有利用ISE軟件自動進行優化),這樣有利於你從模塊中找到你想抓取的信號和信號名不被更改。工具
2.在Constraints Guide中,有防止信號被優化掉的說明。具體在X:\Xilinx\13.4\ISE_DS\ISE\doc\usenglish\isehelp文件夾下。裏面介紹瞭如何解決信號被優化的問題。其實ISE的工程設置有「keep_hierarchy」。在程序裏面,也能夠經過添加一些語句。若是是Verilog :優化
Place the Verilog constraint immediately before the module or instantiation . ui
Specify the Verilog constraint as follows:spa
(* KEEP = 「{TRUE|FALSE |SOFT}」 *)調試
假如咱們要觀察的一個信號cnt:reg [10:0] cnt;,那麼就按照 文檔中的介紹,要保持此信號不被綜合,則:ip
(* KEEP = 「TRUE」 *) reg [10:0] cnt ,或者 (* keep= 「true」 *) reg [10:0] cnt ci
這樣就能夠實現ChipScope的觀察而不被優化掉了。相似的VHDL:文檔
Declare the VHDL constraint as follows:string
attribute keep : string;
Specify the VHDL constraint as follows:
attribute keep of signal_name: signal is 「{TRUE|FALSE|SOFT}」;