對於fpga的開發人員來說,經常會使用到signaltap或者chipscope這類除錯工具,但是有些訊號在除錯工具中,新增失敗。所以這裡就需要用到防止綜合的語句了。
在**中新增了防止綜合語句,就可以正常的使用除錯工具抓取訊號了。話不多說。直接開搞。
**:對於intel或者altera來說。
一般是使用quartus自帶的綜合器或者使用synplify綜合器。
對於wire型語句:
quartus自帶的綜合器使用:/* synthesis keep = 1 */和/*synthesis syn_keep = 1*/
synplify綜合器使用:/*synthesis syn_keep = 1*/。
對於reg型語句:
使用:/* synthesis preserve = 1 */或者/*synthesis noprune */,這兩個貌似都可以。
使用的例子:都是在「;」之前加入語句的 。
reg [7:0]cnt/*synthesis noprune */;
wire [7:0]cnt/*synthesis noprune */;
對於xilinx來說:
當使用xilinx自帶的xst的綜合器:
(* keep = 「true」 ) 或者 ( keep= 「true」 *)這樣就可以實現chipscope的觀察而不被優化掉了。eg:(* keep = 「true」 ) reg [10:0] cnt ,或者 ( keep= 「true」 *) reg [10:0] cnt;
當使用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 */;
當然,我使用的時候,一般使用(*mark_debug = "true"*)也可以防止被綜合。
ed:(*mark_debug = "true"*)wire cnt ;
筆記,免得以後忘記了。
嘻嘻嘻。
verilog中的可綜合與不可綜合語句
1 所有綜合工具都支援的結構 always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,n...
FPGA中常見語法綜合後的電路
與高階程式語言不同,hdl語言與硬體電路密切相關。在編寫 的過程時,不能將高階語言的思想帶入到hdl語言書寫上面來,而是需要時刻明白自己所寫的 對應的硬體是什麼。為此,下面將總結在verilog語言中常用語法對應的硬體結構。d觸發器 always posedge clk begin q d end其...
Service防止被Kill的方法整理
在開發過程中,常常需要開啟一些後台服務,來處理一些資料操作,即使使用者退出程式後,後台也能夠正常的處理資料,此時就需要使用到service,關於service的使用,在這裡就不做詳細介紹了,今天討論的是,即使我們使用service,也並不一定能保證程式的正常執行,為什麼呢?因為市面上存在很多清理程序...