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

 
 
> Cyclone V два ядра в baremetal
alexPec
сообщение Feb 2 2016, 19:15
Сообщение #1


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

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Всем доброго дня. Пускал ли кто 2 ядра в baremetal, не в операционке? Если да, подтолкните в правильном направлении - литература там, может даже код загрузки второго ядра (если не жалко), ну и вообще любую информацию. Нужно запустить совершенно разные программы на разных ядрах.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sonycman
сообщение Aug 2 2016, 10:44
Сообщение #2


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



VBKesha
Спасибо за помощь!

Да, в файлах MPL есть настройка для загрузки образа для FPGA со скрытого или из FAT раздела.
Очень удобно, надо будет попробовать.
Почему такой опции нет в более навороченном прелоадере - не понятно...

Пока сижу читаю доки, до практики ещё не дошёл.

По поводу кэша данных не подскажете - для его правильной работы обязательно включать MMU?
К примеру, чтобы область регистров периферии и FPGA корок не кэшировалась?
По идее, область регистров должна быть некэшируемой по-умолчанию и без всякого MMU...

Ещё у меня непонятка с настройкой портов железного DDR SDRAM контроллера.
В его регистрах есть задание приоритетов и "весов" (weight) для распределения пропускной способности между различными мастерами.

Но как на практике понять, какой номер порта присвоен какому мастеру?
В QSys просто подсоединяются все корки к единственному мосту FPGA->HPS и поди разбери, какие номера портов там получились... sad.gif

Есть ещё выделенные порты FPGA->SDRAM, но там тоже нет в свойствах никаких номеров портов или каких-то идентификаторов...

С ACP тоже самое - там в доках по нему должны быть назначены определённые ID, и как это сделать\задать в QSys - не ясно.
Наверное, ручками надо допиливать сгенерированные файлы... sad.gif
Go to the top of the page
 
+Quote Post
VBKesha
сообщение Aug 2 2016, 16:03
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 10-01-07
Из: Брянск
Пользователь №: 24 263



Цитата(sonycman @ Aug 2 2016, 13:44) *
Да, в файлах MPL есть настройка для загрузки образа для FPGA со скрытого или из FAT раздела.
Очень удобно, надо будет попробовать.
Почему такой опции нет в более навороченном прелоадере - не понятно...

Вот тут в разделе "Настройка U-boot" вроде расписано как делать через U-Boot если я правильно понял.

Цитата(sonycman @ Aug 2 2016, 13:44) *
Пока сижу читаю доки, до практики ещё не дошёл.
По поводу кэша данных не подскажете - для его правильной работы обязательно включать MMU?
К примеру, чтобы область регистров периферии и FPGA корок не кэшировалась?
По идее, область регистров должна быть некэшируемой по-умолчанию и без всякого MMU...

Судя по HWLIB его можно включить/выключить, заинвалидить итд, глубже пока не копался. Для L2 можно назначить фильтр для прямого обращения.

Цитата(sonycman @ Aug 2 2016, 13:44) *
Ещё у меня непонятка с настройкой портов железного DDR SDRAM контроллера.
В его регистрах есть задание приоритетов и "весов" (weight) для распределения пропускной способности между различными мастерами.

Но как на практике понять, какой номер порта присвоен какому мастеру?
В QSys просто подсоединяются все корки к единственному мосту FPGA->HPS и поди разбери, какие номера портов там получились... sad.gif

Вроде бы порты имеются ввиду только для прямой работы FPGA<->DDR судя по этой картинке а то что висит FPGA->HPS не имеет к этому отношения.


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

Сообщение отредактировал VBKesha - Aug 2 2016, 16:04
Go to the top of the page
 
+Quote Post
sonycman
сообщение Aug 2 2016, 16:30
Сообщение #4


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(VBKesha @ Aug 2 2016, 20:03) *
Вот тут в разделе "Настройка U-boot" вроде расписано как делать через U-Boot если я правильно понял.

Через U-Boot можно, но я имею ввиду не его, а SPL, то есть preloader. Через него нельзя, там в исходниках об этом ни слухом, ни духом.

