Оптимизация области для пользовательской библиотеки с использованием Synopsys Design Vision

Я пишу пользовательскую библиотеку для дизайна 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, чтобы я мог использовать оптимизацию области, чтобы заменить ненужные NOR на XOR и IV. Я собираю свою комбинационную логику, используя set_max_area 0 а потом compile_ultra -exact_map -no_design_rule -area_high_effort_script,

Проблема в том, что если я установлю область NOR на 1 или 1000, я получу тот же результат (# из NOR). Кажется, уловка оптимизации области не работает. Ты знаешь почему? Как я могу свести к минимуму NOR?

Спасибо

1 ответ

Решение

Я не думаю, что возможно создать ворота NOR из XOR, поэтому не имеет значения, насколько они дешевы; XOR не является функционально полным.

Вы можете проверить, что синтез правильно выводит XOR, задав ему проблему, которая не должна содержать никаких других элементов, таких как унарный XOR:

wire [15:0] foo;
wire bar;

assign bar = ^foo;
Другие вопросы по тегам