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

Flip-fl0p

Свой
  • Постов

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

  • Посещение

Репутация

4 Обычный

Информация о Flip-fl0p

  • Звание
    «Я знаю, что я ничего не знаю»(С)
    Профессионал
  • День рождения 03.01.1990

Старые поля

  • skype
    Array
  • Vkontakte
    Array

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Retained

  • Звание
    Array

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

11 834 просмотра профиля
  1. Ну либо МК умеет прошивать конфигурационную память ПЛИС.
  2. Тот-же xilinx рекомендует объявить RAM к shared variable. Ну или в одном процессе все написать. Сейчас у вас невалидная конструкция. У одного сигнала два драйвера.
  3. Ответ тот-же. Никак. Вы либо придумываете способ калибровки входного потока под необходимый центр данных, используя всякие динамические задержки и сдвиги клоков на PLL. Нет констрейнов, которые двигают клок или данные. Констрейны нужны для того, чтобы временной анализ мог осуществить этот самый анализ.
  4. В случае PSRAM я просто эти выводы объявил на топовом уровне. Правда я и контроллер от GOWIN пользовал. Но сдается мне, контроллер не обязательная штука.
  5. А самописный SDRAM не работает ? Этих контроллеров в сети - навалом.
  6. Тогда нельзя однозначно говорить что работа в симуляторе модели памяти будет соответствовать работе памяти в реально железке. Ибо китайцы могли навертеть что угодно. Я например вообще не смог заставить работать на симуляции PSRAM. Я вот указал на то, что явно мне не понравилось, поскольку имею опыт написания собственного SDRAM контроллера для памяти (для чипов Altera). И меня удивило несоответствие того, как ядро контроллера памяти настроило mode_register. Может для встроенной памяти - это норм. Я не знаю. Но мне кажется все-же китайцы взяли кристалл памяти и просто прилепили его рядом с кристаллом FPGA.
  7. Вижу какую-то хрень на самом деле. Вы настроили память на BL = 1. Т.е за одну команду вы записываете только одно слово. (одна команда записи на одно слово) А подкидываете целую кучу данных. Явное несоответствие настроек памяти и работы с ней. Вы на саму память даташит читали ?
  8. В GAO Состояние DQM какое ? Как инициализирована SDRAM ? Точно ли у вас двунаправленный буффер правильно подключен.
  9. У вас куча Variable в процессе. Я уверен на 99,9% что проблема в этом. Ибо variable /= signal. Variable надо уметь применять ещё )))
  10. Версия вивады сильно не важна. Я работаю с 2020.2
  11. Ну да. Наверное. )) Так тогда все просто. Чтобы работал PSRAM неоходимо вкорячить в проект ядро контроллера PSRAM. Оно требует на вход частоты , а на выходе формируют входную частоту, поделенную на 2. Это все прекрасно задается констрейнами. И нет необходимости в этом контроллере. Фишка с Vivado, что она не тайминги проверяет, а она умеет проверять междоменные переходы и подсвечивать если они выполнены некорректно. Эти констрейны, которые я привел, Vivado сгенерировала автоматически для конкретного FIFO. Я тут не приложил никаких усилий) В случае GOWIN мы не знаем внутреннюю структуру FIFO (она от нас скрыта) и не можем наложить аналогичные ограничения. Более того, от сборки к сборке названия путей в FIFO меняются, и мы не можем наложить ограничения на конкретные пути, поскольку в следующей итерации сборки они могут стать другими.
  12. Вы сейчас имеете ввиду PSRAM у gowin ? set_false_path -from [filter [all_fanout -from [get_ports -scoped_to_current_instance wr_clk] -flat -endpoints_only] IS_LEAF] -to [get_cells -hierarchical -filter {NAME =~ *gdm.dm_gen.dm*/gpr1.dout_i_reg*}] set_max_delay -datapath_only -from [get_cells src_gray_ff_reg*] -to [get_cells {dest_graysync_ff_reg[0]*}] 1000.0 set_bus_skew -from [get_cells src_gray_ff_reg*] -to [get_cells {dest_graysync_ff_reg[0]*}] 1000.0 set_max_delay -datapath_only -from [get_cells src_gray_ff_reg*] -to [get_cells {dest_graysync_ff_reg[0]*}] 1000.0 set_bus_skew -from [get_cells src_gray_ff_reg*] -to [get_cells {dest_graysync_ff_reg[0]*}] 1000.0 На значение времени не смотрите. Оно потом на стадии имплементации другое становится.
  13. Все абсолютно верно. Но помещая клоки в разные группы мы по сути прописываем false_path между переходом из домена в домен. Вот тут и кроется вся проблема. Мы отключаем ВСЕ переходы из домена в домен. Допустим у нас есть не только переход через FIFO , а еще несколько переходов. Но по какой-то причине мы забыли их правильно перенести через домен. И в случае, когда мы поместили клоки в разные группы, нам временной анализатор не покажет, что у нас есть проблемы. Мы же сами его попросили не анализировать это))) А проблемы будут. И мы про них не узнаем. Можно конечно кидаться тапками в разработчика, но тут никто не застрахован от проблем. Особенно когда у вас может быть несколько разных доменов. Поэтому я считаю применение false_path и set_clock_group очень опасной практикой. Более того. У нас автоматически появляется еще одна проблема, применяя эти ограничения. В частности, мы, отключив анализ между клоками, дали синтезатору добро размещать шины данных без каких-либо правил. И в коде грея могут быть серьезные проблемы если биты шины данных слишком сильно расползутся по времени. Поэтому правильно ограничить эти шины констрейном set_max_delay (Или же set_bus_skew). Пример правильных констрейнов можно подсмотреть в Vivadо, сгенериров FIFO.
×
×
  • Создать...