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

dortonyan

Участник
  • Постов

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

  • Посещение

Репутация

1 Обычный

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

  • Звание
    Частый гость
    Частый гость
  1. StewartLittle, спасибо за пояснения. Я просто выбирал между плисинами в корпусе QFP-144, а там только два типа: SA и SC.
  2. Приветствую всех. Есть у меня проект, который собирается и работает на разных ФПГА (альтеровские циклоны и латтисовские FPGA). А теперь попробовал собрать этот же проект под MAX10 и вылезла проблема инициализации ROM. Квартус скачал версии prime 21.1.0. Плисину для проекта задал 10М08. Модуль памяти описан как массив с портами для чтения и записи, а так же с начальной инициализацией стандартной верилоговской ф-ей $readmemh с загрузкой данных из файла. Сначала при компиляции квартус выдал ошибку: Error (276003): Cannot convert all sets of registers into RAM megafunctions when creating nodes. The resulting number of registers remaining in design exceeds the number of registers in the device or the number specified by the assignment max_number_of_registers_from_uninferred_rams. This can cause longer compilation time or result in insufficient memory to complete Analysis and Synthesis Вроде как не хватает ячеек, хотя для моего проекта там ресурсов с избытком (в разы). Попробовал убрать функционал для записи в память, оставил только чтение и начальную инициализацию. И стало понятно почему не хватало ресурсов: проект собрался, но ROM почему-то синтезируется ячейками, не подключаются блоки M9K памяти (для RAM подключаются, для ROM - нет). Настройки синтеза не трогал, все по умолчанию. Но на всякий случай перепроверил опцию синтеза ROM из ячеек, опция включена. Кто-нибудь работал с MAX10 плисинами, что за фигня? P.S. Поторопился с созданием топика. Пока писал, нашел проблему. ) Надо просто в опциях девайса выбрать тип конфигурации с начальной инициализацией памяти: https://russianblogs.com/article/25521715884/ И такая опция есть только на МАХ10 плисинах с индексом SA.
  3. Спасибо всем! Да, я имел ввиду атрибуты, неправильно написал сразу. Атрибут syn_multstyle не прокатил. Нашел мануал по атрибутам для lattice и в нем описание для умножителей. У них он чутка иначе называется: /* synthesis syn_dspstyle="logic" */ С ним все собирается как надо. Единственное что получается не универсально, т.к. зависит от синтезатора. Может можно писать в строке несколько атрибутов подряд под разные синтезаторы?
  4. Не ну есть же в верилоге директивы, типа запрета вырезания проводника оптимизацией. Подумал может что-то есть и для моего случая. А в синтезаторе там опций с гулькин нос. Да, он самый. Но опять же, там опций всего ничего. Может какая-то версия урезанная... Я и без хелпа уже посмотрел все что есть. Да, я тоже обратил внимание, что логика оптимизируется хуже, чем например MachXO2. Зато дешевые, и есть выделенные блоки DSP, что при необходимости построения умножителей компенсирует нехватку логики. Мой текущий проект как раз хорошо помещается в 2к плисину с 4-мя DSP блоками, но приходится второстепенные операторы умножения расписывать кейсами. Сделать то же самое автоматом компилятор почему-то не умеет.
  5. Привет всем. Попробовал тоже работать с iCECube2 и возникла следующая проблема: В верилог коде использованы операторы умножения как для блоков умножения данных (DSP функционал), так и для второстепенных целей - в комбинаторной логике. Так вот в квартусе или диамонде все хорошо: компилятор малоразрядные умножители с небольшим набором комбинаций множимого и множителя заменяет комбинаторной логикой. А в кубе компилятор, видя оператор умножения, сразу же пытается подставлять для него DSP блоки. И т.к. блоков не хватает, то вместо того, чтобы заменить комбинаторной логикой - выдает ошибку. Пришлось в коде умножитель заменять кейсом, тогда все собирается как надо. Но это как-то неудобно. Можно ли как-то заставить компилятор куба использовать логику для построения простых умножителей? Или может быть есть для этого случая какая-нибудь верилог-директива?
  6. Пошарил еще раз по опциям маппинга в диамонде и нашел аналогичную опцию запрета триггеров на портах. Отключил - заработала оптимизация маппингом как в квартусе. Вся разница была в том, что в квартусе эти триггеры по умолчанию выключены, а в диамонде наоборот включены.
  7. Понятно, спасибо, буду знать. Просто при включении оптимизации фиттера обычно ресурсов расходуется на несколько ячеек меньше. Я решил, что значит тасует логику.
  8. Так перемещение триггеров это и есть "поелозить круги по чипу". ) В общем на проекте с назначенными пинами оно тоже работает, может похуже (я сильно не сравнивал), но фронты ровняет. Я в одном проекте сразу пытался распиновку подбирать, чтобы получить сдвиги поровнее. Потом включил оптимизацию фиттера и понял, что занимался ерундой. )
  9. Понятно. Т.е. он оптимизирует не логикой, а чисто маппингом. Ну соб-но для меня как юзера пофиг, главное что оптимизирует. Должно получиться то же самое. На проектах с назначенными пинами тоже оптимизирует. Фигово, что диамонд так не умеет. Походу он тупо оптимизирует на минимальные задержки маппинга.
  10. Ура! Помогла директива /* synthesis syn_keep=1 */. des00, большое спасибо! Это гораздо проще констрейнтов (блин, еще выговори :)). Так что данный вопрос для себя я закрыл. Тем более, что высокая точность фронтов мне не требуется, грубой подгонки вентилями хватит. Остальное доделает оптимизация трассировщика.
  11. Проект пожалуйста. Но там ничего особенного нету. Настройки синезиса по умолчанию. В настройках фиттера только галка переставлена на Standart Fit. DF2_output.rar Возможно в констрейнтах я написал какую-то фигню, с ними начал разбираться буквально вчера. Но это в любом случае не отменяет факта, что просто оптимизация фиттера двигает фронты на наносекунды. И это явно не за счет пикосекундных модулей задержки. Соб-но то же самое можно видеть на любом другом проекте, это я просто для примера привел.
  12. Может мы говорим про разные задержки, но даже просто включение оптимизации трассировщика запросто убирает разбежки фронтов на выходе в 3..5нс. Как еще если не перераспределением вентилей? Вот для примера выход с настройками трассировщика по умолчанию: Тактовая частота iCLK = 50МГц, т.е. 20нс период. Видно, что на выходных фронтах разбежки порядка 5нс. Включаем усиленную оптимизацию трассировщика: Гораздо ровнее. А теперь подключаем констрейнты: Выровнялось все идеально, не смотря на первоначальные разбежки в 5нс. А теперь допустим надо сдвинуть выход oDR на 7нс. Меняем констрейнт и получаем сдвиг: Можно и на 20нс сдвинуть. Все запросто двигается. Что не так? Спасибо за наводку, попробую поискать. А это я просто не догоняю как. Никогда не пользовался DDR.
  13. Я полагал что это делается обычным перераспределением вентилей. Типа если надо задержка, то просто добавляется пара инверторов и готово. А в первом циклоне есть такие блоки? На нем все отлично двигается. Соб-но можно выровнять фронты, если в проекте на выход с отстающим фронтом добавить вентиль. Но чтобы компилятор его не вырезал при оптимизации придется выводить вход вентиля на входной порт. Получается какой-то костыль. Я думал что констрейнты для того и нужны, чтобы компилятор делал то же самое автоматом. P.S. Залез в мануал на MachXo2, там как и в циклоне есть модуль формирования задержек для DDR интерфейса. Это оно? 2-ой вопрос не понял. Как это вывести клок как дата? В смысле пересинхронизировать? Так я же в первом посте написал, что частота битклока на выходе равна частоте мастрклока, тактирующего плис.
  14. Собрал проект под LcmXO2 плисину. Но на выходе между сигналом данных и сигналом битклока получается разбежка порядка 10нс. Частота битклока равна частоте тактового клока, поэтому выполнить пересинхронизацию обоих сигналов не получается. Настройки оптимизации трассировщика исправить ситуацию не помогли. Поэтому решил выровнять фронты констрейнтами. Скачал мануалы по диамонду, нашел как задаются ограничения для цепей. Но не тут-то было. Что не задаю, ничего не меняется. Репорт показывает всегда задержку Clock to Output: 14 нс для одного сигнала и 24..28 нс для другого. Пробовал через SpreadSeed->Preference: задать задержку в меню "CLOCK_TO_OUTPUT". Попробовал задать констрейны через SDC файл (командой set_output_delay) - ничего не меняется. Причем диамонд DSC файл подключает, ограничения в репорте пишет, но тайминги "Clock to Output" не меняет. Для проверки SDC констрейнов подключил этот же файл к проекту в квартусе. Там все отлично работает, фронты двигаются взад-вперед на любой заданный тайминг. В диамонде ничего не меняется. Не пойму что я делаю не так, уже поломал голову разбираться. Может нужно включить какую-то опцию в трассировщике? Кто-нить знает как правильно задавать констрейнты в диамонде?
  15. Приветствую всех. Имею тоже проблемку, заключающуюся в выводе данных. Для расчета КИХ фильтра использую приложение Filter Builder. Полученные коэф-ты выводятся в графическом окне. Далее для работы с этими коэф-тами я их копирую из графического окна в эксель, но это очень неудобно. Т.к. их нельзя выделить целиком, и в окне нет меню для экспорта коэф-тов в текстовый файл. Подскажите, есть ли способ выполнить экспорт расчитанных коэф-тов в хоть какой текстовый файл, или консоль, чтобы можно было их копировать целиком?
×
×
  • Создать...