kirra.cat 1 21 сентября, 2019 Опубликовано 21 сентября, 2019 (изменено) · Жалоба Приветствую. Хочу построить систему, которая оцифровывает данные с помощью АЦП, выполняет некую обработку сигнала и затем отдает данные в ПК через Ethernet. Предполагается, что FPGA обрабатывает данные с АЦП, предварительно обрабатывает их, и отдает процессору. Процессор доделывает что надо и отправляет по Ethernet в ПК для отображения. И хотелось бы, чтобы и процессор и FPGA были в одной микросхеме. Вообщем, выбор мой пока пал на SoC Zynq 7010 :) я заказал у китайцев «отладочную плату», которая оказалась платой управления от какого-то майнера, ну и ладно, сам чип там Zynq 7010, что собственно хорошо. Начал с ним разбираться, часть с FPGA мне ясна. Но не ясна часть с процессорной системой и с конфигурацией. Точнее мне не ясно, где храниться процессорная программа и прошивка для FPGA. Я хотел уточнить какие из возможных сценариев конфигурации этого дела возможны, при учете что я планирую кодить это дело без всяких операционных систем, прям Baremetal: Вариант 1. В системе есть некая SPI (или QSPI) флешка, на которую я закидываю прошивку FPGA, и программы для процессоров. При подаче питания SoC вычитывает содержимое, конфигурирует FPGA и закидывает программу в накристальную память для процессоров, и всё начинает работать. Правда, насколько я понимаю, я должен с программами для процессоров уложиться в объем накристальной памяти, которой у Zynq 7010 256 кБ. Вариант 2. Такой же, как и вариант 1, только программа для процессора должна оказаться в DDR памяти, и оттуда выполняться. Как понимаю, у Xilinx есть некий загрузчик FSBL, который загружается в накристальную память, инициализирует DDR и перемещает туда пользовательское приложение (которое не понятно, где находится, в той же флешке?). В самой плате от китайцев есть только NAND флешка и SD карта, но эти варианты загрузки не подходят.. Что-то поиск меня всегда приводил к мануалам, в которых запускают Linux, а как делать для Baremetal я не находил. В конечном счёт ожидаю из этого получить вот это P.S. Если не сложно, ткните в документацию, возможно я неправильно запросы гуглу даю.. Изменено 21 сентября, 2019 пользователем kirra.cat Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 218 22 сентября, 2019 Опубликовано 22 сентября, 2019 · Жалоба Читайте Ch.6 Boot and Configuration в UG585 https://www.xilinx.com/content/dam/xilinx/support/documentation/user_guides/ug585-Zynq-7000-TRM.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 22 сентября, 2019 Опубликовано 22 сентября, 2019 · Жалоба А схема от этой платы имеется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kirra.cat 1 22 сентября, 2019 Опубликовано 22 сентября, 2019 · Жалоба 3 hours ago, gosha-z said: А схема от этой платы имеется? да, имеется. Только она от похожей платы, которая отличается лишь тем, что два чипа DDR3 заменены на один. А в остальном всё тоже самое P.S. Сейчас еще у меня возникла идея отпаять чип NAND флешки W29N01HVSINA, и заменить его QSPI чипом S25FL256SAGNFV001, правда незнаю, наколько хорошая идея. По идее, если QSPI также подключается на ного MIO, то возможно и получиться припаять на контактные площадки от NAND флешки. ebit.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 22 сентября, 2019 Опубликовано 22 сентября, 2019 · Жалоба Да не трогайте вы флешку. Лучше сначала определитесь, виден ли камень полностью через JTAG. Если видится - делайте проект в Vivado, в котором только Processing System, настраиваете все в PS как надо, экспортируете, делаете Memory test и гоняете его. Если все нормально - тогда делаете свое приложение, осваиваете bootgen/program_flash - и вперед, на мины Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kirra.cat 1 22 сентября, 2019 Опубликовано 22 сентября, 2019 · Жалоба Камень, как понимаю виден. Я сделал такую архитектуру, в которой добавил на шину AXI двухбитный GPIO (подсоединеный к светодиодам), и пробовал его переключать. Как понимаю, процессорная часть видна в Harware Manager Только у меня не получилось заходить по человечески в отладку (вылазиет периодически Error while launching program: Memory write error at 0x100000. APB AP transaction error, DAP status f0000021), который, как я понял, связан с тем, что мой чип Zynq 7010 сконфигурирован как-то не так, и чтобы JTAG-отладчиком его можно было отлаживать, надо перепаять какие-то резисторы, тем самым разрешив отладку по JTAG. Возможно, я что-то путаю. Но тем не менее, как я понял из Ch.6 Boot and Configuration, можно сделать так, чтобы моя программа жила в NAND флешке, даже если она Baremetal. Только мне надо использовать некий FSBL. Я всё верно понял? Только пока не понял, что надо доработать в плате, чтобы была возможность загружать в NAND флешку программу, и отлаживать её по JTAG. Если подскажете, как мне это сделать, буду премного благодарен :) Полный проект для Vivado 2018.2 выложил на Яндекс.Диск P.S. Прощу прощения за такие глупые вопросы, но с Xilinx имею дело не более недели :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 22 сентября, 2019 Опубликовано 22 сентября, 2019 · Жалоба 1. Если Zynq чует подключенный отладчик - он всегда сваливается в JTAG Boot Mode. Если отладчиком камень виден (а похоже, что виден) - значит с подключением JTAG все в порядке. 2. У вас память не сконфигурена. 3. В отладке, видимо, не подгрузился и не отработал ps7_init.tcl -проверьте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kirra.cat 1 22 сентября, 2019 Опубликовано 22 сентября, 2019 (изменено) · Жалоба Вообщем, что я сделал 1. Добавил NAND-Flash в систему с Zynq 2. Собрал (запустил Synthesis и Implementation) 3. Далее Generate Bitstream 4. Потом File->Export-> Export Hardware (включая созданный Bitstream) 5. Далее File->Launch SDK 6. В этом Xilinx SDK делаю Refresh проекта, который описывает аппаратную часть (в приложенном мною примере это zynq_test0_wrapper_hw_platform_0). 7. Далее создаю новый проект (назвал его zynq_test0_run_on_nand), выбирая шаблон Zynq FSBL (который, согласно описанию, и загружает образ с NAND флешки, и закидывает его на выполнение в DDR) 8. Собираю проект, прошиваю FPGA. Потом на проекте правой кнопкой – и выбираю Debug As->Launch On Hardware (system debugger) 9. Запускаю программу на выполнение, и потом останавливаю. Программа останавливается в функции FsblHookFallback void FsblHookFallback(void) { /* * User logic to be added here. * Errors to be stored in the status variable and returned */ fsbl_printf(DEBUG_INFO,"In FsblHookFallback function \r\n"); while(1); } Это нормально? Просто по крайней мере отладчик стабильно попадает в эту функцию. Верно ли я понял, что это аналог бесконечного цикла в микроконтроллерах? Обновленный проект закинул снова на Яндекс.Диск P.S. Нормально, что при синтезе и прочих операциях, Vivado спрашивает сколько ядер можно использовать, и в итоге использует лишь одно? Попробовал зашить собранную прошивку в NAND Flash (используя меню Xilinx->Program Flash) но в итоге получаю cmd /C program_flash -f \ G:\Vivado\zynq_test0\zynq_test0.sdk\zynq_test0_run_on_nand\bootimage\BOOT.bin -offset 0 \ -flash_type nand_8 -fsbl \ G:\Vivado\zynq_test0\zynq_test0.sdk\zynq_test0_run_on_nand\Debug\zynq_test0_run_on_nand.elf \ -cable type xilinx_tcf url TCP:127.0.0.1:3121 ****** Xilinx Program Flash ****** Program Flash v2018.2 (64-bit) **** SW Build 2258646 on Thu Jun 14 20:03:12 MDT 2018 ** Copyright 1986-2018 Xilinx, Inc. All Rights Reserved. Connected to hw_server @ TCP:127.0.0.1:3121 Available targets and devices: Target 0 : jsn-JTAG-HS2-210241988047 Device 0: jsn-JTAG-HS2-210241988047-4ba00477-0 Retrieving Flash info... Initialization done, programming the memory ===== mrd->addr=0xF800025C, data=0x00000005 ===== BOOT_MODE REG = 0x00000005 WARNING: [Xicom 50-100] The current boot mode is SD. If flash programming fails, configure device for JTAG boot mode and try again. Downloading FSBL... Running FSBL... Finished running FSBL. ===== mrd->addr=0xF8000110, data=0x000FA220 ===== READ: ARM_PLL_CFG (0xF8000110) = 0x000FA220 ===== mrd->addr=0xF8000100, data=0x00028008 ===== READ: ARM_PLL_CTRL (0xF8000100) = 0x00028008 ===== mrd->addr=0xF8000120, data=0x1F000200 ===== READ: ARM_CLK_CTRL (0xF8000120) = 0x1F000200 ===== mrd->addr=0xF8000118, data=0x001452C0 ===== READ: IO_PLL_CFG (0xF8000118) = 0x001452C0 ===== mrd->addr=0xF8000108, data=0x0001E008 ===== READ: IO_PLL_CTRL (0xF8000108) = 0x0001E008 Info: Remapping 256KB of on-chip-memory RAM memory to 0xFFFC0000. ===== mrd->addr=0xF8000008, data=0x00000000 ===== ===== mwr->addr=0xF8000008, data=0x0000DF0D ===== MASKWRITE: addr=0xF8000008, mask=0x0000FFFF, newData=0x0000DF0D ===== mwr->addr=0xF8000910, data=0x000001FF ===== ===== mrd->addr=0xF8000004, data=0x00000000 ===== ===== mwr->addr=0xF8000004, data=0x0000767B ===== MASKWRITE: addr=0xF8000004, mask=0x0000FFFF, newData=0x0000767B Problem in running uboot Flash programming initialization failed. ERROR: Flash Operation Failed Попробовал править тайминги NAND флешки, тоже не привели в её прошивке. На флешке маркировка S34ML01G100TF100, тайминги правил в соотвествии с Datasheet Изменено 22 сентября, 2019 пользователем kirra.cat Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 22 сентября, 2019 Опубликовано 22 сентября, 2019 · Жалоба Сначала решите основную задачу - отладка алгоритмики вашего приложения. Для этого надо создавать приложение из шаблона Empty Application, отладчик сам проинициализирует PS, затолкает битстрим в PL часть и загрузит в память вашу программулину, вам останется только отлаживаться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kirra.cat 1 22 сентября, 2019 Опубликовано 22 сентября, 2019 · Жалоба Либо я дурной, либо вправду что-то не так. Создал пустой проект, добавил main.c Пробую мигать светодиодом, но при сборке ругается, что не определен ps7_init(). Но он находится в описании аппаратной части, и пути в проекте у меня до него настроены Делал для этого C/C++ Build -> Settings -> Directories и туда добавлены пути как для текущего проекта "${workspace_loc:/${ProjName}}", так и для описания платформы "${workspace_loc:/zynq_test0_wrapper_hw_platform_0}" Собственно в саму функцию по клавише F3 могу зайти, но всё равно ругается, что она неопределенна Пробовал создавать проект с HelloWorld, там тоже самое. В комментариях к init_platform() написано, что если будешь это дело вызывать вне SDK, то раскомментируй функции ps7_init() и psu_init(), а также раскомментируй подключени хедеров ps7_init.h и psu_init.h Но это ровным счётом приводит к такому же результату, ps7_init() не определен. Без вызова функции ps7_init() всё собирается без ошибок, но отладчик не заходит в программу, всегда куда-нибудь улетает Как понимаю, тут есть некая тонкость, о которой я не догадываюсь. Что я делаю не так? Сейчас мучаюсь с проектом zynq_test0_hello, проект на Яндекс.Диске Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 23 сентября, 2019 Опубликовано 23 сентября, 2019 · Жалоба Не нужен вам ps7_init(), отладчик делает его работу за вас. Сосредоточьтесь на своей алгоритмике. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 23 сентября, 2019 Опубликовано 23 сентября, 2019 · Жалоба 1) в вивадо рисуется схема с учётом реальных выводов. 2) из вивады делается экспорт хардваре+прошика плис в sdk, с последующим запуском sdk 3) в sdk "автоматом" должно сгенериться комплект дров для "вашей" схемы 4) создать демо проект по шаблонам. 5) если ничего не получается - то прочитать руководство пользователя в DocNav-e. их там море... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Strob 0 23 сентября, 2019 Опубликовано 23 сентября, 2019 · Жалоба On 9/22/2019 at 6:41 PM, gosha-z said: 1. Если Zynq чует подключенный отладчик - он всегда сваливается в JTAG Boot Mode. Если отладчиком камень виден (а похоже, что виден) - значит с подключением JTAG все в порядке. Откуда такая информация? По моей инфе, как раз таки подтяжка выводов при включении питания требуется. Собственно у ТС варнинг по этому поводу. Камень в режиме загрузки с SD карты. Возможно в старых версиях система на это плевала, сейчас вроде нет. Если есть знание как обойти эту проблему, буду рад услышать. По теме... Может и глупость, но перед тем как генерить файл для памяти, щелкните по проекту(Вашему, а не fsbl). И в режиме отладки по jtag fsbl не нужен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 23 сентября, 2019 Опубликовано 23 сентября, 2019 · Жалоба 48 minutes ago, Strob said: Откуда такая информация? Из практики. На нескольких разных платах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Strob 0 24 сентября, 2019 Опубликовано 24 сентября, 2019 (изменено) · Жалоба 13 hours ago, gosha-z said: Из практики. На нескольких разных платах. И эти платы позволяли прошить qspi(или иную память, кроме platform flash) не переводя камень в режим jtag boot? Мне показалось что ТС говорит о загрузке в память, а не отладке через jtag. Изменено 24 сентября, 2019 пользователем Strob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться