dc综合时怎样指定使用cell
时间:10-02
整理:3721RD
点击:
例如:小弟写了一个verilog文件:
module transgate (sig,control,out);
input sig,control;
output out;
assign out=(control) ? sig : 1'b0;
endmodule
也就是说control为高电平的时候out=sig,control为低电平的时候,out输出0。
使用DC综合时,网表文件是
module transgate_0 ( sig, control, out );
input sig, control;
output out;
AN2 U2 ( .I1(sig), .I2(control), .O(out) );
endmodule
也就是说DC使用了一个与门。
我现在的元件库里有一个mux2,我想用这个cell来实现,我把上面这个.v文件改成:
module transgate (sig,control,out);
/* triangle-like circuit */
input sig,control;
output out;
MUX2 tr(out,control,1'b0,sig);
//assign out=(control) ? sig : 1'b0;
endmodule
但是DC综合时网表文件没有变化还是用AN2来实现。请问有什么办法能用MUX2来实现。
我理解DC有自己的规则来选择cell,请问是不是需要做某种设置?
mux的延时和面积什么的都没能其它普通逻辑门好,所有DC就优化了,对更改后的transgatey设置set_dont_touch ,就能保留你指定的结构,但这样肯定没DC优化的好
请问这个set_dont_touch 用法是什么?在命令中输入set_dont_touch transgate(transgate是模块名称)就可以是吗?
你看下其帮助文档就明白了
- dc_shell>man set_dont_touch
我还有一点不明白,我有好几个verilog文件,它们之间是有层次关系的,每一层里都会有模块FA的实例化,比如add1,add2,add3。那么我想禁止所有这些实例化的优化,那么应该怎么用set_dont_touch?
因为我发现,elaborate之后再使用set_dont_touch只能禁止顶层文件中的FA被优化,而底层文件中FA的实例化依然被优化。
已解决,谢谢你的指点。
dc_shell>man set_dont_touch ,我用这个为什么不能打开帮助呢?