Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Кратковременное КЗ на КМОП-выходах микросхем
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Схемотехника
artymen
У меня две КМОП-микрухи разделяют общую шину данных. Что, если периодически будут возникать коллизии не дольше, чем на 8.5 нс, с интервалом, во-много раз большим ? Не выгорят ли выводы сразу, или, того хуже, не заглючит ли устройство ни с того ни с сего, скажем, через полгода ?
aaarrr
Сразу не выгорят. А вот гарантию, что устройство через месяц-полгода-год-пять лет не накроется, никто, увы, не выпишет.
sigmaN
ИМХО попахивает кривизной дизайна. Коллизии там возникать не должны.
proxi
Цитата(artymen @ Apr 28 2010, 21:52) *
У меня две КМОП-микрухи разделяют общую шину данных. Что, если периодически будут возникать коллизии не дольше, чем на 8.5 нс, с интервалом, во-много раз большим ? Не выгорят ли выводы сразу, или, того хуже, не заглючит ли устройство ни с того ни с сего, скажем, через полгода ?

сразу не выгорят, выход КМОПа это сопротивление 50-100 Ом, от глюков впрочем никто не застрахован...
artymen
У моего МК просто очень мало свободных ног осталось, и я экономлю их, нагромождая внешнюю логику. И все шикарно выходит, за исключением этой мизерной коллизии, которая возникнет из-за того, что из-за медленности МК я вынужден выставлять сигнал выбора чипа (/CS) уже вместе с данными (заранее, т.к. принимающая память быстрее МК, в следующем такте уже опоздаю). /CS при этом через инвертор переведет другой чип в Hi-Z состояние, но это произойдет, к сожалению, с задержкой, в то время как данные микроконтроллером уже будут выставлены. (Кстати, я забыл что надо еще добавить задержку инвертора, я микросхему конкретную пока еще не выбрал.)

Значит даже эти кратковременные коллизии вредны и есть реальная необходимость реализовать задержку (хотя бы элементарно RC-цепочкой) ? Впрочем, мне придется аж 8 линий задержать...
V_G
А тактовую поднять, чтобы все успевало?
Хотя непонятно, почему CS и данные у вас выставляются одновременно, это на каком контроллере и какой программой вы так сумели?
И почему, если внешняя память быстрая, нельзя сначала выставить данные, а следующей командой CS, как и положено по временным диаграммам?
Потому как с вашими гонками на краю допустимых временных соотношений, вы еще можете получить и нестабильную/ненадежную запись во внешнюю память. Даже при том, что КМОП выходы не грохнутся.
stells
а по-моему вообще ничего страшного, сквозные токи в КМОП-логике - штатная ситуация
vallav
Цитата(artymen @ Apr 28 2010, 23:37) *
У моего МК просто очень мало свободных ног осталось, и я экономлю их, нагромождая внешнюю логику. И все шикарно выходит, за исключением этой мизерной коллизии, которая возникнет из-за того, что из-за медленности МК я вынужден выставлять сигнал выбора чипа (/CS) уже вместе с данными (заранее, т.к. принимающая память быстрее МК, в следующем такте уже опоздаю). /CS при этом через инвертор переведет другой чип в Hi-Z состояние, но это произойдет, к сожалению, с задержкой, в то время как данные микроконтроллером уже будут выставлены. (Кстати, я забыл что надо еще добавить задержку инвертора, я микросхему конкретную пока еще не выбрал.)

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


Была в свое время идея - сделать на КМОП выход с открытым стоком ( готовых было не достать ) путем сжигания
верхнего транзистора.
Постигла неудача - транзистор нагревается и перестает пропускать большой ток.
Удалось только выжечь выход полностью да и то, с большим трудом.

