Jump to content

    

Конфигурация Zynq 7010

Приветствую.

Хочу построить систему, которая оцифровывает данные с помощью АЦП, выполняет некую обработку сигнала и затем отдает данные в ПК через 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 я не находил. 

В конечном счёт ожидаю из этого

ZynqSystem1.thumb.png.82c2d8ab20b27c6a164150c0a64d360c.png

получить вот это

ZynqSystem2.thumb.png.0053f3ee32ff1f2696a1ae6e5c4110bd.png

P.S. Если не сложно, ткните в документацию, возможно я неправильно запросы гуглу даю..

Edited by kirra.cat

Share this post


Link to post
Share on other sites
3 hours ago, gosha-z said:

А схема от этой платы имеется?

да, имеется. Только она от похожей платы, которая отличается лишь тем, что два чипа DDR3 заменены на один. А в остальном всё тоже самое

P.S. Сейчас еще у меня возникла идея отпаять чип NAND флешки W29N01HVSINA, и заменить его QSPI чипом S25FL256SAGNFV001, правда незнаю, наколько хорошая идея. По идее, если QSPI также подключается на ного MIO, то возможно и получиться припаять на контактные площадки от NAND флешки.

ebit.pdf

Share this post


Link to post
Share on other sites

Да не трогайте вы флешку. Лучше сначала определитесь, виден ли камень полностью через JTAG. Если видится - делайте проект в Vivado, в котором только Processing System, настраиваете все в PS как надо, экспортируете, делаете Memory test и гоняете его. Если все нормально - тогда делаете свое приложение, осваиваете bootgen/program_flash - и вперед, на мины

Share this post


Link to post
Share on other sites

Камень, как понимаю виден.

Я сделал такую архитектуру, в которой добавил на шину AXI двухбитный GPIO (подсоединеный к светодиодам), и пробовал его переключать.

System_Zynq.thumb.png.68fb387af9cce039a18d88c592635fee.png

Как понимаю, процессорная часть видна в Harware Manager

System_Zynq_Hardware_Manager.png.12ba81e056c1fc88025500ad5e622a5c.png

Только у меня не получилось заходить по человечески в отладку (вылазиет периодически 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 имею дело не более недели :)

Share this post


Link to post
Share on other sites

1. Если Zynq чует подключенный отладчик - он всегда сваливается в JTAG Boot Mode. Если отладчиком камень виден (а похоже, что виден) - значит с подключением JTAG все в порядке.

2. У вас память не сконфигурена.

3. В отладке, видимо, не подгрузился и не отработал ps7_init.tcl -проверьте.

Share this post


Link to post
Share on other sites

Вообщем, что я сделал

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 спрашивает сколько ядер можно использовать, и в итоге использует лишь одно?

TaskManager.thumb.png.efc4dc739cb071fa5eda12cdec56860c.png

 

Попробовал зашить собранную прошивку в NAND Flash (используя меню Xilinx->Program Flash)

Program_Flash.thumb.png.e9e8ccf98185176a21985c80290c7cb1.png

но в итоге получаю 

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

NAND_Flash.thumb.png.e93c9b7fefb624c7ab76d6d09c90c602.png

Edited by kirra.cat

Share this post


Link to post
Share on other sites

Сначала решите основную задачу - отладка алгоритмики вашего приложения. Для этого надо создавать приложение из шаблона Empty Application, отладчик сам проинициализирует PS, затолкает битстрим в PL часть и загрузит в память вашу программулину, вам останется только отлаживаться.

Share this post


Link to post
Share on other sites

Либо я дурной, либо вправду что-то не так.

Создал пустой проект, добавил 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, проект на Яндекс.Диске

 

Share this post


Link to post
Share on other sites

Не нужен вам ps7_init(), отладчик делает его работу за вас. Сосредоточьтесь на своей алгоритмике.

Share this post


Link to post
Share on other sites

1) в вивадо рисуется схема с учётом реальных выводов.

2) из вивады делается экспорт хардваре+прошика плис в sdk, с последующим запуском sdk

3) в sdk "автоматом" должно сгенериться комплект дров для "вашей" схемы

4) создать демо проект по шаблонам.

5) если ничего не получается - то прочитать руководство пользователя в DocNav-e. их там море...

Share this post


Link to post
Share on other sites
On 9/22/2019 at 6:41 PM, gosha-z said:

1. Если Zynq чует подключенный отладчик - он всегда сваливается в JTAG Boot Mode. Если отладчиком камень виден (а похоже, что виден) - значит с подключением JTAG все в порядке.

Откуда такая информация? По моей инфе, как раз таки подтяжка выводов при включении питания требуется. Собственно у ТС варнинг по этому поводу. Камень в режиме загрузки с SD карты. Возможно в старых версиях система на это плевала, сейчас вроде нет. Если есть знание как обойти эту проблему, буду рад услышать.

 По теме... Может и глупость, но перед тем как генерить файл для памяти, щелкните по проекту(Вашему, а не fsbl). И в режиме отладки по jtag fsbl не нужен.

Share this post


Link to post
Share on other sites
48 minutes ago, Strob said:

Откуда такая информация?

Из практики. На нескольких разных платах.

Share this post


Link to post
Share on other sites
13 hours ago, gosha-z said:

Из практики. На нескольких разных платах.

И эти платы позволяли прошить qspi(или иную память, кроме platform flash) не переводя камень в режим jtag boot? Мне показалось что ТС говорит о загрузке в память, а не отладке через jtag.

Edited by Strob

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now