doom13
Jun 11 2015, 13:07
Приветствую.
В чём может быть проблема для системы, приведённой на рисунке
(сообщение #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, вне доступного диапазона адресов).
Corvus
Jun 11 2015, 14:00
Проверьте конфигурацию линковщика, что и куда размещается.
Golikov A.
Jun 11 2015, 19:58
конфигурацию железа не меняли?
У ксалинкса передача всех параметров идет через автосоздаваемый заголовочный файл. Он иногда почему то не автопересоздается, и тогда после смены конфигурации железа вообще Ад начинается.
Помогают танцы с бубном с перегрузками, сбросами проекта, чисткой, с устранением и добавлением и так далее...
doom13
Jun 12 2015, 05:39
В системе сначала были только 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;
}
,
то хочет вернуть даже правильные значения.
Golikov A.
Jun 12 2015, 06:25
Цитата
После перезапуска Vivado данных ошибок уже нет и проверка системы проходит нормально. Может ли это быть причиной вышеописанной проблемы?
как я понял систему ксалинкса, в xparameters.h все дефайны приведены для справки чтобы знать как их вызывать. Их можно менять, но это не меняет значения получаемые в программе, реальные значения выбираются из файла библиотеки, который генериться в железном проекте. Момент генережки я не очень четко понял, но именно он иногда расходиться с xparameters.h и начинается ад.
Я один раз полдня тупил над ошибкой которая была вызвана не полным экспортом проекта. Для SDK выработал такой алгоритм
в случае изменения железа, пересборка и экспорт в DSK.
В SDK удаляю все софтварные проекты (не удаляя их с диска)
чищу проект (там то ли purge то ли cleanup уже не помню)
добавляю все софтварные проекты
опять все чищу и запускаю ребилд
второй способ, если он покажется быстрее
когда происходит что-то совсем непонятное, через свойство железное проекта меняю что-то типа добавляю lwip чищу проект перебилдиваю, и опять убираю. Ну то есть как-то заставляю заново создать этот дурацкий либ. Хотя один раз вроде этот способ не сработал, и я пошел по долгому пути выкидывания и вставления проектов.
В общем если все сделать правильно с 1 раза проблем нет, а если че забыли и потом добавили - тухляк, танцы с бубном, легче уже взять и сделать новый проект...
doom13
Jun 12 2015, 07:31
Цитата(Golikov A. @ Jun 12 2015, 09:25)

Спасибо, заработало.
Зачем для GPIO автоматом резервируется 64K адресное пространство, там ведь всего пара регистров?
Почему в Address Editor недоступен пункт меню Auto Assign Address?
Golikov A.
Jun 12 2015, 08:09
Наверное потому что по умолчанию выбрали 16 битную шину адреса для периферии, а старшие адреса как чипселект модуля используют... наверное так... просто единый шаблон независимо от того сколько регистров в модуле.
уменьшение адресного пространство с разделом его на несколько модулей, - это доп дешифраторы, наверное...
но это же условность, какая разница какие цифры назначить. Шина все равно столько бит сколько есть, и адресное пространство общее покрыто, а так думать удобнее, 16 младших бит - адрес внутри модуля, старшие - адрес модуля... память физические не жрет, а лишние проводки оптимизируются
doom13
Jun 12 2015, 11:40
У Altera Nios II для BSP есть опции enable_small_c_library и enable_reduced_device_drivers, чтобы уменьшить размер памяти занимаемый программой, есть ли что-то аналогичное для MicroBlaze?
Golikov A.
Jun 12 2015, 12:00
у них есть подмена общих функций своими поменьше.
Вместо printf используйте xil_printf. И так далее, это не вызовет подключения stdliba и проект будет маленький...
Все драйверы и прочее будут добавляться по мере использования, то есть лишнего в код не войдет.
doom13
Jun 12 2015, 12:49
При сборке выбрасывает ошибку
Цитата
../../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 из своих либ.
Golikov A.
Jun 12 2015, 16:26
ну это можно победить
#include "some_file_name.h"
#inclide <some_file_name.h>
но там действительно как-то чудно все устроено%)
doom13
Jun 15 2015, 09:20
Зачем в BSP .h-файлы дублируются? Это какой-то косяк или так было задумано? Заметил, когда при переходе на дефайн спросило в какой файл перейти. Один раз в папке с драйверами на соответствующее ядро (microblaze_0\libsrc\trafgen_v3_2\src\xtrafgen.h), второй - в папке include (microblaze_0\include\xtrafgen.h)?
doom13
Jun 16 2015, 13:26
Хотел заюзать оператор new, но генерит какой-то страшный размер кода. Можно его как-то использовать для MicroBlaze?
Sergey_Bekrenyov
Jun 16 2015, 15:28
Цитата(doom13 @ Jun 16 2015, 16:26)

