|
MicroBlaze (Vivado 2015.1), beginner questions |
|
|
|
Jun 11 2015, 13:07
|
Профессионал
    
Группа: Свой
Сообщений: 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, вне доступного диапазона адресов).
|
|
|
|
|
Jun 12 2015, 05:39
|
Профессионал
    
Группа: Свой
Сообщений: 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; } , то хочет вернуть даже правильные значения.
|
|
|
|
|
Jun 12 2015, 06:25
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата После перезапуска Vivado данных ошибок уже нет и проверка системы проходит нормально. Может ли это быть причиной вышеописанной проблемы? как я понял систему ксалинкса, в xparameters.h все дефайны приведены для справки чтобы знать как их вызывать. Их можно менять, но это не меняет значения получаемые в программе, реальные значения выбираются из файла библиотеки, который генериться в железном проекте. Момент генережки я не очень четко понял, но именно он иногда расходиться с xparameters.h и начинается ад. Я один раз полдня тупил над ошибкой которая была вызвана не полным экспортом проекта. Для SDK выработал такой алгоритм в случае изменения железа, пересборка и экспорт в DSK. В SDK удаляю все софтварные проекты (не удаляя их с диска) чищу проект (там то ли purge то ли cleanup уже не помню) добавляю все софтварные проекты опять все чищу и запускаю ребилд второй способ, если он покажется быстрее когда происходит что-то совсем непонятное, через свойство железное проекта меняю что-то типа добавляю lwip чищу проект перебилдиваю, и опять убираю. Ну то есть как-то заставляю заново создать этот дурацкий либ. Хотя один раз вроде этот способ не сработал, и я пошел по долгому пути выкидывания и вставления проектов. В общем если все сделать правильно с 1 раза проблем нет, а если че забыли и потом добавили - тухляк, танцы с бубном, легче уже взять и сделать новый проект...
|
|
|
|
|
Jun 12 2015, 07:31
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(Golikov A. @ Jun 12 2015, 09:25)  Спасибо, заработало. Зачем для GPIO автоматом резервируется 64K адресное пространство, там ведь всего пара регистров? Почему в Address Editor недоступен пункт меню Auto Assign Address?
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 12 2015, 08:09
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Наверное потому что по умолчанию выбрали 16 битную шину адреса для периферии, а старшие адреса как чипселект модуля используют... наверное так... просто единый шаблон независимо от того сколько регистров в модуле. уменьшение адресного пространство с разделом его на несколько модулей, - это доп дешифраторы, наверное...
но это же условность, какая разница какие цифры назначить. Шина все равно столько бит сколько есть, и адресное пространство общее покрыто, а так думать удобнее, 16 младших бит - адрес внутри модуля, старшие - адрес модуля... память физические не жрет, а лишние проводки оптимизируются
|
|
|
|
|
Jun 12 2015, 12:49
|
Профессионал
    
Группа: Свой
Сообщений: 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 из своих либ.
|
|
|
|
|
Jun 16 2015, 15:28
|

Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|