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

doom13

Свой
  • Постов

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

  • Посещение

Сообщения, опубликованные doom13


  1. 1 hour ago, Pasha said:

    А когда процессору будет нужно он их уже оттуда передаст в ПК.

    Это событие как часто происходит? Размер данных для отправки на ПК какой?

    Ещё можете в сторону AXI DataMover посмотреть.

  2. 8 minutes ago, Pasha said:

    А если я прикручу мастер интерфейс axi-lite. Подключу его к интерконекту. А потом к интерфейсу slave axi-lite в процессорной системе. И буду посылать раз в несколько десятков милисекунд 2 слова по 32 байта в нужные мне адреса. А когда передам нужное количество просто дам прерывание. Так будет работать или обязательно нужен axi-dma, что бы он доступ к памяти обеспечивал?

    Для случая DMA всё уже сделано за вас. Вам остаётся разобраться с работой DMA со стороны процессорной системы и сформировать из ваших "отчёты по 64бита" AXI4-Stream (разбить ваши данные на пакеты определённого размера, сформировать TLAST).

  3. 3 hours ago, Pasha said:

     

    А то вручную организовывать AXI4stream master для меня та ещё задачка =)

    Там нет ничего сложного, интерфейс с пятью портами реализовать: m_axis_aclk, m_axis_tvalid, m_axis_tready, m_axis_tlast, m_axis_tdata[n-1:0].

    Можно и без tready, поставите фифо между вашим ядром и AXI DMA, которое будет буферизировать данные на время перезарядки DMA.

  4. Пока проблему вижу в Xilinx SDK (может быть можно как-то настроить?). В настройках проекта в дефолтном состоянии установлены  флаги для компилятора -ffunction-sections -fdata-sections и линкера --gc-sections (Enable garbage collector), которые и приводят к данной проблеме.

    Для кода
     

    int TestFunction(int x1, int x2);
    
    int main()
    {
    	while(1)
    	{
    
    	}
    	return 0;
    }
    
    int TestFunction(int x1, int x2)
    {
    	return x1 + x2;
    }

    c установленными в опциях проекта галками Enable garbage collector получаем следующее в elf-файле

    Disassembly of section .vectors.reset:
    
    00000000 <_start>:
    	}
    	return 0;
    }
    
    int TestFunction(int x1, int x2)
    {
       0:	b0000000 	imm	0
       4:	b8080050 	brai	80	// 50 <_start1>
    
    Disassembly of section .vectors.sw_exception:
    
    00000008 <_vector_sw_exception>:
       8:	b0000000 	imm	0
       c:	b808095c 	brai	2396	// 95c <_exception_handler>
    
    Disassembly of section .vectors.interrupt:
    
    00000010 <_vector_interrupt>:
      10:	b0000000 	imm	0
    	return x1 + x2;
      14:	b80809d0 	brai	2512	// 9d0 <__interrupt_handler>
    
    Disassembly of section .vectors.hw_exception:
    
    00000020 <_vector_hw_exception>:
    }
      20:	b0000000 	imm	0
      24:	b80802f0 	brai	752	// 2f0 <_hw_exception_handler>
    
    Disassembly of section .text:

    если убрать разрешение Enable garbage collector, то всё сразу круто (за исключением размера бинарника)

    Disassembly of section .vectors.reset:
    
    00000000 <_start>:
       0:	b0000000 	imm	0
       4:	b8080050 	brai	80	// 50 <_start1>
    
    Disassembly of section .vectors.sw_exception:
    
    00000008 <_vector_sw_exception>:
       8:	b0000000 	imm	0
       c:	b808099c 	brai	2460	// 99c <_exception_handler>
    
    Disassembly of section .vectors.interrupt:
    
    00000010 <_vector_interrupt>:
      10:	b0000000 	imm	0
      14:	b8080a00 	brai	2560	// a00 <__interrupt_handler>
    
    Disassembly of section .vectors.hw_exception:
    
    00000020 <_vector_hw_exception>:
      20:	b0000000 	imm	0
      24:	b8080330 	brai	816	// 330 <_hw_exception_handler>
    
    Disassembly of section .text:

    Криво сформированный elf-файл и приводит к тому, что SDK (если в Debug Configurations поставить галку Stop at program entry) отображает выполнение кода, который не должен был выполняться (реально выполняется startup sequence crt0.S).

    Как исправить - вопрос открытый.

     

    Screenshot from 2020-07-30 17-57-40.png

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

    При старте программы MicroBlaze и остановке на main() наблюдаю непонятное содержимое в стеке вызовов. Может кто сталкивался с подобным поведением и с чем оно связано?

    Думал это связано с С++ проектом, но нашёл аналогичную проблему и для проекта на С тут.

    Использую Vivado/SDK 2018.2, думал ситуация изменится при использовании Vitis 2020.1, но не помогло.

    2.png

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

    Не могу найти в какой доке можно почитать про атрибуты для памяти, которые устанавливает:

    void Xil_SetTlbAttributes(UINTPTR Addr, u64 attrib);

    1. Хочу выделить некэшируемую область памяти.

    2. Хочу ограничить возможность записи в определённые области памяти.

  7. 1 hour ago, Dvorkin said:

    Все это хорошо было в Zynq. А вот в ZynqMP Ultrascale размер FSBL ограничен, часть OCM отдана под FSBL, часть под ATF. Сильно не разгуляешься...

    Так для анализа состояния пина много кода и не потребуется.

  8. 12 minutes ago, RobFPGA said:

    Прикольно - мне ваши логи отсюда виднее чем вам :biggrin: И видно мне что относительный путь для синтеза немного не тот что вам из проекта кажется.

    Можно пример, как стартануть скрипт из папки проекта по нажатию кнопки синтеза

    Такое

    set_property STEPS.SYNTH_DESIGN.TCL.PRE {C:/Data/report.tcl} [get_runs synth_1]

    не предлагать, спасибо.

  9. 25 minutes ago, RobFPGA said:

    Проще всего указать скрипт в STEPS.SYNTH_DESIGN.TCL.PRE,  а в самом скрипте привязываться к его же расположению  в дереве проекта как я приводил выше.

    Попробовал так

    set_property STEPS.SYNTH_DESIGN.TCL.PRE "version/pre_synth.tcl" [get_runs synth_1]

    синтез погнал, реакции ноль, если явно указать полный путь через гуи - работает.

  10. 7 minutes ago, Nick_K said:

    Там есть непечатный символ - я уже попадался на этом скрипте от уважаемого Роба

    Так он же целых пять минут сочинялся)

    set_param xicom.use_bitstream_version_check false
    
    puts "Script is processing"
    
    
    ###
    proc hook_proc {name hook_name} {
      if {[llength [namespace which {${name}_}]]==0} {
        rename ::${name}    ::${name}_
        rename ${hook_name} ::${name}
      }
    }
    
    ###
    proc hook_open_project args {
      puts "Hook of open_project"
    
      # processing input options
      for {set i 0} {$i < [llength $args]} {incr i} {
        set option [string trim [lindex $args $i]]
        switch -regexp -- $option {
          "-part"        { incr i }
          "-read_only"   {   }
          "-quiet"       {   }
          "-verbose"     {   }
          default {
            # is incorrect switch specified?
            if { [regexp {^-} $option] } {
              send_msg_id Vivado-projutils-001 ERROR "Unknown option '$option', please type 'open_project -help' for usage info.\n"
              return
            }
            set prj_file [file normalize $option]
          }
        }
      }
    
      set prj_dir  [file dirname $prj_file]
      set ::env(PWD) $prj_dir
    
      uplevel 1 ::open_project_ $args
    
      puts "Script is done!!!"
    }
      
    hook_proc "open_project" "hook_open_project"

    Пытаюсь разобраться, как оно работает, получаю лог

    *** Running vivado
        with args -log xczu9eg.vds -m64 -product Vivado -mode batch -messageDb vivado.pb -notrace -source xczu9eg.tcl
    
    
    ****** Vivado v2018.2 (64-bit)
      **** SW Build 2258646 on Thu Jun 14 20:02:38 MDT 2018
      **** IP Build 2256618 on Thu Jun 14 22:10:49 MDT 2018
        ** Copyright 1986-2018 Xilinx, Inc. All Rights Reserved.
    
    Sourcing tcl script '/home/andrei/Programs/Xilinx/Vivado/2018.2/scripts/Vivado_init.tcl'
    Script is processing
    source xczu9eg.tcl -notrace
    WARNING: [Common 17-1361] You have specified a new message control rule that is equivalent to an existing rule with attributes ' -ruleid {11}  -id {[BD 41-1271]}  -suppress '. The existing rule will be replaced.
    WARNING: [Common 17-1361] You have specified a new message control rule that is equivalent to an existing rule with attributes ' -ruleid {10}  -id {[BD 41-1306]}  -suppress '. The existing rule will be replaced.
    WARNING: [Common 17-1361] You have specified a new message control rule that is equivalent to an existing rule with attributes ' -ruleid {3}  -id {[BD 41-1271]}  -suppress '. The existing rule will be replaced.
    WARNING: [Common 17-1361] You have specified a new message control rule that is equivalent to an existing rule with attributes ' -ruleid {4}  -id {[BD 41-1306]}  -suppress '. The existing rule will be replaced.
    WARNING: [Common 17-1361] You have specified a new message control rule that is equivalent to an existing rule with attributes ' -ruleid {5}  -id {[BD 41-1271]}  -suppress '. The existing rule will be replaced.
    WARNING: [Common 17-1361] You have specified a new message control rule that is equivalent to an existing rule with attributes ' -ruleid {7}  -id {[BD 41-1271]}  -suppress '. The existing rule will be replaced.
    WARNING: [Common 17-1361] You have specified a new message control rule that is equivalent to an existing rule with attributes ' -ruleid {6}  -id {[BD 41-1306]}  -suppress '. The existing rule will be replaced.
    add_files: Time (s): cpu = 00:00:07 ; elapsed = 00:00:07 . Memory (MB): peak = 2551.223 ; gain = 920.449 ; free physical = 1915 ; free virtual = 11697
    Command: synth_design -top xczu9eg -part xczu9eg-ffvb1156-2-i
    Starting synth_design
    Attempting to get a license for feature 'Synthesis' and/or device 'xczu9eg'
    INFO: [Common 17-349] Got license for feature 'Synthesis' and/or device 'xczu9eg'
    INFO: Launching helper process for spawning children vivado processes
    INFO: Helper process launched with PID 1454 

    Что-то не так? hook_proc не вызывался

    15 minutes ago, RobFPGA said:

    В контексте Vivado  переменная PWD есть так как она добавлена после копирования enviroment  из запускающего процесса.  

    посмотрите в TCL консоле -  parray   ::env 

    Да, есть такое, спасибо.

  11. 4 minutes ago, RobFPGA said:

    Когда именно вы хотите запускать скрипт?  При выполнении  какого действия? 

    Перед стартом синтеза, скрипт должен сгенерить константы для контроля версии.

    4 minutes ago, RobFPGA said:

    Вы можете  добавить любые свои процедуры и хуки в Vivado_init.tcl

    Я попробовал добавить, но всё не так просто)

    cd [get_property directory [current_project]]
  12. Приветствую.

    Возможно ли при открытии проекта в Vivado запустить TCL скрипт.

    Хочу, чтоб при при открытии проекта переменная PWD указывала на директорию проекта (без привязки к конкретной директории и ПК).

  13. On 1/9/2020 at 8:24 AM, Opex said:

    У нас в обычном Цинке сделано так: сначала идет рабочая прошивка, затем аварийная. Какой-то встроенный загрузчик ищет волшебную комбинацию байтов, если находит, грузит прошивку. При обновлении, сначала стираются волшебные числа, записывается прошивка, если все записалось хорошо, записываются числа.

    Сделал аналогично.

    On 1/25/2020 at 4:58 PM, toshas said:

    Это "классический" подход для мультибут по xapp1081, я тоже посоветовал бы сделать по нему 

    Не сразу нашёл эту доку, больше смотрел по ZynqMP, а там предлагают из FSBL делать переброс на рабочую прошивку, работает, но не понял зачем такие сложности, если можно просто поменять их местами.

    On 2/11/2020 at 3:44 PM, Dvorkin said:

    Кроме ошибки обновления прошивки могут быть и глюки в рабочей программе  (app_a53_X.elf). По самым разным причинам, человеческий фактор никто не отменял, увы. Или повреждения рабочей прошивки в процессе работы. 

    Могу предложить такой алгоритм:

    1) Рабочая программа после успешного запуска сбрасывает счетчик загрузок.

    2) Стартует сначала резервная прошивка, в FSBL делается проверка счетчика загрузок, если он меньше N, то:

    2.1) счетчик инкрементируется, в MultiBootReg записывается адрес рабочей прошивки (ну, или просто инкремент), делается soft reset, грузится рабочая прошивка.

    2.2) иначе ничего не делается, продолжается загрузка резервной прошивки.

    Счетчик может храниться в специально выделенном разделе FLASH.

    В моём случае самая обидная ситуация - залить прошивку с нерабочим Ethernet. Используется FreeRTOS и при обновлении hdf-файла настройки bsp всё время сбрасываются. Если не проконтролировать, высока вероятность получить нерабочее устройство. Хороший вариант со счётчиком загрузок, вообще думали в новой версии железа вытащить порт процессора, по которому загрузчик определял бы рабочий или аварийный режим запуска.

  14. 7 minutes ago, haker_fox said:

    Плохо, помню, но в LwIP 1.4.x делал низкоприоритетную задачу с поллингом в 500 мс. Она стучалась к фитеру, и запрашивала статус кабеля. Раз так сделал, то, видимо, не нашёл событя. 

    Спасибо, с этим понятно. Думал так делать, но пока пытаюсь понять. есть ли стандартная опция/возможность.

    8 minutes ago, haker_fox said:

    Хотя, стоп! А стэк, вроде и не должен такое событие давать. Ведь о кабеле только PHY может сказать. А у неё прерываний нет... Или вы не о включенном/отключенном кабеле?

    Если кабель дёргать то сообщения в stdout кидает (если не ошибаюсь), поэтому решил, что оно само мониторит состояние сети и возможно есть какая-то возможность привязаться к данному событию.

    //netif.h
    #if LWIP_NETIF_LINK_CALLBACK
      /** This function is called when the netif link is set to up or down
       */
      netif_status_callback_fn link_callback;
    #endif /* LWIP_NETIF_LINK_CALLBACK */
      
    #if LWIP_NETIF_LINK_CALLBACK
    void netif_set_link_callback(struct netif *netif, netif_status_callback_fn link_callback);
    #endif /* LWIP_NETIF_LINK_CALLBACK */

    Такое вот нахожу

  15. 12 hours ago, doom13 said:

    Смотрю, что умеет стартануть более свежую прошиву, которая лежит во flash.

    Что-то не могу повторить полученный ранее результат. Вопрос где хранится timestamp образа и как его туда поместить?

    Для формирования boot.bin используется bif-файл с содержимым:

    //arch = zynqmp; split = false; format = BIN
    the_ROM_image:
    {
    	[pskfile]/home/user/workspace/xczu9eg/boot/psk0.pem
    	[sskfile]/home/user/workspace/xczu9eg/boot/ssk0.pem
    	[auth_params]spk_id = 0x00000000; ppk_select = 0
    	[fsbl_config]a53_x64, bh_auth_enable
    	[bootloader, authentication = rsa]/home/user/workspace/xczu9eg/xczu9eg.sdk/fsbl/Debug/fsbl.elf
    	[pmufw_image]/home/user/workspace/xczu9eg/xczu9eg.sdk/pmufw/Debug/pmufw.elf
    	[authentication = rsa, destination_device = pl]/home/user/workspace/xczu9eg/xczu9eg.runs/impl_1/xczu9eg.bit
    	[authentication = rsa, destination_cpu = a53-0, exception_level = el-3]/home/user/workspace/xczu9eg/xczu9eg.sdk/app_a53_0/Debug/app_a53_0.elf
    	[authentication = rsa, destination_cpu = a53-1, exception_level = el-3]/home/user/workspace/xczu9eg/xczu9eg.sdk/app_a53_1/Debug/app_a53_1.elf
    }

     

×
×
  • Создать...