Разработка узла с функцией перевода чисел из формата в формат

Разработка узла с функцией перевода чисел из формата в формат



ВВЕДЕНИЕ



 Режим работы данного узла - преобразование чисел, поэтому стоит поговорить о самих числах и их представлении в ЭВМ. 

 В ЭВМ используются двоичные числа, которые не привычны обыкновенному человеку, привыкшему к арабским - десятичным числам. Но для ЭВМ операции и само хранение двоичных чисел более удобно. Двоичные числа - это числа, составленные из 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