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

    

RobFPGA

Свой
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

1 Подписчик

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

  • Звание
    Профессионал

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

9 655 просмотров профиля
  1. Приветствую! Вот напоролся я на источник этой ругани: Проект на Virtex7. В дизайне модуль в котором 16 штук одинаковых FFT параллельно-последовательно жуют поток от 2 каналов ADC. Модуль уже работал в другом проекте так что проблем не ожидал - и вдруг выходе одного из FFT наблюдаю что то похожее на забор соседа на даче, а не одинокую палку. Все времянки после P&R ок. Прогнал пост P&R функционал и timig симуляцию для этого модуля - все ок. Что за чертовщина? Полез дебажить через ECO моде. Последовательно цепляя пробники по пути сигнала вычислил что глючить ... ROM таблица поворотов (просто BRAM) в одном из stage FFT. Причем там никакой асинхроннщины нет и в помине! Прошивка только что загружена через JTAG! Неужели Pentek подсунул мне битые FPGA? Немного остыв начал смотреть в чем разница с предыдущим проектом. А разница в том что в текущем проекте частота ADC программируется и софт сначала меняет частоту внешнего синтезатора а потом меняет настройки внутреннего PLL от которого питается FFT. И все это на лету - без остановки FFT модуля!. Потом ясное дело ресетится весь блок обработки и все. Поэтому как пить дать происходить кратковременное нарушение времянок на адресной шине ROM - а это чревато: The setup time of the block RAM address and write enable pins must not be violated. Violating the address setup time (even if write enable is Low) can corrupt the data contents of the block RAM. Теперь вот надо думать как с этим бороться. Понятно что сначала надо избить поговорить с программистами. А потом решать как уйти от этой зависимости непосредственно в железе. Удачи! Rob.
  2. Приветствую! Тогда остается самый печальный вариант - смотрите хорошим осциллографом питание на ADC (цифровую часть) и на FPGA в частности аналоговый домен питания PLL. Может там короткие провалы при нагрузке при приходе сигнала. Ну или наводки шумов на эти линии идут при одновременном переключении множества линий когда код с выхода ADC около 0. Удачи! Rob.
  3. Прикольный колокольчик на бубне :) - вроде это только ускоряет чуть чуть компиляцию исходников Полезно запустить 3-4 итерации с разными опциями - и посмотреть что и на сколько влияете Удачи! Rob.
  4. Приветствую!. 2-3 часа для плотного дизайна для Stratix V это нормально - это ведь не 10-12 часов Можно попробовать побить дизайн на партиции - те из них которые не меняются при компиляции задать как post_fiting. Также пробовать RapidRecompiling - но это работает не всегда - при относительно больших изменениях может быть даже хуже чем при нормальной компиляции. Можно пробовать лочить партиции на кристалле. Вобщем чистое шаманство :) Удачи! Rob.
  5. Естественно для всех бит - так как тут нет проверки отдельных бит в test_sig. Это эквивалентно signal_out = (test_sig[39:0]!=0) ? {40{1'b1}} : {40{1'bz}}; А TC хотел бы что типа такого // signal_out = {40{1'bz}} | test_sig[39:0]; Но увы - хоть битовая операция 1'bz | 1'b1 = 1'b1 но вот 1'bz | 1'b0 = 1'bx (а не 1'bz) - обломс :( Удачи! Rob.
  6. Приветствую! Настоящий партизан - но мы то все равно догадались что явка Штирлица не найдены библиотеки примитивов целевой FPGA или IP корок . То есть - либо не скомпилированы в скрипте либо поставлялись отдельно и не подключены. Удачи! Rob.
  7. Приветствую! Да так же как вы для для бита написали (только с инверсией условия) - Ну а биты перебирать в цикле. А цикл соответственно спрятать в яйце в ларце функции или на дереве genrate блока. Удачи! Rob.
  8. Приветствую! Еще N! вариантов и вы найдете (может быть) удачную комбинацию. Даже не анализируя "какие то ошибки". Удачи! Rob.
  9. Приветствую! Думаю что нет. Тут скорее дело в алгоритме минимизации целевой функции тайминга/роутинга при P&R. Например для структуры связей A <-> B <-> C <-> ... N и N <->A. Когда суммарный вес множества коротких связей между близкими блоками превышает вес одной длинной. Ощущения что при размещении блоки ставятся один за другим. При этом направление размещения для следующего не имеет существенно роли так как связи короткие (можно даже предположить что преимущество будет в сторону пустого пространства). В какой то момент функция попадает в локальный минимум и выбраться от туда уже не может. В ISE было еще печальнее - там P&R мог запросто модуль вытянуть колбасой по диагонали через весь кристалл. В Vivado это заметно поправили. Во всяком случае для Kintex|Virtex, (для Artix не скажу почти не работал с ними). Удачи! Rob.
  10. Приветствую! Увы алгоритм P&R в Xilinx этим грешит размазывая логику по кристаллу что манку по тарелке. IMHO скорее всего это связанно с другой структурой FPGA (более однородной) по сравнению с Altera. Поэтому применение pblock это необходимое условие для повторяемости результатов и ускорения P&R. особенно для скоростных и загруженных дизайнов. Удачи! Rob.
  11. Всего!!! Для того чтобы сказать точнее чего не хватает нужно узнать а что же есть? (Утро. Тяпница. Телепатические способности уже на 0 :) ) Удачи! Rob.
  12. Нее - неинтересный лог - хотим танцев :) Я вижу что вы пытаетесь запустить на симуляцию топ под именем "1" странное название я бы сказал. Чего то видно не хватает в командной строке. Удачи! Rob.
  13. Приветствую! Танцы с бубном мы бы с удовольствием посмотрели - выкладывайте видео! Ну или хотя бы текст лебединой песни - лог с ошибками с этого бы и надо и начинать. Удачи! Rob.
  14. Приветствую! А как меняется число бит в fir слове при сдвиге на каждом такте (сразу после ресета)? Удачи! Rob.
  15. Приветствую! Вы видите логический единичный бит со стороны CPU и это не значит что он физически и одновременно работает и на ввод и на вывод (если конечно вы не Шредингер и не владеете котом ;) ) Для таких случаем есть wire_OR - в 1 линию тянут резистором, а в 0 каждое устройство через буфер с открытым стоком. Но в этом случае арбитраж, управление и передача статуса разнесены во времени и требуют реализации протокола внутри каждого устройства (как пример I2C). Ну и в FPGA такое не применяется. Да можно (см. I2C, one_wire,...) - но зачем? Вам нужно чтобы выглядело как в MK или нужен физически один бит? Не совсем правильно поняли - у меня bit_ctrl это и есть тот бит "внешней команды запуска чего-то там" который устанавливается CPU, а забрасывается из чего-то там через сигнал clear_sig. Удачи! Rob.