Хотел заюзать оператор new, но генерит какой-то страшный размер кода. Можно его как-то использовать для MicroBlaze?
new не пользовал, есть версия xil_malloc - аналогично подменяет malloc
upd:
http://forums.xilinx.com/t5/Embedded-Devel...rks/td-p/586394
doom13
Jun 16 2015, 18:48
Попытался обойтись без использования new, добавил в проект простенький класс - конструктор, деструктор и пару функций. Скомпилилось, но при попытке создать объект опять ругается на малый размер памяти. При этом размер программы занял более 100 кБ, а кода там минимум. Вот и вопрос - можно ли как-то настроить Xilinx SDK, чтоб нормально работать с с++? У Altera для Nios II всё работает надо только задать компилятору соответствующие опции.
Alex77
Jun 16 2015, 19:06
Цитата(doom13 @ Jun 16 2015, 21:48)

выборочной
Попытался обойтись без использования new, добавил в проект простенький класс - конструктор, деструктор и пару функций. Скомпилилось, но при попытке создать объект опять ругается на малый размер памяти. При этом размер программы занял более 100 кБ, а кода там минимум. Вот и вопрос - можно ли как-то настроить Xilinx SDK, чтоб нормально работать с с++? У Altera для Nios II всё работает надо только задать компилятору соответствующие опции.
C++ по определению "плодит" толстые программы и при этом не важно xilinx or altera. Можно поискать опции для "выборочной" линковки стандартных библиотек. все остальное "от лукавого". или переходите на с (но там тоже свои заморочки)
doom13
Jun 16 2015, 19:13
Цитата(Alex77 @ Jun 16 2015, 22:06)

C++ по определению "плодит" толстые программы и при этом не важно xilinx or altera. Можно поискать опции для "выборочной" линковки стандартных библиотек. все остальное "от лукавого". или переходите на с (но там тоже свои заморочки)
Но не на столько же толстые. С Altera Nios II работал достаточно много и там с этим всё норально. Предполагаю, что и у Xilinx должен быть способ как правильно всё настроить. Только начинаю осваивать MicroBlaze и столкнулся с описанной проблемой. А с одними макросами работать как-то не очень приятно.
doom13
Jun 17 2015, 08:54
Добавил в IP Integrator ядро ten_gig_eth_mac, в BSP высветилось generic и отсутствуют какие-либо драйвера для этого ядра. Что это означает, что на него нет лицензии?
doom13
Jun 17 2015, 13:41
Очень даже помогают ключи для компилера (-ffunction-sections -fdata-sections) и линкера (-Wl,--gc-sections), нашёл
в этой теме.Размер кода уменьшился со 190 кБ до 62 кБ. Возможно есть ещё что-то?
Если переписать всё с использованием только си, то размер кода ужимается до 30 кБ.
Alex77
Jun 18 2015, 05:14
Цитата(doom13 @ Jun 17 2015, 16:41)

