Миландр

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

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 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
Сообщения: 1296
Откуда: АО "ПКК Миландр"
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 КБ]
Скачиваний: 136
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB