Оптимизация области для пользовательской библиотеки с использованием 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;