Главы из книги «Параллельная обработка данных».

Приложение 2. Некоторые примеры реально используемых при логическом проектировании комбинационных схем

В качестве примера рассмотрим построение в базисе «И», «ИЛИ», «НЕ» двух реально используемых во многих сложных цифровых устрой­ствах логических блоков - дешифратора и мультиплексора [47]. Дешифратором из n в два в степени n называется схема с числом входов, равным n, и числом выходов, равных двум в степени n.

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

Рассмотрим, например, дешифратор из двух в четыре. Как следует из названия и определения, у него два входа и четыре выхода. Два входа можно рассматривать как двузначное двоичное число, принимающее значения в диапоне от 0 до 3. Выходы же можно занумеровать от 0 до 3. Если на входе имеем число 2, то дешифратор должен сделать выходы с номерами 0, 1 и 3 равными нулю, а выход номер 2 - равным единице.

Для начала нам потребуется научиться рисовать схемы из вентилей. Вентили имеют стандартные обозначения, которые приводятся ниже. В правом столбце таблицы приводятся обозначения, принятые в отече­ственной схемотехнике во времена СССР, если они отличаются от ис­пользуемых в настоящее время (рис. П2.1).

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

   
Рис. П2.1.
Графические обозначения вентилей
    Рис. П2.2.
Дешифратор из двух в четыре
Легко убедиться, что приведенная на рис. П2.2 комбинационная схема действительно реализует дешифратор из двух в четыре.

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

Мультипплексором k линий, шириной n каждая, в одну линию шириной n называется устройство, которое подает на свой выход одну из k входных линий, если соответствующий сигнал разре­шения равен 1. Под линией здесь понимается, вообще говоря, не един­ственный провод, а жгут проводов определенной ширины. Рассмотрим мультиплексор двух входных линий, шириной 3 каждая, в одну (рис. П2.3). Поскольку каждая входная линия состоит из трех проводов и снабжена дополнительным проводом для передачи сигнала разреше­ния, у нашего мультиплексора будет 8 входов. Выходов будет 3.

По предложенной схеме видно, что сигнал разрешения, равный 0, делает выходы вентилей «И» на соответствующей входной линии рав­ными нулю. Поскольку такие выходы «собираются» вместе через вен­тили «ИЛИ», на выходе схемы остаются в точности те значения, кото­рые были на единственной линии, сигнал разрешения которой ра­вен 1.

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

Рис. П2.3.
Мультиплексор двух трехпроводных линий в одну (буквой «Е» обозначены линии разрешения. Под каждой из них показана трехпроводная линия, управляемая этой линией разрешения)
равен более чем один сигнал разрешения, на выходной линии окажется результат поразрядного логического «ИЛИ» всех линий, разрешенных в данный момент. Легко видеть, что если сигналы разрешения берутся, например, с некоторого дешифратора номера линии, то такой непри­ятности никогда не произойдет.

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

Устройства памяти с асинхронным чтением используются в совре­менных FPGA как базисный элемент для построения комбинационных схем, т. е. вместо вентилей. Функционально такое устройство представ­ляет собой произвольно адресуемый по индексу одномерный массив слов памяти определенной разрядности. Рассмотрим в качестве при­мера работу 4-словного устройства памяти с разрядностью слова в 1 бит.

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

Пару значений на линиях адреса можно рассматривать, как дву­значное двоичное число. Работа устройства памяти состоит в том, что значение ячейки с номером, равным этому числу, просто подается на выход. Например, если на входе имеется число 3 ( оба входа равны 1), то на выходе немедленно оказывается значение, хранящееся в третьей ячейке массива.

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

