sf9 0 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба Коллеги, возник вопрос, связанный с использованием в проекте с ПЛИС Artix-7 XC7A200TFFG1156-2 двух независимых DDR3 MT41J128M16JT-125. По ТЗ необходимо предусмотреть две отдельные микросхемы DDR для повышения надежности системы. Идея заключается в том, что при старте системы выполняется проверка DDR методом чтения/записи. Если тест пройден успешно, в MicroBlaze запускается основная программа. Если тест закончился неудачно, нужно переключиться на вторую DDR, проверить ее и работать с ней. Иначе - плата признается неисправной. DDR используется MicroBlaze для кеширования. Вопрос состоит в том, можно ли программно выполнить выбор DDR, с которой нужно работать системе? Достаточно ли для этого одной прошивки или нужно организовать хранение 2х прошивок для первой или второй DDR? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба Идея заключается в том, что при старте системы выполняется проверка DDR методом чтения/записи. Боюсь, что эта идея неверная. Всё дело в том, что эта проверка настолько примитивна, что по этому тесту судить о работоспособности памяти нельзя. А вдруг при чтении из одной ячейки "испортилось" содержимое другой ? А вдруг при записи в одну из ячеек, лишний бит записался в другую ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sf9 0 27 марта, 2018 Опубликовано 27 марта, 2018 (изменено) · Жалоба Боюсь, что эта идея неверная. Всё дело в том, что эта проверка настолько примитивна, что по этому тесту судить о работоспособности памяти нельзя. А вдруг при чтении из одной ячейки "испортилось" содержимое другой ? А вдруг при записи в одну из ячеек, лишний бит записался в другую ? Сам тест состоит из двух этапов: запись данных 01010101010101010101010101010101 по каждому адресу. Затем считывание. Второй этап - запись 10101010101010101010101010101010 также по данному адресу. Этот тест проверяет выставление/стирания каждого бита шины данных. Проверка шины адреса может также осуществляться записью номеров адресов в шину данных. Если есть более интересные предложения готов это обсудить в отдельной теме. Изменено 27 марта, 2018 пользователем sf9 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 2 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба Коллеги, возник вопрос, связанный с использованием в проекте с ПЛИС 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 0 27 марта, 2018 Опубликовано 27 марта, 2018 (изменено) · Жалоба Я думаю, это вполне осуществимая задача, тем более, ДДР полностью одинаковые. Необходимо просто скоммутировать сигналы управления/данных в/на нужную DDR. Что-то вроде: 0. Включили систему; 1. Проверили ДДР1; 1.1. Если она в порядке -> (4), иначе -> (2); 2. Переключились на ДДР2; 3. Проверили ДДР2; 3.1. Если она в порядке -> (4), иначе -> говорим, что работать невозможно и начинаем истерично мигать ласпочками) 4. Если требуется - переключились на нужную ДДР и остались в этом положении до конца работы (отключения питания, например). А для проверки можно рассчитывать контрольную сумму записываемых данных, а при чтении сверять ее правильность. Если не хочется считать длиную КС - то можно чтение/запись побить на блоки и считать КС для каждого отдельно. Имеется ввиду софтовое переключение сигналов в ПЛИС? Т.е. мы делаем двe mig_7series коры, и потом переключаемся на ту, которая нам нужна? Тут я не очень представляю, как отреагирует MicroBlazе на это. И понадобиться и можно ли перераспределять кэш в этом случае? Вариант с внешней, аппаратной коммутацией не подходит: много линий данных, сложно выполнить выравнивание длин и соблюдение всех задержек, целостности сигналов и пр. Также стоит большой вопрос , как потом промоделировать все это. Изменено 27 марта, 2018 пользователем sf9 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба Я думаю, это вполне осуществимая задача, тем более, ДДР полностью одинаковые. Необходимо просто скоммутировать сигналы управления/данных в/на нужную DDR. Что-то вроде: 0. Включили систему; 1. Проверили ДДР1; 1.1. Если она в порядке -> (4), иначе -> (2); 2. Переключились на ДДР2; 3. Проверили ДДР2; 3.1. Если она в порядке -> (4), иначе -> говорим, что работать невозможно и начинаем истерично мигать ласпочками) 4. Если требуется - переключились на нужную ДДР и остались в этом положении до конца работы (отключения питания, например). А для проверки можно рассчитывать контрольную сумму записываемых данных, а при чтении сверять ее правильность. Если не хочется считать длиную КС - то можно чтение/запись побить на блоки и считать КС для каждого отдельно. А на самом деле все немножечко сложнее... Среди участников проводится "конкурс - это вы можете". По результатам конкурса выступает тот, у кого лучшие показатели. И так происходит до очередного конкурса сезона. Потому как тот, кто считался победителем конкурса, мог сдуться например от перегрева или от чего-то еще... Причем конкурс может проводиться не только глобальный, но и локальный. Например часть зоны адресов работает, а другая тестируется. Потом они меняются местами... И этот конкурс проводится не только во время запуска, но и регулярно в рабочем режиме. А так же по команде от хоста, если требуется провести тестирование. И я уже не говорю о дополнительных битах коррекции данных. Их тоже можно добавить к железу. И с ними поколдовать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 34 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба Приветствую! Коллеги, возник вопрос, связанный с использованием в проекте с ПЛИС Artix-7 XC7A200TFFG1156-2 двух независимых DDR3 MT41J128M16JT-125. По ТЗ необходимо предусмотреть две отдельные микросхемы DDR для повышения надежности системы. Идея заключается в том, что при старте системы выполняется проверка DDR методом чтения/записи. Если тест пройден успешно, в MicroBlaze запускается основная программа. Если тест закончился неудачно, нужно переключиться на вторую DDR, проверить ее и работать с ней. ... Для повышения надежности лучше используйте обе DDR сразу и заложите использование ECC с коррекцией ошибок. Избавитесь от буридановых проблем выбора и контролировать целостность будете в realtime. Удачи Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sf9 0 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба Приветствую! Для повышения надежности лучше используйте обе DDR сразу и заложите использование ECC с коррекцией ошибок. Избавитесь от буридановых проблем выбора и контролировать целостность будете в realtime. Удачи Rob. Спасибо за совет, но использовать ECC можно только при Data Width = 72. В нашей же МК памяти - 16. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба Спасибо за совет, но использовать ECC можно только при Data Width = 72. В нашей же МК памяти - 16. так в чем проблемы? У Вас же данные из внешней памяти идут не сразу в микроконтроллер, а наверняка в контроллер ДДР, который тоже внутри ПЛИС. Так вот там можно все и сделать. А уж если есть 2 раздельных шины для ДДР, то можно одновременно считывать 2 слова и их сравнивать. И кто сказал про "только при Data Width = 72"? В одну пишите данные, в другую код коррекции для этих данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sf9 0 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба так в чем проблемы? У Вас же данные из внешней памяти идут не сразу в микроконтроллер, а наверняка в контроллер ДДР, который тоже внутри ПЛИС. Так вот там можно все и сделать. А уж если есть 2 раздельных шины для ДДР, то можно одновременно считывать 2 слова и их сравнивать. И кто сказал про "только при Data Width = 72"? В одну пишите данные, в другую код коррекции для этих данных. Уважаемый, iosifk. Для работы с DDR используем mig_7series контроллер. В который напрямую заводятся входы/выходы для DDR. Управлять выводами для DDR нельзя-они используются только контроллером. К контроллеру можно обращаться через AXI-шину. В том же контроллере можно задать использование ECC. Но активируется ECC только при Data Width = 72. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 34 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба Приветстствую! ... Для работы с DDR используем mig_7series контроллер. В который напрямую заводятся входы/выходы для DDR. Управлять выводами для DDR нельзя-они используются только контроллером. К контроллеру можно обращаться через AXI-шину. В том же контроллере можно задать использование ECC. Но активируется ECC только при Data Width = 72. Ох лень матушка - ни кто (кроме ее родимой) не мешает Вам: 1 - сварганить полностью свой контроллер со своей ECC - (недостижимая идиллия) 2 - модифицировать родной контроллер покопавшись в потрохах оригинального (кровавое зрелище) 3 - прилепить костыль ECC на входе/выходе AXI шины (хромая животинка получится но двигается будет) 4 ... В общем случае если есть избыток по скорости/разрядности шины можно это использовать для контроля. Удачи. Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Burenkov 0 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба DDR используется MicroBlaze для кеширования. Вопрос состоит в том, можно ли программно выполнить выбор DDR, с которой нужно работать системе? Достаточно ли для этого одной прошивки или нужно организовать хранение 2х прошивок для первой или второй DDR? Микроблейз у вас работает на ончип памяти? Я имею ввиду код, стек, куча и тд? Обычно кэш это кусок ончип памяти, куда складываются данные из медленной DDR. Каким образом у вас кеширование производится? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sf9 0 27 марта, 2018 Опубликовано 27 марта, 2018 (изменено) · Жалоба Микроблейз у вас работает на ончип памяти? Я имею ввиду код, стек, куча и тд? Обычно кэш это кусок ончип памяти, куда складываются данные из медленной DDR. Каким образом у вас кеширование производится? Сергей, используется загрузчик, который выгружает исполняемый код для McBlaze из Flash в DDR. Настройки в .ld файле (при компиляции) выполнены для работы из DDR. Кэширование задается при сборке платформы в настройках коры McBlaze, область памяти, как у DDR. Изменено 27 марта, 2018 пользователем sf9 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Burenkov 0 27 марта, 2018 Опубликовано 27 марта, 2018 (изменено) · Жалоба Сергей, используется загрузчик, который выгружает исполняемый код для McBlaze из Flash в DDR. Настройки в .ld файле (при компиляции) выполнены для работы из DDR. Кэширование задается при сборке платформы в настройках коры McBlaze, область памяти, как у DDR. Наверное две отдельные прошивки не нужны. Сделайте общее адресное пространство для обеих микросхем, и две сборки софта где просто разные регионы будут указаны. Бутлоадер у вас должен стартовать из ончип, проверять микросхемы и загружать тот hex который соответствует рабочей памяти. Ну и в коде MB нельзя будет писать в память по абсолютным адресам, только по смещениям внутри регионов Изменено 27 марта, 2018 пользователем Burenkov Sergey Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 27 марта, 2018 Опубликовано 27 марта, 2018 · Жалоба В одну пишите данные, в другую код коррекции для этих данных. И как говорят: "возможны варианты"... На самом деле, исходно плата должна быть исправна, а потому можно сделать так, что для нормальной работы будут использоваться сразу обе шины. скажем так, для контроллера это как читать два слова одновременно, и потом выбирать нужное сигналами разрешения. А работа с одной шиной - это уже режим в деградированном состоянии... А во-вторых, если уже так хочется проверять наличие межсоединений между ПЛИС и памятью, то можно добавить микроконтроллер за пол-доллара и встроить JTAG-сканирование... Ведь наверняка у Вас на плате что-то процессорное будет. А те примеры шахматных кодов, которые были в самом начале говорят не о тестировании "поля всей памяти", а только о прохождении сигналов между ПЛИС и RAM... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться