Регистрация | Последние сообщения | Персональный список | Поиск | Настройка конференции | Личные данные | Правила конференции | Список участников | Top 64 | Статистика раздела | faq | Что нового v.2.3 | Чат
Skunk Forum - Техника, Наука, Общество » Форум разработчиков РЭА »
Подключение 16-ти разрядной памяти к ISA (PC/104) (страница 1)

Версия для печати (настроить)
Страницы: 1 2 3 4 5 6 7 8 9

Новая тема | Написать ответ

Подписаться

Автор Тема:   Подключение 16-ти разрядной памяти к ISA (PC/104)
forrest
unregistered
написано 17 Января 2002 01:27  ПравкаОтветитьIP

Собрал девайс. Всё вроде бы работат, но ни как не удаётся добиться максимальной скорости передачи данных.
Согласно временным характеристикам ISA при доступе к 16-ти разрядной памяти с циклом в 0-тактов ожидания, время выполнения команды считывания составляет 125 нс. Здесь полный порядок, хотя не имея осцилографа пришлось собирать попутно ещё одну схемку, чтобы замерять временные интервалы.
Измерения проводил с точностью 20нс, что вполне достаточно чтобы отличить импульс 125нс например от 250нс при доступе всё к той же 16-ти разрядной памяти, но с нормальным циклом.
Проблема в том, что время выключения такой команды составляет тоже 125нс, а у меня по непонятной причине получается от 400нс до 500нс, то есть в среднем цикл занимает порядка 625нс, что обеспечивает около 1600000 команд в секунду, а это около 3.2Мбайт/сек. Надо же хотя бы вдвое больше (7.5 - 8.0 Мб/сек). Использовал статическую память (64К х 16) с временем доступа 70нс. Может кто делал подобные схемы или сможет объяснить где косяк ?

skunk
Злобный админ

Сообщений: 2327
Откуда: СССР, город-герой Ленинград
Регистрация: Ноябрь 2000

написано 17 Января 2002 12:02ИнфоПравкаОтветитьIP

Собрал девайс, не имея осциллографа... Оригинально. Ну а чему равен полный цикл доступа к внешней 16-разрядной памяти по ISA шине? Ты получил нормальный результат. Завтра я тебе точно скажу поможет ли тебе ПДП (у меня сейчас спецификации под рукой нет).

forrest
unregistered
написано 17 Января 2002 18:44  ПравкаОтветитьIP

ПДП тут точно не поможет. Во первых принципиальная разница есть в использовании просто памяти (как это реализовано в моём девайсе) и внешней памяти (в смысле управляемой как устройством ввода-вывода через команды IN - OUT). Моя память занимает адреса D0000 FFFF и комп видит её как самую обычную память в первом мегабайте ОЗУ, наподобе Video RAM или ROM BIOS. Для неё так же применимы любые команды типа MOV, как и для обычной памяти. Что касаемо ПДП, то он может быть организован только между Устройством Ввода-Вывода (УВВ) и памятью. Но никак нельзя реализовать ПДП между памятью и памятью. В моём случае это бы потребовало полной переработки схемы, так как для УВВ используются совсем другие сигналы, например IO/R вместо MEMR, а также совсем другая схема дешифрации адреса, ориентированная для УВВ на 16 разрядов (А0-А15), а не (А0-А15) и (LA16-LA23) для 24 разрядов адресации памяти. Но даже, если бы я переработал схему, что впринципе не очень сложно, то даже тех результатов, которые есть сейчс мне бы, используя ПДП добиться не удалось, так как например только длительность сигнала IO/R составляет для нормального цикла ПДП 700нс. К тому же пришлось бы делать дополнительную схему для генерации сигнала REFRESH (регенерация памяти) каждые 15мкс, потому как обмен с памятью в моём девайсе происходит блоками по 128Кб и весь цикл обмена естественно превышает 15мкс. Вообще, если ещё не стало понятно зачем всё это нужно, то скажу, что память в моём случае используется как буфер обмена. Данные поступают с частотой свыше 30МГц и малейший срыв синхронизации череват невосполнимой потерей данных. Временные диаграммы я взял по адресу www.dvideo.ru/interfaces/isa_time.htm
Если им полностью доверять то самый быстрый цикл это доступ к 16 разрядной памятью с 0-тактами ожидания. Он состоит из команды чтения/записи 125нс и времени её снятия это ещё 125нс, то есть всего 250нс (4000000 раз в секунду по 16 бит = 8Мбайт/сек). Все остальные сигналы асинхронны по отношению к команде чтения/записи, поэтому их можно не учитывать. Конечно ровно 8Мбайт/сек не получить ни когда, так как каждые 15мкс будет происходить цикл регенерации памяти, что приведёт хоть и к не большому, но снижению этого показателя. В рунете как выяснилось на эту тему нет ничего, а с английским у меня туго. Совершенно случайно наткнулся на этот форум, поэтому в любом случае спасибо за ответ.

Добавление от 17 Января 2002 19:00:

P.S. По непонятной причине у меня происходит слишком большая задержка при снятии команды чтения/записи. Хотя здесь должно быть всего два варианта. Первый это при доступе к 8-ми разрядному ресурсу, когда время снятия команды 187нс.
Второй - доступ к 16-ти разрядному ресурсу с времнем снятия 125нс. Из-за чего получаенся 400нс - 500нс в моей схеме я не знаю. Хотя в пошаговом режиме иногда получалось именно 125нс (примерно один раз из двадцати). Программа обмена написана на ASMе, в режиме с отключенными прерываниями, хотя для единичных замеров длительности импульсов это значения не имеет, так как измерения происходят на аппаратном уровне и внутри одного цикла чтения/записи.

skunk
Злобный админ

Сообщений: 2332
Откуда: СССР, город-герой Ленинград
Регистрация: Ноябрь 2000

написано 17 Января 2002 19:22ИнфоПравкаОтветитьIP

forrest
Подожди все же до завтра, я тебе вечерком отпишу. Я в свое время сделал много устройств на ISA (и для УВВ и для ВП), в том числе и для PC104, там особо больших скоростей не достичь. Полный цикл не определяется только команды чтения/записи и времени её снятия.

Данные поступают с частотой свыше 30МГц
Это ни о чем не говорит. Разрядность?

forrest
unregistered
написано 17 Января 2002 19:28  ПравкаОтветитьIP

Разрядность естественно 1 бит. Иначе зачем было бы использовать ISA, заранее зная, что она для этих целей не подходит. В моём распоряжении одноплатный промышленный компьютер в котором к сожалению спецификация PC/104+ (расширение для PCI) отсутствует и есть только PC/104.

[Это сообщение изменил forrest (изменение 17 Января 2002 23:31).]

skunk
Злобный админ

Сообщений: 2333
Откуда: СССР, город-герой Ленинград
Регистрация: Ноябрь 2000

написано 17 Января 2002 19:33ИнфоПравкаОтветитьIP

Может у тебя цикл завершается как 8-ми разрядный? Ты -MEM CS16 вырабатываешь?
Здесь описание не до конца, но может помочь
http://www.skunksworks.net/doc/repair/doc/isabus/isa.htm

Добавление от 17 Января 2002 19:39:

Разрядность естественно 1 бит.
Ну я так и подумал, т.е. обмен по ISA должен быть 2 МГц. Боюсь, что это нереализуемо. В любом случае, до завтра.

forres
unregistered
написано 17 Января 2002 19:48  ПравкаОтветитьIP

Как я уже писал длительность цикла я замерял. Получается всё как надо 125нс. Причём сначала я пробывал именно 8-ми разрядный цикл (просто не подсоединял контакт MEM CS16 к разъёму PC/104) и получал 530нс. После того как я подсоединял MEM CS16 получалось 250нс, что уже говорит о том, что цикл обрабатывается как 16-ти разрядный. И уже только после того, как я подаю сигнал 0WS (цикл с 0-тактами ожидания) синхронизуя его с SYSCLOCK получается 125нс. Спасибо за ссылку. Сейчас посмотрю что там к чему.

forrest
Junior Member

Сообщений: 162
Откуда: Россия, Москва
Регистрация: Январь 2002

написано 17 Января 2002 23:29ИнфоПравкаОтветитьIP

