Основные функциональные элементы ЭВМ 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Основные функциональные элементы ЭВМ



Основные функциональные элементы ЭВМ

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

Комбинационная схема - схема, комбинация сигналов на выходе которой в любой момент времени однозначно определяется комбинацией сигналов на её входе.

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

Дешифратор

Дешифратором называется комбинационная схема, имеющая n входов и 2n выходов и преобразующая двоичный код на своих входах в унитарный код на выходах.

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


Рисунок 1 - Условно-графическое обозначение трехвходового дешифратора

Номер разряда, в котором устанавливается " 1 " на выходе дешифратора, определяется кодом на его входах. Ниже приведена таблица истинности трехвходового дешифратора (таблица 1).

 

Таблица 1 – Таблица истинности трехвходового дешифратора

Входы

Выходы

2 1 0 0 1 2 3 4 5 6 7
0 0 0 1 0 0 0 0 0 0 0
0 0 1 0 1 0 0 0 0 0 0
0 1 0 0 0 1 0 0 0 0 0
0 1 1 0 0 0 1 0 0 0 0
1 0 0 0 0 0 0 1 0 0 0
1 0 1 0 0 0 0 0 1 0 0
1 1 0 0 0 0 0 0 0 1 0
1 1 1 0 0 0 0 0 0 0 1

 

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

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

 

Шифратор

Шифратор – схема, имеющая 2n входов и n выходов, функции которой во многом противоположны функции дешифратора (рисунок 2).

 Эта комбинационная схема в соответствии с унитарным кодом на своих входах формирует позиционный код на выходе (таблица 2).


Рисунок 2 - Условно-графическое обозначение шифратора на 4 входа

 

Таблица 2 -

Входы

Выходы

3 2 1 0 1 0 0 0 0 1 0 0 0 0 1 х 0 1 0 1 x х 1 0 1 х x х 1 1

 

Триггер

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

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

Главной частью любого триггера является запоминающая ячейка (ЗЯ). Схема запоминающей ячейки на элементах

"И-НЕ" представлена на рисунке 3.


Рисунок 3 - Запоминающая ячейка на элементах "И-НЕ"

 

Входной сигнал S (Set) служит для установки ЗЯ в состояние " 1" (Q=1, ~Q=0). Сигнал R (Reset) устанавливает ЗЯ в состояние " 0 " (Q=0, ~Q=1). Активными значениями для них являются сигналы низкого уровня.

 

Пусть на входы ЗЯ поданы сигналы: S=0, R=1. Тогда при любом исходном состоянии ЗЯ на выходе элемента 1 установится высокий уровень напряжения. Так как на входы элемента 2 поступают значения Q и R, то на его выходе будет сигнал низкого уровня. Таким образом, ЗЯ перейдет в состояние " 1 ".

Аналогично при S=1, R=0 запоминающая ячейка перейдет в состояние Q=0, Q=1, то есть в " 0 ".

Если S=1, R=1, то состояние ЗЯ будет определяться ее предыдущим состоянием. Если ЗЯ находилась в состоянии " 1 ", то сигнал Q=0, поступая на вход элемента 1, подтвердит состояние его выхода Q=1.

На входы элемента 2 поступят сигналы только высокого уровня. Поэтому его выход будет находиться в состоянии Q=0, то есть не изменится. Если ЗЯ находилась в состоянии " 0 ", то сигнал Q=0, поступая на вход элемента 2, подтвердит состояние его выхода Q=1. В свою очередь, выход элемента 1 также останется без изменения. Таким образом, эта комбинация входных сигналов соответствует режиму хранения.

Если на входы S и R поданы сигналы низкого уровня (S = R = 0), то сигнал на выходах элементов 1 и 2 будет высоким (Q = Q = 1). При переводе ЗЯ в режим хранения (S = R = 1), выходы элементов 1 и 2 могут установиться в произвольное состояние. Поэтому комбинация сигналов S = R = 0 на управляющих входах не используется.

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

 

Таблица переходов запоминающей ячейки, показанной на рисунке 3, представлена в таблице 3.

Таблица 3

S R Q(t+1) Функция
0 0 х Запрещенная комбинация
0 1 1 Установка в " 1 "
1 0 0 Установка в " 0 "
1 1 Q(t) Хранение

 

 

Аналогичная запоминающая ячейка может быть построена на элементах "ИЛИ-НЕ".

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

Триггеры можно классифицировать по различным признакам, например, так, как это показано на рисунке.


Рисунок - Классификация триггерных схем

Триггер называется синхронным, если его таблица переходов хотя бы по одному управляющему входу реализуется под воздействием синхронизирующего сигнала.

