我为Synopsys 设计愿景编写了一个自定义库,该库仅包含 XOR、NOR 和 IV(逆变器或非逆变器)。我的计划是合成一个组合逻辑,使得生成的网表具有最少数量的 NOR 门。我将库编写为流:
library(and_or_xor) {
cell(NOR) {
area : 1000;
pin(A) {
direction : input;
}
pin(B) {
direction : input;
}
pin(Z) {
direction : output;
function : "(A+B)'";
}
}
cell(IV) {
area : 1;
pin(A) {
direction : input;
}
pin(Z) {
direction : output;
function : "A'";
}
}
cell(XOR) {
area : 1;
pin(A) {
direction : input;
}
pin(B) {
direction : input;
}
pin(Z) {
direction : output;
function : "A^B";
}
}
}
在这里,为了节省空间,我去掉了时序和输入电容。我将 NOR 的区域设置为 1000,将 XOR 和 IV 设置为 1,因此我可以使用区域优化来用 XOR 和 IV 替换不必要的 NOR。set_max_area 0
我使用然后编译我的组合逻辑compile_ultra -exact_map -no_design_rule -area_high_effort_script
。
问题是无论我将 NOR 区域设置为 1 还是 1000,我都会得到相同的结果(# of NOR)。似乎区域优化技巧不起作用。你知道为什么吗?我怎样才能最小化NOR?
谢谢