Разработка узла с функцией перевода чисел из формата в формат
Разработка узла
с функцией перевода чисел из формата в формат
ВВЕДЕНИЕ
Режим
работы данного узла - преобразование чисел, поэтому стоит поговорить о самих
числах и их представлении в ЭВМ.
В
ЭВМ используются двоичные числа, которые не привычны обыкновенному человеку,
привыкшему к арабским - десятичным числам. Но для ЭВМ операции и само хранение
двоичных чисел более удобно. Двоичные числа - это числа, составленные из 0 и 1.
Например:
С
физической точки зрения, 1 можно представить как некоторый импульс/уровень
напряжения, а 0 - как отсутствие такового. Тогда, устанавливая некоторый порог
напряжения, можно все, что выше этого порога считать 1, а что ниже - 0. С
десятичными числами пришлось бы поступить сложнее - пришлось бы вводить
несколько пороговых уровней и на порядок усложнились бы все узлы и блоки ЭВМ.
Поэтому в современных ЭВМ используются двоичные числа и двоичная арифметика.
Также
в современных ЭВМ применяется шестнадцатиричная арифметика. Это связано с тем,
что очень легко выполнить преобразование из шестнадцатиричной системы
исчисления в двоичную и наоборот. Одна шестнадцатиричная цифра представляется
четыремя двоичными, например:
Принятая
минимальная единица информации в ЭВМ - 1 бит. Один бит равен одной двоичной
цифре. Более крупной единицей является байт. Один байт равен 8 битам.
Существуют и более крупные единицы - слово (2 байта), двойное слово (4 байта),
килобайт (1024 байта), мегобайт (1024 Кбайта) и т.д.
В
данном курсовом, все операции производятся с восьмиразрядными числами, т.е. с
числами, размером 1 байт.
Немного
надо сказать о представлении чисел в ЭВМ.
Числа
делятся на целые и вещественные. Это деление, конечно весьма условно, но хорошо
подходит для описания хранения и операций над числами в ЭВМ. Чтобы сильно не
углубляться в общности, рассмотрим конкретный вариант, используемый в данном
курсовом - размер чисел 8 байт.
Как
будут выглядеть целые числа - показано в вышеприведенных примерах. Как же будут
выглядеть вещественные числа?
Существует
3 наиболее распространенных варианта кодирования: прямой код, обратный код и
дополнительный код.
Далее
введем одно обозначение. Если после цифры стоит "d" - это десятичная
цифра, "b" - двоичная, а "h" - шестнадцатиричная.
Прямой
код - это так сказать "естественный" код, то есть 1d=0001b,
10d=1010b, 15d=1111b и т.д.
Обратный
код образуется из прямого путем инвертирования всех разрядов прямого кода,
например 1d=0001b в прямом=1110b в обратном, 10d=1010b в прямом=0101b в
обратном коде.
Дополнительный
получается из обратного, путем прибавления к младшему разряду 1.
Обычно,
прямой код используется для хранения положительных чисел, а обратный и
дополнительный - для отрицательных чисел.
В
нашем курсовом, вся работа с числами ведется в прямом коде.
Но
выше мы рассматривали только целые числа, а как поступить с дробными?
Существует
два возможных варианта хранения - в формате с фиксированной точкой и в формате
с плавающей точкой. Покажем "в живую" эти форматы на примере:
1.
С фиксированной точкой:
Но
таким образом большие вещественные числа хранить неудобно и неэффективно.
Поэтому используется второй вариант хранения:
2.
С плавающей точкой.
То
есть в формате с плавающей точкой хранится 2 числа порядок и мантисса. Так как
порядок может быть и отрицательным, то приняли еще одно правило: порядок всегда
смещенный. То есть если порядок колеблется от +128d до -127d то к порядку
всегда прибавляют 127d и тогда он колеблется в пределах от 0 до +255d и таким образом
нам не приходится хранить знак числа.
В
связи с такими разными форматами представления чисел в ЭВМ и был разработан
данный узел, задача которого - преобразование чисел из формата с фиксированной
точкой в формат с плавающей точкой.
ВЫБОР СТРУКТУРЫ
УЗЛА
Так
как по заданию ввод/вывод в данном узле должен происходить параллельно, то
потребуется 2 регистра (один для входных данных, один для выходных),
разрядность которых исходя из условия - 8 бит. Также, для промежуточных
результатов потребуется 1 восьмиразрядный регистр (для хранения и работы с
мантиссой) и один четырехразрядный регистр и один сумматор для обработки
порядка. Дополнительно также потребуется 13 элементов И-НЕ. Это пока все без
доказательства - оно будет позже. В качестве 8-ми разрядных регистров нам
хорошо подходят К155ИР13, в качестве 4-х разрядного - К155ИР1. Также мы
используем сумматор К155ИМ3, а для дополнительной логики 4 микросхемы К155ЛА3.
Итого вся схема собрана собрана, как и требовалось на микросхемах серии К155.
Альтернативный вариант схемы будет рассмотрен далее. Общая схема узла
приводится в приложении.
РАСЧЕТ
ПОСТРОЕНИЯ И ОПИСАНИЕ ПРИНЦИПИАЛЬНЫХ СХЕМ
Как
же именно, с моей точки зрения, должен работать данный узел? В целом его работу
можно описать так:
Обозначим:
1.
Число с фиксированной точкой
2.
Число с плавающей точкой
Учитывая
приведенные выше обозначения, общий принцип работы данного узла можно
изобразить так:
Словесно,
алгоритм преобразования можно описать так:
1.
Занесение исходных данных в регистр RG1.
2.
Занесение мантиссы числа с регистр RG2.
3.
Занесение 7d(111b) в регистр порядка RG4 (автоматический сдвиг на 4 разряда +
3, так как порядок смещенный).
4.
Нормализация результата:
а.
Если мантисса не нормализована, т.е. старший бит равен "0", то
сдвигаем мантиссу влево на 1 разряд с помощью регистра RG2 и с помощью
сумматора SM вычитаем 1 из регистра RG4, который содержит порядок числа и
заносим результат снова в регистр RG4. Возвращаемся к пункту 4.
б.
Если в старшем разряде мантиссы "1", то значит число нормализовано и
мы переходим к пункту 5.
5.
Занесение результата в регистр RG3
Это
было о алгоритме. Как же работает сама схема и отдельные ее части?
Сначала
о частях. Рассмотрим два элемента данной схемы: сумматор и регистр.
СУММАТОР
Формулы
для суммы и переноса и i-том разряде выглядят так:
S(i)=a*b*P(i-1)+a*b*P(i-1)+a*b*P(i-1)+a*b*P(i-1)
P(i)=a*b*P(i-1)+a*b*P(i-1)+a*b*P(i-1)+a*b*P(i-1),
где:
S(i)
- сумма в i-ом разряде,
P(i)
- перенос в i-ом разряде,
a,b
- слагаемые в i-ом разряде,
P(i-1)
- перенос из i-1 разряда.
Один
из вариантов схемы для реализации такого сумматора (точнее говоря элемента
сумматора для одного разряда, из которых можно построить сумматор любой
разрядности) выглядит так:
Формирователь
суммы (вариант комбинационного сумматора) :
Этот
элемент сумматора работает по несколько измененной формуле (в связи с базисом
реализации И-НЕ и И-ИЛИ-НЕ):
Можно
показать, что формирователь переноса строится абсолютно аналогично.
Затем
перенос из i-того разряда передается на (i+1)-ый разряд, а сумма i-того разряда
выводится. Соединяя такие блоки, можно получить сумматор любой разрядности.
Таким
образом, в представленном сумматоре сумма формируется параллельно, а перенос последовательно.
Данный сумматор не отличается высоким быстродействием, а для повышения
быстродействия используют так называемый сквозной и групповой перенос.
В
качестве элементов для такого сумматора можно взять микросхемы К155ЛА3 и две
К155ЛР4.
Возможно
также построение сумматоров на основе триггеров - тогда сумматор будет
накапливающим, то есть результат суммы будет доступен для считывания даже после
отключения входных сигналов.
РЕГИСТР
Регистры
в данном курсовом проекте используются для хранения и преобразования (сдвига)
мантиссы и порядка. В целом регистры делятся на параллельные, последовательные
и комбинированные. В нашем узле используются возможности как параллельных (для
хранения) так и последовательных (для сдвига) регистров.
Как
же строятся регистры? Регистры строятся на основании триггеров, количество
которых зависит от разрядности регистра.
Вот
пример простейшего параллельного однофазного регистра на RS-триггерах:
Эта
схема только для одного разряда, но соединив такие блоки можно получить регистр
любой разрядности. Условное обозначение для 4-х разрядного регистра:
Такой
регистр является 2-х тактным, поскольку ввод информации производится в 2 такта:
первым тактом на шину "Уст. 0" подается 0 сигнал для установки в 0
всех триггеров, при этом на шине "Ввод" - 0; вторым тактом
устанавливается 1 на шинах "Уст. 0" и "Ввод" и значения разрядов
X1,X2,..,X(i),.. записываются по входу S триггеров. Ввод - в прямом коде. Вывод
- как в прямом так и в обратном. Для вывода в нужном нам коде подается 1 на
нужную нам шину, причем одновременная подача 1 на обе шины запрещена.
Парафазный
регистр на RS-триггерах:
Также
как и в предыдущем случае (и как будет во всех последующих) это схема всего
одного разряда, соединяя которые вместе можно получить регистр любой
разрядности.
Отличие
данного регистра от предыдущего заключается в том, что ввод информации
осуществляется путем подачи "1" на шину "Ввод" без
предварительной установки в 0, т.е. за 1 такт. Это объясняется парафазным
представлением вводимого кода. Вывод также парафазный, для чего необходимо
подать 1 на шину "Вывод".
Однофазный
регистр на D-триггерах:
Значения
подаются на входы D соответствующих триггеров, а сигнал "Ввод"
подается подается на входы C, причем предварительная установка в "0"
не требуется.
Парафазный
регистр на JK-триггерах:
Вводимая
информация должна быть представлена в парафазном коде, а выводимая информация
может быть в прямом, обратном и парафазном виде. Данный регистр, как и
предыдущий, является однотактным.
Последовательные
регистры
(регистры
сдвига)
В
отличие от параллельных регистров, которые не связаны друг с другом,
параллельные регистры обязательно связаны между собой. По этим связям при
сдвиге информации каждый триггер передает свое состояние соседнему в направлении
сдвига триггеру и изменяет свое состояние, принимая состояние предыдущего
триггера. Информация может передаваться между триггерами как в однофазном так и
в парафазном виде, а сдвиг может производиться вправо либо влево для простых
регистров сдвига или в любом направлении для реверсивных регистров сдвига.
Как
же построить регистр данного вида? Для этого необходимо определить
взаимодействие между триггерами:
Для
D-триггера:
Для
сдвига влево используется формула: D(i)=Q(i+1). Строится такой регистр
аналогично.
Вот
формулы и схема для для аналогичного регистра на JK-триггерах:
Наиболее
экономичной для построения регистров сдвига является схема на D-триггерах,
которая требует в 2 раза меньше корпусов микросхем по сравнению со схемой на
JK-триггерах и в 2 раза меньше связей между триггерами за счет однофазной
передачи информации.
Реверсивный
сдвиговый регистр имеет схемы управления межтриггерными связями для чего обычно
используют элементы И-ИЛИ-НЕ. С помощью этих элементов в соответствии с
сигналами, управляющими направлением сдвига обеспечиваются связи между
триггерами для выполнения сдвига в заданном направлении.
В
нашем узле мы не будем конструировать сами ни сумматор ни регистры, поскольку
все нужные нам элементы уже содержатся в серии микросхем К155.
Теперь
перейдем к конкретному рассмотрению схемы нашего узла.
Входные
данные подаются на регистр RG1 в параллельном виде. Для этого на входы D1-D8 подаем
входные данные а на остальные: V1=V2=R=1, D(+)=D(-)=0. Тогда по приходу
синхроимпульса C1 данные со входов D1-D8 будут занесены в регистр. Общая схема
работы (с точки зрения синхроимпульсов) приведена ниже:
Затем,
как видно из вышеприведенной схемы, данные с выходов 2-8 регистра RG1 поступают
на входы D1-D7 регистра RG2, причем на вход D8 подается 0. Абсолютно
аналогично, то есть подав V1=V2=R=1, D(+)=D(-)=0 мы заносим данные (это
мантисса числа, которую нам надо нормализовать) по приходу синхроимпульса C2 в
регистр RG2. По приходу этого же синхроимпульса в регистр RG4 заносится 7d=111b
- это сразу смещенный порядок числа. Затем, начинается подача импульсов C3. Что
же происходит при этом? Здесь начинает работать логика на элементах И-НЕ. То
есть, проверяется содержится ли в старшем разряде мантиссы 0 (выход 1 регистра
RG2). Если да, то сихнроимпульс приходит на регистры RG2 и RG4. Это приводит к
тому, что мантисса, содержащаяся в регистре RG2 сдвигается на 1 разряд влево, а
информация из регистра RG4 поступает на сумматор, где из порядка вычитается 1 и
обратно заносится в регистр RG4. Таким образом мы разряд за разрядом
нормализуем мантиссу. Когда в старшем разряде мантиссы окажется 1, то сработает
логика на элементах И-НЕ и синхроимпульс C3 пойдет на регистр RG3, в который
попадут выходные данные: старший разряд с регистра RG1 (знак), четыре разряда с
регистра RG2 (мантисса) и три разряда с регистра RG4 (порядок). Для обеспечения
работы регистра RG2 в параллельном и последовательном режиме на входе узла
имеется управляющий вход V2. В начале работы, для обеспечения параллельного
занесения из регистра RG1 в RG2 на вход V2 должна подаваться 1, а затем, для
сдвига влево, должен подаваться 0. В регистре RG4, для обеспечения
параллельного занесения на входы D0, V и C1 подается 1. Занесение 0111b (07d) в
регистр RG4 происходит при появлении синхроимпульса C2, который не только
обеспечивает занесение 7d в регистр порядка но и обеспечивает занесение в
регистр RG2 мантиссы, а синхроимпульсы C3 отвечают за нормализацию мантиссы и
за занесение выходных данных в регистр RG3 (это так сказать
"выходной" регистр, с которого снимаются результаты преобразования).
Временная
диаграмма для конкретного примера приводится в приложении, однако в несколько
сокращенном виде поскольку полную временную диаграмму привести практически
очень тяжело поскольку она будет занимать очень большой размер, да и это
ненужно потому что некоторые внутренние входы/выходы практически никакой
смысловой нагрузки не несут.
Более
подробное описание логики (уже на основе конкретной схемы, приведенной в
приложении и на основе позиционных обозначений микросхем) следует далее:
Как
было описано выше, после появления синхроимпульса на входе XP6 (C1) входные данные
с шины XP5 заносятся в регистр D1. После чего появляется сигнал XP8 (C2)
который заносит значения 2-8 регистра D1 (мантисса) в регистр D2. Надо помнить,
что при этом управляющий вход XP7 (управление регистром, V2) подана 1. Кроме
того, сигнал XP8, проходит через логику на элементах D6.1-D6.3, D7.1-D7.3,
которые появляются на входах d1-d3 регистра D4. После пропадания сигнала XP8 по
заднему фронту в регистр D4 заносится значение 0111b (07d). Затем
синхроимпульсы появляются на входе XP9 (C3). На логике D8.3 старший разряд
регистра D2 инвертируется и поступает совместно с XP9 на элементы D6.4 и D7.4.
Если в старшем разряде регистра D2 содержится 0, то данная логика сработает и
на входах C1 регистра D4 и C регистра D2 возникнет синхроимпульс. На входе XP7 (управление
регистром) у нас уже 0. Это приводит к тому, что значение в регистре D2
сдвинется влево на один разряд. Выходные данные с регистра D4 уже прошли через
сумматор D5 и (всвязи с тем, что каждый четный выход у этого сумматора
инверсный) логику на элементах D8.1, D8.2 поступили на вход регистра D4. В
сумматоре данные складываются со значением 1111b (-1d), то есть фактически
вычитается 1. Итак, эти данные уже поступили на вход регистра D4 и после
прихода синхроимпульса на C2 эти данные в параллельном виде заносятся в регистр
D4.
В
эти же моменты времени у нас работает логика на элементах D8.4, D9.1, которая
проверяет, а не появилась ли у нас в старшем разряде регистра D2 единица?
Пока
в старшем разряде D2 будет появляться 0 - будет идти сдвиг мантиссы и вычитание
из порядка 1. Но как только в старшем разряде регистра D2 появится 0, то
сработает логика на элементах D6.4 и D7.4 которая прекратит подачу
синхроимпульсов и преобразования над мантиссой и порядком. С другой стороны,
сработает логика на регистрах D8.4 и D9.1 и синхроимпульс XP9 (C3) появится на
входе регистра D3, что приведет к занесению результатов преобразования в
регистр D3 (старший разряд из регистра D1 - знак, 4 разряда из регистра D2 -
мантисса и 3 разряда из регистра D4 - порядок).
Все
преобразования закончились и узел готов к следующему преобразованию.
Возможен
также альтернативный вариант схемы: вместо связки регистр-сумматор можно
использовать синхронный вычитающий счетчик с возможностью параллельного
занесения информации. Тогда порядок подавался бы в на этот счетчик, а при
преобразовании (сдвиге) мантиссы из порядка вычиталась бы 1. Данный,
альтернативный вариант хотя и на порядок проще, однако и работает он медленнее,
так как вычитающий счетчик работает медленнее чем пара регистр-сумматор.
АНАЛИЗ
БЫСТРОДЕЙСТВИЯ
Временная
диаграмма для конкретного числа (1 0010 101) приведена в приложении, а мы
займемся быстродействием.
1.
Занесение данных в регистр D1 - 30 нс.
2.
Занесение данных в регистры D2, D4:
а.
D2: 30 нс.
б.
D4: логика И-НЕ - 15+22 нс=37 нс и занесение в регистр
35
нс.
3.
Работа логики D8.3: 22 нс; D8.4+D9.1=37 нс (просиходит
параллельно
с пунктом 4a).
4.
Обработка порядка и мантиссы:
а.
Сдвиг в регистре D2: 30 нс.
б.
Порядок: сумматор, логика И-НЕ, параллельное занесение
в
регистр: 55+22+35=112
5.
Занесение информации в регистр D3: 30 нс.
То
есть при худшем раскладе - 6 преобразований над мантиссой и порядком, суммарное
быстродействие узла:
30+72+112*6+30=804
нс.
То
есть максимальная частота преобразования=1,24 МГц.
ЗАКЛЮЧЕНИЕ
В
данном курсовом проекте был разработан узел, который выполняет функцию перевода
чисел из формата с фиксированной точкой в формат с плавающей точкой.
Построенный
узел выполняет поставленную функцию и хотя и не является оптимальным, но
работает при данных условиях (как максимальная частота преобразования, так и
реализация на микросхемах серии К155 и т.д.). Если критичны затраты по
элементам, то более предпочтителен альтернативный вариант, а если по времени -
то основной.
ЛИТЕРАТУРА
1.
Каган Б.М., Электронные вычислительные машины и системы, М. 1991 год.
2.
Рахимов Т.М., Справочник по микросхемам серии К155, Новосибирск 1991 год.
3.
Иванов Л.Н., Пентегов В.В., Архитектура вычислительных систем и сетей. Методические
указания к курсовому проектированию, Новосибирск 1986 год.
ВРЕМЕНННАЯ
ДИАГРАММА РАБОТЫ УЗЛА
ДЛЯ ЧИСЛА 1 0010
101