|
Artix-7. Использование 2х DDR3: основная/резервная |
|
|
|
Mar 27 2018, 08:12
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Цитата(sf9 @ Mar 27 2018, 12:02)  Идея заключается в том, что при старте системы выполняется проверка DDR методом чтения/записи. Боюсь, что эта идея неверная. Всё дело в том, что эта проверка настолько примитивна, что по этому тесту судить о работоспособности памяти нельзя. А вдруг при чтении из одной ячейки "испортилось" содержимое другой ? А вдруг при записи в одну из ячеек, лишний бит записался в другую ?
|
|
|
|
|
Mar 27 2018, 08:22
|

Участник

Группа: Участник
Сообщений: 35
Регистрация: 30-10-07
Из: Москва
Пользователь №: 31 896

|
Цитата(Flip-fl0p @ Mar 27 2018, 11:12)  Боюсь, что эта идея неверная. Всё дело в том, что эта проверка настолько примитивна, что по этому тесту судить о работоспособности памяти нельзя. А вдруг при чтении из одной ячейки "испортилось" содержимое другой ? А вдруг при записи в одну из ячеек, лишний бит записался в другую ? Сам тест состоит из двух этапов: запись данных 01010101010101010101010101010101 по каждому адресу. Затем считывание. Второй этап - запись 10101010101010101010101010101010 также по данному адресу. Этот тест проверяет выставление/стирания каждого бита шины данных. Проверка шины адреса может также осуществляться записью номеров адресов в шину данных. Если есть более интересные предложения готов это обсудить в отдельной теме.
Сообщение отредактировал sf9 - Mar 27 2018, 08:24
|
|
|
|
|
Mar 27 2018, 08:27
|

Участник

Группа: Участник
Сообщений: 53
Регистрация: 7-09-16
Из: Томск
Пользователь №: 93 239

|
Цитата(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. Если требуется - переключились на нужную ДДР и остались в этом положении до конца работы (отключения питания, например). А для проверки можно рассчитывать контрольную сумму записываемых данных, а при чтении сверять ее правильность. Если не хочется считать длиную КС - то можно чтение/запись побить на блоки и считать КС для каждого отдельно.
|
|
|
|
|
Mar 27 2018, 08:36
|

Участник

Группа: Участник
Сообщений: 35
Регистрация: 30-10-07
Из: Москва
Пользователь №: 31 896

|
Цитата(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е на это. И понадобиться и можно ли перераспределять кэш в этом случае? Вариант с внешней, аппаратной коммутацией не подходит: много линий данных, сложно выполнить выравнивание длин и соблюдение всех задержек, целостности сигналов и пр. Также стоит большой вопрос , как потом промоделировать все это.
Сообщение отредактировал sf9 - Mar 27 2018, 09:00
|
|
|
|
|
Mar 27 2018, 08:40
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(nice_vladi @ Mar 27 2018, 11:27)  Я думаю, это вполне осуществимая задача, тем более, ДДР полностью одинаковые. Необходимо просто скоммутировать сигналы управления/данных в/на нужную DDR.
Что-то вроде: 0. Включили систему; 1. Проверили ДДР1; 1.1. Если она в порядке -> (4), иначе -> (2); 2. Переключились на ДДР2; 3. Проверили ДДР2; 3.1. Если она в порядке -> (4), иначе -> говорим, что работать невозможно и начинаем истерично мигать ласпочками) 4. Если требуется - переключились на нужную ДДР и остались в этом положении до конца работы (отключения питания, например).
А для проверки можно рассчитывать контрольную сумму записываемых данных, а при чтении сверять ее правильность. Если не хочется считать длиную КС - то можно чтение/запись побить на блоки и считать КС для каждого отдельно. А на самом деле все немножечко сложнее... Среди участников проводится "конкурс - это вы можете". По результатам конкурса выступает тот, у кого лучшие показатели. И так происходит до очередного конкурса сезона. Потому как тот, кто считался победителем конкурса, мог сдуться например от перегрева или от чего-то еще... Причем конкурс может проводиться не только глобальный, но и локальный. Например часть зоны адресов работает, а другая тестируется. Потом они меняются местами... И этот конкурс проводится не только во время запуска, но и регулярно в рабочем режиме. А так же по команде от хоста, если требуется провести тестирование. И я уже не говорю о дополнительных битах коррекции данных. Их тоже можно добавить к железу. И с ними поколдовать...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Mar 27 2018, 09:17
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

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

Участник

Группа: Участник
Сообщений: 35
Регистрация: 30-10-07
Из: Москва
Пользователь №: 31 896

|
Цитата(RobFPGA @ Mar 27 2018, 12:17)  Приветствую!
Для повышения надежности лучше используйте обе DDR сразу и заложите использование ECC с коррекцией ошибок. Избавитесь от буридановых проблем выбора и контролировать целостность будете в realtime.
Удачи Rob. Спасибо за совет, но использовать ECC можно только при Data Width = 72. В нашей же МК памяти - 16.
|
|
|
|
|
Mar 27 2018, 09:48
|

Участник

Группа: Участник
Сообщений: 35
Регистрация: 30-10-07
Из: Москва
Пользователь №: 31 896

|
Цитата(iosifk @ Mar 27 2018, 12:35)  так в чем проблемы? У Вас же данные из внешней памяти идут не сразу в микроконтроллер, а наверняка в контроллер ДДР, который тоже внутри ПЛИС. Так вот там можно все и сделать. А уж если есть 2 раздельных шины для ДДР, то можно одновременно считывать 2 слова и их сравнивать. И кто сказал про "только при Data Width = 72"? В одну пишите данные, в другую код коррекции для этих данных. Уважаемый, iosifk. Для работы с DDR используем mig_7series контроллер. В который напрямую заводятся входы/выходы для DDR. Управлять выводами для DDR нельзя-они используются только контроллером. К контроллеру можно обращаться через AXI-шину. В том же контроллере можно задать использование ECC. Но активируется ECC только при Data Width = 72.
|
|
|
|
|
Mar 27 2018, 10:46
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветстствую! Цитата(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.
|
|
|
|
|
Mar 27 2018, 11:00
|
Частый гость
 
Группа: Участник
Сообщений: 86
Регистрация: 10-01-13
Пользователь №: 75 145

|
Цитата(sf9 @ Mar 27 2018, 11:02)  DDR используется MicroBlaze для кеширования. Вопрос состоит в том, можно ли программно выполнить выбор DDR, с которой нужно работать системе? Достаточно ли для этого одной прошивки или нужно организовать хранение 2х прошивок для первой или второй DDR? Микроблейз у вас работает на ончип памяти? Я имею ввиду код, стек, куча и тд? Обычно кэш это кусок ончип памяти, куда складываются данные из медленной DDR. Каким образом у вас кеширование производится?
|
|
|
|
|
Mar 27 2018, 11:23
|

Участник

Группа: Участник
Сообщений: 35
Регистрация: 30-10-07
Из: Москва
Пользователь №: 31 896

|
Цитата(Burenkov Sergey @ Mar 27 2018, 14:00)  Микроблейз у вас работает на ончип памяти? Я имею ввиду код, стек, куча и тд? Обычно кэш это кусок ончип памяти, куда складываются данные из медленной DDR. Каким образом у вас кеширование производится? Сергей, используется загрузчик, который выгружает исполняемый код для McBlaze из Flash в DDR. Настройки в .ld файле (при компиляции) выполнены для работы из DDR. Кэширование задается при сборке платформы в настройках коры McBlaze, область памяти, как у DDR.
Сообщение отредактировал sf9 - Mar 27 2018, 11:25
|
|
|
|
|
Mar 27 2018, 11:50
|
Частый гость
 
Группа: Участник
Сообщений: 86
Регистрация: 10-01-13
Пользователь №: 75 145

|
Цитата(sf9 @ Mar 27 2018, 14:23)  Сергей, используется загрузчик, который выгружает исполняемый код для McBlaze из Flash в DDR. Настройки в .ld файле (при компиляции) выполнены для работы из DDR. Кэширование задается при сборке платформы в настройках коры McBlaze, область памяти, как у DDR. Наверное две отдельные прошивки не нужны. Сделайте общее адресное пространство для обеих микросхем, и две сборки софта где просто разные регионы будут указаны. Бутлоадер у вас должен стартовать из ончип, проверять микросхемы и загружать тот hex который соответствует рабочей памяти. Ну и в коде MB нельзя будет писать в память по абсолютным адресам, только по смещениям внутри регионов
Сообщение отредактировал Burenkov Sergey - Mar 27 2018, 11:52
|
|
|
|
|
Mar 27 2018, 12:11
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(iosifk @ Mar 27 2018, 12:35)  В одну пишите данные, в другую код коррекции для этих данных. И как говорят: "возможны варианты"... На самом деле, исходно плата должна быть исправна, а потому можно сделать так, что для нормальной работы будут использоваться сразу обе шины. скажем так, для контроллера это как читать два слова одновременно, и потом выбирать нужное сигналами разрешения. А работа с одной шиной - это уже режим в деградированном состоянии... А во-вторых, если уже так хочется проверять наличие межсоединений между ПЛИС и памятью, то можно добавить микроконтроллер за пол-доллара и встроить JTAG-сканирование... Ведь наверняка у Вас на плате что-то процессорное будет. А те примеры шахматных кодов, которые были в самом начале говорят не о тестировании "поля всей памяти", а только о прохождении сигналов между ПЛИС и RAM...
--------------------
www.iosifk.narod.ru
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|