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

sqrt(2)

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

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

  • Посещение

Репутация

0 Обычный

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

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

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

2 420 просмотров профиля
  1. Ну, например, чтобы не тратить впустую несколько часов, а то и десяток часов.
  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. Этот момент я как-то упустил, что в битах. Однако, 77 (последнее корректное слово как раз под номером 77) слов по 16 бит - дает 1232 используемых бита, а задал я 8192 бита.
  5. Добрый день. Использую Vivado 2017.2. Для проекта решил взять описание памяти, которое предлагает Xilinx. Успешно добавил блок из заголовка в проект, соединил, моделирую. Размер памяти задал 2^13 слов. При моделировании наблюдаю, что данные из памяти считываются корректно. До определенного момента. Когда адрес чтения = 78 (это десятичное число написано) внезапно на выходе оказывается неопределенное состояние. На 79 адресе на выходе уже снова какое-то число, но не то, что должно следовать за 78ым в тестовой последовательности, да и вообще дальнейшей последовательности нет нигде в тестовом воздействии. И да, данные по этому адресу точно уже были записаны, ибо адрес записи к этому моменту уже перевалил за 500, а пишу последовательно. При этом и адреса записи/чтения, и сигналы разрешения - во всех случаях работают одинаково, никакой разницы нет. Кто-нибудь сталкивался с похожими проблемами с этим примитивом?
  6. Спасибо, посмотрю. Возможно, и не верно. Ну тут как бы вопрос не в определениях. То, что я хочу сделать - вроде описал.
  7. А по каким источникам вы изучали это кунг-фу, если не секрет?
  8. В общем и целом, мне надо как-то убедиться, что при заданых входных воздействиях я получу на выходе получится то, что ожидается (ожидаемый результат извесетн из расчетов или моделирования, например, в Матлабе). При этом было бы неплохо знать состояния не только выхода, но промежуточных регистров, чтобы понимать где ошибки. Да, RTL. Тоже думал по поводу записи в файл. А где можно почитать о том, как заставить Modelsim ничего не рисовать, а сразу писать в файлики содержимое регистров? У меня что-то так не получалось.
  9. Здравствуйте. Впервые делаю большой проект, где целевая ПЛИС - Virtex-7. Еще даже не дописал проект до конца, но уже есть проблема - оперативной памяти компьютера уже не хватает. Сейчас я вывожу нужные сигналы на Waveform в Modelsim. Уже и так оставил только один основной блок, но дальше резать нельзя - у этого блока есть элементы, работа которых зависит от обратной связи между друг другом. Как вообще верифицируются большие проекты? Может есть более экономные (с точки зрения использования RAM компьютера) методы моделирования, чем отрисовка Waveform?
  10. Спасибо. Приём таких данных в ПЛИС - ситуация типовая и всё расписано самим 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
×
×
  • Создать...