Как сопоставить ворота часов с ячейкой библиотеки технологий

У меня есть следующие часы ворот в дизайне:

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

Я уже попробовал следующее:

  1. Просто заменить my_clkgate содержимое модуля с экземпляром в LIB_GATE и переадресация всех соединений портов. Йосис пожаловался, что LIB_GATE "не является частью дизайна".
  2. В дополнение к пункту 1, объявив LIB_GATE как пустой модуль (как показано выше). В результате остались два пустых модуля, LIB_GATE а также my_clkgate в итоговом списке соединений.
  3. Я также пытался использовать 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 чтобы получить инстанцируемые ячейки черного ящика для всего в вашей ячейке библиотеки.

Другие вопросы по тегам