Смекни!
smekni.com

Узел преобразования чисел (стр. 1 из 3)

ВВЕДЕНИЕ

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

стоит поговорить о самих числах и их представлении в ЭВМ.

В ЭВМ используются двоичные числа, которые не привычны

обыкновенному человеку, привыкшему к арабским - десятичным

числам. Но для ЭВМ операции и само хранение двоичных чисел бо-

лее удобно. Двоичные числа - это числа, составленные из 0 и 1.

Например:

Десятичные числа Двоичные числа

0 0

1 1

2 10

3 11

4 100

5 101

6 110

и т.д.

С физической точки зрения, 1 можно представить как неко-

торый импульс/уровень напряжения, а 0 - как отсутствие таково-

го. Тогда, устанавливая некоторый порог напряжения, можно все,

что выше этого порога считать 1, а что ниже - 0. С десятичными

числами пришлось бы поступить сложнее - пришлось бы вводить

несколько пороговых уровней и на порядок усложнились бы все

узлы и блоки ЭВМ. Поэтому в современных ЭВМ используются дво-

ичные числа и двоичная арифметика.

Также в современных ЭВМ применяется шестнадцатиричная

арифметика. Это связано с тем, что очень легко выполнить пре-

образование из шестнадцатиричной системы исчисления в двоич-

ную и наоборот. Одна шестнадцатиричная цифра представляется

четыремя двоичными, например:

Десятичные Двоичные Шестнадцатиричные

1 0001 1

9 1001 9

10 1010 A

11 1011 B

12 1100 C

15 1111 F

и т.д.

Принятая минимальная единица информации в ЭВМ - 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. С фиксированной точкой:

5.8 d = 0 0101 110 b

T -T-- -T-

¦ ¦ L--- цифры после запятой (.8)

¦ L-------- цифры до запятой (5.0)

L----------- знаковый разряд (0='+', 1='-')

Но таким образом большие вещественные числа хранить не-

удобно и неэффективно. Поэтому используется второй вариант

хранения:

2. С плавающей точкой.

5.8 d = 0 1001 011 b

T -T-- -T-

¦ ¦ L--- порядок числа

¦ L-------- мантисса числа

L----------- знаковый разряд

То есть в формате с плавающей точкой хранится 2 числа -

порядок и мантисса. Так как порядок может быть и отрицатель-

ным, то приняли еще одно правило: порядок всегда смещенный. То

есть если порядок колеблется от +128d до -127d то к порядку

всегда прибавляют 127d и тогда он колеблется в пределах от 0

до +255d и таким образом нам не приходится хранить знак числа.

В связи с такими разными форматами представления чисел в

ЭВМ и был разработан данный узел, задача которого - преобразо-

вание чисел из формата с фиксированной точкой в формат с пла-

вающей точкой.

ВЫБОР СТРУКТУРЫ УЗЛА

Так как по заданию ввод/вывод в данном узле должен проис-

ходить параллельно, то потребуется 2 регистра (один для вход-

ных данных, один для выходных), разрядность которых исходя из

условия - 8 бит. Также, для промежуточных результатов потребу-

ется 1 восьмиразрядный регистр (для хранения и работы с ман-

тиссой) и один четырехразрядный регистр и один сумматор для

обработки порядка. Дополнительно также потребуется 13 элемен-

тов И-НЕ. Это пока все без доказательства - оно будет позже. В

качестве 8-ми разрядных регистров нам хорошо подходят

К155ИР13, в качестве 4-х разрядного - К155ИР1. Также мы ис-

пользуем сумматор К155ИМ3, а для дополнительной логики 4

микросхемы К155ЛА3. Итого вся схема собрана собрана, как и

требовалось на микросхемах серии К155. Альтернативный вариант

схемы будет рассмотрен далее. Общая схема узла приводится в

приложении.

РАСЧЕТ ПОСТРОЕНИЯ И ОПИСАНИЕ

ПРИНЦИПИАЛЬНЫХ СХЕМ

Как же именно, с моей точки зрения, должен работать дан-

ный узел? В целом его работу можно описать так:

Обозначим:

1. Число с фиксированной точкой

S1.I1.R1

¦ ¦ L-- цифры после запятой, 3 разряда

¦ L----- цифры до запятой, 4 разряда

L-------- знак, 1 разряд

2. Число с плавающей точкой

S2.M2.P2

¦ ¦ L-- порядок, 3 разряда

¦ L----- мантисса, 4 разряда