Очень даже помогают ключи для компилера (-ffunction-sections -fdata-sections) и линкера (-Wl,--gc-sections), нашёл
в этой теме.Размер кода уменьшился со 190 кБ до 62 кБ. Возможно есть ещё что-то?
Если переписать всё с использованием только си, то размер кода ужимается до 30 кБ.
Это практически все. есть еще оптимизация по размеру/скорости типа -o2 и -s (как то так, если не путаю с другим компилятором). Если важен размер самого elf файла - то можно "отрезть" отладочную информацию.
doom13
Jun 18 2015, 06:06
С O2 и Os понятно, но тогда не получится нормально отлаживать программу, а пока это рано. Есть ещё каких-то 30 кБ разницы между кодом си и с++. У Altera для Nios II как-то всё сразу более оптимально настроено, в 60 кБ помещается программа с куда более значительным кодом (без использования Os и др.).
Почему для 10G Ethernet MAC driver name получился равным
generic, что это означает?
Цитата
BEGIN DRIVER
PARAMETER DRIVER_NAME = generic
PARAMETER DRIVER_VER = 2.0
PARAMETER HW_INSTANCE = ten_gig_eth_mac_0
END
doom13
Jun 18 2015, 08:25
В папке с установкой Xilinx SDK (\Xilinx\SDK\2015.1\data\embeddedsw\XilinxProcessorIPLib\drivers\) нет каких-либо исходников для 10G Ethernet MAC. Означает ли это и вышеописанный generic, что у Xilinx нет поддержки данного ядра в виде драйвера BSP? Что-то на их сайте никакой инфы по этому поводу найти не могу.
doom13
Jun 18 2015, 18:30
Ответили на форуме Xilinx, оказывается, никакого BSP для 10G EMAC нет.
Остаётся вопрос по настройке проекта для с++.
Alex77
Jun 19 2015, 09:14
Цитата(doom13 @ Jun 18 2015, 21:30)

Ответили на форуме Xilinx, оказывается, никакого BSP для 10G EMAC нет.
Остаётся вопрос по настройке проекта для с++.
Посмотрите в map.lst (создается опциями) что там на компилилось и с линковалось. сравните с аналогичным map.lst от altera при идентичных исходниках. далее по результатам...
doom13
Jun 19 2015, 09:21
Цитата(Alex77 @ Jun 19 2015, 12:14)

