Методы реализации устройства символьной обработки


Проектируемое устройство должно, во-первых, выполнять специализированные функции, связанные с символьной обработкой данных, а во-вторых, взаимодействовать с другими активными и пассивными компонентами системы через интерфейс PCI со строгим соответствием различным требованиям и стандартам. Эти две стороны функционирования устройства могут быть разделены. Таким образом, в устройстве можно выделить, как минимум, два структурных блока: интерфейсный и функциональный. Структурная схема приведена в документе ПГУ.096.031.01.Э1.

Назначение интерфейсной части – обеспечение взаимодействия с интерфейсом PCI, опознавание циклов шины, обращающихся к устройству, буферизация для смягчения временных требований, дешифрация команд шины с генерацией специальных сигналов, зависящих от типа цикла.

Собственно схема символьной обработки взаимодействует с системой только через блок сопряжения с интерфейсом. Функции его выводов должны соответствовать преобразованным сигналам интерфейса.

Для сопряжения с интерфейсом естественно использовать типовую схему контроллера, которая специально предназначена для сопряжения системного интерфейса и интерфейса некоторого периферийного устройства. Нужно выбрать такой вторичный интерфейс, который был бы значительно проще, чем PCI (иначе исчезает смысл в использовании дополнительной микросхемы), сохраняя все необходимые возможности, такие, как блочная пересылка, и не был специфичен для определённого вида периферийных устройств. В данном проекте применён контроллер PC Card, поддерживающий 16-разрядный интерфейс PCMCIA 2.1, так как он достаточно универсален (практически любое устройство ввода-вывода может быть оформлено как PC Card) и позволяет подключаемому устройству быть практически пассивным, так как захват шины и множественные пересылки могут осуществляться самим контроллером в режиме прямого доступа к памяти. При этом, несомненно, имеется возможность конфигурирования устройства, так как все платы PCMCIA нуждаются в идентификации и обладают специальной памятью атрибутов, доступ к которой также должен обеспечиваться контроллером.

Система конфигурации PCMCIA стандартизована, но соответствие этим соглашениям не является обязательным, так как доступ к устройству будет поддерживаться не стандартным программным интерфейсом для PC Card, а специализированным драйвером. Можно, например, задать структуру памяти атрибутов, аналогичную регистрам конфигурации PCI. В любом случае информация, записанная в памяти конфигурации устройства, практически не влияет на его аппаратную реализацию и, таким образом, также может быть от неё отделена. В результате устройство оказывается состоящим из трёх структурных блоков: контроллера, схемы символьной обработки и ПЗУ для постоянных данных атрибутов устройства. Объём запоминающего устройства 256 байт согласно спецификации Plug & Play. Выделение конфигурационной памяти в отдельную схему не означает, что все обращения будут перенаправляться на ПЗУ. Некоторые данные конфигурации, такие как базовый адрес устройства в пространстве ввода-вывода, могут быть изменяемыми, и для них нужно предусмотреть специальные внутренние регистры в функциональной микросхеме. Обращения к этим регистрам должны распознаваться схемой, то есть структура микросхемы и формат конфигурационных данных не являются полностью независимыми. Учитывая этот факт, а также небольшой объём ПЗУ, можно было бы не выделять память атрибутов в отдельный блок. При этом эффективность работы в конфигурационном адресном пространстве, возможно, была бы большей. Но обращения к постоянной памяти атрибутов, производящиеся только при инициализации устройства, не могут существенным образом повлиять на эффективность системы, и выбор был сделан в сторону упрощения функциональной микросхемы.

Основной структурной частью устройства является схема символьной обработки. Функции, которые она должна выполнять, описаны в задании на курсовой проект. Структура адресного пространства ввода-вывода определяется исходя из требуемых возможностей устройства. Строка, с которой производится сравнение, должна записываться непосредственно в память устройства. Признаком конца строки может служить, например, нулевой байт. Вообще, специальные символы было бы желательно хранить в некоторых регистрах конфигурации, чтобы иметь возможность изменять эти настройки, если в используемых форматах данных стандартные коды несут другую нагрузку. Но в данном проекте такие подстановки не предусмотрены. Начальный адрес строки, в которой производится поиск, записывается в специальный регистр адреса. Так как адрес на интерфейсе PCI является в общем случае 32-разрядным, а выбранный контроллер поддерживает 16-разрядные пересылки данных, этот регистр должен составляться из двух частей, одна из которых соответствует старшим разрядам адреса строки, а другая – младшим. Управление работой устройства производится через 8-разрядный регистр команд. Так как количество функций, выполняемых устройством, невелико, большинство разрядов этого регистра управляют различными настройками, такими, как генерация прерываний, возможность последовательного поиска нескольких вхождений подстроки, тип операции (замена или поиск). Один разряд разрешает приостановить или продолжить работу. Если устройство находится в состоянии поиска (не приостановлено), доступ к остальным регистрам должен быть запрещён. Регистр состояния отражает текущее состояние устройства и выполняемую операцию. Найденное вхождение передаётся

опрашивающему устройству через регистры адреса подстроки (два 16-разрядных регистра, один из которых содержит старшие, а другой младшие разряды адреса).

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

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

При рассмотрении режима замены найденного вхождения возникает проблема, связанная с возможной разницей в длине между заменяемой и заменяющей подстроками. Если они различаются, остаток строки нужно сдвигать. Когда заменяющая подстрока короче, это допустимо, хотя и затруднительно. Если же заменяющая строка длиннее, увеличивающаяся при каждой замене строка может выйти за пределы отведенной памяти и занять ячейки, относящиеся к другим данным, которые при этом будут потеряны. Такая ситуация может вызвать сбой в работе системы, так как подобные аппаратные операции с памятью никто не контролирует. Здесь возможно несколько выходов. Во-первых, можно наложить строгое ограничение: заменяемая и заменяющая подстроки должны быть всегда одинаковой длины. При этом схема должна быть очень простой, но сфера применения устройства сузилась бы настолько, что трудно было бы говорить о какой либо эффективности и оправданности затрат. Можно было бы ввести в схему блок контроля, которому задаётся зарезервированный под строку объем памяти и который проверил бы перед каждой заменой, не приведет ли она к переполнению. В данном проекте выбран средний, компромиссный вариант: подстроки могут быть разной длины, но новая, заменяющая, должна быть короче старой. При этом нужно производить сдвиги, но гарантируется, что это не приведет к опасному удлинению строки. Таким образом, в режиме замены в начале содержимое новой строки записывается по адресу, по которому была найдена старая, потом, конечная часть строки от конца старой подстроки переписывается сразу после вставленной подстроки.

Устройство обеспечивает также режим замены всех вхождений, когда любое найденное вхождение без генерации прерывания заменяется, а по окончании замены сразу же продолжается поиск, и этот цикл повторяется, пока не будет обнаружен конец строки.

Синхронизация устройства в общем случае может осуществляться двумя способами: с использованием сигнала на линии CLK интерфейса PCI или собственным синхросигналом, генерируемым некоторой схемой на плате. Так как взаимодействие с шиной PCI происходит посредством контроллера, преобразующего команды синхронного интерфейса PCI в асинхронные сигналы 16-разрядной PC Card, то не является необходимым задание всех действий устройства тактовым сигналом PCI. Однако поиск подстроки в тексте – процесс, нуждающийся в некоторой внешней синхронизации, так как всегда должны сопоставляться символы в соответствующих позициях двух строк, считываемые одновременно. При этом не требуется соблюдение или измерение каких-либо временных интервалов, а также строго задаваемая или постоянная частота. Поэтому наличие собственного генератора тактового сигнала не является целесообразным и блок синхронизации устройства должен осуществлять прямую передачу или кратное увеличение периода сигнала CLK.