-1

我为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?

谢谢

4

1 回答 1

0

我认为不可能从 XOR 中创建一个 NOR 门,所以它们有多便宜并不重要;XOR 在功能上不完整。

您可以通过给它一个不应包含任何其他门(例如一元异或)的问题来检查合成是否正确推断 XOR:

wire [15:0] foo;
wire bar;

assign bar = ^foo;
于 2014-06-16T17:35:14.627 回答