У меня есть следующий простой дизайн Verilog (в test.v
):
module digital (
input a, b, c,
output reg q
);
wire ena = a & b;
always @ (ena, c) begin
if (ena)
q <= c;
end
endmodule
, который моделирует простую защелку с затвором на входе ena
. Я использую следующий сценарий Yosys TCL:
yosys -import
set name digital
set libfile my_tech.lib
read_liberty -lib $libfile
read_verilog test.v
hierarchy -check -top ${name}
procs; opt
memory; opt
fsm -norecode; opt -full
techmap; opt -full
dfflibmap -liberty $libfile
opt
abc -liberty $libfile \
-script {+strash;ifraig;scorr;dc2;dretime;strash;&get,-n;&dch,-f;&nf,{D};&put}
hilomap -hicell TIEHIM Y -locell TIELOM Y
clean -purge
write_verilog ${name}_synth.v
Несмотря на то, что DFF отображаются нормально (я пробовал с другим дизайном), полученный файл Verilog содержит экземпляр ячейки \$_DLATCH_P_
.
Поэтому я попытался следовать примечанию в этом комментарии , т.е. записать файл пользовательской карты технологий, чтобы сопоставить защелки Yosys с данными из библиотеки технологий:
1. Используя шаблон, полученный из команды yosys help $dlatch+
и просматривая некоторые примеры в встроенной технической карте Yosys , я создал файл отображения, который я считаю test_map.v
для использования TLATX1M
защелка ячейки библиотеки:
(* techmap_simplemap *)
(* techmap_celltype = "$dlatch" *)
module _library_latch (EN, D, Q);
parameter WIDTH = 0;
parameter EN_POLARITY = 1'b1;
input EN;
input [WIDTH-1:0] D;
output reg [WIDTH-1:0] Q;
genvar i;
generate begin
for (i = 0; i < WIDTH; i=i+1) begin:latch_bit
TLATX1M _TECHMAP_REPLACE_ ( // TODO: support EN_POLARITY = 1'b0
.D(D[i]),
.G(EN),
.Q(Q[i]),
.QN()
);
end
end endgenerate
endmodule
2. Затем я также добавил строку techmap -map test_map.v
после строки techmap; opt -full
в моем скрипте синтеза.
К сожалению, безуспешно: в списке вывода Yosys все еще есть экземпляр \$_DLATCH_P_
. Я также не смог найти связанных предупреждений / ошибок в выходных данных журнала Yosys.
3. Я также пытался изменить имя модуля ячейки отображения (_library_latch
в коде выше) и / или комментарий techmap_celltype
к \$_DLATCH_P_
, но это тоже не помогло.
Чего мне не хватает?