Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Artix-7. Использование 2х DDR3: основная/резервная
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
sf9
Коллеги, возник вопрос, связанный с использованием в проекте с ПЛИС Artix-7 XC7A200TFFG1156-2 двух независимых DDR3 MT41J128M16JT-125.
По ТЗ необходимо предусмотреть две отдельные микросхемы DDR для повышения надежности системы.
Идея заключается в том, что при старте системы выполняется проверка DDR методом чтения/записи.
Если тест пройден успешно, в MicroBlaze запускается основная программа. Если тест закончился неудачно, нужно переключиться на вторую DDR, проверить ее и работать с ней.
Иначе - плата признается неисправной. DDR используется MicroBlaze для кеширования.
Вопрос состоит в том, можно ли программно выполнить выбор DDR, с которой нужно работать системе?
Достаточно ли для этого одной прошивки или нужно организовать хранение 2х прошивок для первой или второй DDR?

Flip-fl0p
Цитата(sf9 @ Mar 27 2018, 12:02) *
Идея заключается в том, что при старте системы выполняется проверка DDR методом чтения/записи.

Боюсь, что эта идея неверная.
Всё дело в том, что эта проверка настолько примитивна, что по этому тесту судить о работоспособности памяти нельзя.
А вдруг при чтении из одной ячейки "испортилось" содержимое другой ?
А вдруг при записи в одну из ячеек, лишний бит записался в другую ?
sf9
Цитата(Flip-fl0p @ Mar 27 2018, 11:12) *
Боюсь, что эта идея неверная.
Всё дело в том, что эта проверка настолько примитивна, что по этому тесту судить о работоспособности памяти нельзя.
А вдруг при чтении из одной ячейки "испортилось" содержимое другой ?
А вдруг при записи в одну из ячеек, лишний бит записался в другую ?

Сам тест состоит из двух этапов: запись данных 01010101010101010101010101010101 по каждому адресу. Затем считывание. Второй этап - запись 10101010101010101010101010101010 также по данному адресу. Этот тест проверяет выставление/стирания каждого бита шины данных. Проверка шины адреса может также осуществляться записью номеров адресов в шину данных.
Если есть более интересные предложения готов это обсудить в отдельной теме.
nice_vladi
Цитата(sf9 @ Mar 27 2018, 09:02) *
Коллеги, возник вопрос, связанный с использованием в проекте с ПЛИС Artix-7 XC7A200TFFG1156-2 двух независимых DDR3 MT41J128M16JT-125.
По ТЗ необходимо предусмотреть две отдельные микросхемы DDR для повышения надежности системы.
Идея заключается в том, что при старте системы выполняется проверка DDR методом чтения/записи.
Если тест пройден успешно, в MicroBlaze запускается основная программа. Если тест закончился неудачно, нужно переключиться на вторую DDR, проверить ее и работать с ней.
Иначе - плата признается неисправной. DDR используется MicroBlaze для кеширования.
Вопрос состоит в том, можно ли программно выполнить выбор DDR, с которой нужно работать системе?
Достаточно ли для этого одной прошивки или нужно организовать хранение 2х прошивок для первой или второй DDR?


Я думаю, это вполне осуществимая задача, тем более, ДДР полностью одинаковые. Необходимо просто скоммутировать сигналы управления/данных в/на нужную DDR.

Что-то вроде:
0. Включили систему;
1. Проверили ДДР1;
1.1. Если она в порядке -> (4), иначе -> (2);
2. Переключились на ДДР2;
3. Проверили ДДР2;
3.1. Если она в порядке -> (4), иначе -> говорим, что работать невозможно и начинаем истерично мигать ласпочками)
4. Если требуется - переключились на нужную ДДР и остались в этом положении до конца работы (отключения питания, например).

А для проверки можно рассчитывать контрольную сумму записываемых данных, а при чтении сверять ее правильность. Если не хочется считать длиную КС - то можно чтение/запись побить на блоки и считать КС для каждого отдельно.

sf9
Цитата(nice_vladi @ Mar 27 2018, 11:27) *
Я думаю, это вполне осуществимая задача, тем более, ДДР полностью одинаковые. Необходимо просто скоммутировать сигналы управления/данных в/на нужную DDR.

Что-то вроде:
0. Включили систему;
1. Проверили ДДР1;
1.1. Если она в порядке -> (4), иначе -> (2);
2. Переключились на ДДР2;
3. Проверили ДДР2;
3.1. Если она в порядке -> (4), иначе -> говорим, что работать невозможно и начинаем истерично мигать ласпочками)
4. Если требуется - переключились на нужную ДДР и остались в этом положении до конца работы (отключения питания, например).

А для проверки можно рассчитывать контрольную сумму записываемых данных, а при чтении сверять ее правильность. Если не хочется считать длиную КС - то можно чтение/запись побить на блоки и считать КС для каждого отдельно.