Вы инвертор поставте на быстром КМОП типа LVC ( у него задержка меньше наны ).
Да и буфер тоже. Стоят они столько же, если не дешевле HC и точно дешевле 4000_ных.
А коллизии - плохо из за повышенного потребления и наводок.
Сжечь ими КМОП вряд ли удастся.
artymen
Цитата
А тактовую поднять, чтобы все успевало?
Хотя непонятно, почему CS и данные у вас выставляются одновременно, это на каком контроллере и какой программой вы так сумели?
И почему, если внешняя память быстрая, нельзя сначала выставить данные, а следующей командой CS, как и положено по временным диаграммам?
Потому как с вашими гонками на краю допустимых временных соотношений, вы еще можете получить и нестабильную/ненадежную запись во внешнюю память. Даже при том, что КМОП выходы не грохнутся.
Тактовая частота поднята до предела. CS и данные выставляются одновременно, потому что если я сначала выставлю CS, то память прочитает невыставленные данные быстрее, чем МК в следующем такте успеет их выставить. А если я еще данные выставлю раньше CS, то коллизия возрастет еще больше, т.к. CS схемотехнически переводит другой чип в Hi-Z, а не МК отдельным сигналом. Никаких гонок нету, если конечно не окажется, что МК не одновременно обновляет состояния своих выводов

Цитата
Вы инвертор поставте на быстром КМОП типа LVC ( у него задержка меньше наны ).
Да и буфер тоже. Стоят они столько же, если не дешевле HC и точно дешевле 4000_ных.
Я делаю опытный образец, а живу в замечательном мухосранске под названием Омск, и я рад, что вообще нашел в крупнейшем в городе радиотехническом магазине буфер 74AC374N, а уж о разновидностях типа HC, LVC, да даже различных корпусах и не смею мечтать.

Ну вот больше людей пишет, что лучше так не делать. Придется, наверно, на CS сделать такую задержку, чтобы он задержался на такт, за которым уже МК подоспеет и выставит данные. Но я даже не знаю быстродействие портов МК. Где-то читал, что LPC2103 переключает ноги с частотой не более 17МГЦ (и это в т.н. быстром режиме !), в то время как частота проца 60 МГц...

Вроде нашел. В даташите приведен ассемблерный код, переключающий пины, и скриншот осциллографа http://file.qip.ru/file/127355853/eddd6793...lipboard01.html
Объясните, пожалуйста, что обозначают частоты внизу и что означают числа сверху ?
Александр Куличок
Какая а Вас стоит память? И как она включена? а то я что-то не могу понять, куда она спешит, и почему нельзя данные подавать чуть позже CS.
Цитата
...то память прочитает невыставленные данные быстрее

Т.е. у Вас процессом записи в память у Вас управляет не контроллер, а какая-то иная часть схемы?
Обычная статическая память по спаду /CS (или /WЕ) считывает адрес, а по фронту сигнала /CS (или /WЕ) пишет(сохраняет) данные.
artymen
асинхронная SRAM-память K6R4008C1D. но это не ей нужно, а мне smile.gif просто обычно принято, что процессор намного быстрее памяти, а у меня наоборот, и отсюда такие фокусы smile.gif
Цитата
Т.е. у Вас процессом записи в память у Вас управляет не контроллер, а какая-то иная часть схемы?
нет. я уже четвертый раз объясняю: память, получив сигнал CS считывает с шины данные спустя 10нс, это значит, что МК ДОЛЖЕН успеть за это время их выставить, но следующий такт наступит только через 17нс, а указанные в этом такте данные выставятся еще спустя через 34 нс (если я правильно понимаю быстродействие портов МК). едниственный способ сократить эту задержку (а точнее, вообще убрать) - одновременно выставить и CS и данные, но сигнал CS помимо своей основной функции отключает другую конфликтующую микросхему от шины, но происходит это с задержкой, и пока та микросхема будет отключаться 8.5 нс, ее данные будут конфликтовать с уже выставленными МК данными. Я могу, конечно, сначала отключить ту микросхему отдельным сигналом, после чего спокойно записывать в память, но это потребует дополнительного пина МК, а пины дефицитные
vallav
Цитата(artymen @ Apr 29 2010, 09:56) *
Я делаю опытный образец, а живу в замечательном мухосранске под названием Омск, и я рад, что вообще нашел в крупнейшем в городе радиотехническом магазине буфер 74AC374N, а уж о разновидностях типа HC, LVC, да даже различных корпусах и не смею мечтать.

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


Цитата(artymen @ Apr 29 2010, 09:56) *
Ну вот больше людей пишет, что лучше так не делать. Придется, наверно, на CS сделать такую задержку, чтобы он задержался на такт, за которым уже МК подоспеет и выставит данные. Но я даже не знаю быстродействие портов МК. Где-то читал, что LPC2103 переключает ноги с частотой не более 17МГЦ (и это в т.н. быстром режиме !), в то время как частота проца 60 МГц...

Вроде нашел. В даташите приведен ассемблерный код, переключающий пины, и скриншот осциллографа http://file.qip.ru/file/127355853/eddd6793...lipboard01.html
Объясните, пожалуйста, что обозначают частоты внизу и что означают числа сверху ?


Что на картинке - увы, без подробностей не понятно.
Не знаю как LPC2103, а вот LPC1768 переключает внешние ноги вполне быстро. Вполне получаются 10 нс импульсы на тактовой в 100 Мгц.
Но толку то от этого... Квитирующих сигналов ведь нет.
У Вас цикл вывода как организован?
artymen
Цикл вывода (Write Cycle 3, согласно даташиту): /WE и /OE фиксированны в low, устанавливается новый адрес, /CS устанавливается в low, и в течение 10нс необходимо, чтобы были выставлены данные, потом /CS устанавливается в high
Цитата
Не знаю как LPC2103, а вот LPC1768 переключает внешние ноги вполне быстро. Вполне получаются 10 нс импульсы на тактовой в 100 Мгц.

А 10 нс это что ? Время между выполнением процессором инструкции загрузки в портовый регистр значения и переходом пина в новое состояние ? Кстати, я как то не задумывался, что из флеша код может выполняться медленнее, чем из оперативки...
lackertong
Если я правильно понял, Вы задачу формулируете так
1. есть сигнал СS, который управляет двумя конфликтующими микросхемами, одну активирует, вторую отключает.
2. одновременно с этим сигналам прямо в морду двум микросхемам выставляются данные
3. микросхемы меняются телами в течение 8.5 ns, пытаясь спалить друг друга.
4. памагитеsmile.gif

Вариант только один, использовать внешний шинник, который придержит данные на эти 8.5ns, но это нереально.
Реально поставить резисторы, давят они друг друга, ну и пусть давят, снизить токи до приемлемого уровня. Да резисторы снизят крутизну фронтов, но сейчас безобразие еще хуже, и ничего, данные нормально бегают. Возможно все еще лучше станет работать. Какие там нагрузки емкостные, какая скорость обмена данными. Есть ли возможность поставить сопротивления.
Еще вариант, две микросхемы давят друг друга потому что у них разные данные. А если перед сменой шины выставить на обоих одинаковые данные. Тогда давить не будут.
artymen
да, задача именно такая smile.gif
единственный вариант, который я вижу, это сделать задержку на прохождение /CS настолько, насколько задержится выставление данных + 10нс
если ставить резисторы, то ведь это 8 штук... может проще все-таки задержку сделать ? есть же спец. схемы задержки ?
а про одинаковые данные я уже думал, увы, это невозможно

а, тьфу, че это я мучаюсь. все эти варианты циклов чтения и записи в даташите приведены лишь для того, чтобы показать какие тайминги надо выдерживать при смене управляющих сигналов ? правильно ли я понимаю, что фактически чтение/запись инициируется сменой адреса ? и вовсе необязательно дергать каждый раз /CS, /WE и /OE туда-сюда, а достаточно лишь зафиксировать их в соотвествующие режиму уровни ?
Александр Куличок
Цитата
я уже четвертый раз объясняю: память, получив сигнал CS считывает с шины данные спустя 10нс, это значит, что МК ДОЛЖЕН успеть за это время их выставить

Память считывает с шины данные по фронту /CS, который должен нужно подавать не ранее, чем через 7нс (tcw) после спада. А данные МК ДОЛЖЕН выставить как минимум за t_DW (5ns) до этого фронта (который Вы формируете сами). При этом ограничений на максимальное время низкого уровня на /CS нет.

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


Цитата
просто обычно принято, что процессор намного быстрее памяти

Процессор на тактовой 1МГц прекрасно работает с 10-нс памятью. Иначе пришлось бы иcкать память с временем доступа >1000ns
Цитата
и вовсе необязательно дергать каждый раз /CS, /WE и /OE туда-сюда, а достаточно лишь зафиксировать их в соотвествующие режиму уровни ?

При чтении - можно только менять адреса. Для записи при активных уровнях на /CS и /WE менять адрес нельзя. В некоторых типах микросхем адрес менять можно, но только через определенное время удержания адреса, которое отсчитывается после спада /CS или /WE
V_G
Так я и не понял, зачем фиксировать WE, OE в каком-то статичном состоянии (честно, смотреть конкретные временные диаграммы лень, но принципы управления всеми ИС памяти одинаковы).
Выставляйте данные при неактивных WE, OE, выбирайте нужную ИС чипселектом и инициируйте запись по WE! То же для чтения (OE). Или вам для WE, OE ножек не хватает?
artymen
ааа, все, понял ! что-то я протупил. совсем уж запутался в даташите, теперь все объясняется :D спасибо ! smile.gif
а вот дурацкие коллизии все равно где-нибудь да будут вылазить при любых комбинациях управления двумя сигналами из трех и при всех вомзожных режимах чтения/записи. самое идеальное, что можно сделать, это через дешифратор переключать микрухи, тогда они переключатсья будут одновременно, да только вот задержки у них разные, они отличаются как между схемами, так и еще в зависимости от направления изменения состояния, в-среднем получатся коллизии ну минимум 4-5 нс. Ну хоть 4-5 нс то можно допустить ?
Цитата
Выставляйте данные при неактивных WE, OE, выбирайте нужную ИС чипселектом и инициируйте запись по WE! То же для чтения (OE). Или вам для WE, OE ножек не хватает?
да, вся проблема только в этом, т.е. приходится идти на какие-то схемотехнические комбинации, и пока мне не удалось придумать так, чтобы ни одной коллизии нигде не возникало
artymen
А как вообще проблема решается, когда на общей шине, например, 10 буферных регистров, и все они имеют разные задержки, да еще в зависимости от направления переключения и уровней, в которые они должны перейти, или с которых уйти ? МК каждым персонально управляет, запоминая, что каждый выдавал в последний раз (а инфа может быть уже неактуальная, пока регистр был отключен, на него могли новые данные поступить, и когда его включишь, неизвестно с какой задержкой выставятся данные), сравнивая и выбирая нужную послеовательность переключения ??? Какое-то садомазо получается.... А если через дешифратор, то переключение будет происходить одновременно, и коллизия обязательно возникнет хотя бы при одной комбинации...
vallav
Цитата(artymen @ Apr 29 2010, 18:54) *
А как вообще проблема решается, когда на общей шине, например, 10 буферных регистров, и все они имеют разные задержки, да еще в зависимости от направления переключения и уровней, в которые они должны перейти, или с которых уйти ?


Если есть мастер на шине - то никаких проблем.
Все регистры стоят на ввод. Нужный мастер переключает на вывод, ждет сколько надо, переключает на ввод, ждет сколько надо.
И все с начала.
Александр Куличок
Цитата
А как вообще проблема решается, когда на общей шине, например, 10 буферных регистров, и все они имеют разные задержки, да еще в зависимости от направления переключения и уровней, в которые они должны перейти, или с которых уйти ?........А если через дешифратор, то переключение будет происходить одновременно, и коллизия обязательно возникнет хотя бы при одной комбинации...

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

Для используемых микросхем памяти коллизий вроде не предвидится, если данные снимать вместе с фронтом /CS (время удержания данных t_DH для них == 0). Но удобнее, конечно, было бы ипользовать для 2х корпусов разные CSы Или запись осуществлять не по /CS, а по /WE. Кстати, у Вас вывод /WE жестко засажен на землю или как? Если подключен к контроллеру, то почему используете запись по /CS?

Цитата
самое идеальное, что можно сделать, это через дешифратор переключать микрухи

Самое идеальное - это использовать штатные выводы микросхемы памяти и использовать их по прямому назначению, как выше рекомендовал V_G, а не заниматься извратом типа "запись по CS".
Алгоритм следующий:
1. выбираете CS-ом нужную микросхему(банк памяти).
2а. Для записи в нее используете /WE (/CS при этом "дергать" не надо).
2б. Для чтения, соответственно, используете /OE. При последовательных чтениях можно только менять адрес (при /ОЕ==0).
Для переключения на вторую микросхему:
1. Отдельной командой выставляете на /CS и /OE уровень лог."1" (если его там не было)
2. Далее выбираете CS-ом вторую микросхему. Зазор минимум в 1 такт процессора между п.1 и п.2 обеспечит выдержку времени t_OHZ (5ns)
3. Запись/чтение - аналогично пунктам выше.
artymen
ну это понятно, коль тремя сигналами управлять. я то двумя только хочу, в этом и состояит вся проблема. На шине сидит МК, память и буферный регистр. А еще эти сигналы должны обеспечить выключение/включение буфера.
Цитата
Сигнал CS на каждый буфер/микросхему памяти решает эту проблему. Дешифраторы обычно имеют вывод разрешения. Та что можно между разными CS-ами организовывать зазоры, которые должны быть больше, чем самая максимальная задержка перехода буферных регистров в 3-е состояние.
на вывод разрешения тоже сигнал нужен, а все, кончились smile.gif тем более во время зазора дешифратор выдает hi-z, а не фиксированные единицы, которые выключили бы все микросхемы.

в-общем, мне нужно что-то вроде дешифратора, который при переключении сначала изменяемые выходы в единицы устанавливает, ждет, и только потом переключает (или другими словами, переносит единицу плавно, или "смазанно"). в принципе, дешифратор - громко сказано, у меня всего две микросхемы. наверное, можно такую логику сделать на триггерах и/или каких-нибудь экзотичных неочевидных логических элекментах
Александр Куличок
Цитата
во время зазора дешифратор выдает hi-z

Это смотря какой дешифратор. Эти выдают "1": 74HC155, 74HC139
Цитата
А еще эти сигналы должны обеспечить выключение/включение буфера.

Буфер включается тоже лог."0"? Какой тип буфера?
artymen
да. 74AC374N
Александр Куличок
Т.е., если я правильно понимаю, режимы работы следующие (предположил, что /CS идет на вход буфера /ОЕ через инвертор):

Код
/OE - всегда в "0"
/CS /WE  
  0   0  - запись данных в память
  0   1  - чтение данных из памяти
  1   х  -  чтение данных из буфера
artymen
да, на данный момент этот вариант занимает лидирующее место в моей голове smile.gif

о ! похоже, что 74*257 отлично решает все проблемы ! только вот бы найти 8битный аналог, чтобы вторую микросхему не городить... щас внимательно даташит посмотрю и продумаю, вдруг какой фокус опять возникнет... smile.gif

а, не, он не двунаправленный...
Александр Куличок
Стробом на буфер тоже контроллер управляет? Если да, то рассмотрите возможность применения 74AC373, соединив ее выводы LE и /OE вместе
При 1 на этих ногах данные будут попадать на выходы защелок внутри микросхемы, но не будут проходить на выход, а при переходе в 0 данные появятся на выходе, и вход не будет на них влиять.
artymen
нет

Цитата
При 1 на этих ногах данные будут попадать на выходы защелок внутри микросхемы, но не будут проходить на выход, а при переходе в 0 данные появятся на выходе, и вход не будет на них влиять.
да мне не важно, что на входе буфера и как это пройдет на выход, важно, чтобы выход не создавал конфликта на шине
Александр Куличок
Тогда самый простой вариант, если есть место на плате, - это поставить в разрыв на шину данных буфера резисторы по 330..500 Ом.
Насчет длительности коллизий. Вроде как для 74AC374 максимальное время " Output Disable Time" при 3,3В составляет ~14.5 нс, а не 8,5
artymen
значит смириться с коллизиями, погасив их резисторами ?
я брал typical для температуры 25 градусов, только промахнулся, 10.5 нс тогда получается

З.Ы. а почему тогда резисторы не встроены уже, раз они так легко решают проблему коллизий... тут какой то подвох есть ? wink.gif
Александр Куличок
да, уменьшение выходного тока и, как следствие, снижение частоты/завалы фронтов при увеличении емкости нагрузки (количества подключенных входов)
artymen
Я придумал, как решить проблему ! Этот вариант я рассматривал и забраковал, когда еще неверно представлял режим работы памяти, теперь он подходит.
На вход /OE буфера будет подаваться логическое "НЕ И" из /CS и /WE. Таким образом, буфер будет включен только при высоких уровнях /CS и /WE. В режиме чтения сигналы будут фиксированы так, что буфер будет отключен и МК спокойно будет читать из памяти, переключая лишь адрес, а запись я обеспечу 3-им циклом (/CS controlled), где /WE будет фиксирован в низком уровне, и можно будет спокойно дергать /CS-ом, не вызывая дергания буфера с коллизиями. Ну а переход между режимами чтения и записи я буду осуществлять такой последовательностью переключения сигналов, чтобы не позволить им одновременно быть высокого уровня, тем самым предовтратив даже кратковременное вкючение буфера.

Правда, /CS-ом мне очень удобно было два счетчика-регистра инкрементировать, которые адрес выставляют для памяти, поэтому при чтении все-таки придется дергать /CS-ом, но синхронно с /WE (надеюсь, МК обновляет пины одновременно, ну или хотя бы с разницей в 1-2нс, которые могут привести к кратковременному выполнению условия "НЕ И", но 1-2нс то можно позволить, я надеюсь ? тем более, у меня компоненты далеко не высокоскоростные, и, я полагаю, емкости проводников и нагрузки не сопоставимы с такими крутыми фронтами, чтобы за 1-2 нс ток успел сильно вырасти, а уж тем более еще продержаться).

Ну и плюс, при написании программы, мне придется быть очень внимательным, учитывая все ньюансы извращенной логики, заложенной мною схемотехнически smile.gif Столько мучений, чтобы отвоевать у МК свободный пин ninja.gif
Александр Куличок
Цитата
На вход /OE буфера будет подаваться логическое "НЕ И" из /CS и /WE

Вы, скорее всего, имели ввиду логическое И-НЕ. Вернее, 2И-НЕ
Цитата
Столько мучений, чтобы отвоевать у МК свободный пин

Да уж. Здесь проще было бы взять камень побольше. В итоговом случае, возможно, все вышло бы дешевле, если разработка не серийная (учитывая стоимость места на ПП и затраченное время).

Вы бы привели общую блок-схему устройства с кратким описанием. Может, совмесными усилиями и отвоевали бы пару-другую пинов для памяти. Или сами рассмотрите, например, возможность применения сдвиговых регистров с параллельным входом/выходом (74hc595, 74hc165, 74hc299...).
Цитата
при чтении все-таки придется дергать /CS-ом, но синхронно с /WE

а то, что это передергивание эквивалентно записи в память - не помешает?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.