makc 222 3 июня, 2023 Опубликовано 3 июня, 2023 · Жалоба Доброго времени суток всем участникам, Попытавшись разместить выходные регистры данных и управления OEN в ячейках ввода/вывода у Gowin GW2A (используется Gowin_V1.9.9Beta-1 и пробовал Gowin_V1.9.8.11) я столкнулся с рядом проблем: Отсутствуют констрейнты, которые бы позволяли на уровне исходника на Verilog говорить среде, что синтезируемый триггер (регистр) необходимо разместить во встроенном в ячейку ВВ триггере. В описании архитектуры GW2A приводится следующая иллюстрация: Но при этом в библиотеке примитивов отсутствуют соответствующие примитивы для OREG/TRIREG. Есть, правда ODDR, но к нему есть свои вопросы и о них ниже. Для режима SDR ниже приводится более детальная иллюстрация структуры ячейки: При этом для входов сброса есть следующее примечание: "Local set/reset signal O_SR and I_SR can be either synchronized reset, synchronized set, asynchronous reset, asynchronous set, or no-function;". Т.е. должны поддерживаться все возможные режимы сброса (вполне ожидаемо, на первый взгляд). Однако из-за отсутствия в библиотеке соответствующих примитивов на практике в этом убедиться затруднительно. При этом у приведенных в описании архитектуры триггеров для режима DDR вход сброса отсутствует. С другой стороны в документе "Gowin FPGA Primitive User Guide", где казалось бы должны были быть описаны указанные в описании архитектуры элементы (триггеры) есть только описание регистров DDR: Причём, что очень странно, в описании портов ODDRC, для входа CLEAR указана поддержка только асинхронного режима: После выполнения PnR с настройками размещения регистров в IOB в результатах бэканнотации (нетлист, генерируемый после PnR) у триггеров, которые я считал должны были быть размещены в ячейках ВВ, я вижу инстанцирование DFFR с очень подозрительным недокументированным аттрибутом: (*gowin_io_reg = "FALSE" *) DFFR ... Найти описание этого gowin_io_reg я нигде не смог, гугл про него не знает. Как можно проконтролировать, какие регистры попали в триггера ячеек ВВ, а какие нет? Ни в одном репорте этих данных нет. Собственно вопрос: какие есть варианты управления размещением триггеров для надежного их размещения в ячейках ВВ? Пока в голову приходит только один вариант: явно инстанцировать ODDRC в режиме SDR (подавать на оба входа один и тот же сигнал) и полагаться на него. Но это выглядит крайне кривой затеей, т.к. исходя из описания архитектуры должны быть возможности как минимум использовать синхронных сброс триггеров в ячейках ВВ. PS: Похоже, что та же проблема и с входными регистрами (триггерами). Однако с ними всё-таки немного проще и, надеюсь, решение для выходов будет вполне применимо и для входов. PPS: Выяснилось, что для размещения регистров управления третьим состоянием выходов в ячейках ВВ важна полярность. Т.е. если активный уровень сигнала управления будет 1, то между этим регистром и входом OEN на буфере ВВ синтезатор добавит инвертор и это не позволит PnR разместить соответствующий триггер в ячейке ВВ. Поэтому необходимо учитывать эту особенность и правильно выбирать активный уровень этих сигналов в проекте (должен быть active-low). 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 222 9 июня, 2023 Опубликовано 9 июня, 2023 · Жалоба Нашёлся ответ в документации (SUG935-1.3.4E, 05/25/2023 Gowin Design Physical Constraints User Guide) как довольно криво, но вполне надёжно размещать регистры в ячейках ВВ: Цитата Example 6 INS_LOC “reg_name” B14; // It is constrained to the IOB by restraining the INS_LOC of the REGISTER/IOLOGIC. И это работает. Но остаётся вопрос, как добиться того же эффекта через атрибуты Verilog/VHDL. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zversky 19 11 июня, 2023 Опубликовано 11 июня, 2023 · Жалоба Доброго дня. Есть ещё один, вроде бы не упомянутый вами документ: UG289-2.1.4E, 05/25/2023 - Gowin Programmable IO (GPIO) User Guide, но в нём я сходу не нашёл то, о чём вы спрашиваете. Может быть поможет @StewartLittle? И можно ли как-то опосредованно задать вопрос поддержке? Хотя, помню, у меня у самого был опыт, но т.к. сформулировал я вопрос криво, в чём сам и виноват, то получил и соответствующий ответ. Готов повторить, но уже с вашим вопросом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 222 11 июня, 2023 Опубликовано 11 июня, 2023 · Жалоба 54 минуты назад, Zversky сказал: документ: UG289-2.1.4E, 05/25/2023 - Gowin Programmable IO (GPIO) User Guide, но в нём я сходу не нашёл то, о чём вы спрашиваете. Его я тоже видел, но поскольку там ничего нет, то и писать о нем не стал. 55 минут назад, Zversky сказал: И можно ли как-то опосредованно задать вопрос поддержке? Вот это было бы неплохо, но похоже речь идёт о реализации дополнительных атрибутов, а новые фичи они явно реализовать не спешат. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StewartLittle 45 15 июня, 2023 Опубликовано 15 июня, 2023 · Жалоба В 03.06.2023 в 12:00, makc сказал: Собственно вопрос: какие есть варианты управления размещением триггеров для надежного их размещения в ячейках ВВ? Configuration - Place & Route - Place - Place input register to IOB / Place output register to IOB / Place inout register to IOB Не? Но это, правда, для всех входов/выходов/бидиров оптом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 222 15 июня, 2023 Опубликовано 15 июня, 2023 · Жалоба 2 минуты назад, StewartLittle сказал: Configuration - Place & Route - Place - Place input register to IOB / Place output register to IOB / Place inout register to IOB Не? Не. Оно не всегда работает, к моему огромному сожалению. По какой причине это происходит сказать сложно, но во Floorplanner'e я это пронаблюдал и пришлось писать констрейнты физического размещения, указанные выше. Хотелось бы того же эффекта, но через атрибуты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 222 15 июня, 2023 Опубликовано 15 июня, 2023 · Жалоба 47 минут назад, StewartLittle сказал: Но это, правда, для всех входов/выходов/бидиров оптом. Похоже у них всё-таки есть недокументированный атрибут, который работает и влияет на упаковку в триггеры ячеек ввода/вывода. Если написать так: (* gowin_io_reg = "FALSE" *) reg dataout_q; always @(posedge outclock) begin dataout_q <= data_i; end То dataout_q не пакуется в регистры В/В, что видно во Floorplanner и в PnR Report'e. Если написать: (* gowin_io_reg = "TRUE" *) reg dataout_q; always @(posedge outclock) begin dataout_q <= data_i; end То dataout_q пакуется в регистры В/В, что опять же видно во Floorplanner и в PnR Report'e. Т.е. атрибут gowin_io_reg позволяет индивидуально управлять упаковкой. Прошу заинтересованных участников проверить это поведение и, если будет такая возможность, задать вопрос техподдержке Gowin насчёт этого чудесного атрибута. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться