реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> MicroBlaze (Vivado 2015.1), beginner questions
doom13
сообщение Jun 11 2015, 13:07
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



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

В чём может быть проблема для системы, приведённой на рисунке (сообщение #15),
код нормально работает

Код
#include "xparameters.h"
#include "xgpio.h"
#include "xtrafgen.h"
#include <stdio.h>

int main()
{
    XGpio gpio_0, gpio_1;
    XGpio *gpio_0_ptr = &gpio_0;
    XGpio *gpio_1_ptr = &gpio_1;
    XGpio_Initialize(gpio_0_ptr, XPAR_GPIO_0_DEVICE_ID);
    XGpio_Initialize(gpio_1_ptr, XPAR_GPIO_1_DEVICE_ID);

    while(1)
    {
        XGpio_DiscreteWrite(gpio_1_ptr, 1, 1);
        XGpio_DiscreteWrite(gpio_0_ptr, 1, 1);
        XGpio_DiscreteWrite(gpio_0_ptr, 1, 0);
        XGpio_DiscreteWrite(gpio_1_ptr, 1, 0);
    }
}


С кодом

Код
#include "xparameters.h"
#include "xgpio.h"
#include "xtrafgen.h"
#include <stdio.h>

int main()
{
    //unsigned int addr = 0;
    XTrafGen tgen;
    XTrafGen_Config tgen_config;
    XTrafGen_Config *tgen_config_ptr;

    tgen_config_ptr = XTrafGen_LookupConfig(XPAR_XTRAFGEN_0_DEVICE_ID);
    //tgen_config_ptr = (XTrafGen_Config *) addr;

    XTrafGen_CfgInitialize(&tgen, &tgen_config, XPAR_AXI_TRAFFIC_GEN_0_BASEADDR);

    while(1) {}
}


есть какие-то проблемы. Даже переменные создаются с ошибкой (адреса созданной переменной 0xFFFF1234, вне доступного диапазона адресов).
Go to the top of the page
 
+Quote Post
Corvus
сообщение Jun 11 2015, 14:00
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 24-04-08
Из: Зеленоград
Пользователь №: 37 056



Проверьте конфигурацию линковщика, что и куда размещается.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 11 2015, 19:58
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



конфигурацию железа не меняли?
У ксалинкса передача всех параметров идет через автосоздаваемый заголовочный файл. Он иногда почему то не автопересоздается, и тогда после смены конфигурации железа вообще Ад начинается.

Помогают танцы с бубном с перегрузками, сбросами проекта, чисткой, с устранением и добавлением и так далее...
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 12 2015, 05:39
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



В системе сначала были только GPIO, потом добавил Traffic Generator и сделал экспорт железа. После пересборки BSP в xparameters.h дефайны для Traffic Generator присутствуют.

Ещё при добавлении в систему (IP Integrator) ядра Traffic Generator и выполнении Validate Design выбрасывает следующие ошибки
CODE

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3439] Failed to restore IP '/axi_traffic_gen_0' customization to its previous valid configuration.

[BD 41-1273] Error running propagate TCL procedure: ERROR: [Common 17-39] 'set_property' failed due to earlier errors.
::xilinx.com_ip_axi_traffic_gen_2.0::propagate Line 15

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3439] Failed to restore IP '/axi_traffic_gen_0' customization to its previous valid configuration.

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3439] Failed to restore IP '/axi_traffic_gen_0' customization to its previous valid configuration.

[BD 41-1273] Error running propagate TCL procedure: ERROR: [Common 17-39] 'set_property' failed due to earlier errors.
::xilinx.com_ip_axi_traffic_gen_2.0::propagate Line 15

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3439] Failed to restore IP '/axi_traffic_gen_0' customization to its previous valid configuration.

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3439] Failed to restore IP '/axi_traffic_gen_0' customization to its previous valid configuration.

[BD 41-1273] Error running propagate TCL procedure: ERROR: [Common 17-39] 'set_property' failed due to earlier errors.
::xilinx.com_ip_axi_traffic_gen_2.0::propagate Line 15

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"

[IP_Flow 19-3439] Failed to restore IP '/axi_traffic_gen_0' customization to its previous valid configuration.

[BD 41-241] Message from IP propagation TCL of /axi_traffic_gen_0: set_property error: Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"
Customization errors found on '/axi_traffic_gen_0'. Restoring to previous valid configuration.
Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"
Customization errors found during restoring IP '/axi_traffic_gen_0' to previous valid configuration.
Failed to restore IP '/axi_traffic_gen_0' customization to its previous valid configuration.
Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"
Customization errors found on '/axi_traffic_gen_0'. Restoring to previous valid configuration.
Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT
H' method. can't use non-numeric string as operand of "/"
Customization errors found during restoring IP '/axi_traffic_gen_0' to previous valid configuration.
Failed to restore IP '/axi_traffic_gen_0' customization to its previous valid configuration.
.
После перезапуска Vivado данных ошибок уже нет и проверка системы проходит нормально. Может ли это быть причиной вышеописанной проблемы?

Если точку останова поставить внутри
Код
XTrafGen_Config *XTrafGen_LookupConfig(u32 DeviceId)
{
    extern XTrafGen_Config XTrafGen_ConfigTable[];
    XTrafGen_Config *CfgPtr;
    u32 Index;

    CfgPtr = NULL;

    for (Index = 0; Index < XPAR_XTRAFGEN_NUM_INSTANCES; Index++) {
        if (XTrafGen_ConfigTable[Index].DeviceId == DeviceId) {

            CfgPtr = &XTrafGen_ConfigTable[Index];
            break;
        }
    }

    return CfgPtr;
}
,
то хочет вернуть даже правильные значения.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 12 2015, 06:25
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
После перезапуска Vivado данных ошибок уже нет и проверка системы проходит нормально. Может ли это быть причиной вышеописанной проблемы?


как я понял систему ксалинкса, в xparameters.h все дефайны приведены для справки чтобы знать как их вызывать. Их можно менять, но это не меняет значения получаемые в программе, реальные значения выбираются из файла библиотеки, который генериться в железном проекте. Момент генережки я не очень четко понял, но именно он иногда расходиться с xparameters.h и начинается ад.

Я один раз полдня тупил над ошибкой которая была вызвана не полным экспортом проекта. Для SDK выработал такой алгоритм
в случае изменения железа, пересборка и экспорт в DSK.
В SDK удаляю все софтварные проекты (не удаляя их с диска)
чищу проект (там то ли purge то ли cleanup уже не помню)
добавляю все софтварные проекты
опять все чищу и запускаю ребилд

второй способ, если он покажется быстрее
когда происходит что-то совсем непонятное, через свойство железное проекта меняю что-то типа добавляю lwip чищу проект перебилдиваю, и опять убираю. Ну то есть как-то заставляю заново создать этот дурацкий либ. Хотя один раз вроде этот способ не сработал, и я пошел по долгому пути выкидывания и вставления проектов.

В общем если все сделать правильно с 1 раза проблем нет, а если че забыли и потом добавили - тухляк, танцы с бубном, легче уже взять и сделать новый проект...
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 12 2015, 07:31
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Golikov A. @ Jun 12 2015, 09:25) *

Спасибо, заработало.

Зачем для GPIO автоматом резервируется 64K адресное пространство, там ведь всего пара регистров?

Почему в Address Editor недоступен пункт меню Auto Assign Address?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 12 2015, 08:09
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Наверное потому что по умолчанию выбрали 16 битную шину адреса для периферии, а старшие адреса как чипселект модуля используют... наверное так... просто единый шаблон независимо от того сколько регистров в модуле.
уменьшение адресного пространство с разделом его на несколько модулей, - это доп дешифраторы, наверное...

но это же условность, какая разница какие цифры назначить. Шина все равно столько бит сколько есть, и адресное пространство общее покрыто, а так думать удобнее, 16 младших бит - адрес внутри модуля, старшие - адрес модуля... память физические не жрет, а лишние проводки оптимизируются
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 12 2015, 11:40
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



У Altera Nios II для BSP есть опции enable_small_c_library и enable_reduced_device_drivers, чтобы уменьшить размер памяти занимаемый программой, есть ли что-то аналогичное для MicroBlaze?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 12 2015, 12:00
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



у них есть подмена общих функций своими поменьше.
Вместо printf используйте xil_printf. И так далее, это не вызовет подключения stdliba и проект будет маленький...
Все драйверы и прочее будут добавляться по мере использования, то есть лишнего в код не войдет.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 12 2015, 12:49
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



При сборке выбрасывает ошибку
Цитата
../../htg_v7_g3_bsp/microblaze_0/include/xtrafgen.h:982:31: error: base operand of '->' has non-pointer type 'XTrafGen'
.

В xtrafgen.h макрос на который ругается отличается от всех остальных отсутствием скобок, пытаюсь поправить, но компилер затирает мои поправки.




Исправил, надо править xtrafgen.h в \Xilinx\SDK\2015.1\data\embeddedsw\XilinxProcessorIPLib\drivers\trafgen_v3_0\src\.
Т.е. оно при сборке каждый раз меняет файлы BSP из своих либ.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 12 2015, 16:26
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ну это можно победить
#include "some_file_name.h"
#inclide <some_file_name.h>

но там действительно как-то чудно все устроено%)
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 15 2015, 09:20
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Зачем в BSP .h-файлы дублируются? Это какой-то косяк или так было задумано? Заметил, когда при переходе на дефайн спросило в какой файл перейти. Один раз в папке с драйверами на соответствующее ядро (microblaze_0\libsrc\trafgen_v3_2\src\xtrafgen.h), второй - в папке include (microblaze_0\include\xtrafgen.h)?
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 16 2015, 13:26
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Хотел заюзать оператор new, но генерит какой-то страшный размер кода. Можно его как-то использовать для MicroBlaze?
Go to the top of the page
 
+Quote Post
Sergey_Bekrenyov
сообщение Jun 16 2015, 15:28
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 323
Регистрация: 14-12-10
Из: Королёв
Пользователь №: 61 599



Цитата(doom13 @ Jun 16 2015, 16:26) *
Хотел заюзать оператор new, но генерит какой-то страшный размер кода. Можно его как-то использовать для MicroBlaze?


new не пользовал, есть версия xil_malloc - аналогично подменяет malloc

upd: http://forums.xilinx.com/t5/Embedded-Devel...rks/td-p/586394
Go to the top of the page
 
+Quote Post
doom13
сообщение Jun 16 2015, 18:48
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Попытался обойтись без использования new, добавил в проект простенький класс - конструктор, деструктор и пару функций. Скомпилилось, но при попытке создать объект опять ругается на малый размер памяти. При этом размер программы занял более 100 кБ, а кода там минимум. Вот и вопрос - можно ли как-то настроить Xilinx SDK, чтоб нормально работать с с++? У Altera для Nios II всё работает надо только задать компилятору соответствующие опции.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th July 2025 - 06:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01516 секунд с 7
ELECTRONIX ©2004-2016