Например, мы знаем, что при нулевых значениях входов дешифра­тора нулевой выход должен принять значение 1, а остальные выходы - значение 0. Следовательно, в нулевой бит нулевого устройства памяти мы запишем единицу, а в ну левые биты остальных устройств памяти - нули. Соответственно, в первые биты устройств памяти с номерами 0, 2 и 3 запишем нули, а в первый бит первого устройства памяти - еди­ ницу. Этим мы добьемся того, что при появлении на входах кода «01», т.е. двузначного двоичного числа «1», единице будет равен первый выход, а остальные - нулю, что и требовалось. С двумя оставшимися битами всех устройств памяти поступим аналогично. Тот факт, что мы строим именно дешифратор, для общего хода рассуждений значения не имеет. Ровно тем же способом мы могли бы построить любую ком­бинационную схему с двумя входами и четырьмя выходами, если нам известна ее таблица истинности. Тот факт, что в современных FPGA на аппаратном уровне используется именно такой, а не вентильный, базис, конечно, не означает, что структурное логическое проектирова­ние для них следует вести именно в таком базисе. Все базисы эквивалентны, и САПР легко переводит один в другой при необходимости. Так что разработчик схемы «в регистрах» вполне может считать, что в его распоряжении привычные «И», «ИЛИ», «НЕ»(рис.П2.4).

Отметим, что наш мультиплексор, если бы мы захотели реализовать его таким способом , потребовал бы трёх устройств памяти из 256 бит каждое. В самом деле, выходов у него три, а число возможных комбинаций значений на трёх входах, для каждой из которых надо запомнить требуемое выходное значение, равно 256 (2 в степени, равной числу входов).

Мы построим альтернативный вариант реализации мультиплексора другим способом, с использованием ещё одного базисного элемента —

   
Рис. П2.4.
Дешифратор из двух в четыре на базе таблиц истинности, хранимых в асинхронной памяти.
    Рис. П2.5.
Мультиплексор на тристабильных формирователях, или шина.
тристабильного формирователя. Этот элемент не является ло­гическим, т.е. построить отдельно взятый тристабильный формирова­тель из вентилей в принципе нельзя. В то же время комбинационные схемы, выполненные на таких элементах, конечно, можно построить и без их помощи.

Тристабильный формирователь представляет собой электронный ключ. У него два логических входа - управляемый сигнал и сигнал разрешения (при графическом изображении его рисуют входящим в пиктограмму формирователя снизу). Выход тристабильного формиро­вателя логическим не является, поскольку принимает одно из трех (а не двух) значений: 0, 1 или «разрыв линии», или «третье состояние». Если сигнал разрешения равен 1, то выход принимает логическое зна­чение, равное значению входа управляемого сигнала, т. е. элемент ведет себя так, как если бы управляемый сигнал и выход были просто соеди­нены проводом. Если же сигнал разрешения равен О, то выход пере­ходит в «третье состояние», т. е. ведет себя на электрическом уровне так, как будто бы провод, соединяющий управляемый сигнал с выходом, был перерезан. Это свойство тристабильного формирователя позволя­ет объединять выходы нескольких тристабильных формирователей, т.е. подавать несколько таких выходов на один и тот же вход некото­рого логического элемента. Конечно, схема управления сигналами разрешения таких объединенных по выходам формирователей должна быть построена так, чтобы никакие два из них не были одновременно равны 1. В противном случае схема некорректна электрически, и может, вообще говоря, просто сгореть.

Схема мультиплексора на тристабильных формирователях приве­дена на рис. П2.5.

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

Тристабильные формирователи включаются в состав базисных элементов современных FPGA. При необходимости САПР может ис­пользовать их напрямую, но может и обходиться без них, заменяя схемы на тристабильных формирователях эквивалентными схемами на базе вентилей (например, заменяя шину мультиплексором).

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

Для выражения описанной здесь техники на уровне логического проектирования, например, при записи функционирования схемы на языке VHDL, необходимо расширить набор значений логического сиг­нала. Если для проектирования в терминах вентилей или устройств памяти с асинхронным чтением нам достаточно было двузначной ло­гики, со значениями «0» и «1», то теперь нам известно, как минимум, еще три необходимых значения: «третье состояние», «слабый 0» и «слабая 1».

◄ Глава 12. Технологии программируемой логики сегодня. Приложение 3. ►

 
 
 
 
 
 
 
 
  Тел. +7(499)220-79-72; E-mail: inform@kiam.ru  
▲