ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ имени академика С.П. КОРОЛЁВА (СГАУ)» Факультет информатики Кафедра информационных систем и технологий ПОЯСНИТЕЛЬНАЯ ЗАПИСКА к курсовой работе на тему: Редактор логических и интегральных схем Выполнил: студент группы 6201 Артамонов Ю.С. Проверил: Симонова Е.В. Самара 2010 Задание Редактор логических и интегральных схем Реализовать программу - редактор логических схем ТТЛ логики, позволяющий собрать схему из базовых элементов и провести её тестирование с различными входными сигналами, результаты выполнения должны быть представлены в виде диаграммы сигналов на выбранных элементах схемы. Программа должна позволять создание сложных элементов на основе собранных схем, которые в дальнейшем можно использовать в других схемах в качестве составляющих. 2 РЕФЕРАТ Курсовая работа. Пояснительная записка: 37 с., 12 рис., 1 таблица, 1 приложение, 1 источник. ЛОГИЧЕСКИЕ ЭЛЕМЕНТЫ ТТЛ ЛОГИКИ, ПОСТРОЕНИЕ ЛОГИЧЕСКИХ СХЕМ, ПЕРЕДАЧА СИГНАЛОВ В СХЕМЕ, СЕРИАЛИЗАЦИЯ СХЕМЫ И СОСТАВНЫХ ЭЛЕМЕНТОВ. ДИЗАЙНЕР МИКРОСХЕМ. Разработана программа для создания логических схем, позволяющая создавать схемы и проводить их запуск с выводом результатов выполнения в виде диаграммы сигналов. В программу входит редактор сложных элементов, который создаёт составные элементы для последующего их использования в схемах. Язык программирования – C#, XML. Операционные системы: MS Windows, Linux 2.6.30. Платформы выполнения: .Net 2.0, Mono 2.0. 3 Содержание Задание.............................................................................................................................. 2 РЕФЕРАТ ......................................................................................................................... 3 1 Обоснование и выбор метода решения ................................................................... 5 2 Описание программы ................................................................................................ 6 3 2.1 Общие сведения .................................................................................................. 6 2.2 Функциональное назначение ............................................................................. 6 2.3 Описание логической структуры программы .................................................. 7 2.4 Описание физической структуры программы ................................................. 7 2.1 Основные алгоритмы программы ..................................................................... 9 Руководство пользователя...................................................................................... 11 3.1 Структура и подготовка входных данных ..................................................... 11 3.2 Выполнение программы................................................................................... 11 3.3 Описание пользовательского интерфейса ...................................................... 13 3.4 Описание структуры выходных данных ........................................................ 14 3.5 Пример работы программы ............................................................................. 14 Список использованных источников .......................................................................... 18 Приложение А................................................................................................................ 19 4 1 Обоснование и выбор метода решения В работе были опробованы три алгоритма передачи сигналов между элементами в логических схемах: 1. Функциональный (событийный) алгоритм – основывается на немедленном срабатывании элемента после изменения входных сигналов. Позволяет хорошо моделировать функциональные схемы. Главный недостаток алгоритма состоит в невозможности реализации элементов с памятью. 2. Волновой алгоритм – все элементы выполняют свои функции итеративно. Главный недостаток – необходимость прохода элементов, не выполняющих никаких функций: узлов и проводов. 3. Гибридный (событийно-волновой) – алгоритм, последовательно выполняющий выполнение работы и отправку сигналов на функциональных элементах, пока состояние схемы не прекратит меняться, а элементы-соединения отправляют сигналы по срабатыванию событий. В качестве алгоритма выполнения схем был выбран гибридный алгоритм, который совмещает достоинства волнового и событийного алгоритмов. Он позволяет организовывать схемы любой сложности: с памятью, составными элементами, генераторами сигналов и соединителями. Он совмещает в себе требуемую универсальность и скорость. Требования по скорости: менее 1 с на 1024 такта по 20 условных наносекунд, итого 20480 проходов цикла выполнения. 5 2 Описание программы 2.1 Общие сведения Наименование программного средства: MicroDesigner - дизайнер логических схем. Программное обеспечение, необходимое для его функционирования: Операционная система MS Windows, платформа .Net 2.0 и выше Операционная система Linux 2.6.30, платформа Mono 2.0 и выше Аппаратное обеспечение, необходимое для функционирования программы: IBM совместимый компьютер 1000 MHz процессор и выше 256 MiB оперативной памяти Видеокарта с 128 MiB памяти Монитор Клавиатура Мышь Объём программы и ресурсов: 2 MiB 2.2 Функциональное назначение Программа позволяет осуществить весь цикл создания и выполнения логических схем, включая сохранение схем и разработку новых элементов. Дизайнер схемы имеет набор инструментов, для создания схемы, соединения элементов, выделения их и добавления подписей на схему. После создания схемы необходимо задать список наблюдения и запустить выполнение схемы. Максимально возможно 1024 такта выполнения, ограничение выставлено для фиксированного размера источников сигнала. Максимальная глубина такта - 512 условных наносекунд, она ограничена для скорости выполнения такта. Ограничения возникают из-за использования прекомпилируемого языка C#. Схема и новые элементы сохраняются в xml файлы, которые могут быть просто использованы другими программами при необходимости. Для примера создан шаблон XSLT, позволяющий представить любой файл элемента в виде HTML страницы. 2.3 Описание логической структуры программы Рисунок 2.1 - Схема базовых типов Четыре уровня логики: BaseElement - базовый элемент для расположения на схеме CircuitElement - элементы, имеющие соединения RealElement - функциональные элементы с задержками CompositeElement - составные элементы, включающие в себя схемы Целесообразность выбора такой структуры обусловлена следующим: Максимальная абстракция, что позволяет добавлять элементы как плагины к программе. Все элементы наследуют один класс, это делает простым обращение к свойствам элементов на холсте рисования. Простое добавление функциональных элементов: необходимо создать файл разметки пинов и в классе элемента реализовать функцию ComputeSignal. 2.4 Описание физической структуры программы Логически программа разделена на 3 библиотеки и 1 исполняемый модуль: BaseObjects - библиотека базовых объектов схемы Содержит объекты: Схема (ObjectManager), Базовый объект (BaseObject), пин (PIN), провод (Wire), элемент с пинами (CircuitElement), реальный элемент (RealElement), составной элемент (CompositeElement) DrawingsLib - библиотека с формами и инструментами рисования, формы свойств элементов и дизайнера схем. 7 Содержит: инструменты рисования (MoveTool, WireTool, TextTool, RegionTool), специальные объекты рисования (RegionObject, TextObject), формы свойств объектов (CanvasPropertiesForm, ContainerEditorForm, ObjPropertyWindow, SignalsEditorForm, WatchListForm), менеджер панели инструментов (ToolBoxObejct), форма запуска схемы (StartItForm) ObjectsLib - базовые функциональные элементы для построения схемы Содержит: функциональные элементы (NAND2, NOR2, INV, и тд), основные схемы (CinRS, DC, JK-триггер и тд) MicroDesigner - исполняемый модуль Также в составе программы есть простая платформа для выполнения тестов над элементами. Позволяет выполнить тест и выгрузить диаграмму результата в выбранную директорию. Библиотека элементов ObjectsLib подключается динамически, все элементы, наследующие CircuitElement, добавляются на панель инструментов (для этого используется рефлексивный анализ сборки на типы, включённые в неё). Библиотека может отсутствовать, или же могут быть подключены другие модули с различными элементами. 8 2.1 Основные алгоритмы программы Алгоритм запуска схемы, эмулирует работу схемы при подаче на входы сигналов. Начало Обновить состояние схемы Создать фильтры: Эффективные элементы Неподключенные входы Подготовить контейнеры для результирующих сигналов Запуск идёт Сгенерировать сигналы на источниках Конец Передать сигнал инициализации на неподключённые входы Выполняется работа Отправить сигналы в схеме Выполнить работу Собрать результирующие сигналы Рис 2.5 Алгоритм запуска схемы 9 Описание алгоритма: 1. Обновление состояния - все элементы схемы приводятся в первоначальное состояние для последующего запуска 2. Фильтры создаются для более эффективного обращения к группам элементов. Эффективные элементы - элементы, выполняющие работу и изменяющие сигнал, проходящий через них. К ним не относятся провода, узлы и специальные объекты рисования. 3. Запуск выполняется до тех пор, пока в схеме выполняется работа на каких либо элементах. За каждый проход выполнения элемент единожды выполняет работу и отправляет сигнал. 4. На неподключённые входы подаётся сигнал инициализации, выбранный пользователем. В ТТЛ логике неподключённый вход расценивается, как пин с сигналом единица. 5. Перед выходом из прохода собирается информация с наблюдаемых элементов, на основе этих данных строится диаграмма результатов. 10 3 Руководство пользователя 3.1 Структура и подготовка входных данных Входными данными в программе может быть как ранее созданная схема, так и новая логическая схема. Для её создания служит визуальный редактор. Рис. 3.1 Созданная логическая схема. Рисование выполняется при помощи инструментов: Функциональных элементов Микросхем Проводов 3.2 Выполнение программы Выполнение программы - запуск моделирования схемы. Для выполнения необходимо задать опции выполнения, сигналы генераторов и список наблюдаемых элементов. 11 Рис. 3.2.1 Опции запуска схемы Рис. 3.2.2 Диаграмма сигналов 12 3.3 Описание пользовательского интерфейса Помимо редактора схемы программа содержит формы: Свойства элемента - служит для редактирования свойств элементов схемы. Рис. 3.3.1 Форма свойств элемента Редактор элемента - служит для создания разметки и сохранения новой микросхемы Рис. 3.3.2 Редактор разметки элемента 13 Список наблюдений - задаёт выводы, с которых необходимо собирать информацию. Рис. 3.3.3 Список наблюдения 3.4 Описание структуры выходных данных Все схемы и элементы сохраняются в формате XML. Такой формат выбран для удобного представления иерархических данных схемы. Результат работы программы - временную диаграмму можно сохранить в виде изображения. 3.5 Пример работы программы Для описания примера работы рассмотрим сборку D-триггера. Его работа заключается в следующем: он получает то состояние, которое было на его входе в момент спада синхроимпульса. Для сборки схемы нам понадобятся: синхронный RS триггер, генератор входных сигналов, генератор синхроимпульсов, инвертер и соединительные провода. Начнём сборку цепи с размещения микросхемы синхронного RS триггера. 14 Рис. 3.5.1 Размещение RS триггера Добавим остальные элементы и соединим их: Рис. 3.5.2 Схема для моделирования Теперь необходимо задать входные сигналы на генераторе сигналов и параметры генератора импульсов. 15 Рис. 3.5.3 Редактор генераторов Рис. 3.5.3 Редактор импульсных генераторов Теперь мы можем задать элементы для наблюдений в специальном диалоге: Рис.3.5.4 Диалог наблюдений Остался последний этап - настройка параметров запуска. 16 Рис. 3.5.5 Параметры запуска И для получения результата остаётся только запустить моделирование схемы. Рис. 3.5.6 Временная диаграмма D-триггера Вот так просто мы продемонстрировали работу с разработанной системой моделирования. 17 Список использованных источников 1. Пшеничников Ю.В. Основы цифровой электроники СГАУ 2009. - 47 c. 2. Агуров П.В. Разработка компонентов в MS Visual Studio 2008 bhv - Спб. 2008. - 478 с. 3. RSDN, Property Grid FAQ http://www.rsdn.ru/article/dotnet/PropertyGridFAQ.xml 18 Приложение А Листинг алгоритма для моделирования схемы: void RunScheme() { //Переводим все элементы в начальное состояние Refresh(); // Создаём фильтр с эффективными элементами List<CircuitElement> PElements = new List<CircuitElement>(); // Создаём фильтр с неподключёнными входными пинами для подачи на них Initial Signal List<PIN> NotConnectedInputs = new List<PIN>(); for (int i = 0; i < _Elements.Count; i++) { if (!(_Elements[i] is Node) && !(_Elements[i] is Wire) && (_Elements[i] is CircuitElement) && (!(_Elements[i] is ISignalGenerator) || (_Elements[i] is CompositeElement)) ) { CircuitElement ce = _Elements[i] as CircuitElement; PElements.Add(ce); //Просматриваем пины foreach (PIN p in ce.PINs) { if ((p.Type == PINType.In) && (p.FriendPIN == null)) NotConnectedInputs.Add(p); } } } //инициализация контейнеров для сбора информации for (int watch = 0; watch < _Watches.Count; watch++) { _Watches[watch].Capacity = _TactCount * _TicPerTact; } bool[] marks = new bool[PElements.Count]; bool[] sends = new bool[PElements.Count]; //цикл генерации сигналов for (int tact = 0; tact < _TactCount; tact++) { for (int i = 0; i < _TicPerTact; i++) { //генерируем новые сигналы for (int gi = 0; gi < Generators.Count; gi++) Generators[gi].GenerateSignal(i, tact); //генерируем сигналы на отключенных входных пинах foreach (PIN in_pin in NotConnectedInputs) in_pin.Recieve(_InitialSignal); //только один эффективный send и perform на каждом такте bool perform = true; for (int n = 0; n < PElements.Count; n++) { marks[n] = false; sends[n] = false; } //пока есть полезная работа, выполняем передачу и обработку сигналов в схеме while (perform) { 19 perform = false; //цикл передачи данных for (int pi = 0; pi < PElements.Count; pi++) if (!sends[pi]) { sends[pi] = PElements[pi].SendData(); ; } //цикл выполнения работы for (int pi = 0; pi < PElements.Count; pi++) if (!marks[pi]) { marks[pi] = PElements[pi].PerformAction(); perform = perform | marks[pi]; } } //Секция сбора данных for (int watch = 0; watch < _Watches.Count; watch++) { _Watches[watch].Signals[tact * _TicPerTact + i] = (_Watches[watch].Source as PIN).Signal; } } } } Весь исходный код проекта можно получить на сайте проекта. Он распространяется на условиях лицензии GNU GPL v3. Сайт проекта: http://code.google.com/p/microdesigner/ 20