防止FPGA設計中綜合後的訊號被優化
隨著FPGA設計複雜程度越來越高,晶片內部邏輯分析功能顯得越來越重要。硬體層次上的邏輯分析儀價格十分昂貴,而且操作比較複雜。目前,FPGA晶片的兩大供應商都為自己的FPGA晶片提供了軟體層面上的邏輯分析儀,可以幫助我們線上分析晶片內部邏輯。而且操作簡單方便。但是往往因為某些原因,有些訊號在綜合的時候就會被優化掉,就可能會導致我們的設計失敗,當然在為邏輯分析儀新增觀察訊號的時候也無法找到該訊號。從而對設計、除錯人員的工作帶來一定的不便。下面就分別以Xilinx公司的邏輯分析儀ChipScope和Altera公司的SignalTap做以下總結:
一、使用Xilinx公司的ChipScope
使用ChipScope觀察晶片內部的訊號之前,先要把需要觀察的訊號新增到ChipScope訊號觀察列表當中。也就是說,我們必須能夠在綜合的網表檔案中找到相應的訊號。如果是使用XST綜合的話,最好保留晶片內部結構的層次,這樣就可以在相應的子模組查詢需要觀察的訊號。預設情況下,Chipscope只能觀察reg型別的訊號。但是通過設定屬性也是可以觀察wire型訊號的。使用不同的綜合工具需要新增的屬性也不一樣。
-
1、使用XST綜合
在ChipScope中新增一些引腳的訊號,但列表中並沒有顯示,原因是綜合的地方沒設定好,應該將XST的屬性設定成如下:
Synthesize - XST 右鍵 Process Properties..,Synthesis Options 內設定 keep hierarchy 處為 YES(1) 對於reg型訊號,如果被ISE優化掉,一般可以把這個訊號和其他沒有被優化的訊號進行“與”、“或”等操作。這樣就可以達到觀察訊號的目的。
(2)對於wire型號,對於ISE12.3以後的版本,XST綜合,以Spartan3為例,可以使用
(* KEEP="TRUE"*) wire [15:0] CPLD_ _AD;
這樣就可以在查詢訊號的訊號找到wire型別的CPLD_ _AD訊號進行觀察。
-
2、使用Synplify Pro綜合
Synplify Pro對wire、reg型別的訊號有著不同的綜合屬性。
(1)對於wire型訊號,使用/* synthesis syn_keep=1 */
綜合屬性,例如下面的語句:
wire [7:0] data_in /* synthesis syn_keep=1 */;
(2) 對於reg型訊號,使用/* synthesis preserve = 1 */
綜合屬性,例如下面的語句:
reg [7:0] data_in /* synthesis preserve = 1 */;
二、使用Altera公司的SignalTap
-
1、使用Altera自帶的綜合器綜合
Altera自帶的綜合器為了防止某些訊號綜合器優化掉,也有自己的一套綜合約束屬性。
(1)對於reg型訊號,為了防止Altera自帶綜合器將其優化掉,可以新增noprune屬性。這樣就可以防止某些暫存器訊號被優化掉。也可以使用/*synthesis noprune*/
綜合屬性。
`include "define.v"
module SignalTap_test(
Clk ,
Rst ,
Cnt
) /*synthesis noprune*/ ;
input wire Clk ;
input wire Rst ;
output reg [7:0] Cnt ;
always@(posedge Clk or posedge Rst)
begin
if( Rst == 1'b1)
Cnt <= 8'h0;
else
Cnt <= #`ULDY Cnt + 1'b1;
end
endmodule
如上例(假設Cnt訊號會被優化掉),這樣新增綜合屬性之後,整個module的reg訊號都不會被優化掉。
需要注意的是:描述綜合屬性的語句一定要新增在“;”前面。
跟reg相關的綜合屬性,除了/*synthesis noprune*/
可用,還有一個/*synthesis preserve*/
可用。二者的差別在於:
-
/*synthesis noprune*/
避免Quartus II優化掉output 型的reg訊號。 -
/*synthesis preserve*/
避免Quartus II把reg訊號當成VCC或者GND等常數。
同時單獨的reg訊號也可以: (*preserve*) reg [3:0] cnt;
防止被優化掉。
(2)對於wire型訊號來說,要想觀察此類訊號,Altera綜合器提供了/*synthesis keep*/
綜合屬性。如
wire [7:0] Cnt /*synthesis keep*/;
對於Quartus II 9.0以後的版本也可以使用(“keep”) wire [7:0] Cnt ;
的寫法。
此外,/*synthesis keep*/
也支援對reg型訊號,使用它也可以防止reg型訊號被優化掉。
但是也有可能出現這樣的情況,有的訊號即使經過此處理,仍然會被綜合工具優化掉,致使無法找到它。這個時候就需要對其使用“測試屬性”,可以加入probe_port
屬性,把這兩個屬性結合在一起,即就是:( *synthesis, probe_port,keep *)
即可,這種方法同時適應於wire和reg型訊號型別。
-
2、使用Synplify Pro綜合
使用Synplify Pro綜合時防止訊號被優化掉的方法和使用Xilinx公司 ChipScope使用Synplify Pro綜合時新增的綜合約束一樣,因為Synplify Pro是專業的綜合廠商,所以對主流的FPGA廠商都支援。
三、總結
1、以上的方法也不一定全部都可以使用,有時候因為版本不對應就會導致訊號依然會被優化掉。不過經過輪詢之後發現,ISE 12.3以後的版本、Quartus II 9.0之後的版本、Synplify Pro 9.0.1以後的版本都可以使用。
2、一般情況下,訊號經常被優化掉,還是與程式碼風格或者邏輯設計有冗餘有關的,所以還是應該儘量提高程式碼質量。在不能解決的時候再新增綜合約束。
相關文章
- FPGA數字訊號處理(24)數字相關器設計(簡化結構)FPGA
- 後臺設計中容易被忽略的坑
- 如何防止Google Voice號碼被回收Go
- FPGA數字訊號處理(26)加擾器與解擾器設計FPGA
- linux系統程式設計之訊號(七):被訊號中斷的系統呼叫和庫函式處理方式Linux程式設計函式
- linux系統程式設計之訊號(一):中斷與訊號Linux程式設計
- 優化基於FPGA的深度卷積神經網路的加速器設計優化FPGA卷積神經網路
- FPGA數字訊號處理(25)數字相關器設計(經典結構)FPGA
- 防止ViewPager中的Fragment被銷燬的方法ViewpagerFragment
- FPGA數字訊號處理(27)卷積編碼器與Viterbi譯碼器設計FPGA卷積Viterbi
- FPGA可綜合風格程式碼FPGA
- 微信視訊號怎麼做?最好不斷優化和強化人設優化
- 如何防止網站被侵入,如何防止網站被掛馬,如何防止網站被入侵?網站
- 程式設計師團隊如何防止內卷化?程式設計師
- 網頁設計中優化圖片的 6 個技巧網頁優化
- Metal:對 iOS 中 GPU 程式設計的高度優化的框架iOSGPU程式設計優化框架
- Unix環境程式設計之定時、訊號與中斷程式設計
- FPGA數字訊號處理(22)FSK調製技術FPGA
- 防止資料庫被下載後,暴出Dv_Log表中明文密碼資料庫密碼
- 跨境電商後臺-關於上傳圖片的功能優化設計優化
- MySQL設計與優化MySql優化
- 使用React中後臺效能優化以及移動端優化React優化
- 使用vue中後臺效能優化以及移動端優化Vue優化
- FPGA SelectMap介面配置設計FPGA
- Android效能優化之被忽視的優化點Android優化
- Linux系統程式設計之訊號中斷處理(下)Linux程式設計
- Linux系統程式設計之訊號中斷處理(上)Linux程式設計
- linux系統程式設計之訊號(五):訊號集操作函式,訊號阻塞與未決Linux程式設計函式
- java多執行緒:併發包中的訊號量和計數栓的程式設計模型Java執行緒程式設計模型
- Linux系統程式設計—訊號捕捉Linux程式設計
- Linux系統程式設計:訊號捕捉Linux程式設計
- 【Linux網路程式設計-1】訊號Linux程式設計
- Qt 5 中的訊號槽QT
- 優化資料表格設計優化
- 多功能綜合系統清理優化MacCleaner PRO優化Mac
- 優秀的後臺管理介面設計案例分享
- python中的訊號通訊 blinkerPython
- linux中的兩個非常重要的訊號:SIGALRM訊號和SIGCHID訊號LinuxGC