У меня есть ice40, который управляет часами и вводом данных ASIC.
Ice40 управляет часами ASIC с теми же часами, которые управляют внутренней логикой ice40. Проблема в том, что повышение тактовой частоты запускает внутреннюю логику ice40 и изменяет выходные данные ice40 за несколько наносекунд до того, как растущая тактовая частота достигает ASIC, и, следовательно, ASIC наблюдает неправильные данные при возрастании тактовой частоты.
Я решил эту проблему, используя цепочку инверторов для задержки внутренних часов ice40 без задержки часов, управляющих ASIC. Таким образом, возрастающие часы достигают ASIC до того, как изменятся выходные данные ice40. Но это вызывает несколько вопросов:
Является ли моя стратегия — использование цепочки инверторов для задержки внутренних часов ice40 — хорошей стратегией?
Чтобы диагностировать проблему, я использовал iCEcube2 от Lattice для анализа минимальных и максимальных задержек между внутренними часами и выходными контактами:
Обратите внимание, что задержки asic_dataX
короче задержки clk_out
, что указывает на проблему.
Есть ли способ получить эту информацию от yosys/nextpnr?
Спасибо за любое понимание!