Я пока что пользоваться U-Boot не буду, пока с bare-metal буду возиться. А для этого надо только SPL или MPL.
Последний больше нравится.

Цитата
Судя по HWLIB его можно включить/выключить, заинвалидить итд, глубже пока не копался. Для L2 можно назначить фильтр для прямого обращения.

Да, я нашёл по этому поводу интересный пример, попробую его в первую очередь:
CODE
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "alt_cache.h"
#include "alt_mmu.h"

int __auto_semihosting;

#define N 256
#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))

void mul(const double *in_a, const double *in_b, unsigned n, double *out);

/* MMU Page table - 16KB aligned at 16KB boundary */
static uint32_t __attribute__ ((aligned (0x4000))) alt_pt_storage[4096];

static void *alt_pt_alloc(const size_t size, void *context)
{
return context;
}

static void mmu_init(void)
{
uint32_t *ttb1 = NULL;

/* Populate the page table with sections (1 MiB regions). */
ALT_MMU_MEM_REGION_t regions[] = {
/* Memory area: 1 GiB */
{
.va = (void *)0x00000000,
.pa = (void *)0x00000000,
.size = 0x40000000,
.access = ALT_MMU_AP_FULL_ACCESS,
.attributes = ALT_MMU_ATTR_WBA,
.shareable = ALT_MMU_TTB_S_NON_SHAREABLE,
.execute = ALT_MMU_TTB_XN_DISABLE,
.security = ALT_MMU_TTB_NS_SECURE
},

/* Device area: Everything else */
{
.va = (void *)0x40000000,
.pa = (void *)0x40000000,
.size = 0xc0000000,
.access = ALT_MMU_AP_FULL_ACCESS,
.attributes = ALT_MMU_ATTR_DEVICE_NS,
.shareable = ALT_MMU_TTB_S_NON_SHAREABLE,
.execute = ALT_MMU_TTB_XN_ENABLE,
.security = ALT_MMU_TTB_NS_SECURE
}
};

assert(ALT_E_SUCCESS == alt_mmu_init());
assert(alt_mmu_va_space_storage_required(regions, ARRAY_SIZE(regions)) <= sizeof(alt_pt_storage));
assert(ALT_E_SUCCESS == alt_mmu_va_space_create(&ttb1, regions, ARRAY_SIZE(regions), alt_pt_alloc, alt_pt_storage));
assert(ALT_E_SUCCESS == alt_mmu_va_space_enable(ttb1));
}

int main(int argc, char** argv) {
static double a[N], b[N], c[N];
unsigned i, t;

mmu_init();
alt_cache_system_enable();

for (i = 0; i < N; i++) {
a[i] = (double)rand();
b[i] = (double)rand();
}

*(unsigned volatile *)0xFFFEC600 = 0xFFFFFFFF; /* timer reload value */
*(unsigned volatile *)0xFFFEC604 = 0xFFFFFFFF; /* current timer value */
*(unsigned volatile *)0xFFFEC608 = 0x003; /* start timer at 200MHz and automatically reload */
mul(a, b, N, c);
t = *(unsigned volatile *)0xFFFEC604;
printf("used time for %u multiplications = %u ns\n", N, 5 * (0xFFFFFFFF - t));

return 0;
}

Здесь в простой форме с помощью HWLib создаются необходимые дескрипторы TLB для MMU.

А по поводу фильтра L2 - его регистры, как я понял, определяют нижнюю и верхнюю границы DDR SDRAM области памяти для MPU.
В принципе, возможно, что кэшируется только этот регион памяти, а всё, что в него не входит - автоматически перенаправляется наружу в L3, а не в кэш?
Тогда, для простых приложений, можно просто включать кэш данных, оставив MMU отключенным?

Цитата
Вроде бы порты имеются ввиду только для прямой работы FPGA<->DDR судя по этой картинке а то что висит FPGA->HPS не имеет к этому отношения.

Да, именно эти шесть портов прямого доступа к DDR имеют настройки приоритизации, для распределения полосы между разными мастерами.
Я об этом и говорил.
Quality of Service называется. L3 interconnect тоже имеет подобные настройки.

ЗЫ: не только эти шесть - а все 10 портов (L3 и MPU) приоритизируются:
Прикрепленное изображение


Это для передачи большого количества данных и сложных систем, мне пока не нужно, но понять, как настраивается - интересно.

Цитата
По многим вопросам можно более менее пытаться более менее понять глядя на HWLIB.

Да, это точно.
Хорошо, когда есть такая штука.

Примеров бы ещё побольше...
Показалось, что для Zynq в сети больше простых примеров от обычных людей, чем для альтеровских SoC.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alexPec   Cyclone V два ядра в baremetal   Feb 2 2016, 19:15
- - Zlodeinik   Цитата(alexPec @ Feb 2 2016, 19:15) Всем ...   Mar 10 2016, 11:00
- - ЯadiatoR   Подниму тему - тоже интересует данные вопрос. Есть...   May 22 2016, 18:55
|- - VBKesha   Цитата(ЯadiatoR @ May 22 2016, 21:55) Под...   May 31 2016, 10:15
|- - RadiatoR   Цитата(VBKesha @ May 31 2016, 13:15) Вчер...   Jul 1 2016, 17:20
- - VBKesha   Адрес который указывает с какого места стартовать ...   Jun 1 2016, 12:16
- - vadimuzzz   Что потребуется кроме указанных регистров: в скри...   Jun 5 2016, 02:38
- - RadiatoR   Кстати а куда в случае bare metal приложения залив...   Jul 2 2016, 19:26
|- - vadimuzzz   Цитата(RadiatoR @ Jul 3 2016, 01:26) Кст...   Jul 3 2016, 02:39
- - RadiatoR   Хочется именно в boot ROM, ибо с осями я никогда н...   Jul 3 2016, 08:21
|- - vadimuzzz   Цитата(RadiatoR @ Jul 3 2016, 14:21) Хоч...   Jul 3 2016, 14:32
- - RadiatoR   1. То есть программирование идет только на флешку?...   Jul 3 2016, 15:55
|- - vadimuzzz   Программируется флеш, отладка идет из ОЗУ. Прошивк...   Jul 4 2016, 00:31
|- - VBKesha   Цитата(RadiatoR @ Jul 3 2016, 18:55) 1. ...   Jul 4 2016, 14:23
|- - RadiatoR   С прелоадером и вообще с картой загрузки, что отку...   Jul 5 2016, 05:48
|- - VBKesha   Цитата(RadiatoR @ Jul 5 2016, 08:48) Но ...   Jul 5 2016, 08:34
|- - RadiatoR   Цитата(VBKesha @ Jul 5 2016, 11:34) Тут в...   Jul 5 2016, 13:06
- - sonycman   А альтеровской HWLib кто нибудь пользуется? Это ве...   Jul 26 2016, 13:25
- - sonycman   И ещё вопрос возник - применительно к процессорной...   Jul 26 2016, 22:37
|- - vadimuzzz   ЦитатаА альтеровской HWLib кто нибудь пользуется? ...   Jul 27 2016, 03:03
|- - sonycman   Цитата(vadimuzzz @ Jul 27 2016, 07:03) я ...   Jul 27 2016, 09:38
|- - vadimuzzz   Цитата(sonycman @ Jul 27 2016, 15:38) Час...   Jul 27 2016, 09:47
|- - sonycman   Цитата(vadimuzzz @ Jul 27 2016, 13:47) На...   Jul 27 2016, 10:51
|- - Stewart Little   Цитата(sonycman @ Jul 27 2016, 13:51) А д...   Jul 27 2016, 12:44
|- - sonycman   Цитата(Stewart Little @ Jul 27 2016, 16:4...   Jul 27 2016, 14:47
|- - VBKesha   Цитата(sonycman @ Jul 27 2016, 17:47) Инт...   Aug 1 2016, 13:16


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:33
Рейтинг@Mail.ru


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