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

sqrt(2)

Участник
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

Информация о sqrt(2)

  • Звание
    Участник

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

1 995 просмотров профиля
  1. Цитата(Lmx2315 @ Oct 8 2017, 23:44) ..что мешает самому попробовать? чтобы понять влезет или нет - физически плисина не нужна. Ну, например, чтобы не тратить впустую несколько часов, а то и десяток часов.
  2. Цитата(V_G @ Oct 8 2017, 05:08) Да, если блоки 2 параллельно обрабатывают входные данные, увеличивайте число блоков 2. Если нет, вводите блоки 3, параллельно работающие с блоками 2. Либо миритесь с частичной потерей входных данных Да, блоки 2 работают параллельно. Увеличить количество блоков 2 не получится - потому что их и так наставлено столько, что они полностью покрывают входные данные. То есть, входные данные для блоков 2 - вектор из 1024 элементов, каждому блоку 2 надо 4 элемента из этого вектора (для всех блоков это уникальный набор из 4х элементов вектора). Соответственно, делаю 256 параллельно работающих блоков 2. Вся проблема именно в рекурсии. А вообще есть какие-нибудь примеры параллелизации и конвейеризации рекурсивных алгоритмов под ПЛИС или DSP процы? Желательно, чтобы и вх. данные при этом не терялись, или терялись по минимум и можно было бы как-то оценить эти потери. Вообще, у меня есть на примете одна идея как это можно сделать, но при таком раскладе получится ~256*200 блоков 2 + ещё некоторый дополнительный расход памяти, и есть сильное подозрение, что это будет из разряда невпихаемого в никакой ПЛИС. Если тут есть опытные пользователи жирных плисин типа Virtex-7, прошу помочь хотя бы на глазок прикинуть "впихаемость" проекта в такого типа ПЛИС. Если все же пытаться реализовать вариант с 256*200 блоков 2... Имеем: -) 4096 параллельно выполняющихся умножений и вычитаний -) 4*256*200 параллельных сложений -) + еще 256 параллельных сложений, но уже в другом блоке -) 256*200 определений наибольшего из 4х чисел -) +еще 4 определения наибольшего числа из 256 чисел Есть надежда?
  3. Ситуация представлена на картинке. Есть блок с условным названием 1 и множество однотипных блочков 2. Выходы блоков 2 записываются в некий массив (я назвал этот блок MUX) и подаются на входы блоков 2. Полагаю, что правило соответствия элемента массива блоку 2 в контексте вопроса несущественно. Итак, есть блоки, которые рекурсивно что-то вычисляют. Вычисления занимают несколько тактов, поэтому данные от блока 1 на входе блока 2 нельзя обновлять каждый такт. Следовательно, создаётся очередь из данных от блока 1. На самом деле, копятся не выходные данные для блока 1, а то, что поступает ему на вход - поскольку выход блока 1 на самом деле не одна шина с одним и тем же значением для всех блоков 2, а достаточно большой массив, поэтому с точки зрения ресурсов ПЛИС разумнее копить вх. отсчеты с АЦП, которые и поступают на блок 1. То есть, получается следующая схема: отсчеты с АЦП -> RAM -> блок 1 -> блок 2. Таким образом, чтение из RAM происходит каждые M тактов, где M = K+L; K - число тактов на обработку данных в блоке 1, L - число тактов на обработку в блоке 2. А вх. отсчеты поступают каждый такт, и поэтому какую бы большую память не взять - рано или поздно запись новых данных догонит чтение и результаты будут некорректными. Догадываюсь, что подобная проблема возникла не вчера и даже не лет 10 назад. Проблема в том, что не знаю даже по каким словам гуглить. Прошу подсказки.
  4. Цитата(RobFPGA @ Sep 25 2017, 15:08) Приветствую! А как задавали размер памяти? На сколько помню там надо размер в битах указывать может быть в этом дело. Успехов! Rob. Этот момент я как-то упустил, что в битах. Однако, 77 (последнее корректное слово как раз под номером 77) слов по 16 бит - дает 1232 используемых бита, а задал я 8192 бита.
  5. Добрый день. Использую Vivado 2017.2. Для проекта решил взять описание памяти, которое предлагает Xilinx. Успешно добавил блок из заголовка в проект, соединил, моделирую. Размер памяти задал 2^13 слов. При моделировании наблюдаю, что данные из памяти считываются корректно. До определенного момента. Когда адрес чтения = 78 (это десятичное число написано) внезапно на выходе оказывается неопределенное состояние. На 79 адресе на выходе уже снова какое-то число, но не то, что должно следовать за 78ым в тестовой последовательности, да и вообще дальнейшей последовательности нет нигде в тестовом воздействии. И да, данные по этому адресу точно уже были записаны, ибо адрес записи к этому моменту уже перевалил за 500, а пишу последовательно. При этом и адреса записи/чтения, и сигналы разрешения - во всех случаях работают одинаково, никакой разницы нет. Кто-нибудь сталкивался с похожими проблемами с этим примитивом?
  6. Цитата(AVR @ Sep 23 2017, 21:36) http://www.testbench.in Хотя я использую http://cocotb.readthedocs.io/en/latest/introduction.html но это не всегда возможно, некоторые проекты не допускают подобные окружения для верификации И да, то что делаете Вы, это отладка. Повторюсь, Вы уверены что слово "верификация" понимается верно? Спасибо, посмотрю. Возможно, и не верно. Ну тут как бы вопрос не в определениях. То, что я хочу сделать - вроде описал.
  7. Цитата(AVR @ Sep 23 2017, 19:27) Можно на лету проверять/сверять/сопоставлять результаты непосредственно в тестбенче. Я таковые пишу на Python, иногда на SystemVerilog, и не надо ничего сохранять - проверка на лету. А по каким источникам вы изучали это кунг-фу, если не секрет?
  8. Цитата(AVR @ Sep 23 2017, 19:04) Что в Вашем понимании есть процесс "верификации"? В общем и целом, мне надо как-то убедиться, что при заданых входных воздействиях я получу на выходе получится то, что ожидается (ожидаемый результат извесетн из расчетов или моделирования, например, в Матлабе). При этом было бы неплохо знать состояния не только выхода, но промежуточных регистров, чтобы понимать где ошибки. Цитата(iosifk @ Sep 23 2017, 18:47) Это RTL симуляция? Если так, то можно перейти от отладки "сигналов" к отладке прохождения "данных" в проекте. Зачем Вам смотреть сигналы на Waveform? Скидывайте данные в файл и потом обрабатывайте их любыми софтовыми инструментами. Ну и входные данные тоже читайте из файла. При этом не нужна перекомпиляция проекта. просто меняете файл и делаете "Сброс" и "Пуск"... И еще двойной комлект параметров. Один для дебага, другой для релиза. Скажем если SPI для релиза на 1 Мгц, а тактовая 100 Мгц, то для дебага можно отлаживать SPI на 25 или 50 Мгц. И так везде где можно поскрести... Да, RTL. Тоже думал по поводу записи в файл. А где можно почитать о том, как заставить Modelsim ничего не рисовать, а сразу писать в файлики содержимое регистров? У меня что-то так не получалось.
  9. Здравствуйте. Впервые делаю большой проект, где целевая ПЛИС - Virtex-7. Еще даже не дописал проект до конца, но уже есть проблема - оперативной памяти компьютера уже не хватает. Сейчас я вывожу нужные сигналы на Waveform в Modelsim. Уже и так оставил только один основной блок, но дальше резать нельзя - у этого блока есть элементы, работа которых зависит от обратной связи между друг другом. Как вообще верифицируются большие проекты? Может есть более экономные (с точки зрения использования RAM компьютера) методы моделирования, чем отрисовка Waveform?
  10. Цитата(iosifk @ Jul 24 2017, 14:24) Расклад такой. Если данные идут только по одной lvds паре, то Вы в проекте должны сделать преобразователь послед->паралл. И к нему на самом входе только добавить примитив "lvds-буфер". При этом весь проект делайте, как FPGA_core и к нему на самом верхнем уровне добавляйте "lvds-буфер". А для RTL симуляции берите только FPGA_core. В старом тестбенче, xlt у Вас данные вычитываются байтами, сделайте преобразователь "парр->послед". И этого достаточно. Если хотите подробнее, могу рассказать по скайпу. Удачи! Спасибо. Приём таких данных в ПЛИС - ситуация типовая и всё расписано самим Xilinx, и в этом я разобрался. У меня было некоторое непонимание, как грамотно создать такой поток данных для моделирования.
  11. Например, считываю из файла в виде вектора x из 14 бит. Сигнал с АЦП - два провода, data_P, data_N. Беру бит за битом вектор x: data_bit <= x(i), где i - номер текущего читаемого бита. Правильно я понимаю, что в итоге должно получаться так: data_P <= data_bit, data_N <= not data_bit ?
  12. Здравствуйте. Есть некоторый проект для ПЛИС, полностью отлаженый. Однако отладка проводилась без обвязки АЦП. Добавил обвязку АЦП. Проблема в том, что до этого я моделировал данные с АЦП в виде шин с нужной разрядностью, но в моем случае данные с АЦП поступают на ПЛИС в дифф. виде (LVDS) и мне надо отдельно собирать их в шины. Как собирать - я разобрался, осталось только промоделировать. И вот тут я не совсем понимаю, как это моделировать. До этого у меня была такая система - я в Матлабе генерировал нужный сигнал, записывал его в файл, в тестбенче его читал и гонял по шинам. Подскажите пожалуйста, как такие потоки параллельных данных превращать в потоки последовательных? Может стоит использовать какие-то примитивы от производителя ПЛИС, для упрощения (использую Xilinx 7й серии)?
  13. Здравствуйте. Ознакомился тут с документом AN-877. В нем расписано, как конфигурировать микросхемы AD по интерфейсу SPI. Для меня осталось непонятным, какую минимальную паузу надо выдерживать после поднятия сигнала CS и до его следующего опускания для следующей передачи. В документации на конкретный чип это не конкретизируется, и в AN-877 тоже не нашел. Поясните, пожалуйста, кто работал.
  14. В Харрис-Харрис по моему более чем исчерпывающее описание (и словами, и на VHDL - Verilog) как делать КА. Книжка есть даже на русском. На английском есть хорошая книжка (даже несколько) от некого Pong Chu - там вообще объяснена тема чуть ли для самых маленьких. http://academic.csuohio.edu/chu_p/rtl/index.html