Development of an application for modelling the operation of digital circuits using the .NET Framework platform

Research article
DOI:
https://doi.org/10.60797/IRJ.2024.149.110
Issue: № 11 (149), 2024
Submitted :
25.07.2024
Accepted:
12.11.2024
Published:
18.11.2024
135
25
XML
PDF

Abstract

This work presents an application for modelling the operation of digital circuits, developed on the .NET Framework platform using the C# programming language. The application is oriented for educational purposes and is designed to simplify the process of synthesizing digital circuits by offering a user-friendly graphical interface and a rich set of standard components. The main objective of the development was to eliminate the shortcomings of existing solutions, such as complexity of use and redundancy of functionality. The application includes tools for creating, editing and testing digital circuits, which makes it convenient for students and teachers. The conducted tests confirmed the correct operation of all elements and functionalities of the programme.

1. Введение

Актуальность данной темы связана с тем, что в настоящее время обучающиеся Казанского национального исследовательского технического университета им. А.Н. Туполева – КАИ (КНИТУ-КАИ) по направлению 09.03.01 «Информатика и вычислительная техника» на начальных этапах обучения используют для моделирования последовательностных и комбинационных схем программу «ЭВЕМА», разработанную сотрудниками кафедры компьютерных систем КНИТУ-КАИ. Достоинствами данной программы являются простота в использовании, отсутствие лишнего функционала и низкий порог входа для моделирования схем. Однако она имеет и недостатки: для размещения элементов в рабочем поле и соединения проводников требуется излишнее количество действий, отсутствуют встроенные схемы наподобие дешифраторов, мультиплексоров и т.п.

Кроме «ЭВЕМА» существуют и другие программы, используемые для моделирования цифровых схем, такие как Multisim

,
и Micro-Cap
,
. Программа Multisim используется для моделирования электронных схем и предоставляет широкий набор возможностей для синтеза и анализа работы схем. Она поддерживает библиотеки различных элементов и моделирование различных измерительных приборов. Интерфейс программы Multisim интуитивно понятен и удобен для пользователей.

Micro-Cap – это программа для аналогового и цифрового моделирования электрических и электронных цепей с интегрированным визуальным редактором. Она позволяет моделировать практически любые логические схемы, но для работы с ней требуются знания в области электроники и схемотехники. Функционал программы оказывается избыточным для синтеза простых цифровых схем на уровне логических элементов и триггеров.

Каждое из рассмотренных решений имеет свои преимущества и недостатки. Программа «ЭВЕМА» проста в использовании, но требует много времени на выполнение базовых операций и не поддерживает стандартные компоненты. Multisim и Micro-Cap предоставляют широкие возможности для моделирования сложных схем, но требуют глубоких знаний в электронике и могут быть сложными для начинающих пользователей.

Таким образом, существующие решения не полностью удовлетворяют потребности в эффективном синтезе простых цифровых схем

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

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

Целью данной работы является разработка приложения для моделирования работы цифровых схем для использования в образовательном процессе.

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

2. Проект приложения

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

В программе должны быть реализованы следующие элементы: логические вентили (И, ИЛИ, НЕ, И-НЕ, ИЛИ-НЕ), цифровой сигнал, генератор тактовых импульсов, триггеры (JK, D, T, RS), одноразрядный сумматор, дешифратор, мультиплексор, шифратор и демультиплексор

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

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

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

Графический интерфейс программы может выглядеть следующим образом: добавление элементов осуществляется нажатием клавиш определенных символов на клавиатуре: S — цифровой сигнал, G — генератор импульсов, A — логический вентиль И, O — логический вентиль ИЛИ, I — логический вентиль НЕ, D — дешифратор, C — шифратор, M — мультиплексор. Инвертирование логических вентилей или добавление демультиплексора осуществляется выбором соответствующего вентиля или мультиплексора и последующим нажатием клавиши SHIFT. Выбор количества входов для логических вентилей осуществляется нажатием цифровых клавиш 2-8.

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

Графический интерфейс программы

Рисунок 1 - Графический интерфейс программы

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

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

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

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

Разрабатываемая программа предназначена для графического синтеза схем, поэтому к свойствам выделенных сущностей следует добавить атрибуты, характеризующие их положение в рабочем поле. Для элементов это будет прямоугольник с координатами (X; Y) верхней левой вершины, шириной W и высотой H. Для проводника таким атрибутом будет список точек с координатами (Xi; Yi), где i — порядковый номер точки в списке. Для контакта в качестве таких атрибутов выступают пара точек P1 и P2 и координаты точки контакта: левой для контакта-входа и правой для контакта-выхода.

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

Рассмотрим данные сценарии, начиная со сценария «Размещение новых элементов» (см. рисунок 2). Чтобы добавить новый элемент на схему, пользователь нажимает соответствующую клавишу или кнопку в окне программы в случае, если требуется добавить триггер. Если выбранный элемент – логический вентиль, то пользователь также нажимает клавишу-цифру, соответствующую желаемому количеству входов. Если необходимо инвертировать логический вентиль, пользователь нажимает клавишу SHIFT. Далее пользователь выбирает положение элемента в рабочей области и нажимает левую кнопку мыши, после чего выбранный элемент будет размещен в рабочей области.

Диаграмма деятельности для сценария «Добавить новый элемент»

Рисунок 2 - Диаграмма деятельности для сценария «Добавить новый элемент»

Сценарий «Соединение элементов» подразумевает, что для соединения существующих элементов пользователь наводит указатель мыши на первый нужный контакт одного из соединяемых элементов, затем нажимает левую кнопку мыши (см. рисунок 3). Далее пользователь последовательно выбирает несколько точек, которые образуют линию проводника. На следующем шаге пользователь наводит указатель мыши на второй нужный контакт, противоположной относительно первого полярности, другого элемента.
Диаграмма деятельности для сценария «Соединение элементов»

Рисунок 3 - Диаграмма деятельности для сценария «Соединение элементов»

Для изменения параметров элемента в сценарии «Изменение параметров элемента» пользователь наводит указатель мыши на нужный элемент, затем нажимает правую кнопку мыши (см. рисунок 4). Элемент становится выделенным. Затем пользователь устанавливает необходимые параметры для элемента посредством изменения доступных полей и переключателей в панели справа от рабочей области. Далее пользователь нажимает кнопку «Изменить», и изменения вступают в силу.
Диаграмма деятельности для сценария «Изменение параметров элемента»

Рисунок 4 - Диаграмма деятельности для сценария «Изменение параметров элемента»

Сценарий «Удаление элементов» заключается в том, чтобы удалить элемент со схемы, пользователь наводит указатель мыши на нужный элемент, затем нажимает правую кнопку мыши. Элемент становится выделенным. Затем пользователь повторно нажимает правую кнопку мыши, и элемент удаляется из рабочей области.

Основным объектом моделирования в рамках данной работы является цифровая схема. Введем сущность «Схема», которая будет включать в себя все элементы, проводники и контакты, размещенные в рабочей области.

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

Сущность «Схема» имеет следующий набор атрибутов: список цифровых сигналов, список генераторов, список элементов, список проводов, список измененных входных контактов и список измененных выходных контактов.

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

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

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

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

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

К атрибутам отрисовщика схемы относятся временный элемент, временный список точек, последняя позиция мыши, текущий вход, текущий выход, текущий провод, текущий контакт, флаг рисования временных элементов и флаг «Временный элемент – провод», а также схема, которую требуется нарисовать. Временный элемент – это элемент, который пользователь планирует добавить, но пока не выбрал точное место в рабочей области. Временный список точек – это список точек для нового провода. Последняя позиция мыши – это точка в пределах рабочей области, на которую в последний раз указывал курсор мыши. Текущий вход – это входной контакт, являющийся приёмником для рисуемого временного провода. Текущий выход – это выходной контакт, являющийся источником для рисуемого временного провода. Текущий провод – это проводник, на который указывает последняя позиция мыши. Текущий контакт – это контакт, на который указывает последняя позиция мыши. Флаг рисования временных элементов – это флаг, разрешающий или запрещающий отрисовку временных элементов и рисуемых проводов в рабочей области. Флаг «Временный элемент – провод» определяет, отрисовывается в данный момент временный провод или временный элемент. Схема – это схема, которую требуется нарисовать.

3. Реализация проекта приложения

Для реализации проекта были выбраны язык программирования C#, интегрированная среда разработки Visual Studio и платформа Windows Forms

.

C# – это объектно-ориентированный язык программирования, разработанный компанией Microsoft. Он сочетает возможности C++ с удобством платформы .NET, обеспечивая безопасное управление памятью и высокую степень безопасности кода. C# активно используется для создания настольных, веб- и мобильных приложений, а также игр и служб. Синтаксис языка, основанный на C++, дополнен многочисленными улучшениями. Язык также предлагает богатую стандартную библиотеку .NET Framework, которая включает функции для работы с файлами, сетями, базами данных и другими задачами.

Windows Forms (WinForms) – это технология, позволяющая создавать графические пользовательские интерфейсы (GUI) в приложениях на C#

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

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

Первым шагом добавляется панель в верхней части формы, в которой будут расположены кнопки «Сохранить», «Открыть» и другие. Для этого выбирается элемент Panel, которому присваивается имя `panelMenu`, высота панели устанавливается на 50, а свойство Dock задается как Top, что привязывает верхнюю границу панели к контейнеру — окну формы. Для визуального отделения панели от других частей формы свойству BorderStyle присваивается значение FixedSingle.

Затем в эту панель добавляются кнопки. Для этого выбирается элемент Button и размещается в панели `panelMenu`. Кнопке присваивается имя `buttonSave`, свойству Text – значение «Сохранить», а свойству Size – значение (100; 50). Аналогично создаются кнопки `buttonOpen` и `buttonStart`, с текстовыми значениями «Открыть» и «Старт» соответственно.

Для создания рабочей области и боковой панели справа используется элемент управления SplitContainer, который состоит из подвижной строки, разделяющей область отображения контейнера на две панели с изменяемыми размерами. Элементу присваивается имя `splitContainerWorkSpace`, а свойство Dock устанавливается на Fill, что привязывает все границы элемента управления к контейнеру – окну формы. Свойству SplitterDistance задается значение 782, при котором ширина правой панели составляет 200 при открытии программы.

Левой и правой панелям задается свойство AutoScroll = true, что управляет автоматическим появлением полосы прокрутки, когда содержимое элемента управления больше его отображаемой области. В левую панель добавляется элемент управления `pictureBox`, предназначенный для отображения рисунков. Он размещается в левом верхнем углу панели, его свойству Size задается значение (2000;2000), а свойству BackColor – значение Windows.

Кнопки для добавления триггеров и некоторых других элементов будут добавлены по мере реализации соответствующих классов. Правая панель элемента `splitContainerWorkSpace` также будет оформлена по мере реализации функционала, связанного с изменением параметров элементов и состояния множества сигналов или триггеров. На текущем этапе вид окна приложения представлен на рисунке 5.

Вид окна приложения на начальном этапе разработки

Рисунок 5 - Вид окна приложения на начальном этапе разработки

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

1. Интерфейс IInOut в C# представляет собой контракт, определяющий набор методов, свойств, событий и индексаторов, которые должны быть реализованы классом или структурой. Он описывает функциональность, которую должен предоставлять класс, но не содержит конкретной реализации. В интерфейс IInOut включены следующие методы и свойства: массив входных контактов элемента (In), массив выходных контактов элемента (Out), строковые массивы имен входных и выходных контактов (InNames и OutNames), строковое значение типа элемента (Type), булево значение инверсии элемента (IsInverted), булево значение изменения состояния контактов (IsChanged), прямоугольник, определяющий положение и размер элемента (Rect), метод вычисления значений выходных контактов (Compute()) и метод перемещения элемента (Move(int x, int y)).

2. Класс Contact: Класс Contact реализует контакты для элементов схемы и содержит следующие свойства: полярность контакта (IsInput), текущее значение (Value), соединение с проводником (IsConnected), область подключения проводника (ContactPlace), координаты точки соединения (ContactPoint) и флаг изменения значения контакта (IsChanged). Конструктор класса принимает параметры: элемент-владелец (Owner), полярность контакта (input) и массив точек, определяющих положение контакта (contactLine). Метод ResetChangedFlag() сбрасывает флаг изменения значения контакта.

