Анализ на безопасность платы ТС2 ЦП ДЦ "Минск"

Характеристика основных компонентов для исследования цифровых схем. Порядок работы с системой моделирования. Особенности структуры компонентов моделирования цифровых схем, исследование платы на безопасность, разработка интерфейсной части и алгоритмов.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык русский
Дата добавления 12.07.2013
Размер файла 238,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Оглавление

  • Оглавление 1
    • Введение 2
  • 1. Структура системы моделирования 4
    • 1.1 Основные компоненты для исследования цифровых схем 4
    • 1.2 Порядок работы с системой моделирования 10
  • 2. Разработка новых компонентов 16
    • 2.1 Структура компонентов моделирования цифровых схем 16
    • 2.2 Разработка интерфейсной части компонента 17
    • 2.3 Разработка алгоритмов функционирования компонентов 17
  • 3. Исследование на безопасность платы ТС ЦП ДЦ Минск 18
    • 3.1 Назначение и принципы функционирования платы ТС2 19
    • 3.2 Разработка модели 20
  • 4. Разработка функции загрузки реальных параметров 21
  • Приложение А 22
  • Приложение В 27
    • Приложение С 40

Введение

цифровая схема моделирование интерфейсный

Одним из эффективных инструментов проверки безопасности системы (элементов) является физическое и (или) логическое (имитационное) моделирование. При физическом моделировании исследованию подвергается существующая система, что предопределяет отсутствие вопросов об адекватности и соответствии результатов моделирования истинным данным. Полученные результаты имеют ограниченное применение из-за малых возможностей физических экспериментов по изменению системы. Анализ процессов, происходящих в микроэлектронных устройствах, показывает, что реализация логической структуры, полученной непосредственно по результатам синтеза, не позволяет проверить работоспособное устройство из-за наличия состязаний, возникающих, например, из-за отсутствия строгой синхронизации входных сигналов или вследствие разброса временных параметров и порога чувствительности логических элементов. В этом случае целесообразно для исследования свойств разрабатываемых устройств применять логическое моделирование, представляющее собой процедуру реализации работы логической схемы с использованием ПЭВМ.

Испытания на машинных моделях по сравнению с другими видами испытаний позволяют:

обеспечивать ускоренные испытания в машинном времени;

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

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

организовать процедуры верификации ППО; откорректировать списки опасных отказов; собрать статистические данные по влиянию сбоев на безопасность;

организовать вероятностные эксперименты с машинными моделями систем большой размерности.

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

Имитационные испытания на машинных моделях, делятся на три вида:

испытания технологических алгоритмов;

моделирование работы аппаратных средств при сбоях и отказах;

испытания имитационной модели программно-технических средств.

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

Необходимо сделать возможным загрузку реальных параметров элементов ТТЛ и КМОП, для того чтобы имитационные испытания были наиболее приближены к реальным процессам, происходящим в микроэлектронных элементах.

Также необходимо сделать анализ на безопасность платы ТС2 ЦП ДЦ «Минск» в данном приложении, что станет возможным по выполнении вышеперечисленных задач.

1. Структура системы моделирования

1.1 Основные компоненты для исследования цифровых схем

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

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

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

Абстрактный базовый класс TGraphicControl1 (рисунок 1.2) обладает всеми перечисленными свойствами. В этом классе имеют реализацию только некоторые свойства (property), позволяющие устанавливать значения параметров элементов. Остальные свойства и методы присутствуют в описании только как полностью виртуальные функции (pure virtual functions), или «заглушки».

Для того, чтобы все элементы иерархии унаследовали способность отображать свое условное обозначение на форме, а также возможность взаимодействия с Инспектором Объектов (Object Inspector) C++ Builder, базовый абстрактный класс TGraphicControl1 нследуется от класса TGraphicControl. Этот класс является одним из ключевых базовых классов иерархии VCL (Visual Component Library). Графические компоненты, являющиеся наследниками класса TGraphicControl представляют собой видимые элементы управления, которые не могут принять фокус ввода, т.к. не являются оконными. Они не могут служить контейнерами для других элементов управления, т.е. не могут владеть другими компонентами. Графические компоненты обеспечивают отображение объектов без использования системных ресурсов, они требуют меньших «накладных расходов», нежели стандартные (находящиеся на вкладке Standard в C++ Builder) или адаптированные (наследники компонента TWinControl) компоненты. Таким образом, все элементы, являющиеся наследниками класса TGraphicControl1 получают возможность реагировать на сообщения Windows (такие как OnPaint, OnMouseMove) простым перекрытием соответствующих функций базового класса.

Отдельно от общей иерархии стоит компонент TExperimentManager (рисунок 1.2). Он является наследником одного из ключевых базовых классов иерархии VCL TWinControl. Использование в качестве родителя оконного компонента приведет к некоторому увеличению затрат ресурсов ЭВМ, так как компонентами данного типа используются системные ресурсы. Но такие меры оправданы, так как оконные (адаптированные) компоненты способны принимать фокус ввода и могут служить контейнерами, т.е. являться родителями других элементов управления. А это необходимо для взаимодействия с пользователем.

Компонент TExperimentManager выполняет функции блока управления экспериментом, а также интерфейсного блока, взаимодействующего с пользователем. Такой компонент может быть на форме только в единственном экземпляре. Этот элемент выполняет следующие функции:

чтение файла сценария посредством взаимодействия с объектом класса TTestFile (рисунок 1.2);

