1 Отредактировано AlexBel (23-04-2020 08:34)

Тема: Проблемы с двупортовой памятью CY7C028V-15AC

Думаю, этот раздел наиболее подходящий для данной темы, т.к. вопрос касается не только "Агата" (точнее - моей его реплики).
Решив использовать для видеоконтроллера двупортовую память, я приобрёл чипы CY7C028V-15AC. Изначально меня беспокоил вопрос возможных коллизий при одновременном обращении к одной и той же ячейке памяти с двух сторон. Опробовав память на отладочной плате я не увидел проблем и включил её в свои проекты.
Недавно я решил, забавы ради, сделать на своей новой плате (собрал её я примерно месяц назад, но информацию по ней я не публиковал) реплику ZX-Spectrum. Реплика заработала, но я сразу обратил внимание на непонятные артефакты на экране, хаотично возникающие и пропадающие. Появлялись они в случайных местах экрана, всегда по одному, во всяком случае, визуально я более одного не видел.
Запущенный тест памяти показал периодически возникающие ошибки в адресах экранной области. За пределами экранной области ошибки не возникали, тест гонял примерно в течении часа. И происходило это только при активном использовании видеообласти памяти, в статическом режиме ошибок не было. Также их не было при отключении видеоконтроллера от второго порта памяти. Для большей уверенности я перенёс проект на свою старую плату "AgatIC" и запустил тест - то же самое. Две разные платы, две разные (одного типа) микросхемы памяти, разные FPGA, использование софтядра и реального процессора - результат один. Из всего этого я сделал предварительный вывод: двупортовая память - не такая халява, как кажется. Буду ещё изучать даташит на CY7C028V-15AC, кажется, я там что-то пропустил или недопонял. Если будет новая информация - сообщу.

Моя новая игрушка с реальными процессорами:

Spoiler

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=755&download=1

Post's attachments

Attachment icon Unicomp2.jpeg 142.62 kb, 362 downloads since 2020-04-05 

2

Re: Проблемы с двупортовой памятью CY7C028V-15AC

AlexBel пишет:

Изначально меня беспокоил вопрос возможных коллизий при одновременном обращении к одной и той же ячейке памяти с двух сторон.

Для сложных случаев предусмотрен механизм семафоров (на обоих портах должны быть интеллектуальные потребители). Однако, в нашем случае (один порт ЦП запись/чтение, второй порт ДК на чтение) семафоры излишни и бессмысленны.

AlexBel пишет:

Реплика заработала, но я сразу обратил внимание на непонятные артефакты на экране, хаотично возникающие и пропадающие. Появлялись они в случайных местах экрана, всегда по одному, во всяком случае, визуально я более одного не видел.
Запущенный тест памяти показал периодически возникающие ошибки в адресах экранной области. За пределами экранной области ошибки не возникали, тест гонял примерно в течении часа. И происходило это только при активном использовании видеообласти памяти, в статическом режиме ошибок не было.

Ну, видео покажи глюков.

AlexBel пишет:

Из всего этого я сделал предварительный вывод: двупортовая память - не такая халява, как кажется. Буду ещё изучать даташит на CY7C028V-15AC, кажется, я там что-то пропустил или недопонял. Если будет новая информация - сообщу.

Там все просто (в нашем случае). Чип в каком режиме: мастер или слэйв? Входы семафоров инактивированы?

AlexBel пишет:

Моя новая игрушка с реальными процессорами:

Лепота-а-а-а!!!

PS. Как ты уже заметил, я тоже начал колдовать с двухпортовкой. Пока еще не готово, заценить пока не могу. Однако, вот на 256% уверен, что никаких глюков не должно быть "по определению"!

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

3 Отредактировано AlexBel (05-04-2020 11:40)

Re: Проблемы с двупортовой памятью CY7C028V-15AC

1. Про семафоры я читал, но не предполагал их использование.
2. Видео чего? Появляющихся и пропадающих на экране артефактов? Я могу восстановить проект с проблемами и снять видео (не в HD), но вопрос - как и чему это поможет? Чтобы снять видео, нужно провести определённую подготовку и, хотелось бы, чтобы эта возня была оправдана.
3. Чип в режиме мастера. Сигналы SEM, INT, BUSY висят в воздухе.

При работе реплики "Агата" не замечал никаких проблем с памятью. Но я не использовал программ, активно изменяющих многие адреса видеообласти.

4

Re: Проблемы с двупортовой памятью CY7C028V-15AC

AlexBel пишет:

2. Видео чего? Появляющихся и пропадающих на экране артефактов?

Да.

AlexBel пишет:

Я могу восстановить проект с проблемами и снять видео (не в HD), но вопрос - как и чему это поможет? Чтобы снять видео, нужно провести определённую подготовку и, хотелось бы, чтобы эта возня была оправдана.

Ты, как бы, и делишься инфой, и, как бы, вопрошаешь о помощи. Дык, предоставь важную инфу для оценки глюка, может вместе и победим его.

AlexBel пишет:

3. Чип в режиме мастера. Сигналы SEM, INT, BUSY висят в воздухе.

Входы семафоров надо явно деактивировать (а не надеяться, что висячий вход распознается как единичка, а наводки?), а инт и бизи - это уже выходы. Я у себя так и сделал.

AlexBel пишет:

При работе реплики "Агата" не замечал никаких проблем с памятью. Но я не использовал программ, активно изменяющих многие адреса видеообласти.

Еще раз - увидеть бы эти глюки...

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

5

Re: Проблемы с двупортовой памятью CY7C028V-15AC

Вот ссылка на видео: https://yadi.sk/d/_9xuM8o-iomEKQ
За две минуты видео артефакты появляются неоднократно, их хорошо видно. Надпись об успешном прохождении теста ничего не значит, т.к. двупортовая память используется со стороны процессора только на запись, а полноценно процессор работает с другой микросхемой статической памяти, по адресам и данным они включены параллельно.

6

Re: Проблемы с двупортовой памятью CY7C028V-15AC

Ага, спасибо за видео.
Что же, видно глюки с аттрибутами. Однако, они, вроде как, не попадают под описание "хаотично возникающие и пропадающие. Появлялись они в случайных местах экрана, всегда по одному, во всяком случае, визуально я более одного не видел"...
1. Раз двухпортовка со стороны проца только на прозрачной записи (а пишет и читает проц с другой статикой), то может быть сказывается что-то типа ёмкости шины данных?
2. А если другую статику отключить, и запись и чтение делать с двухпортовкой? Чтобы этим же тестом памяти выяснить "А не шина ли данных подкакивает"?...

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

7 Отредактировано AlexBel (06-04-2020 16:35)

Re: Проблемы с двупортовой памятью CY7C028V-15AC

Что я видел на момент создания темы, о том и написал. Если бы видел более одного артефакта, то так бы и написал. Артефакты появлялись и пропадали в случайных местах, не видел более одного одновременно и адреса с ошибками тест показывал всё время разные, но в пределах видеообласти. "На глаз" можно сказать, что артефакты пропадали при записи в память, когда по адресу с артефактом корректно записывались другие данные.
1. Цитирую себя же: "Запущенный тест памяти показал периодически возникающие ошибки в адресах экранной области. ................................. Также их не было при отключении видеоконтроллера от второго порта памяти". Т.е. двупортовка полноценно с одной стороны работала с процессором, с другой ничего не происходило. Видеообласть, для наблюдения результатов теста, создавалась во встроенной памяти.
2. goto 1.

Пока что я вижу только один метод поиска причины и решения - буду внимательно читать даташит, скорее всего, что-то пропустил или неправильно понял. Возможно, конечно, что с самой памятью проблема, но странное совпадение для двух микросхем установленных на двух платах...

8

Re: Проблемы с двупортовой памятью CY7C028V-15AC

Алексей, удалось разобраться в чём причина?
У меня, похоже, такие же глюки с двухпортовкой... Артефачит, зараза... У тебя CYPRESS, у меня IDT, похоже что это что-то системное. Уже поверю во что угодно...

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

9

Re: Проблемы с двупортовой памятью CY7C028V-15AC

Упс, чтение с пристрастием шита даташного так и шепчет, что чип надо загнать в режим SLAVE и подать единичку на вход BUSY порта процика. ;)
Утром попробую!

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

10

Re: Проблемы с двупортовой памятью CY7C028V-15AC

Ур-р-ра-а-а, зар-р-р-работало-о-о!!! ;)
Алексей, пробуй.

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

11 Отредактировано AlexBel (23-04-2020 09:00)

Re: Проблемы с двупортовой памятью CY7C028V-15AC

LeoN пишет:

Ур-р-ра-а-а, зар-р-р-работало-о-о!!! ;)
Алексей, пробуй.

Даташит, пока что, повторно не штудировал. Я сейчас "Агат" отложил в сторону, занимаюсь другим:

Spoiler

https://i111.fastpic.ru/thumb/2020/0423/02/_47fc0b865e34e6f37deac26d51430c02.jpeg

Как вернусь к "Агату" - попробую. Требуется хирургическое вмешательство на плате для изменения режима работы памяти, а это я могу сделать только на работе под микроскопом. О результате обязательно напишу.

LeoN пишет:

Упс, чтение с пристрастием шита даташного так и шепчет, что чип надо загнать в режим SLAVE и подать единичку на вход BUSY порта процика. ;)
Утром попробую!

При активном уровне "0" сигнала /BUSY, нужно на него подавать, думаю, не единичку, а ноль, чтобы при коллизии сообщить о занятости со стороны процессора. Я так понимаю. Как вариант - подключить /BUSY к /CS, чтобы сообщать о занятости памяти при каждом к ней обращении. Но тут уже нужно смотреть тайминги...

12 Отредактировано LeoN (23-04-2020 12:00)

Re: Проблемы с двупортовой памятью CY7C028V-15AC

AlexBel пишет:

Как вариант - подключить /BUSY к /CS, чтобы сообщать о занятости памяти при каждом к ней обращении. Но тут уже нужно смотреть тайминги...

А смысл? Ты что, будешь видеоконтроллер тормозить? Тогда будет мусор на экране... Или процик будешь тормозить? И что будет с таймингами процика/проги?

AlexBel пишет:

При активном уровне "0" сигнала /BUSY, нужно на него подавать, думаю, не единичку, а ноль, чтобы при коллизии сообщить о занятости со стороны процессора. Я так понимаю.

В даташите от CY7C028 очень поверхностно расписано об арбитраже и ничего не сказано о "write inhibit". Ты почитай даташит от IDT7028 (именно IDT сделали первыми двухпортовки, а кипарисы уже потом штамповали аналоги) - там чётко и ясно сказано об этом.

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

13 Отредактировано AlexBel (23-04-2020 18:14)

Re: Проблемы с двупортовой памятью CY7C028V-15AC

Да, это я поспешил. Покурил даташит, нашёл:

Spoiler

Busy Logic
Busy Logic provides a hardware indication that both ports of the RAM
have accessed the same location at the same time. It also allows one of the two accesses to proceed and signals the other side that the RAM is “busy”.
The BUSY pin can then be used to stall the access until the operation on the other side is completed. If a write operation has been attempted from the side that receives a BUSY indication, the write signal is gated internally to prevent the write from proceeding.
The use of BUSY logic is not required or desirable for all applications.
In some cases it may be useful to logically OR the BUSY outputs together and use any BUSY indication as an interrupt source to flag the event of an illegal or illogical operation. If the write inhibit function of BUSY logic is not desirable, the BUSY logic can be disabled by placing the part in slave mode with the M/S pin. Once in slave mode the BUSY pin operates solely as a write inhibit input pin. Normal operation can be programmed by tying the BUSY pins HIGH. If desired, unintended write operations can be prevented to a port by tying the BUSY pin for that port LOW.
The BUSY outputs on the IDT7028 RAM in master mode, are push-pull type outputs and do not require pull up resistors to operate. If these RAMs  are being expanded in depth, then the BUSY indication for the resulting array requires the use of an external AND gate.

Сделал изменения в схеме, исходя из этого (т.е. последовал совету). Погонял тест Спектрума - артефактов не видно, прохождение теста успешно. Большое спасибо! Возможно, эта информация будет полезна ещё кому-нибудь.