Как сопоставить ворота часов с ячейкой библиотеки технологий
У меня есть следующие часы ворот в дизайне:
module my_clkgate(clko, clki, ena);
// Clock gating latch triggered on the rising clki edge
input clki;
input ena;
output clko;
parameter tdelay = 0;
reg enabled;
always @ (clki, ena) begin
if (!clki) begin
enabled = ena;
end
end
assign #(tdelay) clko = enabled & clki;
endmodule
Когда синтезируется с Yosys, результирующий список соединений создается (для reg enabled
) \$_DLATCH_P_
ячейка, которая не включена в стандартный файл lib ячейки, который я использую, хотя библиотека включает защелки.
Вместо того, чтобы пытаться соответствовать enabled
этой конструкции в стандартную ячейку-защелку из библиотеки, я бы хотел вместо этого использовать синхронизирующий вентиль, предоставляемый библиотекой, который включает вентиль AND, который имеет такой интерфейс:
module LIB_GATE (
input CK,
input E,
output ECK);
endmodule
Я уже попробовал следующее:
- Просто заменить
my_clkgate
содержимое модуля с экземпляром вLIB_GATE
и переадресация всех соединений портов. Йосис пожаловался, чтоLIB_GATE
"не является частью дизайна". - В дополнение к пункту 1, объявив
LIB_GATE
как пустой модуль (как показано выше). В результате остались два пустых модуля,LIB_GATE
а такжеmy_clkgate
в итоговом списке соединений. - Я также пытался использовать
extract
команда с моделями библиотеки Verilog, к сожалению, она не может проанализировать (я подозреваю, что файл содержит некоторые неподдерживаемые конструкции Verilog, такие какspecify
блоки).
Конечно, я мог бы написать скрипт, который обрабатывает список соединений для замены my_clkgate
с LIB_GATE
случаи, но мне было интересно, может ли Йосис сделать это для меня?
Для справки, вот файл "synth.ys", который я использую:
read_liberty -lib my_library.lib
script yosys_readfiles.ys
proc; opt; memory; opt; fsm -norecode; opt
techmap; opt
dfflibmap -liberty my_library.lib
abc -liberty my_library.lib
hilomap -hicell LIB_TIEHI Y -locell LIB_TIELO Y
clean
write_verilog -noattr -noexpr output.v
stat
Где "yosys_readfiles.ys" - это файл, содержащий read_verilog
строка со всеми входными файлами с последующим hierarchy
-check -top my_design
линия.
1 ответ
В дополнение к предыдущему, объявление LIB_GATE как пустого модуля (как показано выше). В результате два пустых модуля, LIB_GATE и my_clkgate остались в результирующем списке соединений.
Это решение. Тем не менее, вы должны установить blackbox
атрибут на модуле так:
(* blackbox *)
module LIB_GATE (
input CK,
input E,
output ECK);
endmodule
Кстати: если вы читаете.v файл с read_verilog -lib
тогда содержимое всех модулей будет игнорироваться, а blackbox
атрибут будет установлен автоматически.
Вы также можете прочитать библиотеку свободных клеток с read_liberty -lib
чтобы получить инстанцируемые ячейки черного ящика для всего в вашей ячейке библиотеки.