Счетчики

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

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

Также счетчики широко применяются в качестве самостоятельных узлов в различных системах цифровой автоматики.

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

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

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

Параметром, определяющим информационную емкость счетчика, является модуль пересчета, равный числу внутренних состояний. Это значение проставляется на УГО (Условное Графическое Обозначение) после аббревиатуры CT.

Регистр хранения

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

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

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

- одновременную установку всех разрядов регистра в " 0 ";

- параллельную или последовательную загрузку регистра;

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

Регистр сдвига

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

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

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

 

Принцип модульности

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

 

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

 

Повторно ( в отличие от однократно используемых – могут быть правильно выполнены только один раз, то есть в процессе своего выполнения могут испортить себя) используемые программные модули могут быть непривилегированными, привилегированными и реентерабельными.

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

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

Принцип виртуализации

 

Наиболее законченным и естественным проявлением концепции виртуальности является понятие виртуальной машины. Примером реализации принципа виртуализации может служить VMD –машина (Virtual DOS Machine) – защищенная подсистема, предоставляющая полную среду типа MS DOS и консоль для выполнения DOS- приложений.

Такие VMD-машины имеются в ОС Windows (не все ОС компании Microsoft поддерживают VMD-машины), в OS\2, в Linux.

 

Объекты ядра

Изучение Windows API начнем с объектов ядра и их описателей (handles).

 

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

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

Объекты ядра

Создание, открытие и прочие операции с объектами ядра станут для Вас, как разработчика Windows-приложений, повседневной рутиной.

 Система позволяет создавать и оперировать с несколькими типами таких объектов, в том числе,

· маркерами доступа (access token objects),

· файлами (file objects),

· проекциями файлов (file-mapping objects),

· портами завершения ввода-вывода (I/O completion port objects),

· заданиями (job objects),

· почтовыми ящиками (mailslot objects),

· мьютексами (mutex objects),

· каналами (pipe objects),

· процессами (process objects),

· семафорами (semaphore objects),

· потоками (thread objects) и

· ожидаемыми таймерами (waitable timer objects).

 

Эти объекты создаются Windows-функциями.

Например, CreateF i leMapping заставляет систему сформировать объект "проекция файла".

 Каждый объект ядра — на самом деле просто блок памяти, выделенный ядром и доступный только ему.

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

Например, у объекта "процесс" есть идентификатор, базовый приоритет и код завершения, а у объекта "файл" — смещение в байтах, режим разделения и режим открытия.

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

Такое ограничение Microsoft ввела намеренно, чтобы ни одна программа не нарушила целостность структур объектов ядра. Это же ограничение позволяет Microsoft вводить, убирать или изменять элементы структур, не нарушая работы каких-либо приложений.

Но вот вопрос: если мы не можем напрямую модифицировать эти структуры, то как же наши приложения оперируют с объектами ядра?

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

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

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

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

Учет пользователей объектов ядра

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

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

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

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

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

Защита

Объекты ядра можно защитить дескриптором защиты (security descriptor), который описывает, кто создал объект и кто имеет права на доступ к нему. Дескрипторы защиты обычно используют при написании серверных приложений; создавая клиентское приложение, Вы можете игнорировать это свойство объектов ядра.

Почти все функции, создающие объекты ядра, принимают указатель на структуру SECURITY_ATTRIBUTES как аргумент, например:

HANDLE CreateFileMapping(
HANDLE hFile,
PSECURITY_ATTRIBUTES psa,
DWORD flProtect,
DWORD dwMaximumSizeHigh,
DWORD dwMaximuniSizeLow,
PCTSTR pszName);

 

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

Однако Вы можете создать и инициализировать структуру SECURITY_ATTRIBUTES, а затем передать ее адрес. Она выглядит так:

typedef struct _SECURITY_ATTRIBUTES {
DWORD nLength,
LPVOID lpSecurityDescriptor;
BOOL bInheritHandle;
} SECURITY_ATTRIBUTES;

Хотя структура называется SECURITY__ATTRIBUTES, лишь один ее элемент имеет отношение к защите — lpSecuntyDescriptor.

Если надо ограничить доступ к созданному Вами объекту ядра, создайте дескриптор защиты и инициализируйте структуру SECURITY_ATTRIBUTES следующим образом:

SECURITY_ATTRIBUTES sa;

sa.nLength = sizeof(sa); // используется для //выяснения версий
sa.lpSecuntyDescriptor = pSD;      // адрес //инициализированной SD
sa.bInheritHandle = FALSE; // об этом позже


