例如:一个PLD设计,里面有直接将一个输入管脚和一个输出管脚连接的做法,如下:
//*********************//
input a;
output b;
assign b = a;
//*********************//
现在我想在a和b之间通过插入反相的方法增加两个端口间的tp2p延时,如下:
//*********************//
input a;
output b;
wire node1 ;
wire node2 ;
assign node1 = ~a;
assign node2 = ~node1;
assign b = node2;
//*********************//
一般情况下,node1和node2会被编译器优化掉,也就是说,第二段代码的最终结果和第一段代码是等效的,达不到预期的目的。
要防止加入的buf被优化,需要在代码中增加约束,“通知”编译器保留插入的buf,不去优化它们。在这里,我对三大主流厂商的防止优化设置进行了一轮查询和验证,总结如下(附验证工具版本和器件):
Xilinx ( ISE版本12.3,综合工具为ISE自带的XST,器件Spartan6):
(* KEEP="TRUE"*)wire node1;
Altera:(QuartusII版本9.1,综合工具为QuartusII自带的综合工具,器件CycloneVI):
wire node1 /* synthesis keep */;
或:
wire node1 /* synthesis syn_keep=1*/;
Lattice( ispLEVER版本6.1,综合工具为ispLEVER自带的Synplify,器件MachXO):
wire node1 /* synthesis syn_keep=1 nomerge=""*/;
用户377235 2013-2-17 23:18