Kronac 0 19 января, 2021 Опубликовано 19 января, 2021 · Жалоба Продолжаю осваивать Vivado на Xilinx (пока с огромной натяжкой). Есть некая система: мастер PCIe -> AXI interconnect -> 5 слейвов (регистры, память, Jesd и прочее). У каждого слейва свой адрес на шине AXI (выровнял адреса до старших бит, для более простой дешифрации) Ну далее всё просто, беру в настройках корки, каждому бару присваиваю базовый адрес какого либо из слейвов, назначаю размер и всё норм. Через программу верхнего уровня спокойно читаю/пишу по каждому бару связанный с ним слейв. Проблема в том, что я ограничен 6-ю барами (в дальнейшем нужно будет больше слейвов). Решил попробовать простое решение, расширить один из баров в два раза и просто обращаться через него к последовательно стоящим друг за другом слейвам. Ну по логике, думаю, когда кончится адресное пространство первого, интерконнект должен перескочить на второй и работать уже с ним. Но не так-то всё просто, IP ядро PCIE почему то заворачивает адресное пространство на начало первого слейва и снова работает с ним, только сначала. К такому финту я не был готов.. Читал, искал инфу пока ничего не нашёл. Почему ядро так делает и как от этого можно избавиться? Сталкивался кто нибудь с такой проблемой? Буду очень благодарен разъяснениям =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 19 января, 2021 Опубликовано 19 января, 2021 · Жалоба Приветствую! Слишком по BARски на каждую периферию по BARу . На один из BARов вешаете AXI interconnect, а уже к нему лепите столько периферии сколько нужно . Размер этого BAR при этому должен покрывать пространство адресов всех слейвов. Только учтите что обычные материнки могут и не выделить несколько GB под BAR. Поэтому надо аккуратно распоряжаться адресным пространством. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 3 19 января, 2021 Опубликовано 19 января, 2021 · Жалоба По факту, в BAR должны отображаться только регистры - всем остальным пусть DMA занимается Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kronac 0 20 января, 2021 Опубликовано 20 января, 2021 · Жалоба 14 hours ago, RobFPGA said: Приветствую! Слишком по BARски на каждую периферию по BARу . На один из BARов вешаете AXI interconnect, а уже к нему лепите столько периферии сколько нужно . Размер этого BAR при этому должен покрывать пространство адресов всех слейвов. Только учтите что обычные материнки могут и не выделить несколько GB под BAR. Поэтому надо аккуратно распоряжаться адресным пространством. Удачи! Rob. Добрый день. "Размер этого BAR при этому должен покрывать пространство адресов всех слейвов." Вот так и не могу, моя материнка не запускается при создании бара больше 2G. Собственно по этому и использую два бара по 4 МБ для создания окон для работы с ДДР. Проблема как раз в том, что не получается сделать так, как Вы описали выше. Я правда пытался покрыть не все адреса всех слейвов а склеить хотя бы два слейва. Выделил объём памяти для бара равный 2-м подряд идущим слейвам. Первый нормально работает, далее вижу что адреса заворачиваются в начало и снова идёт обращение к началу первого слейва. Не понимаю почему так... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 3 20 января, 2021 Опубликовано 20 января, 2021 · Жалоба 8 hours ago, Kronac said: использую два бара по 4 МБ для создания окон для работы с ДДР. А какой в этом смысл? Все равно быстрее, чем через DMA, не получится Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kronac 0 22 января, 2021 Опубликовано 22 января, 2021 · Жалоба On 1/20/2021 at 6:50 PM, gosha-z said: А какой в этом смысл? Все равно быстрее, чем через DMA, не получится Специфика построения системы. Огромная пропускная способность не нужна. только иногда записывать и иногда вычитывать. ДМА тоже есть но он занимается другими задачами в автоматическом режиме без связи с ПК. Программе на ПК нужен только иногда доступ к памяти на небольших скоростях. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 22 января, 2021 Опубликовано 22 января, 2021 · Жалоба Приветствую! On 1/20/2021 at 8:43 AM, Kronac said: Добрый день. "Размер этого BAR при этому должен покрывать пространство адресов всех слейвов." Вот так и не могу, моя материнка не запускается при создании бара больше 2G. Собственно по этому и использую два бара по 4 МБ для создания окон для работы с ДДР. Проблема как раз в том, что не получается сделать так, как Вы описали выше. Я правда пытался покрыть не все адреса всех слейвов а склеить хотя бы два слейва. Выделил объём памяти для бара равный 2-м подряд идущим слейвам. Первый нормально работает, далее вижу что адреса заворачиваются в начало и снова идёт обращение к началу первого слейва. Не понимаю почему так... Думаю у вас что то с настройками самого интерконнекта. Если слейвы помещаются в размер BAR то они будут в нем видны целиком. Либо я не полностью переставляю как вы мапите эти слейвы в пространства BAR. Тут надо бы видеть всю структуру интерконнекта и его настройки. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kronac 0 22 января, 2021 Опубликовано 22 января, 2021 (изменено) · Жалоба 3 hours ago, RobFPGA said: Приветствую! Думаю у вас что то с настройками самого интерконнекта. Если слейвы помещаются в размер BAR то они будут в нем видны целиком. Либо я не полностью переставляю как вы мапите эти слейвы в пространства BAR. Тут надо бы видеть всю структуру интерконнекта и его настройки. Удачи! Rob. Подключал ILA до интерконнекта и после. В итоге мне приходит не тот адрес.. Допустим есть два слейва по мегабайту, у первого адрес: 0x1000 0000 у другого 0x2000 0000. Я назначаю бару PCIe базовый адрес на амбе 0x1000 0000. Значит после того как закончится адрес 0x1FFF FFFF , должен прийти на интерконнект адрес 0x2000 0000... Но я его не вижу, от ядра приходит снова 0x1000 0000. С размерами точно не напутал, проверял несколько раз и игрался по разному.. Изменено 22 января, 2021 пользователем Kronac Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 28 января, 2021 Опубликовано 28 января, 2021 · Жалоба ну а размер данного бара какой в настройках ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kronac 0 28 января, 2021 Опубликовано 28 января, 2021 · Жалоба на слейвы выделял по мегабайту, адреса стояли друг за другом. На бар выделял 2 мегабайта, потом пробовал 4, безрезультатно. 2 hours ago, Alex77 said: ну а размер данного бара какой в настройках ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 28 января, 2021 Опубликовано 28 января, 2021 · Жалоба Приветствую! 13 minutes ago, Kronac said: на слейвы выделял по мегабайту, адреса стояли друг за другом. На бар выделял 2 мегабайта, потом пробовал 4, безрезультатно. Эээ??? Чтобы для слейвов которые находятся в пространстве одного BAR не было доступа из этого BAR? "Не верю..." Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 28 января, 2021 Опубликовано 28 января, 2021 (изменено) · Жалоба 1 час назад, Kronac сказал: на слейвы выделял по мегабайту, адреса стояли друг за другом. На бар выделял 2 мегабайта, потом пробовал 4, безрезультатно. ИМХО Вы сами себе ззлой буратино: "два слейва по мегабайту, у первого адрес: 0x1000 0000 у другого 0x2000 0000." Первый располагается с 256МБ и длиной 1МБ Второй располагается с 512МБ и длиной 1МБ BAR size в таком случае должен начинаться с 256МБ и иметь размер наверно 512МБ (но никак не 1МБ и не 2 и не 4) смысл в том что у вас слейвы стоят на расстоянии в 256МБ - значит и бар должен покрывать это расстояние + размер второго слейва, и учитывать кратность основанию 2. Изменено 28 января, 2021 пользователем Alex77 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kronac 0 28 января, 2021 Опубликовано 28 января, 2021 · Жалоба 1 hour ago, Alex77 said: ИМХО Вы сами себе ззлой буратино: "два слейва по мегабайту, у первого адрес: 0x1000 0000 у другого 0x2000 0000." Первый располагается с 256МБ и длиной 1МБ Второй располагается с 512МБ и длиной 1МБ BAR size в таком случае должен начинаться с 256МБ и иметь размер наверно 512МБ (но никак не 1МБ и не 2 и не 4) смысл в том что у вас слейвы стоят на расстоянии в 256МБ - значит и бар должен покрывать это расстояние + размер второго слейва, и учитывать кратность основанию 2. Извиняюсь. Я немного не тот скриншот выложил. Много разных вариантов пробовал запутался сам и Вас всех запутал.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 28 января, 2021 Опубликовано 28 января, 2021 · Жалоба 5 минут назад, Kronac сказал: Извиняюсь. Я немного не тот скриншот выложил. Много разных вариантов пробовал запутался сам и Вас всех запутал.. каков вопрос таков ответ. ;-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kronac 0 28 января, 2021 Опубликовано 28 января, 2021 (изменено) · Жалоба Сейчас попробую понятнее. Вот последний проект с которым пытался побороть проблему. Есть 4 SLAVE AXI . Интересует S0 и S1. Их адреса на AXI S0: 0x2 0000 0000 (512К в последнем проекте, в котором пробовал) S1: 0x2 0008 0000 (512K) Я назначаю на BAR0 базовый адрес: 0x2 0000 0000. Размер бара: 4МБ. Получаю следующую картину: где S00 - PCIe; S01 - JTAG . Читая через компьютер первый бар, я имею доступ только к M02 (S0: 0x2 0000 0000) При попытке доступа к M03 (S1: 0x2 0008 0000) адресация закручивается в интерконнекте и снова обращается к M02.. При этом в системе есть ещё JTAG консоль. И с её помощью я спокойно читаю\пишу в M02 и M03. Либо если я назначу на BAR1 базовый адрес 0x2 0008 0000, то по PCIe через BAR0 будет доступ к M02, а через BAR1 будет доступ к M03, но больше никуда.. 28 minutes ago, Alex77 said: каков вопрос таков ответ. ;-) Вот сейчас, надеюсь, доступно объяснил =) Понимаю, что тяжело понять, что творится в голове у другого человека и что он хочет донести со своей колокольни.. Исходных данных маловато, понимаю) Изменено 28 января, 2021 пользователем Kronac Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться