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

SergeyF

Свой
  • Постов

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

  • Посещение

Репутация

0 Обычный

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

  • Звание
    Местный
    Местный
  • День рождения 03.12.1973

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

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

2 214 просмотра профиля
  1. Спасибо! Добавлю к маршруту, что: 1. Отдельно пришлось добавить присутствующую в списке libpng12-0:i386 - https://packages.ubuntu.com/xenial/i386/libpng12-0/download (для 64 разрядов ее приходится добавлять при установке Quartus - https://packages.ubuntu.com/xenial/amd64/libpng12-0/download). 2. Проверка версии ядра в скрипте запуска modelsim/ase/vsim дает путь к неправильной папке, надо написать vco="linux" ;; вместо vco="linux_rh60" ;; Это Mint 19.1 (Ubuntu 18.04 LTS)
  2. Что-то Вы намудрили с обращением к регистру и разрядностями почти всего. Если хотите разрядность шины модуля 8 бит, то BE не нужны. А лучше сделайте разрядность интерфейса модуля 32, отдельные байты выбирайте BE, учтите, что avalon сама базовую часть адреса вычитает и выставляет адрес в разрядности интерфейса. Пример на базе Вашего компонента прикрепил, у меня ошибок при компиляции нет. tem.zip
  3. У меня сейчас работает, но можно немного подробнее рассказать о том, как "констрейн подтянулся" и в чем проявлялось игнорирование констрейна, как это стало понятно? Так как, видимо, причина действительно в этом - у меня стоит SDR и, похоже, глючило от него. Полечилось экспериментами с разными сочетаниями настроек контроллера памяти и калибровкой.
  4. Не совсем понятно, какая конкретно ошибка возникает. Я делаю все нужные для периферийных модулей системы на кристалле ядра coregenом в одном проекте .cgp. Размещаю его в отдельной папке в pcores. Мне так удобнее, так как эти модули используются сразу несколькими периферийными модулями. Естественно, с путями все прописываю в .pao модулей. При этом EDK компилирует модуль нормально (generate netlist). Для нормальной сборки в ISE в Translate Properties в macro search path указываю C:/Xilinx/Projects/test_pcores_module_loop/system/implementation|C:/Xilinx/Projects/test_pcores_module_loop/system/pcores/coregen чтобы находились ngc файлы для сгенерированных coregen модулей. Это в версии 12.2.
  5. А причем тут стек? Пусть таймер 10000 раз прокрутится и выставит запрос. Контроллер прерываний его обработает и выставит запрос на вход прерывания процессора. Он всего один (одноразрядный). Не буферируется. Просто внешние прерывания пропадают, так как ядро стоит. Я выполняю инструкцию - попадаю в обработчик прерывания. И пусть буфер контроллера Ethernet выставит тоже запрос - если я занимаюсь single-stepping, то это моя проблема - обеспечить, чтобы у него не переполнился буфер. Значит организую поток данных так, чтобы пакеты посылались "дозированно" или вообще выдерну разъем. А даже если я собью работу контроллера Ethernet, ядро все равно не должно перескакивать на неправильную инструкцию.
  6. Я представил себе маршрут с созданием простенькой системы, тестированием, потом включением кэшей, тестированием, потом дополнением SDRAM, включением XCL, дополнением модулями-источниками прерываний, и все это тоже постепенно. Хорошо бы, да я рано радовался - оно все равно заглючило. Во всех нормальных эмуляторах, с которыми я работал, при возникновении активного запроса прерывания вылетаешь прямо в пошаге в обработчик прерывания, если источник активизируется... :( Это же не монитор, а встроенный в ядро внутрисхемный эмулятор. Если внешний компонент на шине (тот же таймер, который считает и не знает, что там с процессором) выставил запрос прерывания, ядро должно запустить на выполнение обработчик. Я не прав?
  7. А чем не устраивает вариант с реализацией на 16 параллельно работающих умножителях? Так как умножаем на константу (alpha^i в каждом модуле), они будут весьма компактны. В статье Hahno Lee на стр. 289 формула (3) раскладывается по схеме Горнера и становится понятно, как получается модуль расчета синдрома на рис. 3а на стр. 290.
  8. У меня от нажатия generate netlist до получения прошивки проходит 30 минут. Плюс прогнать софт на разных уровнях оптимизации и разных кусках кода, так как я не понимаю, где проблема и могу пропустить. Итого - час на итерацию в одной конфигурации аппаратуры минимум.
  9. Собрать систему, добавляя по кусочкам с нуля и найти баг, с учетом времени компиляции... это мне два дня надо убить. Если ничего не поможет, видимо, придется сделать так. Да, используются. В порядке снижения приоритета: таймер, контроллер Ethernet lxt971a, debug unit, параллельный порт. По моим прикидкам и исходя из того, что при run работает, должно времени на обработку прерываний хватать. Посмотрю повнимательнее. А как это может влиять? Выяснил вот еще: это было при отключенной оптимизации -o0. Включил -o2 - заработало. У человека рядом в другом коде, в другом цикле аналогично было. Но меня это не радует.
  10. Постоянно сталкиваюсь с проблемой при отладке софта через меню Debug под Microblaze через Platform Cable USB. Версия - ISE и EDK 12.2 с патчами. Вариантов поведения по сути два. Первый - неправильное исполнение кода (пример ниже). Второй - вылет с нормальной инструкции в обработчик исключения неверной инструкции. Проблемы возникают как в пошаге, так и при запуске на исполнение до точки останова. По неправильному исполнению кода наиболее наглядно - простой цикл. int i; int *p; int data[4]; ... for (i=0; i<4; i++) p[i]=data[i]; ... При запуске в режиме отладки не изменяется счетчик цикла, причем при прохождении в пошаге по окну дизассемблера прыгает в начало цикла с инструкции сохранения. Пробовал разные аппаратные конфигурации - отключал в ядре Writeback в кэше данных, играл другими параметрами. Играл с софтом - включал и не включал кеш - эффект один. Стека простейшей программе хватает. Прогнал тест внешней памяти - проходит. Размещал программу и во внешней, и во внутренней памяти - то же. И по быстродействию вроде бы проходит (смотрел отчет), хоть я и не спец в констрейнах Xilinx. Запускаю неконтролируемое отладчиком исполнение через Run - система работает нормально. Нет ли идей, в какую сторону копать, что у Xilinx почитать? Может, приоритеты прерываний как-то надо поставить правильно, XCL на SDRAM отключить и все пустить через один канал, или с кэшем еще как-то поколдовать?
  11. Мне кажется, что стоит рассмотреть работу EMIF в синхронном режиме и регистр на выходе этого дерева мультиплексоров. Все входные сигналы EMIF тоже синхронизировать. Задержка чтения получится 2 такта. После этого будет проблема с OE, он медленно идет от TMS, потом через ПЛИС и до буферов. Можно в таком случае попробовать его не использовать, а эмулировать внутри ПЛИС из чипселекта и сигнала чтения/записи.
  12. Конечно, умножителей там во всем решателе БМ больше. В таблице 1 внизу приведено. Я сделал все почти как в fig.1-fig.3, но ввел дополнительный регистр на выходе дерева сложений перед модулем Control (fig.2) и сделал модуль PE (fig.3) на одном умножителе и большем количестве мультиплексоров, чтобы работал за два такта. За счет этого, если посмотреть таблицу 1 на странице 650, у меня получилось 2t+2 умножителей и больше мультиплексоров, чем в iBM(Blahut), меньший критический путь, но 6t тактов на решение. Я не говорю, что сделал лучше - просто нашел некоторую устраивавшую меня точку по объему, частоте и времени решения.
  13. Нет, я сделал iBM, как он там приведен в самом начале на стр. 643.
  14. Я делал по статье Dilip V. Sarwate, Naresh R. Shanbhag "High-Speed Architectures for Reed–Solomon Decoders" IEEE TRANSACTIONS ON VLSI, VOL. 9, NO. 5, OCTOBER 2001 и другим, на которую в этой работе ссылаются. Использовал базовый iBM. В нем сначала считаются локаторы lambda за 2t итераций, а потом ошибки omega за t итераций. На итерациях расчета локаторов (2t итераций) рассчитывается lamba(r + 1) = gamma® *lambda®-delta®*beta® для каждого локатора lambda. Что требует двух умножителей. Так как мне не нужно было спешить, я разложил итерацию на два такта для использования одного умножителя в модуле, который в той статье называется PE. Теперь думаю, почему 48, а не 40 - будет время, подниму проект. Получилось быстрее последовательного Евклида, но медленнее любой из приведенных в статье реализаций БМ. Но зато и по объему что-то среднее между Евклидом и их реализациями БМ. :)
  15. Не совсем. Я его разложил по тактам для уменьшения числа умножителей, поэтому 48 тактов для t=8. 2t=16, сначала первый этап решения (нахождение локаторов) 32 такта, потом второй этап - нахождение значений ошибок 16 тактов.
×
×
  • Создать...