генерация комбинаций сбоев и отказов в зависимости от настроек, полученных из файла сценария;

введение неисправностей в элементы схемы;

подсчет тестового времени;

запуск в работу поочередно всех элементов схемы в каждом цикле работы;

протоколирование результатов работы модели схемы посредством взаимодействия с объектом вспомогательного класса TLogFile (рисунок 1.2).

Блок управления экспериментом содержит такие компоненты управления, как TEditBox, TLabel и TButton (рисунок 1.1). Эти компоненты управления позволяют изменять интервал дискретизации по времени, а также количество циклов тестирования.

Рисунок 1.1 - Интерфейс компонента «Блок управления экспериментом»

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

Приращение внутреннего времени во время тестирования будет производиться на величину интервала дискретизации. Таким образом, модель повторит работу реального устройства за время:

(1.1)

где N - число тактов;

tдискрет. - длительность такта (величина интервала дискретизации).

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

Также не является наследником основного базового класса иерархии элементов компонент TConnection. Этот элемент моделирует работу проводника, соединителя в электрической схеме. Он не должен обладать свойствами микроэлектронного элемента. Работа компонента заключается в моментальной передаче значения напряжения, поступившего на его вход. Рассмотрим описание такого компонента:

Вспомогательные сервисные классы (рисунок 1.2) служат для взаимодействия ПО с файловой системой (компоненты TLogFile и TSection), синтаксического разбора файлов конфигурации (компонент TatfParser), а также для упрощения работы со сложными структурами времени (TTestTimer). Эти классы не входят в общую иерархию элементов и не имеют родителей.

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

Класс управления работой программного счетчика времени с момента начала тестирования TTestTimer позволяет производить со структурами времени следующие операции:

суммирование двух переменных типа TTestTimer или TTestTimer и long;

вычитание двух переменных типа TTestTimer или TTestTimer и long;

увеличение времени на 1 пикосекунду;

уменьшение времени на 1 пикосекунду;

сравнение моментов времени;

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

Перечисленные операции реализуются при помощи механизма доопределения стандартных операторов для пользовательских классов.

Для работы с файлом протокола используются классы TLogFile и TSection. Формат файла повторяет формат стандартного ini-файла Windows. Необходимость создания собственного класса для работы с файлами в таком формате обусловлена ограничением длины стандартного файла величиной в 64 килобайта, что недопустимо, так как при длительном тестировании файлы протоколов могут быть значительно большего размера. Кроме того, тестирование показало, что специальный класс TLogFile обеспечивает гораздо более быстрый доступ к файлу протокола, чем это позволяют стандартные функции для работы с ini-файлами. Такой эффект в первую очередь обусловлен применением гибкой буферизации записи на диск и промежуточным размещением секций в различных файлах на диске.

Синтаксический анализ файла сценария осуществляется объектами класса TatfParser. Взаимодействие с объектами других классов осуществляется посредством одной функции Process():

void __fastcall Process(TGraphicControl1*,char*);

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

Создание объектов классов специального назначения и все последующие обращения к этим объектам производятся центральным компонентом библиотеки - «Блок управления экспериментом» (класс TExperimentManager).

Описанная иерархия классов позволяет не только упростить создание новых элементов, но и способствует уменьшению вероятности ошибок программистов, расширяющих библиотеку элементов. Наличие одного базового класса для всех видов базовых элементов позволяет обращаться к любому элементу через указатель на его родителя (базовый класс). Таким образом, нет необходимости в знании идентификатора каждого элемента. Это позволит упростить процедуру тестирования работы схемы и осуществлять ее в автоматическом режиме.

Рисунок 1.2 - Иерархия классов системы моделирования микроэлектронных устройств.

1.2 Порядок работы с системой моделирования

Использование программного обеспечения для создания и проведения испытаний имитационных машинных моделей состоит из следующих этапов:

установка библиотеки компонентов;

создание модели схемы;

написание файла сценария и параметров тестирования;

анализ результатов работы модели.

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

Компоненты находятся в отдельных закладках на панели C++Builder и поэтому пользователь может без особого труда построить схему. Работа схемы моделируется при помощи скрипта, находящегося в отдельном файле. Язык написания скрипта также очень прост и содержит всего несколько специализированных слов. Результаты обработки схемы также записываются в отдельный файл. Таким образом эти результаты можно либо просмотреть в цифровом варианте либо использовать построитель диаграмм, что позволяет наглядно проанализировать работу схемы на каждом временном интервале.

Блок управления экспериментом (TExperimentManager) осуществляет последовательный перебор всех элементов схемы и запуск функции Run() каждого элемента. В этой функции производится моделирование работы элемента, вычисление и выдача выходных воздействий с учетом параметров элемента, внутреннего состояния и входных воздействий.

Кратко рассмотрим этапы использования программного обеспечения:

При инсталляции библиотеки компонентов моделирования микроэлектронных систем СЖАТ происходит интеграция компонентов в среду разработки C++ Builder, что позволит при работе с этими компонентами использовать все возможности, предоставляемые средой разработки для работы с любыми компонентами: средства редактирования, визуального размещения, изменения свойств компонентов, отладки проектов, а также сохранения результатов работы.

Для правильной установки библиотеки необходимо произвести следующие операции (строго в той последовательности, в которой они изложены ниже):

удалить предыдущую версию библиотеки компонентов (если таковая была установлена) из C++ Builder IDE (Integrated Development Environment);

удалить скомпилированный ранее модуль Elements.bpl с жесткого диска;

удостовериться, что в настройках проекта (Project\Options\Linker) выключена опция линкера «Use dynamic RTL»;

открыть модуль Elements.bpk (меню File\Open);

использовать пункты меню «Project\Make...» или «Project\Build...» для компиляции модуля Elements.bpk;

поместить откомпилированный файл Elements.bpl в каталог, который доступен через переменную окружения %PATH% операционной системы;

после компиляции, необходимо установить модули времени проектирования (design-time packages) в окружении C++ Builder IDE. Это делается в диалоге «Packages», вызываемом при выборе пункта меню «Component\Install packages...», затем надо нажать кнопку «Add...», указать расположение файла Elements.bpl и нажать «OK» для интеграции модуля в IDE.

После установки библиотеки, компоненты, которые она содержит, можно будет использовать таким же образом, как и стандартные компоненты VCL. При необходимости расширения возможностей компонентов или добавления в библиотеку новых моделей микроэлектронных элементов, достаточно изменить исходный текст модуля, перекомпилировать проект (Elements.bpk) и выполнить пункт 6 описанного выше процесса инсталляции библиотеки.

Библиотека компонентов интегрируется в среду Borland C++ Builder. Поэтому для успешной работы в системе необходимо установить C++ Builder версии 4.0 или выше. Для создания новой схемы, необходимо в первую очередь создать новый проект (File\New Project) в C++ Builder, после чего размещать компоненты библиотеки на главной форме этого проекта. Размещение элементов на форме производится путем «перетаскивания» (drag&drop) их с панели компонентов C++ Builder. Компоненты, управляющие процессом тестирования, расположены во вкладке «Experiment Tools», соединители и другие вспомогательные компоненты - во вкладке «Base», комбинационные элементы - во вкладке «Elements», триггеры, регистры, счетчики и дешифраторы - во вкладке «Triggers».

Установка параметров конкретных элементов производится в Инспекторе Объектов (Object Inspector) C++ Builder путем изменения значений соответствующих свойств каждого элемента.

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

Модели соединений проводников (точки) размещаются на форме точно также как и модели микроэлектронных элементов. Как и все микроэлектронные элементы, точки владеют свойствами, установкой значений которых можно подсоединить к точке соединения до четырех линий (один вход - свойство «In» и три выхода - свойства «Out1», «Out2», «Out3»).

На форме должен быть размещен только один блок управления экспериментом.

Когда элементы расположены, необходимо откомпилировать проект. Полученный исполняемый файл - готовая к запуску в работу модель схемы. После запуска можно изменить значения шага дискретизации и количества циклов тестирования на панели блока управления экспериментом. После ввода этих значений необходимо нажать кнопку «Запуск». Начнется тестирование схемы.

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

Рисунок 1.3 - Пример окна состояния процесса тестирования

Об окончании тестирования свидетельствует окно сообщения (MessageBox).

Рисунок1.4 - Окно сообщения об окончании процесса тестирования

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

Файл сценария и параметров тестирования - это текстовый файл, созданный по определенным правилам, содержащий настройки автоматического режима тестирования и специальные блоки (сценарии или скрипты), позволяющие изменять ход автоматического тестирования или совсем не использовать автоматической генерации отказов элементов.

В процессе работы программы компонент TExperimentManager («Блок управления экспериментом») производит синтаксический анализ и выполнение команд, содержащихся в файле сценария. Эта процедура выполняется посредством взаимодействия с объектом класса TatfParser.

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

Сценарии (или скрипты) - это процедуры, которые выполняются над каждым элементом схемы в каждый момент времени на протяжении всего теста. После запуска программа ищет в файле конфигурации скрипт с именем «main» (в файле сценария определяется командой «script main»). Если такой блок не найден, выполнение сценария производиться не будет.

Команды, доступные в файле конфигурации:

set <переменная> <значение> - устанавливает переменную в значение. Если значение содержит пробелы, его необходимо заключать в кавычки. Если значение пробелов не содержит, то его можно заключать или не заключать в кавычки по желанию.

if <type|name|time> <тип элемента|имя элемента|время> - команда ветвления. Должна заканчиваться командой endif. Команда может содержать вложенные команды if. Глубина вложенности практически не ограничена.

exec <имя скрипта> - выполнить скрипт с именем <имя скрипта> и вернуться в точку вызова. Эта команда позволяет разбить сценарий на несколько и вызывать полученные отдельные скрипты из главного (main) и друг из друга (вложенность вызовов практически не ограничена).

script <имя скрипта> - начало области описания сценария с именем <имя скрипта>. Описание должно заканчиваться ключевым словом endscript.

Каждая строка комментария в файле должна начинаться с символа «;».

В процессе работы модели микроэлектронной схемы производится протоколирование выходных воздействий. Чтобы обозначить точки схемы, с которых будет производиться съем значений напряжения в каждом такте работы, необходимо к этой точке подключить компонент TTestDestination (вкладка «Experiment Tools»).

В файл протокола кроме выходных значений записываются также и значения напряжений, поступающие на входы схемы. В схему такие воздействия подаются посредством компонента TTestSource. Этот компонент получает значения тестовой последовательности от блока управления экспериментом (тот читает ее из файла сценария).

В обоих случаях протоколирование выходных (TTestSource) или входных (TTestDestination) значений этих специальных компонентов производится блоком управления экспериментом (TExperimentManager).

В зависимости от режима тестирования, заданного в файле сценария (tw.cfg), в подкаталоге LOG каталога программы в процессе работы появляются файлов с различными именами. По этим именам можно определить тип цикла, результаты которого находятся в этом файле:

CorrectRezult*.log - результаты тестирования схемы без сбоев и отказов;

ScriptOnlyRuns*.log - результат тестирования схемы без отказов, но с выполнением главного скрипта;

FaultRezult*.log - результат тестирования схемы с отказами.

2. Разработка новых компонентов

2.1 Структура компонентов моделирования цифровых схем

Описанная в пункте 1.1 иерархия классов (компонентов), моделирующих работу микроэлектронных устройств позволяет легко добавлять новые элементы. Новый класс автоматически унаследует общие свойства от своего родителя - базового класса.

Каждый компонент имеет следующие функции:

/* Удаление ссылок на линии. Эта функция отвечает за корректную работу с указателями на линии (модели проводников) после того, как таковые удаляются. Если не отследить факт удаления объекта типа TConnection, произойдет запись по несуществующему адресу, что вызовет сбой приложения. */

void __fastcall TElementInvertor::LineRemoved(TComponent* NameOfElement)

/*Функция рисования элемента */

void __fastcall TElementInvertor::Paint(void)

/*Функция установки связи входов с линиями*/

void __fastcall TElementInvertor::SetIn (TConnection* cl)

/*Функция установки связи выходами с линиями*/

void __fastcall TElementInvertor::SetOut (TConnection* cl)

/*Функция определяющая работу элемента*/

void __fastcall TElementInvertor::Run(void)

/*Функция обработки сбоя */

void __fastcall TElementInvertor::ErrorRun(void)

/* Функция моделирует работу объекта при возникновении отказа, тип и длительность которого указываются в соответствующих свойствах компонента. */

void __fastcall TElementInvertor::FailRun(void)

Однако каждый тип элементов имеет индивидуальное изображение и алгоритм работы. Поэтому необходимо каждый раз при создании нового элемента переопределять соответствующие функции. Функция Paint() отвечает за графическое отображение элемента схемы, его перерисовку по требованию операционной системы. Алгоритм работы элемента моделируется функцией Run().

2.2 Разработка интерфейсной части компонента

За рисование и перерисовку компонента на форме отвечает функция Paint(). Она является реакцией на сообщение Windows OnPaint. Эта функция уникальна для каждого компонента. Конкретную реализацию данной функции рассмотрим на примере счетчика ИЕ2 в приложении А.

2.3 Разработка алгоритмов функционирования компонентов

Разработку таких алгоритмов рассмотрим на примере того же счетчика ИЕ2 (Рисунок 2.1). Листинги программ разработки функции Run() по данному алгоритму и алгоритму работы мультиплексора приведены в приложении В.

Рисунок 2.1 - Алгоритм функционирования счетчика

3. Исследование на безопасность платы ТС ЦП ДЦ Минск

3.1 Назначение и принципы функционирования платы ТС2

Алгоритм работы платы ТС2 заключается в следующем. В начале приема первого активного такта группы к моменту поступления стробирующего импульса на входе DR сдвигового регистра будет потенциал “1”. При поступлении второго такта потенциал “1” переписывается во второй триггер регистра, а в первый записывается качество второго такта и т.д. до окончания группы. Если группа принята полностью, то в момент начала интервала между группами на выходах Q0 и Q21 платы ТС2 будут потенциалы “1”, которые дают разрешение на реализацию информации, записанной в регистре.

Таким образом, наличие потенциалов “1” в старшем и младшем разрядах сдвигового регистра является признаком правильно принятой информации. Дополнительный контроль достоверности приема не производится.

Алгоритм функционирования платы ТС заключается в преобразовании последовательного 22-х разрядного кода в параллельный. Поэтому тестовая последовательность должна иметь длину 22 разряда. Первый и последний разряд имеют фиксированные значения, равные логической единице, остальные могут принимать любые значения. Таким образом, если испытывать плату на всем множестве входных воздействий, то потребуется выполнить 220 испытаний, что нереально. Следовательно, требуется сократить объем теста, но при этом обеспечить достаточную полноту проверки.

Для оценки полноты функционального теста используют различные критерии:

проверку всех классов входных данных;

проверку всех классов выходных данных;

проверку всех функций;

проверку всех ограничений и правил и т.п.

В связи с тем, что плата ТС реализует одну функцию преобразования данных из последовательного формата в параллельный, то можно применить два первых требования для построения тестовых последовательностей. Это позволяет сократить число испытаний до четырех. Испытания проводились для тестовых последовательностей, представляющих собой чередующиеся значения “0” и “1”. Значения первого и последнего разрядов равны “1”.

- 1101010101010101010101;

- 1010101010101010101011;

3.2 Разработка модели

Рисунок 2.2 - Модель Платы ТС2

Разработка модели в системе моделирования сводится к построению схемы (Рисунок 2.2) на основе библиотеки компонентов и к написанию скрипта, задающего режим работы этой схемы.

4. Разработка функции загрузки реальных параметров

