Перейти к содержанию

    

Artix-7. Использование 2х DDR3: основная/резервная

Коллеги, возник вопрос, связанный с использованием в проекте с ПЛИС Artix-7 XC7A200TFFG1156-2 двух независимых DDR3 MT41J128M16JT-125.

По ТЗ необходимо предусмотреть две отдельные микросхемы DDR для повышения надежности системы.

Идея заключается в том, что при старте системы выполняется проверка DDR методом чтения/записи.

Если тест пройден успешно, в MicroBlaze запускается основная программа. Если тест закончился неудачно, нужно переключиться на вторую DDR, проверить ее и работать с ней.

Иначе - плата признается неисправной. DDR используется MicroBlaze для кеширования.

Вопрос состоит в том, можно ли программно выполнить выбор DDR, с которой нужно работать системе?

Достаточно ли для этого одной прошивки или нужно организовать хранение 2х прошивок для первой или второй DDR?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Идея заключается в том, что при старте системы выполняется проверка DDR методом чтения/записи.

Боюсь, что эта идея неверная.

Всё дело в том, что эта проверка настолько примитивна, что по этому тесту судить о работоспособности памяти нельзя.

А вдруг при чтении из одной ячейки "испортилось" содержимое другой ?

А вдруг при записи в одну из ячеек, лишний бит записался в другую ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Боюсь, что эта идея неверная.

Всё дело в том, что эта проверка настолько примитивна, что по этому тесту судить о работоспособности памяти нельзя.

А вдруг при чтении из одной ячейки "испортилось" содержимое другой ?

А вдруг при записи в одну из ячеек, лишний бит записался в другую ?

Сам тест состоит из двух этапов: запись данных 01010101010101010101010101010101 по каждому адресу. Затем считывание. Второй этап - запись 10101010101010101010101010101010 также по данному адресу. Этот тест проверяет выставление/стирания каждого бита шины данных. Проверка шины адреса может также осуществляться записью номеров адресов в шину данных.

Если есть более интересные предложения готов это обсудить в отдельной теме.

Изменено пользователем sf9

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Коллеги, возник вопрос, связанный с использованием в проекте с ПЛИС 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. Если требуется - переключились на нужную ДДР и остались в этом положении до конца работы (отключения питания, например).

 

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

 

 

Поделиться сообщением


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

 

Что-то вроде:

0. Включили систему;

1. Проверили ДДР1;

1.1. Если она в порядке -> (4), иначе -> (2);

2. Переключились на ДДР2;

3. Проверили ДДР2;

3.1. Если она в порядке -> (4), иначе -> говорим, что работать невозможно и начинаем истерично мигать ласпочками)

4. Если требуется - переключились на нужную ДДР и остались в этом положении до конца работы (отключения питания, например).

 

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

 

Имеется ввиду софтовое переключение сигналов в ПЛИС? Т.е. мы делаем двe mig_7series коры, и потом переключаемся на ту, которая нам нужна?

Тут я не очень представляю, как отреагирует MicroBlazе на это. И понадобиться и можно ли перераспределять кэш в этом случае?

Вариант с внешней, аппаратной коммутацией не подходит: много линий данных, сложно выполнить выравнивание длин и соблюдение всех задержек, целостности сигналов и пр. Также стоит большой вопрос , как потом промоделировать все это.

Изменено пользователем sf9

Поделиться сообщением


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

 

Что-то вроде:

0. Включили систему;

1. Проверили ДДР1;

1.1. Если она в порядке -> (4), иначе -> (2);

2. Переключились на ДДР2;

3. Проверили ДДР2;

3.1. Если она в порядке -> (4), иначе -> говорим, что работать невозможно и начинаем истерично мигать ласпочками)

4. Если требуется - переключились на нужную ДДР и остались в этом положении до конца работы (отключения питания, например).

 

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

А на самом деле все немножечко сложнее...

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

И я уже не говорю о дополнительных битах коррекции данных. Их тоже можно добавить к железу. И с ними поколдовать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

 

Коллеги, возник вопрос, связанный с использованием в проекте с ПЛИС Artix-7 XC7A200TFFG1156-2 двух независимых DDR3 MT41J128M16JT-125.

По ТЗ необходимо предусмотреть две отдельные микросхемы DDR для повышения надежности системы.