Посмотрел указанную ссылку. Я использовал ту же самую информацию, только по указанному тобой адресу описание на самом деле не полное. Полное находится на ссылка
А ссылка это как-раз продолжение с недостающими разделами 6 и 7, где описаны временные характеристики ISA.
Я несколько раз полностью просматривал весь текст, но так и не нашёл нигде ограничения в 2МГц как ты пишешь. Во многих местах также видел указание на возможность передачи данных со скоростью выше 5 Мб/сек ( ссылка ), что уже больше 2МГц. Временная диаграмма, которая описывает мой вариант подключения графически изображена на рисунке 6.1 ( имя файла Fig6_1.gif, архив находится на ссылка )
Если я всё правильно понимаю, то между двумя командами считывания/записи находится только интервал, обозначеный на рисунке 6.1 номером 13, который и подрузамевает под собой время выключение самой команды. Тогда как же определить полное время цикла ? Я считал, что оно получается путём сложения интервалов 8 и 13.
Вообще я специализируюсь на написании низкоуровневых кодов и схемотехникой занимаюсь по мере необходимости, поэтому опыта разработки подобных систем с ISA у меня не было.
И то, что для людей знающих не требует объяснений у меня вызывает массу вопросов.
Так например не могу объяснить почему при использовании моего девайса если не отключить от разъёма PC/104 контакт MEM CS16 физически, то при перезагрузке компьютер вообще отказывается запускаться. На выходе MEM CS16 я использовал КР1554АП6 и до момента дешифрации нужного адреса все выходы находятся в Z-состоянии. Думал уже попробовать дополнительно поставить токовый ключ типа КР1014КТ1В. Или это может быть связано именно с тем, что у меня не в чистом виде ISA, а всё-таки PC/104 с её уменьшенными в 5 раз токами. Если есть возможность ответь пожалуйста завтра. Заранее спасибо.

[Это сообщение изменил forrest (изменение 17 Января 2002 23:52).]

skunk
Злобный админ

Сообщений: 2338
Откуда: СССР, город-герой Ленинград
Регистрация: Ноябрь 2000

написано 17 Января 2002 23:43ИнфоПравкаОтветитьIP

Пока скажу следующее:

На выходе MEM CS16 я использовал КР1554АП6 и до момента дешифрации нужного адреса все выходы находятся в Z-состоянии.
Это более грамотное решение, нежели использование ОК.

что у меня не в чистом виде ISA, а всё-таки PC/104 с её уменьшенными в 5 раз токами
Разницы нет никакой. А какой частоты у тебя SYSCLK? Это поможет в расчете скорости. На разных PC104 он разный.

forrest
Junior Member

Сообщений: 1
Откуда: Россия, Москва
Регистрация: Январь 2002

написано 18 Января 2002 00:11ИнфоПравкаОтветитьIP

Не совсем понял что означает "использование ОК"
На счёт КР1554АП6, то она использовалась мною с самого начала и описанный глюк именно причина её использования. Может быть значения выходных токов маловаты, хотя какие могут быть токи если выходы находятся в Z-состоянии ? В любом случае системной плате в момент перезапуска кажется что-то другое.
SYSCLC замерял: 8МГц.

skunk
Злобный админ

Сообщений: 2340
Откуда: СССР, город-герой Ленинград
Регистрация: Ноябрь 2000

написано 18 Января 2002 14:38ИнфоПравкаОтветитьIP

forrest
OK - открытый коллектор.
Вообщем ситуация такая. Время выключения команды (-MEMR, -MEMW) - минимальное для задатчика на шине - 125нс (один период SYSCLK=8МГц). Попробуй запретить задатчику (а именно PC104) запретить заниматься какими-либо делами вообще (запретить _все_ прерывания, в том числе и для часов, отключить регенерацию памяти, можно поиграть теневая/обычная, но видимо придется выключить :) и т.д.)
Следующие соображения отпишу позже.

forrest
Junior Member

Сообщений: 3
Откуда: Россия, Москва
Регистрация: Январь 2002

написано 18 Января 2002 17:39ИнфоПравкаОтветитьIP

Прерывания отключить ты имеешь ввиду из BIOS ? Потому как все маскируемые прерывания я и так программно отключаю, а что касается немаскируемых, то могу попробовать. Однако немаскируемые прерывания как правило обрабатываются например только при возникновении фатальной ошибки, к чему кстати может привести отключение регенерации памяти. Правда не совсем опять таки понимаю как отключить регенерацию, ведь сделать это можно только в режиме ПДП, став задатчиком на шине ? Хотел посоветоваться вот по какому вопросу. Не раз встречал указание, что длина проводников на шине не должна превышать 6 - 7 см. Я по старинке для проведения так сказать эксперимента собрал всю схему на куске пластика. Метод впринципе проверенный, так как аналогичным способом мне доводилось собирать вполне полноценный контроллер на Z80. Так вот мне пришлось соединить свой девайс с разъемом PC/104 куском от SCSI шлейфа и длина проводников получилась около 20 - 25 см. Могут ли влиять в таком случае помехи ? Специально прикупил макетную плату и буду сегодня завтра всё собирать по новой, правда на этот раз плата будет непосредственно подсоединяться к PC/104. А что касается переключения памяти теневая/обычная, то я уже пробовал. Но ведь что происходит при этом. Данные просто копируются из моей SRAM в RAM компьютера, а логика системной платы заставляет все программы думать, что при обращении к адресам D0000 : DFFFF они обращаются именно к SRAM, хотя реально идёт работа с памятью самого компьютера. Естественно скорость при этом такая же как при обработке любых команд по работе с нормальной памятью. На моём компе показало около 35 Мбайт/сек на процессоре National Geode GX1 300. При этом перестают генерироваться все сигналы включая адресные, BALE и т.п. То есть в затенённом режиме работать вообще не получается.

skunk
Злобный админ

Сообщений: 2342
Откуда: СССР, город-герой Ленинград
Регистрация: Ноябрь 2000

написано 18 Января 2002 18:31ИнфоПравкаОтветитьIP

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

длина проводников получилась около 20 - 25 см. Могут ли влиять в таком случае помехи
Конечно, чем короче - тем лучше. Но в твоем случае это на длительность цикла никак не влияет. Я для связи с PC104 использовал и длиннее проводники, причем через переходные разъемы (правда золотые).

Посмотрел циклы ПДП, даже если задатчиком на шине ты сделаешь свою плату, то -MEMW 650нс. В таких случаях лучше всего использовать какую-нибудь ПЛИСину, у которой выводы подключены ко всем контактам ISA. Было бы очень удобно экспериментировать, просто меняя проекты. Но в данный момент я просто уже не сомневаюсь, что тебе не получить требуемой скорости обмена.
И потом, у тебя данные идут непрерывно и терять ничего нельзя? Я через ISA никогда не работал в реальном времени. Обычно я делал буферную кадровую память с независимым доступом со стороны вводимых данных и ISA.

forrest
Junior Member

Сообщений: 5
Откуда: Россия, Москва
Регистрация: Январь 2002

написано 18 Января 2002 20:02ИнфоПравкаОтветитьIP

Я тоже не использую ISA для работы в реальном времени. Для этого собственно и существует буфер. В моём случае это две микросхемы SRAM. Пока в одну поступают внешние данные из второй производится считывание через ISA. Затем производится мультиплексирование и процесс повторяется. Каждый раз по заполнению одной из SRAM внешними данными девайс вырабатывает IRQ. Что касается ПЛИС, то думаю, что сначала надо заставить схему работать на простой логике, чтобы зря деньги не выкидывать. Если бы была готовая, заведомо рабочая схема, то можно было бы сразу использовать ПЛИС. Никак не пойму почему всё твоё внимание сосредоточено на ПДП, когда в том режиме, который я использую сейчас (16-разрядный доступ + 0WS) даже на данном этапе результаты получились не достигаемые в режиме ПДП. Мне интересно узнать из чего же складывается цикл глядя на диаграммы, если те суждения которые я приводил ранее не верны ? А проверить использует ли кто-то ещё ПДП в момент работы моего девайса - это я могу, достаточно будет посмотреть, что происходит с сигналом AEN. Однако думаю, что это ни к чему не приведёт, так как на моём компе наверное нечему использовать ПДП. В любом случае спасибо за интересную идею.

skunk
Злобный админ

Сообщений: 2345
Откуда: СССР, город-герой Ленинград
Регистрация: Ноябрь 2000

написано 18 Января 2002 22:32ИнфоПравкаОтветитьIP

сначала надо заставить схему работать на простой логике, чтобы зря деньги не выкидывать
Я не понимаю, ты что собираешь девайс дома на коленках? Ты больше времени тратишь на создание поделок. А время стоит гораздо дороже чем изготовить нормальную печать и сделать себе универсальную плату на основе ПЛИС для различных применений. Посмотри осциллографом длительность цикла, а также сигнал AEN и будь уверен, что он будет периодически в активном состоянии хотя бы из-за регенерации. Цикл обмена по шине у меня всегда был в пределах 700нс при любой организации обмена и пытаться его уменьшить мне даже не приходило в голову. Все же следует признать, что шина занимается на какие-то системные процессы. Ты точно уверен, что запретил абсолютно все системные прерывания?

Никак не пойму почему всё твоё внимание сосредоточено на ПДП, когда в том режиме, который я использую сейчас (16-разрядный доступ + 0WS) даже на данном этапе результаты получились не достигаемые в режиме ПДП.
Я в этом не уверен. По логике работы нормального цикла ПДП обмен должен быть все же быстрее чем обычный обмен с ВП или УВВ.

forrest
Junior Member

Сообщений: 6
Откуда: Россия, Москва
Регистрация: Январь 2002

написано 19 Января 2002 23:55ИнфоПравкаОтветитьIP

В машинном коде нет команды, которая разрешала или запрещала бы прерывания по выбору. Для этого потребовалось бы изменять таблицу векторов прерываний, чтобы заставить процессор при обработке какого-то конкретного IRQ выполнять пустой цикл, что впрочем в некоторых случаях бывает нужно. Однако есть команда CLI, которая полностью запрещает все маскируемые прерывания, в не зависимости от того клавиатура это или контроллер жёсткого диска. Я использую именно CLI. А то, что делает каждый BIOS, это аппаратная реализация запрета или разрешения каких либо прерываний, не доступная программам без использования специальных ухищрений. Как правило такие возможности реализуются через специальные порты ввода/вывода, номера которых у разных системных плат могут отличаться. Собственно для этого и пишутся BIOSы.
Что касается логики работы нормального цикла ПДП, то факты вещь упорная. Ты сам писал, что при ПДП только один -MEMW 650нс. В моём же случае среднее значение цикла 625нс. На первый взгляд правда может показаться, что 25нс разницы почувствовать нельзя. Однако если пересылать блок данных 80Мбайт, то есть 40млн. циклов, то это уже 1 секунда. Я же в своих экспериментах делал пересылку данных блоками по 2Гб. А это уже извините 25 секунд разницы.
Ещё раз подчеркну, что проблема с которой я столкнулся не связана с уменьшением среднего значения в 625нс. Для того, чтобы на частоте в 50МГц сосчитать количество импульсов за временной интервал в 500нс осцилограф не нужен. Да и простой осцилограф здесь не подойдёт, нужна полоса пропускания 100МГц, а стоит такой аппарат 2 - 3 тысячи у.ё. Я пока такими средствами не располагаю.
Так вот в момент пересылки блока данных в 2Гб я делал десятки разовых замеров длительности между двумя командами. Не думаю, что на шине есть что-то, использующее её ресурс с периодичностью моего девайса причём почти каждый раз именно между двумя командами, да так, что ни в одном описании по ISA об это никто не вспомнил.
А "почти", означает то, что иногда получалось именно 125нс. И потом как всё таки быть с указанием в разных источниках пропускной способности ISA в 5Мб/сек ?

skunk
Злобный админ

Сообщений: 2351
Откуда: СССР, город-герой Ленинград
Регистрация: Ноябрь 2000

написано 20 Января 2002 00:15ИнфоПравкаОтветитьIP

forrest
Да несерьезно все это. Смотри осциллографом что происходит на шине. Сразу отпадут все вопросы.

нужна полоса пропускания 100МГц, а стоит такой аппарат 2 - 3 тысячи у.ё
Это у тебя шутки такие? Вот, например, двухлучевик с полосой 100МГц - 4.000 руб.

forrest
Junior Member

Сообщений: 8
Откуда: Россия, Москва
Регистрация: Январь 2002

написано 20 Января 2002 00:31ИнфоПравкаОтветитьIP

Я и сам было думал для серьёзной работы обзавестись осцилографом. На радиорынке в митино пару раз интересовался. Минимальная цена 250 - 300 у.е. На днях заходил в "ЧИП и ДИП" (это один из самых крупных в Москве магазинов по продаже микросхем и т.п.). Специально уже смотрел применимо к возникшей ситуации. Цены были примерно такие: с частотой до 5МГц около 19тыс. руб, 20МГц около 59тыс. и 100МГц около 81тыс. Хотя быть может ещё и из-за того, что импорт. А на счёт поискать б/у мне как то мысль в голову не приходила, но спасибо за идею.

Ваш ответ:

Коды форума
Смайлики


Ник:    Пароль       
Отключить смайлики
Страницы: 1 2 3 4 5 6 7 8 9

Все время MSK

Склеить | Разбить | Закрыть | Переместить | Удалить

Новая тема | Написать ответ
Последние сообщения         
Перейти к:

Свяжитесь с нами | skunksworks.net

Copyright © skunksworks.net, 2000-2018

Разработка и техническая поддержка: skunksworks.net


Рейтинг@Mail.ru Яндекс.Метрика