3. Класс LogicGate реализует логический вентиль и включает в себя свойства: инверсия вентиля (IsInverted), набор входных и выходных контактов (In и Out), тип вентиля (Type), состояние изменения контактов (IsChanged) и положение элемента (Rect). Класс реализует интерфейс IInOut и включает метод Compute() для расчета значений выходных контактов. В классе также реализованы функции для логических вентилей (AND, OR, NOT и их комбинации). Конструктор класса принимает параметры: тип вентиля (Type), количество входных контактов (inCnt), инверсию (invert) и положение элемента в рабочей области (Rect).

4. Класс Signal реализует цифровой сигнал и включает в себя свойства: набор входных (In) и выходных контактов (Out), положение элемента (Rect), тип сигнала (Type), состояние изменения контактов (IsChanged) и их инверсию (IsInverted). Класс реализует интерфейс IInOut и включает методы для сброса флага изменения (ResetChangedFlag), вычисления значений выходных контактов (Compute) и инверсии значения сигнала (Invert). Конструктор класса принимает параметр – прямоугольник, определяющий положение сигнала в рабочей области (Rect).

5. Класс Generator реализует генератор тактовых импульсов и включает в себя свойства: набор входных (In) и выходных контактов (Out), положение элемента (Rect), период генератора (T), длительность импульса (tImp) и состояние изменения выходного значения (IsChanged). Класс реализует интерфейс IInOut и включает методы для сброса флага изменения (ResetChangedFlag), вычисления значений выходных контактов (Compute) и обработки времени. Конструктор класса принимает параметры: прямоугольник (Rect), коэффициент заполнения (k) и период генератора в миллисекундах (T).

6. Класс Wire реализует проводник и включает в себя свойства: контакт-источник (Source), контакт-приемник (Receiver), родительский проводник (ParentWire), дочерние проводники (ChildWires), список точек проводника (Points) и флаг выбора проводника (IsSelected). Класс также включает методы для удаления проводника (Delete), удаления и добавления дочерних проводников (RemoveChild и AddChild), установки родительского проводника (SetParent) и присваивания списка точек проводника (SetPoints). Конструкторы класса принимают параметры: родительский проводник (parent), контакт-приемник (receiver) и список точек (Points), либо контакт-источник (source), контакт-приемник (receiver) и список точек (Points).

7. Класс Trigger реализует триггер и включает в себя свойства: набор входных (In) и выходных контактов (Out), имена входных и выходных контактов (InNames и OutNames), положение элемента (Rect), временные значения состояния (tempval_1 и tempval_2) и тип триггера (Type). Класс реализует интерфейс IInOut и включает методы для вычисления значений выходных контактов (Compute). Конструктор класса принимает параметры: прямоугольник (Rect) и тип триггера (RS, D, T или JK).

8. Класс Decoder реализует дешифратор и включает в себя свойства: набор входных (In) и выходных контактов (Out), имена входных и выходных контактов (InNames и OutNames), положение элемента (Rect) и инверсию входов и выходов (IsInverted). Класс реализует интерфейс IInOut и включает метод Compute() для вычисления значений выходных контактов. Конструктор класса принимает параметры: прямоугольник (Rect) и количество адресных входов дешифратора (addressCnt).

9. Класс Mux реализует мультиплексор и включает в себя свойства: набор входных (In) и выходных контактов (Out), имена входных и выходных контактов (InNames и OutNames), положение элемента (Rect) и количество адресных входов (addressCnt). Класс реализует интерфейс IInOut и включает метод Compute() для вычисления значений выходных контактов. Конструктор класса принимает параметры: прямоугольник (Rect) и количество адресных входов мультиплексора (addressCnt).

10. Класс TempElement содержит логику создания временных элементов и включает в себя свойства: тип элемента (Type), количество входов (InCount) и выходов (OutCount), положение элемента (Rect). Класс также включает методы для изменения типа элемента (ChangeType), количества входов (ChangeInCount), положения элемента (ChangePosition) и создания нового элемента (CreateLogical).

11. Класс Schema реализует цифровую схему и включает в себя свойства: список всех элементов схемы (logicals), список проводников (wires), список измененных контактов (changedOutputContacts и changedInputContacts), список генераторов (Generators) и состояние схемы (isFirstRun). Класс также включает методы для расчета состояния схемы (Calculate), добавления и удаления элементов и проводников (Add и Remove), а также получения индекса проводника, к которому подключен контакт (GetWireIndex).

12. Класс SchemaDrawer предназначен для отрисовки схемы. Список полей класса включает: схему для отрисовки (schema), перо для отрисовки (pen и tempPen), временный элемент (temp), список точек временного провода (tempWirePoints), координаты последнего расположения курсора (lastMouseLock), активный контакт (activeContact), приемник и источник создаваемого провода (currentIn и currentOut), текущий проводник (currentWire), ранее выбранный проводник (prevSelectedWire), выбранный элемент (selectedElement), булевые значения для рисования временных элементов (isTempDrawable и tempIsWire). Класс также имеет публичное событие OnSelected, вызываемое при выделении или снятии выделения с какого-либо элемента.

13. Класс Form1 представляет окно, которое составляет пользовательский интерфейс приложения. Он включает элементы правой панели для изменения параметров выделенных элементов, множественного изменения состояний входных сигналов и триггеров, отслеживания выходных сигналов. На рисунке 6 представлен вид окна программы на данном этапе разработки. Элементы правой панели предназначены для изменения параметров выделенных элементов, множественного изменения состояний входных сигналов и триггеров, отслеживания выходных сигналов.

Окно программы

Рисунок 6 - Окно программы

4. Тестирование

Метод тестирования заключается в том, чтобы с помощью клавиш на клавиатуре и кнопок на форме добавлять различные элементы с разными параметрами. Контроль за добавлением элементов осуществляется путем отслеживания содержимого списка logicals – поля класса Schema.

Добавим на схему 18 элементов: вентили в различных конфигурациях, сигнал, генератор, дешифраторы, мультиплексоры, триггеры. Состояние списка logicals и схемы представлены на рисунке 7.

Схема и состояние списка logicals

Рисунок 7 - Схема и состояние списка logicals

Как видно на рисунке 7, размер списка равен 18 – количеству добавленных элементов, кроме того, каждый из элементов добавлен с верным количеством входов, имеет инвертированные контакты, если такие необходимы.

Для проверки корректности соединения элементов и проверка корректности их работы, соединим несколько сигналов со входами элементов как на рисунке 8.

Соединение элементов

Рисунок 8 - Соединение элементов

При двойном клике по сигналу его состояние меняется на противоположное, при этом происходит корректное изменение выхода элемента И, что видно на рисунке 9.
Изменение сигнала

Рисунок 9 - Изменение сигнала

Подобным образом были проверены логические вентили с различными наборами входных сигналов и количеством входов. Все логические вентили работают корректно.

Соединим вентили с сигналами, как на рисунке 10 и изменим входные сигналы.

Подключение нескольких приемников к проводнику

Рисунок 10 - Подключение нескольких приемников к проводнику

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

На рисунке 11 показана работа дешифратора.

Работа дешифратора

Рисунок 11 - Работа дешифратора

Демонстрация работы инверсного дешифратора представлена на рисунке 12.
Работа инверсного дешифратора

Рисунок 12 - Работа инверсного дешифратора

Демонстрация работы мультиплексора представлена на рисунке 13.
Работа мультиплексора

Рисунок 13 - Работа мультиплексора

На рисунке 14 показана работа триггеров.
Работа триггеров

Рисунок 14 - Работа триггеров

По итогам испытаний все элементы работают корректно.

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

Результаты испытаний представлены на рисунке 15.

Удаление элементов и проводников

Рисунок 15 - Удаление элементов и проводников

Наблюдение за списками проводников и элементов подтвердило, что удаляются именно те объекты, которые планировалось удалить. Корректность удаления проводника показана на рисунке 16.
Изменение списка проводников при удалении проводника

Рисунок 16 - Изменение списка проводников при удалении проводника

Демонстрация работы группового изменения входных сигналов показана на рисунке 17.
Групповое изменение входных сигналов

Рисунок 17 - Групповое изменение входных сигналов

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

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

Демонстрация корректности отображения выходных сигналов представлена на рисунке 18.

Отображение значений выходных сигналов

Рисунок 18 - Отображение значений выходных сигналов

5. Заключение

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

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

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

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

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

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

Article metrics

Views:135
Downloads:25
Views
Total:
Views:135