FPGA的防止被综合语句总结
对于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 ;
笔记,免得以后忘记了。
嘻嘻嘻。