CreateFileMapping(INVALID_HANDLE_VALUE, &sa, PAGE_REAOWRITE, 0, 1024, "MyFileMapping");

Желая получить доступ к существующему объекту ядра (вместо того чтобы создавать новый), укажите, какие операции Вы намерены проводить над объектом. Например, если нужно считывать данные из существующей проекции файла, то вызываем функцию OpenFileMapping таким образом;

HANDLE hFileMapping = OpenFileMapping(FILE_MAP_READ, FALSE, "MyFileMapping");

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

Функция OpenFileMapping, прежде чем вернуть действительный описатель, проверяет тип защиты объекта. Если меня, как зарегистрировавшегося пользователя, допускают к существующему объекту ядра "проекция файла", OpenFileMapping возвращает действительный описатель.

Но если мне отказывают в доступе, OpenFileMapping
возвращает NULL, а вызов GetLastError дает код ошибки 5 (или ERROR_ACCESS_DENIED). Но в основной массе приложений защиту не используют

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

Они относятся к объектам User или GDI. Новичок в программировании для Windows может запутаться, пытаясь отличить объекты User или GDI от объектов ядра. Как узнать, например, чьим объектом — User или ядра — является данный значок? Выяснить, не принадлежит ли объект ядру, проще всего так: проанализировать функцию, создающую объект. Практически у всех функций, создающих объекты ядра, есть параметр, позволяющий указать атрибуты защиты, — как у CreateFileMapping.

В то же время у функций, создающих объекты User или GDI, нет параметра типа PSECURITY_ATTRIBUTES, и пример тому — функция CreateIcon

HICON CreateIcon(
HINSTANCE hinst.
int nWidth,
int nHeight,
BYTE cPlanes,
BYTE cBitsPixel,
CONST BYTE *pbANDbits,
CONST BYTE *pbXORbits);

 

Создание объекта ядра

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

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

Вот некоторые функции, создающие объекты ядра (список ни в коей мере на полноту не претендует)

HANDLE CreateThread(
PSECURITY_ATTRIBUTES psa,DWORD dwStackSize,
PTHREAD_START_ROUTINE pfnStartAddr,
PVOID pvParam,
DWORD dwCreationFlags,
PDWORD pdwfhreadId);

HANDEE CreateFile(
PCTSTR pszFileName,
DWORD dwDesiredAccebS,
DWORD dwShareMode,
PSECURITY_ATTRIBUTES psa,
DWORD dwCreationDistribution,
DWORD dwFlagsAndAttnbutes,
HANDEE hTemplateFile);

HANDLE CreateFileMapping(
HANDLE hFile,
PSECURITY_ATTRIBUTES psa,
DWORD flProtect,
DWORD dwMdximumSizcHigh,
DWORD dwMaximumSizeLow,
PCTSTR pszName);

HANDLE CreateSemaphore(
PSECURITY_ATTRIBUTES psa,

LONG lInitialCount,
LONG lMaximumCount,
PCTSTR pszName);

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

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

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

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

Если Вы передаете неверный индекс (описатель), функция завершается с ошибкой и GetLastError возвращает 6 (ERROR_INVALID_HANDLE). Это связано с тем, что на самом деле описатели представляют собой индексы в таблице, их значения привязаны к конкретному процессу и недействительны в других процессах.

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

К сожалению, отдельные функции возвращают в таких случаях не 0, а -1 (INVALID_HANDLE_VALUE)

Например, если CreateFile не сможет открыть указанный файл, она вернет именно INVALID_HANDLE_VALUE. Будьте очень осторожны при проверке значения, возвращаемого функцией, которая создает объект ядра. Так, для CreateMutex проверка на INVALID_HANDlE_VALUE бессмысленна:

HANDLE hMutex = CreateMutex(...);
if (hMutex == INVALID_HANDLE_VALUE) {
// этот код никогда не будет выполнен, так как
// при ошибке CreateMutex возвращает NULL
}

ПОТОКИ

 

Всякий раз при инициализации процесса система создает первичный поток (primary thread). Начинаясь со стартового C-кода (который в свою очередь вызывает функцию main из программы), он существует до того, как main вернет управление стартовому C-коду и тот вызовет функцию ExitProcess. Большинство приложений обходятся единственным, первичным потоком.

 

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

 

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

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

 

Физическая память

 

В Windows управление памятью обслуживается исключительно системой, и ни одно приложение не может пол

основные функциональные элементы ЭВМ

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

Комбинационная схема - схема, комбинация сигналов на выходе которой в любой момент времени однозначно определяется комбинацией сигналов на её входе.

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

Дешифратор