Идея заключается в том, что при старте системы выполняется проверка DDR методом чтения/записи.

Если тест пройден успешно, в MicroBlaze запускается основная программа. Если тест закончился неудачно, нужно переключиться на вторую DDR, проверить ее и работать с ней.

...

 

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

Избавитесь от буридановых проблем выбора и контролировать целостность будете в realtime.

 

Удачи Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Приветствую!

 

 

 

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

Избавитесь от буридановых проблем выбора и контролировать целостность будете в realtime.

 

Удачи Rob.

 

Спасибо за совет, но использовать ECC можно только при Data Width = 72. В нашей же МК памяти - 16.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Спасибо за совет, но использовать ECC можно только при Data Width = 72. В нашей же МК памяти - 16.

 

так в чем проблемы? У Вас же данные из внешней памяти идут не сразу в микроконтроллер, а наверняка в контроллер ДДР, который тоже внутри ПЛИС. Так вот там можно все и сделать. А уж если есть 2 раздельных шины для ДДР, то можно одновременно считывать 2 слова и их сравнивать.

И кто сказал про "только при Data Width = 72"? В одну пишите данные, в другую код коррекции для этих данных.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
так в чем проблемы? У Вас же данные из внешней памяти идут не сразу в микроконтроллер, а наверняка в контроллер ДДР, который тоже внутри ПЛИС. Так вот там можно все и сделать. А уж если есть 2 раздельных шины для ДДР, то можно одновременно считывать 2 слова и их сравнивать.

И кто сказал про "только при Data Width = 72"? В одну пишите данные, в другую код коррекции для этих данных.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветстствую!

 

... Для работы с DDR используем mig_7series контроллер. В который напрямую заводятся входы/выходы для DDR. Управлять выводами для DDR нельзя-они используются только контроллером.

К контроллеру можно обращаться через AXI-шину. В том же контроллере можно задать использование ECC. Но активируется ECC только при Data Width = 72.

Ох лень матушка - ни кто (кроме ее родимой) не мешает Вам:

1 - сварганить полностью свой контроллер со своей ECC - (недостижимая идиллия)

2 - модифицировать родной контроллер покопавшись в потрохах оригинального (кровавое зрелище)

3 - прилепить костыль ECC на входе/выходе AXI шины (хромая животинка получится но двигается будет)

4 ...

В общем случае если есть избыток по скорости/разрядности шины можно это использовать для контроля.

 

Удачи. Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
DDR используется MicroBlaze для кеширования.

Вопрос состоит в том, можно ли программно выполнить выбор DDR, с которой нужно работать системе?

Достаточно ли для этого одной прошивки или нужно организовать хранение 2х прошивок для первой или второй DDR?

Микроблейз у вас работает на ончип памяти? Я имею ввиду код, стек, куча и тд? Обычно кэш это кусок ончип памяти, куда складываются данные из медленной DDR. Каким образом у вас кеширование производится?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Микроблейз у вас работает на ончип памяти? Я имею ввиду код, стек, куча и тд? Обычно кэш это кусок ончип памяти, куда складываются данные из медленной DDR. Каким образом у вас кеширование производится?

Сергей, используется загрузчик, который выгружает исполняемый код для McBlaze из Flash в DDR.

Настройки в .ld файле (при компиляции) выполнены для работы из DDR.

Кэширование задается при сборке платформы в настройках коры McBlaze, область памяти, как у DDR.

Изменено пользователем sf9

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Сергей, используется загрузчик, который выгружает исполняемый код для McBlaze из Flash в DDR.

Настройки в .ld файле (при компиляции) выполнены для работы из DDR.

Кэширование задается при сборке платформы в настройках коры McBlaze, область памяти, как у DDR.

Наверное две отдельные прошивки не нужны. Сделайте общее адресное пространство для обеих микросхем, и две сборки софта где просто разные регионы будут указаны. Бутлоадер у вас должен стартовать из ончип, проверять микросхемы и загружать тот hex который соответствует рабочей памяти.

Ну и в коде MB нельзя будет писать в память по абсолютным адресам, только по смещениям внутри регионов

Изменено пользователем Burenkov Sergey

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В одну пишите данные, в другую код коррекции для этих данных.

И как говорят: "возможны варианты"...

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация