реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Artix-7. Использование 2х DDR3: основная/резервная
sf9
сообщение Mar 27 2018, 08:02
Сообщение #1


Участник
*

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



Коллеги, возник вопрос, связанный с использованием в проекте с ПЛИС Artix-7 XC7A200TFFG1156-2 двух независимых DDR3 MT41J128M16JT-125.
По ТЗ необходимо предусмотреть две отдельные микросхемы DDR для повышения надежности системы.
Идея заключается в том, что при старте системы выполняется проверка DDR методом чтения/записи.
Если тест пройден успешно, в MicroBlaze запускается основная программа. Если тест закончился неудачно, нужно переключиться на вторую DDR, проверить ее и работать с ней.
Иначе - плата признается неисправной. DDR используется MicroBlaze для кеширования.
Вопрос состоит в том, можно ли программно выполнить выбор DDR, с которой нужно работать системе?
Достаточно ли для этого одной прошивки или нужно организовать хранение 2х прошивок для первой или второй DDR?

Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Mar 27 2018, 08:12
Сообщение #2


В поисках себя...
****

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



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

Боюсь, что эта идея неверная.
Всё дело в том, что эта проверка настолько примитивна, что по этому тесту судить о работоспособности памяти нельзя.
А вдруг при чтении из одной ячейки "испортилось" содержимое другой ?
А вдруг при записи в одну из ячеек, лишний бит записался в другую ?
Go to the top of the page
 
+Quote Post
sf9
сообщение Mar 27 2018, 08:22
Сообщение #3


Участник
*

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



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

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

Сообщение отредактировал sf9 - Mar 27 2018, 08:24
Go to the top of the page
 
+Quote Post
nice_vladi
сообщение Mar 27 2018, 08:27
Сообщение #4


Участник
*

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

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

Go to the top of the page
 
+Quote Post
sf9
сообщение Mar 27 2018, 08:36
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 27 2018, 08:40
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 4 004
Регистрация: 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
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Mar 27 2018, 09:17
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 198
Регистрация: 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.
Go to the top of the page
 
+Quote Post
sf9
сообщение Mar 27 2018, 09:24
Сообщение #8


Участник
*

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



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



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

Удачи Rob.


Спасибо за совет, но использовать ECC можно только при Data Width = 72. В нашей же МК памяти - 16.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 27 2018, 09:35
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 4 004
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



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


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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
sf9
сообщение Mar 27 2018, 09:48
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 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.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Mar 27 2018, 10:46
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 198
Регистрация: 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.
Go to the top of the page
 
+Quote Post
Burenkov Sergey
сообщение Mar 27 2018, 11:00
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 10-01-13
Пользователь №: 75 145



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

Микроблейз у вас работает на ончип памяти? Я имею ввиду код, стек, куча и тд? Обычно кэш это кусок ончип памяти, куда складываются данные из медленной DDR. Каким образом у вас кеширование производится?
Go to the top of the page
 
+Quote Post
sf9
сообщение Mar 27 2018, 11:23
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Burenkov Sergey
сообщение Mar 27 2018, 11:50
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 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
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 27 2018, 12:11
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 4 004
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(iosifk @ Mar 27 2018, 12:35) *
В одну пишите данные, в другую код коррекции для этих данных.

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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th September 2018 - 22:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01103 секунд с 7
ELECTRONIX ©2004-2016