Имеется ввиду софтовое переключение сигналов в ПЛИС? Т.е. мы делаем двe mig_7series коры, и потом переключаемся на ту, которая нам нужна?
Тут я не очень представляю, как отреагирует MicroBlazе на это. И понадобиться и можно ли перераспределять кэш в этом случае?
Вариант с внешней, аппаратной коммутацией не подходит: много линий данных, сложно выполнить выравнивание длин и соблюдение всех задержек, целостности сигналов и пр. Также стоит большой вопрос , как потом промоделировать все это.
iosifk
Цитата(nice_vladi @ Mar 27 2018, 11:27) *
Я думаю, это вполне осуществимая задача, тем более, ДДР полностью одинаковые. Необходимо просто скоммутировать сигналы управления/данных в/на нужную DDR.

Что-то вроде:
0. Включили систему;
1. Проверили ДДР1;
1.1. Если она в порядке -> (4), иначе -> (2);
2. Переключились на ДДР2;
3. Проверили ДДР2;
3.1. Если она в порядке -> (4), иначе -> говорим, что работать невозможно и начинаем истерично мигать ласпочками)
4. Если требуется - переключились на нужную ДДР и остались в этом положении до конца работы (отключения питания, например).

А для проверки можно рассчитывать контрольную сумму записываемых данных, а при чтении сверять ее правильность. Если не хочется считать длиную КС - то можно чтение/запись побить на блоки и считать КС для каждого отдельно.

А на самом деле все немножечко сложнее...
Среди участников проводится "конкурс - это вы можете". По результатам конкурса выступает тот, у кого лучшие показатели. И так происходит до очередного конкурса сезона. Потому как тот, кто считался победителем конкурса, мог сдуться например от перегрева или от чего-то еще... Причем конкурс может проводиться не только глобальный, но и локальный. Например часть зоны адресов работает, а другая тестируется. Потом они меняются местами... И этот конкурс проводится не только во время запуска, но и регулярно в рабочем режиме. А так же по команде от хоста, если требуется провести тестирование.
И я уже не говорю о дополнительных битах коррекции данных. Их тоже можно добавить к железу. И с ними поколдовать...
RobFPGA
Приветствую!

Цитата(sf9 @ Mar 27 2018, 11:02) *
Коллеги, возник вопрос, связанный с использованием в проекте с ПЛИС Artix-7 XC7A200TFFG1156-2 двух независимых DDR3 MT41J128M16JT-125.
По ТЗ необходимо предусмотреть две отдельные микросхемы DDR для повышения надежности системы.
Идея заключается в том, что при старте системы выполняется проверка DDR методом чтения/записи.
Если тест пройден успешно, в MicroBlaze запускается основная программа. Если тест закончился неудачно, нужно переключиться на вторую DDR, проверить ее и работать с ней.
...


Для повышения надежности лучше используйте обе DDR сразу и заложите использование ECC с коррекцией ошибок.
Избавитесь от буридановых проблем выбора и контролировать целостность будете в realtime.

Удачи Rob.
sf9
Цитата(RobFPGA @ Mar 27 2018, 12:17) *
Приветствую!



Для повышения надежности лучше используйте обе DDR сразу и заложите использование ECC с коррекцией ошибок.
Избавитесь от буридановых проблем выбора и контролировать целостность будете в realtime.

Удачи Rob.


Спасибо за совет, но использовать ECC можно только при Data Width = 72. В нашей же МК памяти - 16.
iosifk
Цитата(sf9 @ Mar 27 2018, 12:24) *
Спасибо за совет, но использовать ECC можно только при Data Width = 72. В нашей же МК памяти - 16.


так в чем проблемы? У Вас же данные из внешней памяти идут не сразу в микроконтроллер, а наверняка в контроллер ДДР, который тоже внутри ПЛИС. Так вот там можно все и сделать. А уж если есть 2 раздельных шины для ДДР, то можно одновременно считывать 2 слова и их сравнивать.
И кто сказал про "только при Data Width = 72"? В одну пишите данные, в другую код коррекции для этих данных.
sf9
Цитата(iosifk @ Mar 27 2018, 12:35) *
так в чем проблемы? У Вас же данные из внешней памяти идут не сразу в микроконтроллер, а наверняка в контроллер ДДР, который тоже внутри ПЛИС. Так вот там можно все и сделать. А уж если есть 2 раздельных шины для ДДР, то можно одновременно считывать 2 слова и их сравнивать.
И кто сказал про "только при Data Width = 72"? В одну пишите данные, в другую код коррекции для этих данных.

Уважаемый, iosifk. Для работы с DDR используем mig_7series контроллер. В который напрямую заводятся входы/выходы для DDR. Управлять выводами для DDR нельзя-они используются только контроллером. К контроллеру можно обращаться через AXI-шину. В том же контроллере можно задать использование ECC. Но активируется ECC только при Data Width = 72.
RobFPGA
Приветстствую!

Цитата(sf9 @ Mar 27 2018, 12:48) *
... Для работы с DDR используем mig_7series контроллер. В который напрямую заводятся входы/выходы для DDR. Управлять выводами для DDR нельзя-они используются только контроллером.
К контроллеру можно обращаться через AXI-шину. В том же контроллере можно задать использование ECC. Но активируется ECC только при Data Width = 72.

Ох лень матушка - ни кто (кроме ее родимой) не мешает Вам:
1 - сварганить полностью свой контроллер со своей ECC - (недостижимая идиллия)
2 - модифицировать родной контроллер покопавшись в потрохах оригинального (кровавое зрелище)
3 - прилепить костыль ECC на входе/выходе AXI шины (хромая животинка получится но двигается будет)
4 ...
В общем случае если есть избыток по скорости/разрядности шины можно это использовать для контроля.

Удачи. Rob.
Burenkov Sergey
Цитата(sf9 @ Mar 27 2018, 11:02) *
DDR используется MicroBlaze для кеширования.
Вопрос состоит в том, можно ли программно выполнить выбор DDR, с которой нужно работать системе?
Достаточно ли для этого одной прошивки или нужно организовать хранение 2х прошивок для первой или второй DDR?

Микроблейз у вас работает на ончип памяти? Я имею ввиду код, стек, куча и тд? Обычно кэш это кусок ончип памяти, куда складываются данные из медленной DDR. Каким образом у вас кеширование производится?
sf9
Цитата(Burenkov Sergey @ Mar 27 2018, 14:00) *
Микроблейз у вас работает на ончип памяти? Я имею ввиду код, стек, куча и тд? Обычно кэш это кусок ончип памяти, куда складываются данные из медленной DDR. Каким образом у вас кеширование производится?

Сергей, используется загрузчик, который выгружает исполняемый код для McBlaze из Flash в DDR.
Настройки в .ld файле (при компиляции) выполнены для работы из DDR.
Кэширование задается при сборке платформы в настройках коры McBlaze, область памяти, как у DDR.
Burenkov Sergey
Цитата(sf9 @ Mar 27 2018, 14:23) *
Сергей, используется загрузчик, который выгружает исполняемый код для McBlaze из Flash в DDR.
Настройки в .ld файле (при компиляции) выполнены для работы из DDR.
Кэширование задается при сборке платформы в настройках коры McBlaze, область памяти, как у DDR.

Наверное две отдельные прошивки не нужны. Сделайте общее адресное пространство для обеих микросхем, и две сборки софта где просто разные регионы будут указаны. Бутлоадер у вас должен стартовать из ончип, проверять микросхемы и загружать тот hex который соответствует рабочей памяти.
Ну и в коде MB нельзя будет писать в память по абсолютным адресам, только по смещениям внутри регионов
iosifk
Цитата(iosifk @ Mar 27 2018, 12:35) *
В одну пишите данные, в другую код коррекции для этих данных.

И как говорят: "возможны варианты"...
На самом деле, исходно плата должна быть исправна, а потому можно сделать так, что для нормальной работы будут использоваться сразу обе шины. скажем так, для контроллера это как читать два слова одновременно, и потом выбирать нужное сигналами разрешения. А работа с одной шиной - это уже режим в деградированном состоянии...
А во-вторых, если уже так хочется проверять наличие межсоединений между ПЛИС и памятью, то можно добавить микроконтроллер за пол-доллара и встроить JTAG-сканирование... Ведь наверняка у Вас на плате что-то процессорное будет. А те примеры шахматных кодов, которые были в самом начале говорят не о тестировании "поля всей памяти", а только о прохождении сигналов между ПЛИС и RAM...
sf9
Цитата(Burenkov Sergey @ Mar 27 2018, 14:50) *
Наверное две отдельные прошивки не нужны. Сделайте общее адресное пространство для обеих микросхем, и две сборки софта где просто разные регионы будут указаны. Бутлоадер у вас должен стартовать из ончип, проверять микросхемы и загружать тот hex который соответствует рабочей памяти.
Ну и в коде MB нельзя будет писать в память по абсолютным адресам, только по смещениям внутри регионов

Спасибо! Очень интересная идея. Вы уже пробовали собирать подобный проект?
Burenkov Sergey
Цитата(sf9 @ Mar 28 2018, 10:08) *
Спасибо! Очень интересная идея. Вы уже пробовали собирать подобный проект?

Я в основном с альтерой работаю. Когда то давно я делал проект где ниос стартовал из ончип и потом запускалась "большая" прошивка из ddr
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.