Функция загрузки реальных параметров разработана на основе написанного базового класса TgrapthicControl1 и позволяет загружать реальные параметры того или иного компонента в зависимости от серии. В Инспекторе Объектов появляется еще одно свойство SERIAL, которое позволяет выбирать ту или иную серии (на данном этапе возможен выбор только К155 и КМОП). Побочно с этим в соответствии с выбранной микросхемой подгружаются параметры, которые непосредственно зависят от серии (напряжение питания микросхемы, время нарастания (спада) импульса, напряжение единицы (нуля)… ). Свойства общие для всех компонентов прописаны в базовом классе. Также существует возможность описывать свойства присущие только одному компоненту. В этом случае это свойство описывается непосредственно в программной реализации компонента(как это сделано для мультивибратора (длительность выходного импульса).

В TGrapthicControl1 свойство(позволяющее выбрать определенный тип микросхемы), посредством которого осуществляется доступ Инспектора Объектов, а также различных компонентов схемы к переменным, описанным в секции protected выглядит следующим образом:

__property TGraphicControl1SERIAL SERIAL = { read = FSERIAL,write = SetSERIAL,default = NULL };

Функция обработки этого свойства представлена в приложении С.

Приложение А

Модуль: Счетчик ИЕ2

Имя файла: ct2.cpp

Автор: Кузнецова О.А

Описание: Реализация функции Paint () класса Tct2

Назначение: Разработка интерфейсной части компонента

void __fastcall Tct2::Paint(void) {

XC0In = XC1In = X2In = X3In = X6In = X7In = 0;

YC0In = 0.5*div((Height-Canvas->TextHeight("D")),4).quot + Canvas->TextHeight("D");

YC1In = div((Height-Canvas->TextHeight("D")),4).quot + Canvas->TextHeight("D");

Y2In = 1.5*div((Height-Canvas->TextHeight("D")),4).quot + Canvas->TextHeight("D");

Y3In = 2*div((Height-Canvas->TextHeight("D")),4).quot + Canvas->TextHeight("D");

Y6In = 2.5*div((Height-Canvas->TextHeight("D")),4).quot + Canvas->TextHeight("D");

Y7In = 3*div((Height-Canvas->TextHeight("D")),4).quot + Canvas->TextHeight("D");

YR0In = Y2In+(Y3In-Y2In)/2;

YR9In = Y6In+(Y7In-Y6In)/2;

Y3CircleCenter=YR0In;

Y4CircleCenter=YR9In;

Y1CircleCenter=YC0In;

Y2CircleCenter=YC1In;

X1CircleCenter=X2CircleCenter=OutletLength+60;

X3CircleCenter=X4CircleCenter=OutletLength+30;

Canvas->Pen->Color = clWindowText;

Canvas->Brush->Color = clWindow;

Canvas->Rectangle(OutletLength + 60, (Canvas->TextHeight("D")+1), Width-OutletLength,Height);

Canvas->Rectangle(OutletLength, Y2In-10, OutletLength+30,Y3In+10);

Canvas->Rectangle(OutletLength, Y6In-10, OutletLength+30,Y7In+10);

Canvas->TextOut((Width-45-OutletLength),(5+Canvas->TextHeight("CT2")),"CT2");

Canvas->TextOut(OutletLength+15,Y2In,"&");

Canvas->TextOut(OutletLength+15,Y6In,"&");

Canvas->TextOut(OutletLength + 63, YC0In - div(Canvas->TextHeight("C0"),2).quot,"C0");

Canvas->TextOut(OutletLength + 63, YC1In - div(Canvas->TextHeight("C1"),2).quot,"C1");

Canvas->TextOut(OutletLength + 63, YR0In - div(Canvas->TextHeight("R0"),2).quot,"R0");

Canvas->TextOut(OutletLength + 63, YR9In - div(Canvas->TextHeight("R9"),2).quot,"R9");

Canvas->MoveTo(OutletLength + 70 + Canvas->TextWidth("R"), Canvas->TextHeight("D") + 1);

Canvas->LineTo(OutletLength + 70 + Canvas->TextWidth("R"), Height);

Canvas->MoveTo(Width - 25 -OutletLength + Canvas->TextWidth("S"), Canvas->TextHeight("D") + 1);

Canvas->LineTo(Width - 25 -OutletLength + Canvas->TextWidth("S"), Height);

X1Out=X2Out=X4Out=X8Out=Width-OutletLength;

Y1Out = Canvas->TextHeight("D") + 0.5*div((Height-Canvas->TextHeight("D")),3).quot;

Y2Out = Canvas->TextHeight("D") + div((Height-Canvas->TextHeight("D")),3).quot;

Y4Out = Canvas->TextHeight("D") + 1.5*div((Height-Canvas->TextHeight("D")),3).quot;

Y8Out = Canvas->TextHeight("D") + 2*div((Height-Canvas->TextHeight("D")),3).quot;

Canvas->TextOut(Width - 10-OutletLength, Y1Out - div(Canvas->TextHeight("1"),2).quot,"1");

Canvas->TextOut(Width - 10-OutletLength, Y2Out- div(Canvas->TextHeight("2"),2).quot,"2");

Canvas->TextOut(Width - 10-OutletLength, Y4Out - div(Canvas->TextHeight("4"),2).quot,"4");

Canvas->TextOut(Width - 10-OutletLength, Y8Out - div(Canvas->TextHeight("8"),2).quot,"8");

Canvas->Brush->Color = clBtnFace;

Canvas->TextOut(OutletLength, 0, FSymbol);

Canvas->MoveTo(X1Out, Y1Out);

Canvas->LineTo(Width, Y1Out);

Canvas->MoveTo(X2Out, Y2Out);

Canvas->LineTo(Width, Y2Out);

Canvas->MoveTo(X4Out, Y4Out);

Canvas->LineTo(Width, Y4Out);

Canvas->MoveTo(X8Out, Y8Out);

Canvas->LineTo(Width, Y8Out);

Canvas->MoveTo(X3CircleCenter+30, Y3CircleCenter);

Canvas->LineTo(X3CircleCenter, Y3CircleCenter);

Canvas->MoveTo(X4CircleCenter+30, Y4CircleCenter);

Canvas->LineTo(X4CircleCenter, Y4CircleCenter);

Canvas->MoveTo(XC0In+OutletLength+60, YC0In);

Canvas->LineTo(XC0In, YC0In);

Canvas->MoveTo(XC1In+OutletLength+60, YC1In);

Canvas->LineTo(XC1In, YC1In);

Canvas->MoveTo(X2In+OutletLength, Y2In);

Canvas->LineTo(X2In, Y2In);

Canvas->MoveTo(X3In+OutletLength, Y3In);

Canvas->LineTo(X3In, Y3In);

Canvas->MoveTo(X6In+OutletLength, Y6In);

Canvas->LineTo(X6In, Y6In);

Canvas->MoveTo(X7In+OutletLength, Y7In);

Canvas->LineTo(X7In, Y7In);

Canvas->Brush->Color = clWindow;

Canvas->Ellipse(X1CircleCenter-4, Y1CircleCenter-4,

X1CircleCenter+4, Y1CircleCenter+4);

Canvas->Ellipse(X2CircleCenter-4, Y2CircleCenter-4,

X2CircleCenter+4, Y2CircleCenter+4);

Canvas->Ellipse(X3CircleCenter-4, Y3CircleCenter-4,

X3CircleCenter+4, Y3CircleCenter+4);

Canvas->Ellipse(X4CircleCenter-4, Y4CircleCenter-4,

X4CircleCenter+4, Y4CircleCenter+4);

if(InC0Connected){

FInC0->XOut = XC0In+Left;

FInC0->YOut = YC0In+Top;

}

if(InC1Connected){

FInC1->XOut = XC1In+Left;

FInC1->YOut = YC1In+Top;

}

if(In2Connected){

FIn2->XOut = X2In+Left;

FIn2->YOut = Y2In+Top;

}

if(In3Connected){

FIn3->XOut = X3In+Left;

FIn3->YOut = Y3In+Top;

}

if(In6Connected){

FIn6->XOut = X6In+Left;

FIn6->YOut = Y6In+Top;

}

if(In7Connected){

FIn7->XOut = X7In+Left;

FIn7->YOut = Y7In+Top;

}

if(Out1Connected) {

F1Out->XIn = Width+Left;

F1Out->YIn = Y1Out+Top;

}

if(Out2Connected) {

F2Out->XIn = Width+Left;

F2Out->YIn = Y2Out+Top;

}

if(Out4Connected) {

F4Out->XIn = Width+Left;

F4Out->YIn = Y4Out+Top;

}

if(Out8Connected) {

F8Out->XIn = Width+Left;

F8Out->YIn = Y8Out+Top;

}

}

Приложение В

Модуль: Счетчик

Имя файла: ct2.cpp

Автор: Кузнецова О.А.

Описание: Реализация функции Run ()

Назначение: Моделирование работы счетчика

void __fastcall Tct2::Run(void)

{

if (!InC0Connected || !InC1Connected || !In3Connected || !In2Connected || !In6Connected || !In7Connected ||!Out1Connected ||!Out2Connected ||!Out4Connected ||!Out8Connected) return;

TTestTimer tmp;

if ((FerrType != etNone) || (ErrTimeRest > tmp)) { ErrorRun(); return; }

if ((FfltType != etNone) || (ErrTimeRest > tmp)) { FailRun(); return; }

if ((FInC0->Value >= epThreshold1) && LogicInputC0) {

LogicInputC0=false;

Modify=true;

}

else

if ((FInC0->Value <= epThreshold0) && !LogicInputC0) {

LogicInputC0=true;

Modify=true;

Chang1=true;

k++;

}

if ((FInC1->Value >= epThreshold1) && LogicInputC1) {

LogicInputC1=false;

Modify=true;

}

else

if ((FInC1->Value <= epThreshold0) && !LogicInputC1) {

LogicInputC1=true;

Modify=true;

Chang2=true;

}

if ((FIn2->Value >= epThreshold1) && !LogicInput2) {

LogicInput2=true;

Modify=true;

}

else

if ((FIn2->Value <= epThreshold0) && LogicInput2) {

LogicInput2=false;

Modify=true;

}

if ((FIn3->Value >= epThreshold1) && !LogicInput3) {

LogicInput3=true;

Modify=true;

}

else

if ((FIn3->Value <= epThreshold0) && LogicInput3) {

LogicInput3=false;

Modify=true;

}

if ((FIn6->Value >= epThreshold1) && !LogicInput6) {

LogicInput6=true;

Modify=true;

}

else

if ((FIn6->Value <= epThreshold0) && LogicInput6) {

LogicInput6=false;

Modify=true;

}

if ((FIn7->Value >= epThreshold1) && !LogicInput7) {

LogicInput7=true;

Modify=true;

}

else

if ((FIn7->Value <= epThreshold0) && LogicInput7) {

LogicInput7=false;

Modify=true;

}

LogicInputR9=!(LogicInput6*LogicInput7);

LogicInputR0=!(LogicInput2*LogicInput3);

if (!LogicInputR9)

{

if(!LogicInputR0)

{

if (Chang1)

{Chang1=false;

if(k!=0 && k!=10)

if (k%8==0)

{

LogicOutput8=!LogicOutput8;

LogicOutput4=!LogicOutput4;

LogicOutput2=!LogicOutput2;

LogicOutput1=!LogicOutput1;

goto metka;

}

else

if (k%4==0)

{

LogicOutput4=!LogicOutput4;

LogicOutput2=!LogicOutput2;

LogicOutput1=!LogicOutput1;

goto metka;

}

else

if (k%2==0)

{

LogicOutput2=!LogicOutput2;

LogicOutput1=!LogicOutput1;

goto metka;

}

else

{

LogicOutput1=!LogicOutput1;

goto metka;

}

else

if (k==10){k=0;goto metka1;}

}

}

else

{

LogicOutput1=true;

LogicOutput2=false;

LogicOutput4=false;

LogicOutput8=true;

}

}

else

{

metka1: LogicOutput1=false;

LogicOutput2=false;

LogicOutput4=false;

LogicOutput8=false;

}

metka:

if(Modify)

{

CurrentTimeHold=0;

Modify = false;

}

if (CurrentTimeHold <= tpTimeHold*1000)

CurrentTimeHold += TimeDigit;

else

{

if (Out1Connected)

{

if (LogicOutput1&&(F1Out->Value < FepVolt1))

F1Out->Value += (FepVolt1 - FepVolt0) * TimeDigit / (1000 * tpTimeTrans01);

else

if ((!LogicOutput1)&&(F1Out->Value > FepVolt0))

{

F1Out->Value -= (FepVolt1 - FepVolt0) * TimeDigit / (1000 * tpTimeTrans10);

if (F1Out->Value<0) F1Out->Value = 0;

}

}

if (Out2Connected)

{

if (LogicOutput2&&(F2Out->Value < FepVolt1))

F2Out->Value += (FepVolt1 - FepVolt0) * TimeDigit / (1000 * tpTimeTrans01);

else

if ((!LogicOutput2)&&(F2Out->Value > FepVolt0))

{

F2Out->Value -= (FepVolt1 - FepVolt0) * TimeDigit / (1000 * tpTimeTrans10);

if ((F2Out->Value)<0) F2Out->Value = 0;

}

}

if (Out4Connected)

{

if (LogicOutput4&&(F4Out->Value < FepVolt1))

F4Out->Value += (FepVolt1 - FepVolt0) * TimeDigit / (1000 * tpTimeTrans01);

else

if ((!LogicOutput4)&&(F4Out->Value > FepVolt0))

{

F4Out->Value -= (FepVolt1 - FepVolt0) * TimeDigit / (1000 * tpTimeTrans10);

if ((F4Out->Value)<0) F4Out->Value = 0;

}

}

if (Out8Connected)

{

if (LogicOutput8&&(F8Out->Value < FepVolt1))

F8Out->Value += (FepVolt1 - FepVolt0) * TimeDigit / (1000 * tpTimeTrans01);

else

if ((!LogicOutput8)&&(F8Out->Value > FepVolt0))

{

F8Out->Value -= (FepVolt1 - FepVolt0) * TimeDigit / (1000 * tpTimeTrans10);

if ((F8Out->Value)<0) F8Out->Value = 0;

}

}

}

}

Модуль: Мультиплексор

Имя файла: kp7.cpp

Автор: Кузнецова О.А.

Описание: Реализация функции Run ()

Назначение: Моделирование работы мультиплексора

void __fastcall Tkp7::Run(void)

{

if (!In1Connected || !In2Connected || !In3Connected || !In4Connected || !In5Connected || !In6Connected || !In7Connected || !In8Connected || !InAConnected || !InBConnected || !InCConnected || !InStrobConnected || !OutPosConnected || !OutNegConnected) return;

TTestTimer tmp;

if ((FerrType != etNone) || (ErrTimeRest > tmp)) { ErrorRun(); return; }

if ((FfltType != etNone) || (ErrTimeRest > tmp)) { FailRun(); return; }

if ((FIn1->Value >= epThreshold1) && !LogicInput1) {

LogicInput1=true;

Modify=true;

}

else

if ((FIn1->Value <= epThreshold0) && LogicInput1) {

LogicInput1=false;

Modify=true;

}

if ((FIn2->Value >= epThreshold1) && !LogicInput2) {

LogicInput2=true;

Modify=true;

}

else

if ((FIn2->Value <= epThreshold0) && LogicInput2) {

LogicInput2=false;

Modify=true;

}

if ((FIn3->Value >= epThreshold1) && !LogicInput3) {

LogicInput3=true;

Modify=true;

}

else

if ((FIn3->Value <= epThreshold0) && LogicInput3) {

LogicInput3=false;

Modify=true;

}

if ((FIn4->Value >= epThreshold1) && !LogicInput4) {

LogicInput4=true;

Modify=true;

}

else

if ((FIn4->Value <= epThreshold0) && LogicInput4) {

LogicInput4=false;

Modify=true;

}

if ((FIn5->Value >= epThreshold1) && !LogicInput5) {

LogicInput5=true;

Modify=true;

}

else

if ((FIn5->Value <= epThreshold0) && LogicInput5) {

LogicInput5=false;

Modify=true;

}

if ((FIn6->Value >= epThreshold1) && !LogicInput6) {

LogicInput6=true;

Modify=true;

}

else

if ((FIn6->Value <= epThreshold0) && LogicInput6) {

LogicInput6=false;

Modify=true;

}

if ((FIn7->Value >= epThreshold1) && !LogicInput7) {

LogicInput7=true;

Modify=true;

}

else

if ((FIn7->Value <= epThreshold0) && LogicInput7) {

LogicInput7=false;

Modify=true;

}

if ((FIn8->Value >= epThreshold1) && !LogicInput8) {

LogicInput8=true;

Modify=true;

}

else

if ((FIn8->Value <= epThreshold0) && LogicInput8) {

LogicInput8=false;

Modify=true;

}

if ((FInStrob->Value >= epThreshold1) && !LogicInputStrob) {

LogicInputStrob=true;

Modify=true;

}

else

if ((FInStrob->Value <= epThreshold0) && LogicInputStrob) {

LogicInputStrob=false;

Modify=true;

}

if ((FInA->Value >= epThreshold1) && !LogicInputA) {

LogicInputA=true;

Modify=true;

}

else

if ((FInA->Value <= epThreshold0) && LogicInputA) {

LogicInputA=false;

Modify=true;

}

if ((FInB->Value >= epThreshold1) && !LogicInputB) {

LogicInputB=true;

Modify=true;

}

else

if ((FInB->Value <= epThreshold0) && LogicInputB) {

LogicInputB=false;

Modify=true;

}

if ((FInC->Value >= epThreshold1) && !LogicInputC) {

LogicInputC=true;

Modify=true;

}

else

if ((FInC->Value <= epThreshold0) && LogicInputC) {

LogicInputC=false;

Modify=true;

}

if (!LogicInputStrob)

{

LogicPosOutput=LogicInput1*!LogicInputA*!LogicInputB*!LogicInputC+LogicInput2*LogicInputA*!LogicInputB*!LogicInputC+LogicInput3*!LogicInputA*LogicInputB*!LogicInputC+LogicInput4*LogicInputA*LogicInputB*!LogicInputC+LogicInput5*!LogicInputA*!LogicInputB*LogicInputC+LogicInput6*LogicInputA*!LogicInputB*LogicInputC+LogicInput7*!LogicInputA*LogicInputB*LogicInputC+LogicInput8*LogicInputA*LogicInputB*LogicInputC;

LogicNegOutput=!LogicPosOutput;

}

else

{

LogicPosOutput=false;

LogicNegOutput=true;

}

if(Modify)

{

CurrentTimeHold=0;

Modify = false;

}

if (CurrentTimeHold <= tpTimeHold*1000)

CurrentTimeHold += TimeDigit;

else

{

if (OutPosConnected)

{

if (LogicPosOutput&&(FPosOut->Value < FepVolt1))

FPosOut->Value += (FepVolt1 - FepVolt0) * TimeDigit / (1000 * tpTimeTrans01);

else

if ((!LogicPosOutput)&&(FPosOut->Value > epVolt0))

{

FPosOut->Value -= (FepVolt1 - FepVolt0) * TimeDigit / (1000 * tpTimeTrans10);

if (FPosOut->Value<0) FPosOut->Value = 0;

}

}

if (OutNegConnected)

{

if (LogicNegOutput&&(FNegOut->Value < FepVolt1))

FNegOut->Value += (FepVolt1 - FepVolt0) * TimeDigit / (1000 * tpTimeTrans01);

else

if ((!LogicNegOutput)&&(FNegOut->Value > epVolt0))

{

FNegOut->Value -= (FepVolt1 - FepVolt0) * TimeDigit / (1000 * tpTimeTrans10);

if ((FNegOut->Value)<0) FNegOut->Value = 0;

}

}

}

}

Приложение С

void __fastcall TGraphicControl1 :: Setep_Volt1(TGraphicControl1ep_Volt1 Aep_Volt1)

{

if (FSERIAL==k155)

{

Fep_Volt1=Aep_Volt1;

if (Fep_Volt1==low){SetParam(low);FepVolt1=2.4;}else{if(Fep_Volt1==high){SetParam(high);;FepVolt1=4.8;}}

}

else

{FepVolt1=2.4;SetParam(No);}

Invalidate();

}

void __fastcall TGraphicControl1 :: SetSERIAL(TGraphicControl1SERIAL ASERIAL)

{

FSERIAL=ASERIAL;

if (FSERIAL==k155)

{

FepPowerSupplyVoltage = 5; // Напряжение питания микросхемы

FepMaxInputVoltage = 10; // Максимально допустимое входное напряжение

FepThreshold0 = 0.2;

FepThreshold1 = 4.8; // Пороговое напряжение 0 и 1 на входе

FepVolt0 = 0.1; // Выходное напряжение 1 (не менее) и 0 (не более)

FtpTimeHold = 8; // Время задержки

FtpTimeTrans01 = 3;

FtpTimeTrans10 = 3; /* (Time of transition)*/

}

else

if (FSERIAL==kmop)

{

FepPowerSupplyVoltage = 5;

FepMaxInputVoltage = 18;

FepThreshold0 = 0.4;

FepThreshold1 = 3.2;

FepVolt1 = 5;

FepVolt0 = 0.1;

FtpTimeHold = 10;

FtpTimeTrans01 = 3;

FtpTimeTrans10 = 3;

}

else

{

FepPowerSupplyVoltage = 5;

FepMaxInputVoltage = 15;

FepThreshold0 = 0.4;

FepThreshold1 = 2.4;

FepVolt1 = 5;

FepVolt0 = 0;

FtpTimeHold = 10;

FtpTimeTrans01 = 5;

FtpTimeTrans10 = 6;

}

Invalidate();

}

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.