Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2020-ноя-29 16:46

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 3 сообщения ] 
Автор Сообщение
СообщениеДобавлено: 2016-авг-17 13:25 
Не в сети

Зарегистрирован: 2016-мар-17 14:12
Сообщения: 55
Организация: НИИ ТП
Использую отладочную плату для 1986ВЕ91/94 с воткнутым в нее модулем ОЗУ (1645РУ4У x 2). Пытаюсь работать с ОЗУ по внешней шине. Обращения по 32 бита и на чтение, и на запись проходят нормально (инструкции LDR, STR), обращения по 16 бит тоже проходят нормально (инструкции LDRH, STRH), 8-битная запись проходит (STRB), а вот 8-битное чтение (LDRB) не работает. Чтобы я ни читал, я всегда получаю 0xFF. Другими словами у меня нет возможности считывать отдельные байты из внешней ОЗУ. Практическая полезность такой ОЗУ, сами понимаете, весьма ограничена.

Причина мне сейчас не понятна. Осциллографом вижу, что линия ВЕ3 ведет себя не так, как ВЕ0, ВЕ1 и ВЕ2. В отличии от них в промежутках между обращениями к памяти она пребывает в нуле. Первые три ВЕ при этом пребывают в единице (неактивное состояние). Так ведет себя ВЕ3 и на 91'ом и на 94'ом. Не уверен, что проблема вызвана этим, но выглядит подозрительно.

Жаль, что миландровсккий тестовый проект использовал только 32-битные обращения. Догадались бы они попробовать поработать со своей памятью байтами, может обнаружили бы эту ерунду вовремя. Теперь-то уж поезд конечно ушел. С другой стороны их тестовая программа даже чип-селект микросхемам памяти не делала, пока им добрый hostage222 не указал на сей маленький недочет.

Еще они могли бы обнаружить, что у них на микросхемах ОЗУ ВЕ0 и ВЕ2 выбирают старшие байты, а ВЕ1 и ВЕ3 младшие, хотя должно быть наоборот. В итоге, когда я пишу байт по адресу 0x60000000, он на самом деле записывается в байт по адресу 0x60000001, а когда пишу в 0x60000001, запись происходит в байт по адресу 0x60000000, но это, конечно, мелочи быта.

Такие дела. Как пишут миландровцы в своей errata - учитывайте при разработке.


Вернуться к началу
СообщениеДобавлено: 2016-авг-17 18:31 
Не в сети

Зарегистрирован: 2009-май-22 09:01
Сообщения: 1313
Откуда: АО "ПКК Миландр"
Alex1979 писал(а):
Использую отладочную плату для 1986ВЕ91/94 с воткнутым в нее модулем ОЗУ (1645РУ4У x 2). Пытаюсь работать с ОЗУ по внешней шине. Обращения по 32 бита и на чтение, и на запись проходят нормально (инструкции LDR, STR), обращения по 16 бит тоже проходят нормально (инструкции LDRH, STRH), 8-битная запись проходит (STRB), а вот 8-битное чтение (LDRB) не работает. Чтобы я ни читал, я всегда получаю 0xFF. Другими словами у меня нет возможности считывать отдельные байты из внешней ОЗУ. Практическая полезность такой ОЗУ, сами понимаете, весьма ограничена.

Причина мне сейчас не понятна. Осциллографом вижу, что линия ВЕ3 ведет себя не так, как ВЕ0, ВЕ1 и ВЕ2. В отличии от них в промежутках между обращениями к памяти она пребывает в нуле. Первые три ВЕ при этом пребывают в единице (неактивное состояние). Так ведет себя ВЕ3 и на 91'ом и на 94'ом. Не уверен, что проблема вызвана этим, но выглядит подозрительно.

Жаль, что миландровсккий тестовый проект использовал только 32-битные обращения. Догадались бы они попробовать поработать со своей памятью байтами, может обнаружили бы эту ерунду вовремя. Теперь-то уж поезд конечно ушел. С другой стороны их тестовая программа даже чип-селект микросхемам памяти не делала, пока им добрый hostage222 не указал на сей маленький недочет.

Еще они могли бы обнаружить, что у них на микросхемах ОЗУ ВЕ0 и ВЕ2 выбирают старшие байты, а ВЕ1 и ВЕ3 младшие, хотя должно быть наоборот. В итоге, когда я пишу байт по адресу 0x60000000, он на самом деле записывается в байт по адресу 0x60000001, а когда пишу в 0x60000001, запись происходит в байт по адресу 0x60000000, но это, конечно, мелочи быта.

Такие дела. Как пишут миландровцы в своей errata - учитывайте при разработке.
Странно, при работе с внешней памятью проверялся и байтовый доступ. Так что дело тут скорее всего в другом...
Укажите какая версия демоплаты у Вас.


Вернуться к началу
СообщениеДобавлено: 2016-авг-18 11:59 
Не в сети

Зарегистрирован: 2016-мар-17 14:12
Сообщения: 55
Организация: НИИ ТП
Дело было не в демоплате (ревизия 4.1), а в мезонинном модуле ОЗУ. Этот модуль устроен таким образом, что на нем
сигналы внешней шины BE[0,1,2,3] заходят на микросхемы 1645РУ4У следующим образом:

BE0 --> nBHE (1645РУ4У 1)
BE1 --> nBLE (1645РУ4У 1)
BE2 --> nBHE (1645РУ4У 2)
BE3 --> nBLE (1645РУ4У 2)

Так, разумеется, быть не должно. Помимо путанья байтов при записи, это вызывало и проблему при чтении байтов. Механизм действия следующий. Допустим, я читаю байт по адресу 0x60000000. При этом делается активной линия BE0. Она заходит на nBHE ОЗУ, при этом происходит выбор старшего байта. Микросхема ОЗУ выкладывает байт данных на линии шины D8-D15. На линиях D0-D7 при этом возникает третье состояние. Именно это третье состояние процессор мне и возвращал.
Перепайка мезонинного модуля устранила проблему. Память стала проходить довольно замысловатый тест стабильно и на максимальной скорости - 80 МГц на ядре, SETUP = 1, ACTIVE = 1, HOLD = 0. Как я понимаю, это означает 26.(6) МГц на памяти.

Кстати, если кому надо, вот пак для Keil в котором для 1986ВЕ94 добавлены все полагающиеся ему регистры контроллера внешней шины со всеми полагающимися битами:


Вложения:
Milandr_1986BExx.zip [472.5 КБ]
242 скачивания
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 3 сообщения ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти: 

cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB