2017-01-23 8 views
2

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

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, в результате Netlist конкретизирует (для reg enabled) в \$_DLATCH_P_ клетке, которая не входит в стандартном файле сотовой библиотеки я использую, хотя в библиотеке есть защелки.

Вместо того чтобы пытаться сопоставить 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 экземпляров, но мне было интересно, если Yosys может сделать это для меня?

Для справки, вот файл «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 линия.

+0

Я не знаю о Yosis, но в Design Compiler (Synopsys) есть команда 'set_clock_gating_style', которая позволяет вам выбирать элементы, используемые в качестве часовых механизмов (и другие параметры). Вы проверяли что-то подобное в Йозе? – Krouitch

ответ

1

В дополнение к предыдущему объявление LIB_GATE как пустого модуля (как показано выше). Это привело к оставлению двух пустых модулей: LIB_GATE и my_clkgate в результирующем списке соединений.

Это решение. Тем не менее, вы должны установить атрибут модуля blackbox следующим образом:

(* blackbox *) 
module LIB_GATE (
    input CK, 
    input E, 
    output ECK); 
endmodule 

Btw: Если вы читаете файл .в с read_verilog -lib затем содержимое всех модулей будет проигнорирован, а атрибут blackbox будет установлен автоматически ,

Вы также можете прочитать библиотеку сотовой библиотеки с read_liberty -lib, чтобы получить явные ячейки Blackbox для всего, что есть в вашей библиотеке.

+0

Большое спасибо за ваш ответ.Я закончил использование решения, включающего 'read_liberty -lib', поскольку мне не нужно переопределять модуль' LIB_GATE'. Решение, использующее '(* blackbox *)', также оказалось правильным, но я не тестировал 'read_verilog'. – FriendFX