Jump to content

    

Kronac

Участник
  • Content Count

    38
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Kronac

  • Rank
    Участник

Recent Profile Visitors

140 profile views
  1. Подключал ILA до интерконнекта и после. В итоге мне приходит не тот адрес.. Допустим есть два слейва по мегабайту, у первого адрес: 0x1000 0000 у другого 0x2000 0000. Я назначаю бару PCIe базовый адрес на амбе 0x1000 0000. Значит после того как закончится адрес 0x1FFF FFFF , должен прийти на интерконнект адрес 0x2000 0000... Но я его не вижу, от ядра приходит снова 0x1000 0000. С размерами точно не напутал, проверял несколько раз и игрался по разному..
  2. Специфика построения системы. Огромная пропускная способность не нужна. только иногда записывать и иногда вычитывать. ДМА тоже есть но он занимается другими задачами в автоматическом режиме без связи с ПК. Программе на ПК нужен только иногда доступ к памяти на небольших скоростях.
  3. Добрый день. "Размер этого BAR при этому должен покрывать пространство адресов всех слейвов." Вот так и не могу, моя материнка не запускается при создании бара больше 2G. Собственно по этому и использую два бара по 4 МБ для создания окон для работы с ДДР. Проблема как раз в том, что не получается сделать так, как Вы описали выше. Я правда пытался покрыть не все адреса всех слейвов а склеить хотя бы два слейва. Выделил объём памяти для бара равный 2-м подряд идущим слейвам. Первый нормально работает, далее вижу что адреса заворачиваются в начало и снова идёт обращение к началу первого слейва. Не понимаю почему так...
  4. Продолжаю осваивать Vivado на Xilinx (пока с огромной натяжкой). Есть некая система: мастер PCIe -> AXI interconnect -> 5 слейвов (регистры, память, Jesd и прочее). У каждого слейва свой адрес на шине AXI (выровнял адреса до старших бит, для более простой дешифрации) Ну далее всё просто, беру в настройках корки, каждому бару присваиваю базовый адрес какого либо из слейвов, назначаю размер и всё норм. Через программу верхнего уровня спокойно читаю/пишу по каждому бару связанный с ним слейв. Проблема в том, что я ограничен 6-ю барами (в дальнейшем нужно будет больше слейвов). Решил попробовать простое решение, расширить один из баров в два раза и просто обращаться через него к последовательно стоящим друг за другом слейвам. Ну по логике, думаю, когда кончится адресное пространство первого, интерконнект должен перескочить на второй и работать уже с ним. Но не так-то всё просто, IP ядро PCIE почему то заворачивает адресное пространство на начало первого слейва и снова работает с ним, только сначала. К такому финту я не был готов.. Читал, искал инфу пока ничего не нашёл. Почему ядро так делает и как от этого можно избавиться? Сталкивался кто нибудь с такой проблемой? Буду очень благодарен разъяснениям =)
  5. Ну значит не стоит расслабляться при написании кода =)
  6. Слава тем, кто эти хорошие инструменты ломает и выкладывает для общего пользования =)
  7. Да была такая проблема. Было даже хуже. При рускоязычном пользователе даже проекты нормально не открывались. Проект открывался как набор файлов, без структуры и верхнего уровня. Переустановка не помогала и только потом допёрли, что дело в пользователе. После смены всё стало вроде норм.
  8. Мне тоже больше нравится Квестасим, в ней всё очень удобно, большой функционал. Хорошо работает с систем верилогом при написании тестбенчей. Простой и понятный интерфейс. Позволяет на ранних стадиях быстро выкинуть все системные ошибки. Можно подтянуть ip-ядра и их промоделить, если не очень понятно как там и что работает. В общем каждому своё, но инструмент очень полезный. По скорости работы и вылетам тоже не было нареканий. В своё время писал код только блочками в VHDL/verilog. При работе в больших проектах с большой вложенностью голова дурела вспоминать где и что лежит и что к чему относится, следить за разрядностью портов, сигналов in/out.. Любое кардинальное изменение приводило к куче опечаток и дальнейшему поиску ошибок... Как перешёл на HDL Designer, в другом ни в чём уже работать не могу и не хочу. Очень удобно, всё видно и понятно. Сложно заблудиться в коде. Легко следить за подключениями шин, сигналов и прочим. Так что скажу, что мне он определённо нравится, работа с комбинированием графики и кода намного удобнее для меня. После него оглядываясь на прочие старые проекты из десятков файлов vhd/verilog не понимаю как я там вообще ориентировался.. Много лишнего времени уходило никуда.
  9. Пока не пробовал её ещё. В квартусе с ней тоже какие то проблемы были, по этому стараюсь не использовать её.
  10. Да конечно, я изначально под квартусом так и работал. Сам проект собираю в Mentor HDL Designer (2016 версии), подтягиваю к нему ip ядра из квартуса (или Вивадо) в виде блэкбоксов. Моделирование прохожу в QuestaSim, потом синтез в Precision. Он очень классно всё собирает, утаптывает тайминги, помогает понять каки были системные ошибки и тд. На выходе получаю большой verilog/vhdl/vqm файл и его уже подтягиваю как верхний уровень в квартус. Очень удобный подход и приносит очень положительные результаты. Можно и автоматически запускать всё это вместе. Но не стал с этим заморачиваться. Ручками как то привычнее.
  11. Добрый день. Чтож, звучит всё очень чудесно. У меня пока так не выходит. Малейшие изменения приводят к появлению больших слэков и вся система начинает работать нестабильно.. Буду дальше сам разбираться, спасибо за ответы.
  12. Вот так как Вы пишите я и пробовал изначально, начитавшись мануалов. С радостью впихнул слейвы на 32 бита, надеясь на конвертеры, JTAG консоль на 32 бита данных и тд.. в итоге становилась настолько сложная система из конвертеров данных и клоков, что вивада загнулась.. Огромные слеки на переходах различных конвертеров внутри ядра интерконнекта привели к тому, что терялись биты данных при чтении или записи в регистры или память.. Методом проб и ошибок пришёл к тому, что на разрядности шины в 256 бит у всех мастеров и слейвов (кроме AXI CTL только там остался конвертер, так как там AXI LITE) и при определённых клоках вся структура стабильно задышала без потери данных. Но в дальнейшем мне нужно будет повышать частоту работы ДДР до 1200, а следовательно от этого изменятся все частоты AXI и опять вернётся проблема с потерей данных. Как мне добиться максимальной производительности без потери скорости? Даже сейчас при шине 256 бит и при пачках данных в 256 задержка по чтению между ARVALID и ARLAST 320 тактов а по записи между AWVALID и BVALID 300 тактов. При конвертерах это число увеличится
  13. Вы сами и ответили на этот вопрос =) У меня комп не включается и кричит при таком раскладе =)
  14. "Много работал с PCIe" Если не затруднит, могу тогда ещё закидать вопросами? =) В Альтере можно на PCIe делать несколько мастеров, чтобы обращаться из ОС по разным окнам памяти к ДДР (обычно одно для записи используют, другое для чтения). Окна обычно создают небольшого размера в 4 мегабайта и обращаясь по AXI CTL можно менять базовый адрес окна, тем самым сдвигаясь по памяти ДДР за пределы окна в 4 МБ. Тут я не нашёл такого регистра. Есть только константа базового адреса, которую мы задаём в настройках ядра во вкладке "PCIe:BARs" Поменять этот базовый адрес на ходу, не нашёл как. На форумах ребята пишут, что если нужен полный доступ к памяти ДДР, создавайте бар на 8ГБ или 2 по 4ГБ и радуйтесь. Мне такой вариант не подходит... Пришлось хитрить костылями. Создал два бара (BAR2 и BAR3 на картинке выше) Задал размер им в 4 МБ. На верхнем уровне создал у себя два регистра базовых адреса для окон. Вывел шину AXI на ружу и там асинхронно подменяю старшую часть адреса записи и чтения ДДР из своих регистров базового адреса. Таким образом могу пользуясь барами по 4МБ иметь полный доступ ко всей памяти ДДР. Но подход костыльный и не совсем правильный. Можете подсказать более правильное решение? У PCIe потолок 256 бит, если увеличить шину, интерконнект будет городить более сложную систему из конвертеров данных что значительно ухудшит тайминги... Пробовал так уже. "И ни на одной не помню таких проблем с обычным interconnect" а сколько было мастеров, пишущих в DDR?
  15. Я понимаю, что на вкус и цвет все фломастеры разные и каждому своё. Я новичок в Vivado, очень многого ещё не знаю, только изучаю. Но многие сложности мне кажутся просто не обоснованными =) Дизайн разумеется моделировали, верификатор сидит специально для этих целей, отработку протокола AXI от и до проверяет разными тестами, тут затыка точно нет. Все какие были, давно устранены. С таймингами в старом интерконекте когда работал ставил "other slise registers" на выходе и пакетную фифошку 512deep на входе мастеров. Лучше не становилось. Сама шина данных интерконнекта (XBAR который) 256, куда уж больше накручивать? Опора для интерконнекта частота AXI DDR (250МГц).