Перейти к содержанию
    

Tausinov

Свой
  • Постов

    156
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Tausinov

  • Звание
    Частый гость
    Частый гость
  • День рождения 07.01.1991

Контакты

  • Сайт
    Array

Информация

  • Город
    Array

Посетители профиля

3 148 просмотров профиля
  1. Предлагаю посмотреть в сторону https://www.xilinx.com/products/intellectual-property/do-axi-bfm.html, есть документация с примерами. С акси-стрим, вроде, сложностей не должно быть - там довольно простой "протокол".
  2. Всем доброго дня! Поймал себя на том, что делаю один и тот же модуль с небольшими отличиями для разных проектов уже не первый раз и стал смотреть в сторону того, как сделать код максимально переиспользуемым. Самый очевидный вариант - написанный ручками код обложить параметрами для гибкой конфигурации по месту установки. Но проблема в том, что модуль содержит ядро DDS, которое хоть и LUT-only, но писать не хочется, разбираясь в коррекции Тейлора и прочем. Вторая мысль - использовать IP Intergrator, но такого опыта ранее не было. Хочется, грубо говоря, прокинуть настройки из ГУИ настроек DDS в ГУИ настройки своего ядра. Попытался найти по документации и форумам, возможно ли это сделать, но к однозначному выводу не пришел. Хотя на глаза попадался 5 или 7-летней давности топик, где говорилось, что это невозможно. Но все-таки 5, а тем более 7 лет - приличный срок, что-то могло измениться.
  3. Да, этот момент забыл отметить - не берем в рассчет специфические модули, вроде PLL, трансиверов и прочего, критично реагирующие именно на номинал частоты. Примерно такие же мысли были, просто хотелось себя проверить. Hold, как я понимаю, зависит в большей степени от элементной базы, и от номинала клока меняться как будто бы не должен совсем. Более того, где-то натыкался на утверждение, что на современной элементной базе t_hold или ноль или очень-очень близок к этому.
  4. Всем доброго дня! Возник интересный вопрос, на который с ходу не получилось найти ответа. Если проект собран под клок, условно 300 МГц, а запуская его на железе, на плисину мы реально подаем меньший клок, например, 100 МГц, можем ли бы гарантировать, что с точки зрения setup-hold никаких проблем не будет, или все-таки нет? Если прикидывать на пальцах,меньшая частота явно накладывает более слабые ограничения на дизайн, т.е. как будто бы при соблюдении заведомо более жестких, все должно быть нормально, но нет ли тут каких-то подводных камней?
  5. С записью в буфер кратного размера очень здравая мысль была предложена des00, как-то приходилось пользоваться подобной схемой. Вряд ли можно придумать что-то более подходящее. Есть готовые корки фифо с несимметричными выходами или конвертеры ширины данных, но так мы теряем переносимость и универсальность решения, а внутри скорее всего сделано что-то такое же
  6. Вот такой есть скриптик, можно под себя доделать, поддерживает форматы и для фильтра и для памяти
  7. Для чего в исходном файле что-то, кроме клока, в списке чувствительности указано? Не может это потом в симуляции привести к различиям?
  8. С буферами, вроде, разобрался. Если в топовом уровне не ставить их в явном виде, то вcтавки в RM достаточно, можно не добавлять. Основная проблема с этим как будто бы не связана (* io_buffer_type = "none" *) Хотя так в какой-то степени нагляднее для тех, кто видит проект впервые.
  9. Про US+ в этом плане ничего сказать не могу, не заострял внимания за отсутствием актуальности пока. Насколько я понял, для перегружаемого RM нужно иметь отдельный файлик с констрейнтами, где обязательно должны присутствовать все моменты, связанные с внешними пинами. Так сейчас и делаю. Пины все-все прямо не проверял, но как будто бы с этим все в порядке было. Сейчас сократил дизайн до минимума, по сути оставив только буфер для клока. Если смотреть назначение пинов, то в сборке основной конфигурации пин не является fixed, а package pin оказывает совершненно другим и не совпадает с констрейнтом заданным.
  10. Да, этот момент уже понял и применил еще до того, как вопрос задать. Клок подаю на IBUFDS_GTE3 с атрибутом (* dont_touch="true" *), в схематике разводки базовой конфигурации видно, что буфер присутствует. Так же пробовал подавать его на заглушку в виде PHY уровня JESD, корку, добавленную, чтобы "сделать буфер" для входов трансиверов. Без плюса, просто US, но, судя по документации, возможность использования трансиверов в RM появилась как раз в US-семействе. [DRC UCIO-1] Unconstrained Logical Port: 4 out of 17 logical ports have no user assigned specific location constraint (LOC). This may cause I/O contention or incompatibility with the board power or connectivity affecting performance, signal integrity or in extreme cases cause damage to the device or the components to which it is connected. To correct this violation, specify all pin locations. This design will fail to generate a bitstream unless all logical ports have a user specified site LOC constraint defined. To allow bitstream creation with unspecified pin locations (not recommended), use this command: set_property SEVERITY {Warning} [get_drc_checks UCIO-1]. NOTE: When using the Vivado Runs infrastructure (e.g. launch_runs Tcl command), add this command to a .tcl file and add that file as a pre-hook for write_bitstream step for the implementation run. Problem ports: lmx_ref_clk_n_i[1:0], and lmx_ref_clk_p_i[1:0]. Это был вольный перевод) С употреблением терминологии есть, конечно, определенные сложности... Да, опора для трансиверов и он же через BUFG_GT на ядра JESD в качестве основного
  11. Здорово, хотелось бы перенять опыт, если получится. Суть такая: есть плата с ПЛИСиной, которая посредством PCIe цепляется к хосту и есть соответственно корка AXI Bridge для этого самого PCIe, используемая в режиме PR over PCIe. Соответственно есть желание иметь, как минимум, две рабочие конфигурации: 1) Статический дизайн, включающий само ядро PCIe, и минимальную логику поверх + реконфигурируемый модуль, прошивка этой части шьется на флэшку, откуда успешно грузится по SPI за время достаточное, чтобы PCIe линк успел подняться; 2) В этот самый реконфигурируемый модуль подгружать всю основную обработку, включая JESD для работы с АЦП и DDR. Какой путь был пройден: изначально ядро PCIe использовалось в режиме тандема, и все плюс-минус так же выглядело и в целом работало. Но не устраивало то, что каждый раз требовалось перешивать на флэшке первую часть прошивки. Тогда решено было освоить частичную реконфигурацию. Сначала не совсем правильно понял всю технологию и в качестве "наполнения" первичной части использовал основной дизайн, который добавлялся частями, и в конце концов настал момент, когда прошивка перестала успевать грузиться, но в целом до этого момента все собиралось и работало. Подразобравшись с документашками по реконфигурации, понял, что нужно в качестве исходного "заполнения" сделать некую заглушку с минимумом функционала, а затем выбрать эту разводку в качестве родительской для варианта с основным функционалом. Что сейчас является камнем преткновения? В основном реконфигурируемом модуле используются ядра JESD и соответствующий клок, который нужно завести на их вход. Имплементация родительской прошивки проходит, сама прошивка успешно генерится, а вот унаследованная от нее, содержащая основной реконфигурируемый модуль разводится, но при генерации прошивки выдает ошибку. Ругается как раз на этот самый клок, говорит, что логический порт не имеет указанного пользователем места... Хотя в констрейнтах это само собой присутствует и не мешает генерации первичной прошивки. Ячейки с трансиверами стопроцентов находятся в нужном pblock'е, констрейнты указаны. В логе единственный момент, связанный с данными портами, это как раз ошибка при генерации прошивки. Честно говоря, пока больше идей, что с этим делать нет. Если есть какие-то мысли, что попробовать или проверить, буду признателен.
  12. Добрый день! Есть у кого-нибудь опыт чего-нибудь подобного? В случае положительного ответа, распишу в подробностях, с какой проблемой столкнулся.
  13. Есть не самый элегантный, но рабочий вариант - сгенерить текстовый файл с помощью любого другого ЯП, в котором эти самые присвоения реализуются. Там это как раз будет циклом + пара строк. А потом уже из текстового файлика вставить строки в нужный вериложный. Либо таким же образом сделать перепаковку в многомерный массив, а затем в цикле уже соединения реализовать
×
×
  • Создать...