Посмотрите в map.lst (создается опциями) что там на компилилось и с линковалось. сравните с аналогичным map.lst от altera при идентичных исходниках. далее по результатам...
Да, спасибо, map-файл уже генерю, но пока только просмотрел, что оно подключает. Отложил этот вопрос "на потом".
doom13
Jun 26 2015, 13:35
Может кто подскажет, где у меня ошибка?
Разбираюсь с работой ядра CDMA. В Simple Mode всё работает (смотрю в Memory, что данные перебрасываются из одной области памяти в другую), а вот Scatter Gather Mode работать не хочет.
CODE
#include "xaxicdma_i.h"
#include "xparameters.h"
#include "xaxicdma.h"
#include "string.h"
#define BD_SPACE_BASE XPAR_DESCRIPTOR_MEMORY_AXI_BRAM_CTRL_2_S_AXI_BASEADDR
#define BD_SPACE_HIGH XPAR_DESCRIPTOR_MEMORY_AXI_BRAM_CTRL_2_S_AXI_HIGHADDR
#define NUMBER_OF_BDS_TO_TRANSFER 4
int main()
{
int n = 1024;
unsigned int *mem0_ptr = (unsigned int *) XPAR_INTERNAL_MEMORY_0_AXI_BRAM_CTRL_0_S_AXI_BASEADDR;
unsigned int *mem1_ptr = (unsigned int *) XPAR_INTERNAL_MEMORY_1_AXI_BRAM_CTRL_1_S_AXI_BASEADDR;
memset(mem0_ptr, 0, n*sizeof(unsigned int));
memset(mem1_ptr, 0, n*sizeof(unsigned int));
memset(mem1_ptr + n, 0, n*sizeof(unsigned int));
for(int i = 0; i < n; i++)
{
mem0_ptr[i] = i;
}
int status, desc_count_max;
XAxiCdma_Bd decs_template;
XAxiCdma_Config *cfg_ptr;
XAxiCdma cdma_engine;
XAxiCdma *cdma = &cdma_engine;
cfg_ptr = XAxiCdma_LookupConfig(XPAR_AXI_CDMA_0_DEVICE_ID);
status = XAxiCdma_CfgInitialize(cdma, cfg_ptr, cfg_ptr->BaseAddress);
XAxiCdma_Reset(cdma);
while(!XAxiCdma_ResetIsDone(cdma))
;
while(XAxiCdma_IsBusy(cdma))
;
//--------------------------------------------------------------------
// SG Mode
//--------------------------------------------------------------------
memset(mem1_ptr, 0, 32768);
if(XAxiCdma_IsSimpleMode(cdma))
{
XAxiCdma_SwitchMode(cdma, XAXICDMA_SG_MODE);
}
if(XAxiCdma_IsSimpleMode(cdma))
{
XAxiCdma_SwitchMode(cdma, XAXICDMA_SG_MODE);
}
desc_count_max = XAxiCdma_BdRingCntCalc(XAXICDMA_BD_MINIMUM_ALIGNMENT, BD_SPACE_HIGH - BD_SPACE_BASE + 1, BD_SPACE_BASE);
status = XAxiCdma_BdRingCreate(cdma, BD_SPACE_BASE, BD_SPACE_BASE, XAXICDMA_BD_MINIMUM_ALIGNMENT, desc_count_max);
if(status != XST_SUCCESS)
{
return 1;
}
XAxiCdma_BdClear(&decs_template);
XAxiCdma_BdRingClone(cdma, &decs_template);
XAxiCdma_Bd *desc_ptr, *curr_desc_ptr;
status = XAxiCdma_BdRingAlloc(cdma, NUMBER_OF_BDS_TO_TRANSFER, &desc_ptr);
if(status != XST_SUCCESS)
{
return 1;
}
curr_desc_ptr = desc_ptr;
for(int i = 0; i < NUMBER_OF_BDS_TO_TRANSFER; i++)
{
status = XAxiCdma_BdSetSrcBufAddr(curr_desc_ptr, (unsigned long) mem0_ptr);
if(status != XST_SUCCESS)
{
return 1;
}
status = XAxiCdma_BdSetDstBufAddr(curr_desc_ptr, (unsigned long) (mem1_ptr + i*n));
if(status != XST_SUCCESS)
{
return 1;
}
status = XAxiCdma_BdSetLength(curr_desc_ptr, n*sizeof(unsigned int));
if(status != XST_SUCCESS)
{
return 1;
}
curr_desc_ptr = XAxiCdma_BdRingNext(cdma, curr_desc_ptr);
}
XAxiCdma_BdRingToHw(cdma, NUMBER_OF_BDS_TO_TRANSFER, desc_ptr, 0, 0);
while(XAxiCdma_IsBusy(cdma))
;
while(1) {}
}
doom13
Jun 27 2015, 07:55
Ошибка в том, что в использовании функции XAxiCdma_SwitchMode() нет необходимости. Текущий режим проверяется при старте CDMA (ф-ии XAxiCdma_BdRingToHw() и XAxiCdma_SimpleTransfer()), а при ручном включении необходимого режима нарушается алгоритм работы драйвера.
kaktus
Jun 30 2015, 09:23
Цитата(Golikov A. @ Jun 11 2015, 22:58)

конфигурацию железа не меняли?
У ксалинкса передача всех параметров идет через автосоздаваемый заголовочный файл. Он иногда почему то не автопересоздается, и тогда после смены конфигурации железа вообще Ад начинается.
Помогают танцы с бубном с перегрузками, сбросами проекта, чисткой, с устранением и добавлением и так далее...
Якобы должно помогать: правой кнопкой по BSP (Board Support Package) - Index - Rebuild.
Если не помогает, я просто его стираю и создаю новый: получается, например, standalone_bsp_4 со всеми драйверами обновленного железа и актуальными адресами в xparameters.h
Остается указать в свойствах программного проекта, чтобы тот ссылался на новый BSP:
правой кнопкой по Hello World - Properties - Project Reference - поставить галочку напротив вновь созданного BSP.
doom13
Jul 28 2015, 11:01
Пытаюсь запустить проект в XSDK (2015.2) под Linux (Ubuntu 15.04). Доустановил кучу либ - проект собрался.
При запуске дебага возникают проблемы:
Цитата
17:51:27 ERROR : Unexpected error while launching program.
java.lang.RuntimeException: Target request failed: Target is not responding (timed out).
at com.xilinx.sdk.debug.core.XilinxAppLaunchConfigurationDelegate.debugApplication(
XilinxAppLaunchConfigurationDelegate.java:778)
at com.xilinx.sdk.debug.core.XilinxAppLaunchConfigurationDelegate.launch(XilinxAppL
aunchConfigurationDelegate.java:298)
at com.xilinx.sdk.debug.ui.XilinxAppLaunchDelegateWrapper.launch(XilinxAppLaunchDel
egateWrapper.java:31)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.j
ava:858)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.j
ava:707)
at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:10
18)
at org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1222)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
doom13
Jul 31 2015, 15:04
Проблема была с правами пользователя. Сегодня руки дошли и ещё раз попробовал всё запустить. Vivado запускал из консоли с правами суперпользователя, SDK запускал из меню Vivado и не работало.
Попробовал стартануть SDK из консоли с правами суперпользователя - всё запустилось.
doom13
Aug 11 2015, 10:31
В системе есть память, которая тактируется от отдельного генератора. MicroBlaze и вся остальная система тактируется от другого генератора.
MicroBlaze через блок AXI Interconnect имеет доступ к данной памяти. Учитывает ли блок AXI Interconnect, что в системе два источника тактирования?
PS
Судя по тому, что память не читается, так делать нельзя?
Alex77
Aug 11 2015, 13:08
Цитата(doom13 @ Aug 11 2015, 13:31)