L-------- знак, 1 разряд.

Учитывая приведенные выше обозначения, общий принцип ра-

боты данного узла можно изобразить так:

Входные¦S1¦-------------+знак+------------->¦S2¦Выходные

данные ¦I1¦--¬ ----------¬ -->¦M2¦данные

¦R1¦-¬¦ ¦хранение ¦ ¦->¦P2¦

¦L->¦и работа ¦-¬ ---------¬ ¦¦

L-->¦с мантис-¦ ¦ ¦нормали-¦--¦

¦сой числа¦ L>¦зация ¦ ¦

L---------- ->¦резуль- ¦---

----------¬ ¦ ¦тата ¦

¦хранение ¦ ¦ L---------

¦и работа ¦--

¦с поряд- ¦

¦ком числа¦

L----------

Словесно, алгоритм преобразования можно описать так:

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 разряда.

Один из вариантов схемы для реализации такого сумматора

(точнее говоря элемента сумматора для одного разряда, из кото-

рых можно построить сумматор любой разрядности) выглядит так:

Формирователь суммы (вариант комбинационного сумматора) :

P(i-1)-T--------------------¬ --T-----¬

¦ L---T-+&¦1 ¦

a----T-+---------T--------------+-+ ¦ ¦

¦ ¦ ¦ --T+-+ ¦ ¦

b----+T+---------+------------ ¦¦ +-+ O-¬

¦¦¦ ----¬ L-------------++-+&¦ ¦ ¦

¦¦¦--+& ¦ ------------T++-+ ¦ ¦ ¦

¦¦L+ ¦ O---- ---+++-+ ¦ ¦ ¦

¦¦ L-+ ¦ ----¬ ¦ ¦¦¦ L-+------ ¦ ----¬

¦¦ L---- --+& ¦ ¦ ¦¦¦ --T-----¬ L--+& ¦

¦L------------+ ¦ O-+ ¦L+-+&¦1 ¦ ¦ O-- S(i)

¦ ----¬ L-+ ¦ ¦ L-+-+ ¦ ¦ ---+ ¦

¦ --+& ¦ L---- ¦ ---+-+ ¦ ¦ ¦ L----

L--+ ¦ O-------¬ ¦ ¦ ¦ +-+ O--

L-+ ¦ ¦ ¦ ¦ L-+&¦ ¦

L---- L----+-+----+ ¦ ¦

L------+ ¦ ¦

L-+------

Этот элемент сумматора работает по несколько измененной

формуле (в связи с базисом реализации И-НЕ и И-ИЛИ-НЕ):

_______________________________________________

_____________________ _____________________

_ _ _ _ _ _

S(i)=(a*b*P(i-1)+a*b*P(i-1))*(a*b*P(i-1)+a*b*P(i-1))

Можно показать, что формирователь переноса строится абсо-

лютно аналогично.

Затем перенос из i-того разряда передается на (i+1)-ый

разряд, а сумма i-того разряда выводится. Соединяя такие бло-

ки, можно получить сумматор любой разрядности.

Таким образом, в представленном сумматоре сумма формиру-

ется параллельно, а перенос последовательно. Данный сумматор

не отличается высоким быстродействием, а для повышения быстро-

действия используют так называемый сквозной и групповой пере-

нос.

В качестве элементов для такого сумматора можно взять

микросхемы К155ЛА3 и две К155ЛР4.

Возможно также построение сумматоров на основе тригге-

ров - тогда сумматор будет накапливающим, то есть результат

суммы будет доступен для считывания даже после отключения

входных сигналов.

РЕГИСТР

Регистры в данном курсовом проекте используются для хра-

нения и преобразования (сдвига) мантиссы и порядка. В целом

регистры делятся на параллельные, последовательные и комбини-

рованные. В нашем узле используются возможности как параллель-

ных (для хранения) так и последовательных (для сдвига) регист-

ров.

Как же строятся регистры? Регистры строятся на основании

триггеров, количество которых зависит от разрядности регистра.

Параллельные регистры.

Вот пример простейшего параллельного однофазного регистра

на RS-триггерах:

Вывод прямого кода----------------T---------------------------

Ввод---T--------------------------+---------------------------

¦ ----¬ ----T------¬ ¦ ----¬

L-+& ¦ ¦ ¦ TT ¦ L-+& ¦

¦ O-----O S ¦ +-¬ ¦ O-------¬

X(i) ---+ ¦ ¦ ¦ ¦ L---+ ¦ ¦