Небольшая заметка с проблемой генерации проекта, в котором есть EMIF в Platform Designer, решение которой я нашёл для своего случая.
Возможно, это поможет людям, столкнувшимся с аналогичной проблемой. Также помимо описания решения проблемы в моём случае приведу все другие решения, которые так или иначе помогали другим людям, чтобы всё было в одной заметке для удобства.
Итак, о чём речь-то? А о том случае, если вы, к примеру, делаете проект на Cyclone V и в Platform Designer (QSYS по-старому) добавляете EMIF для любой памяти (DDR2 или DDR2LP или DDR3), а при генерации HDL (или просто примера использования EMIF) у вас вылезает вот такая пичалька:
Основная, первая строка, по которой и идентифицируется подобная проблема:
Error: s0: Error during execution of "{C:/intelfpga/18.1/quartus/../nios2eds/Nios II Command Shell.bat} make all 2>> stderr.txt": child process exited abnormally
Что делать? Конечно же, гуглим, находим немало тем (приведены не все, просто для примера некоторые из них) начиная от квартусов 12-й версии и выше:
- Error: Error during execution of… — официальное решение от Intel;
- Problems Rebuilding Golden Reference Design on Cyclone V SoC Development Kit;
- Hard EMIF QSYS generation problem;
- [Qsys] LPDDR2 Controller (UniPHY): HDL generation fails;
- Нужна ли лицензия для аппаратного DDR2 контроллера.
Если в сумме собрать все рекомендации, то стоит проверить следующее:
- Переменные TMP и TEMP — должны быть объявлены у пользователя дополнительно (помимо системных) и иметь краткие пути, без пробелов, кириллицы с указанием на локальный диск (никак не сетевой!). Пример свежеустановленной ОС и квартуса, на которой всё беспроблемно работает:
Как можно видеть, значения пользовательских переменных отличаются и ведут в AppData, иногда помогает объявить их с более кратким путём, наподобие:
C:\Temp
Попробовать стоит, наиболее часто встречающееся решение этой проблемы. Да, не забываем перезагружать ПК после изменений в пользовательских и системных переменных!
- Специфичные переменные типа QSYS_ROOTDIR и т. п. — если вы переустанавливали\обновляли квартус, то стоит проверить все переменные, в которых упоминается квартус, и актуализировать путь к установленному квартусу.
- Обновить квартус до последней актуальной версии — банально, но, возможно, это проблема вашей версии, бывает, помогает.
- Переустановить квартус по дефолтному пути — вроде как часть путей в квартусе захардкодена, и это помогает в решении некоторых проблем при компиляции.
- Обновить Windows — возможно, у вас не стоят необходимые обновления для работы более свежей версии квартуса.
На последнем пункте я заморочился, я сначала удалил квартус, вручную почистил все оставшиеся папки (пользовательская папка, AppData и т. д.), потом почистил реестр, далее попробовал проверить наличие обновление для Windows (хотя у меня и так стоит автообновление) и увидел, что накопительное обновление для Windows 10 билд 1803 (у меня стояла именно эта версия) не устанавливается с ошибкой 0x80070643. Нашел хороший гайд для решения этой ошибки — ошибка 0x80070643. Увы, простые решения (чистка кеша центра обновлений, перезапуск служб, проверка системных файлов) мне также не помогли, согласно гайду последний вариант — ручное обновление до 1809 официальным инструментом, но и на нём меня ждала ошибка 0x800F081F-0x20003 — решение нашлось тут ошибка 0x800F081F-0x20003. Чем мешал режим разработчика, мне не ясно, ну да ладно, выключил его — обновилось всё нормально. Запускаем квартус, открываем проект, открываем платформ дизайнер — всё так же…
Итак… что же делать? Запустил уже Hyper-V, создал простую виртуальную машину, поставил свежий билд 10-ки, поставил аналогичную версию квартуса, открываю проект — собирается без проблем! И тут я плавно перехожу к последнему решению проблемы с квартусом, которое помогало нескольким пользователям, но оно несколько радикально:
- Переустановить Windows — да, снести всё и заново установить 10-ку.
Увы, но работать в виртуальной машине — вариант не очень, поэтому да, сношу всё, ставлю свежий билд 1809, ставлю квартус, открываю проект — компилируется! Ура. Теперь тонну всего ставить и настраивать…
И вот тут-то и всплыл интересный нюанс. Поставил я Office, Visual Studio 2017, Altium Designer 19, мелкие утилиты, WSL с Ubuntu. Запускаю квартус опять, проверить, всё ли ок — а всё не ок, ошибка вернулась. Тут то меня и озарило, с чем конфликтует квартус… приведу сначала скриншот:
Догадались? :)
WSL (Windows Subsystem for Linux) — в командной строке Windows становится доступен bash и вот тут-то начинается веселье, в квартусе, видимо, не везде прописаны чёткие пути к cygwin, вот и случаются конфликты при выполнении скриптов, судя по всему, квартус то локальный cygwin вызывает, то нативный из WSL Ubuntu. Если выключить WSL, то ошибка пропадает:
Так что если вы используете WSL и квартус на одной ОС, то теперь предупреждены о возможном конфликте их работы, если же не используете WSL, то вам, возможно, помогут другие варианты решения описанной проблемы.
Если у вас была подобная проблема и вы решили её каким-либо другим путём — буду рад, если поделитесь Вашим решением в комментариях!
Ссылки
- Сообщество пользователей Intel — много чего можно найти тут;
- Ошибка 0x80070643 — хороший гайд для решения указанной (и не только) ошибки при обновлении Windows 7\10;
- Ошибка 0x800F081F-0x20003 — решение ошибки при «ручном обновлении» Windows 10 до билда 1809.