Дешифратором называется комбинационная схема, имеющая n входов и 2n выходов и преобразующая двоичный код на своих входах в унитарный код на выходах.

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


Рисунок 1 - Условно-графическое обозначение трехвходового дешифратора

Номер разряда, в котором устанавливается " 1 " на выходе дешифратора, определяется кодом на его входах. Ниже приведена таблица истинности трехвходового дешифратора (таблица 1).

 

Таблица 1 – Таблица истинности трехвходового дешифратора

Входы

Выходы

2 1 0 0 1 2 3 4 5 6 7 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 1

 

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

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

 

Шифратор

Шифратор – схема, имеющая 2n входов и n выходов, функции которой во многом противоположны функции дешифратора (рисунок 2).

 Эта комбинационная схема в соответствии с унитарным кодом на своих входах формирует позиционный код на выходе (таблица 2).


Рисунок 2 - Условно-графическое обозначение шифратора на 4 входа

 

Таблица 2 -

Входы

Выходы

3 2 1 0 1 0 0 0 0 1 0 0 0 0 1 х 0 1 0 1 x х 1 0 1 х x х 1 1

 

Триггер

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

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

Главной частью любого триггера является запоминающая ячейка (ЗЯ). Схема запоминающей ячейки на элементах

"И-НЕ" представлена на рисунке 3.


Рисунок 3 - Запоминающая ячейка на элементах "И-НЕ"

 

Входной сигнал S (Set) служит для установки ЗЯ в состояние " 1" (Q=1, ~Q=0). Сигнал R (Reset) устанавливает ЗЯ в состояние " 0 " (Q=0, ~Q=1). Активными значениями для них являются сигналы низкого уровня.

 

Пусть на входы ЗЯ поданы сигналы: S=0, R=1. Тогда при любом исходном состоянии ЗЯ на выходе элемента 1 установится высокий уровень напряжения. Так как на входы элемента 2 поступают значения Q и R, то на его выходе будет сигнал низкого уровня. Таким образом, ЗЯ перейдет в состояние " 1 ".

Аналогично при S=1, R=0 запоминающая ячейка перейдет в состояние Q=0, Q=1, то есть в " 0 ".

Если S=1, R=1, то состояние ЗЯ будет определяться ее предыдущим состоянием. Если ЗЯ находилась в состоянии " 1 ", то сигнал Q=0, поступая на вход элемента 1, подтвердит состояние его выхода Q=1.

На входы элемента 2 поступят сигналы только высокого уровня. Поэтому его выход будет находиться в состоянии Q=0, то есть не изменится. Если ЗЯ находилась в состоянии " 0 ", то сигнал Q=0, поступая на вход элемента 2, подтвердит состояние его выхода Q=1. В свою очередь, выход элемента 1 также останется без изменения. Таким образом, эта комбинация входных сигналов соответствует режиму хранения.

Если на входы S и R поданы сигналы низкого уровня (S = R = 0), то сигнал на выходах элементов 1 и 2 будет высоким (Q = Q = 1). При переводе ЗЯ в режим хранения (S = R = 1), выходы элементов 1 и 2 могут установиться в произвольное состояние. Поэтому комбинация сигналов S = R = 0 на управляющих входах не используется.

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

 

Таблица переходов запоминающей ячейки, показанной на рисунке 3, представлена в таблице 3.

Таблица 3

S R Q(t+1) Функция
0 0 х Запрещенная комбинация
0 1 1 Установка в " 1 "
1 0 0 Установка в " 0 "
1 1 Q(t) Хранение

 

 

Аналогичная запоминающая ячейка может быть построена на элементах "ИЛИ-НЕ".

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

Триггеры можно классифицировать по различным признакам, например, так, как это показано на рисунке.


Рисунок - Классификация триггерных схем

Триггер называется синхронным, если его таблица переходов хотя бы по одному управляющему входу реализуется под воздействием синхронизирующего сигнала.

Счетчики

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

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

Также счетчики широко применяются в качестве самостоятельных узлов в различных системах цифровой автоматики.

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

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

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

Параметром, определяющим информационную емкость счетчика, является модуль пересчета, равный числу внутренних состояний. Это значение проставляется на УГО (Условное Графическое Обозначение) после аббревиатуры CT.

Регистр хранения

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

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

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

- одновременную установку всех разрядов регистра в " 0 ";

- параллельную или последовательную загрузку регистра;

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

Регистр сдвига

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

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

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

 



Поделиться:


Читайте также:




Последнее изменение этой страницы: 2021-04-12; просмотров: 310; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.216.239.46 (0.162 с.)