В системе есть память, которая тактируется от отдельного генератора. MicroBlaze и вся остальная система тактируется от другого генератора.
MicroBlaze через блок AXI Interconnect имеет доступ к данной памяти. Учитывает ли блок AXI Interconnect, что в системе два источника тактирования?
PS
Судя по тому, что память не читается, так делать нельзя?
Я что то не понял.
Почему ( зачем ) используется ДВА "процессор систем ресет" ???
и до кучи две тактовых clock и mem_clk ???
ps "в теории" axi-шина допускает использование различных тактовых на своих шинах. однако я не помню (надо читать) какие они должны быть (тактовые) кратные ? или совсем асихнхронные ?
doom13
Aug 12 2015, 06:05
Цитата(Alex77 @ Aug 11 2015, 16:08)

Я что то не понял.
Почему ( зачем ) используется ДВА "процессор систем ресет" ???
и до кучи две тактовых clock и mem_clk ???
В проекте используется PCIe мост, который работает от одного источника тактирования, а вся остальная периферия (Timer, GPIO, ...) от другого. Через AXI Interconnect мост имеет доступ к регистрам GPIO, Timer и всё нормально работает. MicroBlaze имеет общий источник тактирования со всей периферией и прекрасно с ней работает. Начал добавлять в систему CDMA и задумался, правильно ли что на AXI мастер и слейв находятся в разных клоковых доменах?
Цитата(Alex77 @ Aug 11 2015, 16:08)

ps "в теории" axi-шина допускает использование различных тактовых на своих шинах. однако я не помню (надо читать) какие они должны быть (тактовые) кратные ? или совсем асихнхронные ?
Тут у меня используются одинаковые частоты, но от разных генераторов.
kaktus
Aug 12 2015, 07:28
Цитата(doom13 @ Aug 11 2015, 13:31)

В системе есть память, которая тактируется от отдельного генератора. MicroBlaze и вся остальная система тактируется от другого генератора.
MicroBlaze через блок AXI Interconnect имеет доступ к данной памяти. Учитывает ли блок AXI Interconnect, что в системе два источника тактирования?
PS
Судя по тому, что память не читается, так делать нельзя?
Вообще-то работать должно и интерконнект должен все учитывать. В плане исследования можно открыть "плюсиком" сам блок интерконнекта и его составляющие и посмотреть где он вставил клок конвертеры, а где еще чего (Это я в соседней теме негодовал, что вивадо ругается на xdc этих самых конвертеров).
Нажмите для просмотра прикрепленного файлаПотом, можно посмотреть на Synthesis - Report Clock Interaction.
За последние дни я уже успел столкнуться с ситуацией, когда одно из периферийных устройств подвешивало, при обращении к нему, Микроблейз. Пересобрал проект заново - все работает. Возможно где-то что-то изменил по мелочи, а может эффект сборки с чистого листа. (Чистить директории по Вашему совету пока не пробовал). Система у меня аналогичная: PCIe (ядро 2.6), DMA (будет), Ethernet.
В предыдущей версии Вивадо сталкивался с ситуацией, когда во время работы над периферией, при уменьшении/увеличении количества портов в блоке интерконнект внешне все нормально, а внутри порты оставались подвешенными в воздухе.
Еще обратите внимание, что в интерконнекте в настройках можно FIFO добавлять для отдельных портов, что может быть полезным при различных частотах Master/Slave.
doom13
Aug 12 2015, 08:07
Цитата(kaktus @ Aug 12 2015, 10:28)

Вообще-то работать должно и интерконнект должен все учитывать. В плане исследования можно открыть "плюсиком" сам блок интерконнекта и его составляющие и посмотреть где он вставил клок конвертеры, а где еще чего (Это я в соседней теме негодовал, что вивадо ругается на xdc этих самых конвертеров).
Да, спасибо, клок конверторы ставит. Похоже, это опять был какой-то фокус Vivado + SDK. Удалил всё из папки .sdk, пересобрал и экспортировал новое железо - работает, память читает.
Цитата(kaktus @ Aug 12 2015, 10:28)

Потом, можно посмотреть на Synthesis - Report Clock Interaction.
За последние дни я уже успел столкнуться с ситуацией, когда одно из периферийных устройств подвешивало, при обращении к нему, Микроблейз. Пересобрал проект заново - все работает. Возможно где-то что-то изменил по мелочи, а может эффект сборки с чистого листа. (Чистить директории по Вашему совету пока не пробовал). Система у меня аналогичная: PCIe (ядро 2.6), DMA (будет), Ethernet.
В предыдущей версии Вивадо сталкивался с ситуацией, когда во время работы над периферией, при уменьшении/увеличении количества портов в блоке интерконнект внешне все нормально, а внутри порты оставались подвешенными в воздухе.
Вот у меня ситуация с подвисанием MicroBlaze получалась при обращении к памяти для системы приведённой на рисунке выше. Её собрал для проверки (на чём-то простом), как будет работать при наличии разных источников тактирования в системе.
Цитата(kaktus @ Aug 12 2015, 10:28)

Еще обратите внимание, что в интерконнекте в настройках можно FIFO добавлять для отдельных портов, что может быть полезным при различных частотах Master/Slave.
Спасибо, учту такую возможность.
doom13
Aug 20 2015, 11:58
Есть передатчик AXI-Stream трафика, работает на частоте X MHz. Хотел даннае от него запихнуть в FIFO, а из FIFO их забирать при помощи CDMA на частоте Y MHz. Посмотрел все варианты FIFO в IP Catalog, но нужного мне не нашёл. У всех один порт - slave (вход данных), второй - master (выход данных).
Нужен совет, что использовать в данной ситуации? Как вообще FIFO повесить на AXI Interconnect?
dm.pogrebnoy
Aug 20 2015, 18:21
Цитата(doom13 @ Aug 20 2015, 14:58)

Есть передатчик AXI-Stream трафика, работает на частоте X MHz. Хотел даннае от него запихнуть в FIFO, а из FIFO их забирать при помощи CDMA на частоте Y MHz. Посмотрел все варианты FIFO в IP Catalog, но нужного мне не нашёл. У всех один порт - slave (вход данных), второй - master (выход данных).
Нужен совет, что использовать в данной ситуации? Как вообще FIFO повесить на AXI Interconnect?
AXI DMA (не путать с CDMA и VDMA) имеет два канала AXI Stream (туда-обратно) и соответствующие каналы MM в память. Либо есть AXI4-Stream FIFO, тоже должно вам подойти.
doom13
Aug 26 2015, 15:01
Цитата(dm.pogrebnoy @ Aug 20 2015, 21:21)

AXI DMA (не путать с CDMA и VDMA) имеет два канала AXI Stream (туда-обратно) и соответствующие каналы MM в память. Либо есть AXI4-Stream FIFO, тоже должно вам подойти.
Нашёл эти ядра, спасибо, что-то сразу не разобрался с их настройками. В системе уже есть ядро CDMA, получится ли с его помощью забирать данные из FIFO (AXI4-Stream FIFO v4.1)? Смотрю доку (pg080) там какая-то хитрая последовательность для чтения, или тут просто перед запуском CDMA читаем нужные регистры FIFO, а потом DMA выгребает данные?
Возможно, лучше разобраться и использовать для этой задачи (сообщение #36) DMA?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.