Проектирование универсального процессора

Процесс разработки универсального процессора ЭВМ с фиксированной системой команд и форматами данными. Обоснование выбранных форматов данных. Изучение форматов команд при разработке ВМ. Использование сегментных регистров. Режимы процессора и памяти.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 05.02.2013
Размер файла 1,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Курсовой проект

Проектирование универсального процессора

Буякова Е., Пермякова А.

рук. Вожегов Д.В.

Киров, 2012

Содержание

Введение

1. Постановка задачи

2. Разработка архитектуры процессора

2.1 Выбор и обоснование форматов данных

2.2 Выбор способов адресации

2.3 Выбор форматов команд

2.4 Разработка системы команд

2.5 Определение внутренних регистров процессора

2.5.1 Регистры общего назначения

2.5.2 Управляющие регистры

2.5.3 Регистры сегментов

2.5.4 Регистры системных адресов

3. Разработка функциональных схем отдельных устройств

4. Расчетная часть

4.1 Расчёт быстродействия

4.2 Расчёт надёжности аппаратуры процессора

4.3 Расчет потребляемой мощности процессора

Введение

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

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

- Быстродействие - 6,0 млн. оп/сек;

- Объем ОЗУ - 256 Мбайт;

- Время доступа к памяти - 150 нс;

- Ширина выборки из памяти - 64 бит;

- Формат данных с ФЗ - 8/16/32/64 бит;

- Формат данных с ПЗ - 64 бит;

- Количество маскируемых запросов - 24;

- Уровень вложенности - 8;

- Количество немаскируемых запросов - 4;

- Виды адресации - не менее 7.

1. Постановка задачи

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

Цель работы - разработка универсального процессора с заданным быстродействием на основе существующих микропроцессорных комплектов и ТТЛ-серий.

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

- использование и применение знаний, полученных в ходе изучения дисциплин «Организация ЭВМ и систем» и «МПС»;

- рассмотрение уже готовых решений некоторых фирм для достижения поставленной цели.

2. Разработка архитектуры процессора

2.1 Выбор и обоснование форматов данных

В соответствии c заданием процессор должен работать со следующими типами данных: 8-, 16-, 32- или 64-разрядные числа в формате с ФЗ и 64-разрядное слово в формате с ПЗ. За основу процессора выбрана 64-разрядная архитектура - внутренние магистрали процессора 64-разрядные.

8-битные, 16-битные и 32-битные данные при передаче по МД располагаются в младших разрядах. Целые числа без знака представлены в прямом коде (ПК), целые числа со знаком - в дополнительном коде (ДК). Процессор не различает числа со знаком и без знака, это решает программист. Ниже рассмотрены используемые форматы данных:

1) Байт без знака. Диапазон представления чисел от 0 до 255 (рисунок 1 а).

2) Байт со знаком. Диапазон представления чисел от -128 до 127 (рисунок 1 б).

3) Слово без знака. Диапазон представления чисел от 0 до 65535 (рисунок 2 а).

4) Слово со знаком. Диапазон представления чисел от -32768 до 32767 (рисунок 2 б).

5) Двойное слово без знака. Диапазон представления чисел от 0 до 4294967295 (рисунок 3 а).

6) Двойное слово со знаком. Диапазон представления чисел от -2147483648 до 2147483647 (рисунок 3 б).

7) Учетверенное слово без знака. Диапазон представления чисел от 0 до 18446744073709551616 (рисунок 4 а).

8) Учетверенное слово со знаком. Диапазон представления чисел от -9223372036854775808 до 9223372036854775807 (рисунок 4 б).

9) Числа в формате с ПЗ.

Данные такого типа состоят из знака, положительной мантиссы (52 бита) и смещенного порядка (11 бит). Формат числа с ПЗ представлен на рисунке 5.

2.2 Выбор способов адресации

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

В данном проекте предусмотрены следующие виды адресации:

1) Непосредственная адресация

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

ADD CX, 5

2) Регистровая адресация

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

MOV AX, BX

3) Прямая адресация

Адрес операнда находится в адресном поле команды.

MOV AX, [смещение]

4) Косвенная регистровая адресация

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

CMP AX, [DX]

5) Базово-индексная автоинкрементная адресация

После выполнения команды содержимое индексного регистра автоматически увеличивается на единицу.

MOV [BP][SI] ++, АХ

6) Базово-индексная автодекрементная адресация

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

MOV [BX][DI]--, AX

7) Базовая регистровая адресация

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

ADD AX, [BX] +1234h

8) Индексная адресация

Адрес операнда определяется суммированием содержимого индексного регистра и смещения.

ADD AX, [SI]+1234h

Вычисление исполнительного адреса для каждого из видов адресации приведено в таблице 1, где:

С (смещение) - число, включенное в команду;

Б (база) - содержимое базового регистра (обычно используется для указания на начало некоторого массива);

И (индекс) - содержимое индексного регистра.

Таблица 1 - Виды адресации:

Способ адресации

Эффективный адрес

1

Непосредственная

Операнд в команде

2

Регистровая

Операнд в регистре

3

Прямая

ЕА:=[смещение]

4

Косвенная регистровая

ЕА:=[РЕГ]

5

Базово-индексная автоинкрементная

ЕА:=Б+И, И:=И+1

6

Базово-индексная автодекрементная

ЕА:= Б+И, И:=И-1

7

Базово-регистровая

ЕА:=Б+С

8

Индексная

ЕА:=И+С

2.3 Выбор форматов команд

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

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

Также необходимо учитывать достаточный объём пространства в формате команды для выражения всех требуемых операндов.

Чтобы обеспечить гибкости системы команд с точки зрения программирования, но в то же время, исключить слишком длинные инструкции, решено ввести 3 основных формата команд: 2-х, 1-но и без- адресные, что позволяет оптимально закодировать все команды, наиболее полно используя код операции (КОП). Для простоты дешифрации в процессоре принята фиксированная длина основной части командного слова - 2 байта.

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

1) Двухадресные команды

В двухадресных командах есть следующие типы команд: регистр - регистр, регистр - память, регистр - непосредственный операнд (НО).

Назначение полей команды: КОП (5 бит: 15-11) - код операции;

- Ф (2 бита: 9,8) - разрядность операндов: 00 - 8 бит, 01 - 16 бит, 10 - 32 бит, 11 - 64 бит;

- Н (1 бит: 10) - направление пересылки результата: 1 - в память / 0 - в регистр;

- РЕГ1 (3 бита: 2-0), РЕГ2 (3 бита: 5-3) - номер регистра (таблица 2);

- СА1 (2 бита: 7,6), СА2 (3 бита: 5-3) - используемые способы адресации (таблица 3);

Таблица 2 - Кодирование РОН в командах:

Рег/Ф

00

01

10

11

000

AL

AX

EAX

RAX

001

BL

BX

EBX

RBX

010

CL

CX

ECX

RCX

011

DL

DX

EDX

RDX

100

AH

DI

EDI

101

BH

SI

ESI

110

CH

BP

EBP

111

DH

SP

ESP

Таблица 3 - Способы адресации второго операнда в двухадресных командах:

CА2/CА1

00

01

10

11

000

M[EAX]

[SI+C]

[BX+DI+C]

EAX /AX /AL

001

M[EBX]

[DI+C]

[BP+SI+C]

EBX /BX /BL

010

M[ECX]

[BP+C]

НО

ECX /CX /CL

011

M[EDX]

[BX+C]

M[смещение]

EDX /DX /DL

100

M[ESI]

[BX+SI]++

EBP /BP /AH

101

M[EDI]

[BX+DI]++

ESP /SP /BH

110

[BX+SI]

[BX+SI]--

ESI /SI /CH

111

[BX+DI]

[BX+DI]--

EDI /DI /DH

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

2) Одноадресные команды

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

Назначение полей в данном формате команды то же, что и в формате двухадресной команды. Используются виды адресации, приведённые в таблице 4.

Таблица 4 - Способы адресации второго операнда в одноадресных командах:

ПА2\ПА1

00

01

10

11

000

M[EAX]

[SI+C]

[BX+DI+C]

EAX /AX /AL

001

M[EBX]

[DI+C]

[BP+SI+C]

EBX /BX /BL

010

M[ECX]

[BP+C]

НО

ECX /CX /CL

011

M[EDX]

[BX+C]

M[смещение]

EDX /DX /DL

100

M[ESI]

[BX+SI]++

EBP /BP /AH

101

M[EDI]

[BX+DI]++

ESP /SP /BH

110

[BX+SI]

[BX+SI]--

ESI /SI /CH

111

[BX+DI]

[BX+DI]--

EDI /DI /DH

3) Безадресные команды

4) Команды для сопроцессора

В данном курсовом форматы этих команд не разрабатываются. Они должны определяться процессором по равным 1 битам 15, 14 и 8, а затем передаваться в сопроцессор.

2.4 Разработка системы команд

Согласно ТЗ, процессор должен быть универсальным, поэтому в систему команд должны входить команды для решения широкого круга задач. Как уже упоминалось ранее, в ПР предусмотрено 3 формата команд. Благодаря 10 различным видам адресации и представленному ниже набору команд, ПР удовлетворяет заданному требованию. В общем наборе команд присутствуют арифметические и логические команды, команды перехода (по различному условию), команды управления и пересылки данных.

1) Двухадресные команды:

- Арифметические (таблица 5)

Таблица 5:

Код операции

Мнемоника

Описание

0000

ADD X,Y

сложение

0001

AD X,Y

сложение с переносом

0010

SUB X,Y

вычитание

0011

SB X,Y

вычитание с переносом

- Логические (таблица 6)

Таблица 6:

Код операции

Мнемоника

Описание

0100

AND X,Y

логическое «И»

0101

OR X,Y

логическое «ИЛИ»

0110

XOR X,Y

«исключающее ИЛИ»

- Пересылки (таблица 7)

Таблица 7:

Код операции

Мнемоника

Описание

0111

MOV X,Y

пересылка операнда Y на место X

1000

LDA X,Y

загрузка ЭА в регистр

- Сдвига (таблица 8)

Таблица 8:

Код операции

Мнемоника

Описание

1001

ROL X,C

циклический сдвиг влево

1010

ROR X,C

циклический сдвиг вправо

1011

SAL X,C

арифметический сдвиг влево

1100

SAR X,C

арифметический сдвиг вправо

1101

SHL X,C

логический сдвиг влево

1110

SHR X,C

логический сдвиг вправо

- Сравнения (таблица 9)

Таблица 9:

Код операции

Мнемоника

Описание

1111

CMP X,Y

сравнение операндов

Итого: 16 двухадресных команд

2) Одноадресные команды

- Арифметические (таблица 10)

Таблица 10:

Код операции

Мнемоника

Описание

0000 000

INC X

Инкремент

0001 000

DEC X

Декремент

0010 000

DIV X

Деление

0011 000

MUL X

Умножение

0100 000

IDIV X

Деление со знаком

0101 000

IMUL X

Умножение со знаком

- Логические (таблица 11)

Таблица 11:

Код операции

Мнемоника

Описание

0110 000

NEG X

Инверсия знака операнда

0111 000

NOT X

Инверсия операнда

- Передачи управления (таблица 12)

Таблица 12:

Код операции

Мнемоника

Описание

1000 000

CALL A

Вызов подпрограммы

1001 000

FAR A

Дальний вызов

1010 000

LOOP A

Переход, пока CX<>0

1011 000

JMP A

Условный переход

- Команды условного перехода (таблица 13)

Таблица 13:

Код операции

Мнемоника

Условие перехода

Описание

1100 000

JC A

CF=1

Если перенос

1101 000

JNC A

CF=0

Если нет переноса

1110 000

JE A

ZF=1

Если равно

1111 000

JZ A

Если 0

0000 001

JNE A

ZF=0

Если не равно

0000 010

JNZ A

Если не 0

0000 011

JS A

SF=1

Если знак минус

0000 100

JNS A

SF=0

Если знак плюс

0000 101

JO A

OF=1

Если переполнение

0000 110

JNO A

OF=0

Если нет переполнения

0000 111

JG A

ZF = 0 и SF = OF

Если больше

0001 001

JL A

SF <> OF

Если меньше

- Прочие (таблица 14)

Таблица 14:

Код операции

Мнемоника

Описание

0001 010

IN N

Чтение из порта

0001 011

OUT N

Запись в порт

0001 100

POP X

Извлечение из стека

0001 101

PUSH X

Загрузка в стек

- Работа с АП (таблица 15)

Таблица 15:

Код операции

Мнемоника

Описание

0001 110

INT N

Программное прерывание

0001 111

VEC X

Сохранение вектора

0010 001

LRM X

Загрузка регистра маски

0010 010

SRM X

Сохранение регистра маски

0010 011

LRS X

Загрузка регистра состояния

0010 100

SRS X

Сохранение регистра состояния

00111

STI

разрешение прерывание

01000

CLI

запрещение прерываний

Итого:

34 одноадресные команды.

3) Безадресные команды (таблица 16)

Таблица 16:

Код операции

Мнемоника

Описание

00001

NOP

нет операции

00010

PUSHF

Сохранение PSW

00011

POPF

Загрузка PSW

00011

HLT

останов процессора

00100

RET

возврат из ПП

00101

FARRET

возврат из ПП

00110

IRET

возврат из прерывания

11000 FL

STF FL

установка флага

11001 FL

CLF FL

сброс флага

11010 FL

INV FL

инверсия флага

Итого: 12 безадресных команд.

4) Часть команд для обработки чисел с ПЗ (таблица 17)

Таблица 17:

Код операции

Мнемоника

Описание

00000

FMOV X,Y

загрузка вещественного числа

00001

FPUSH X

сохранение в стеке

00010

FPOP X

выборка из стека

00011

FADD X,Y

сложение с ПЗ

00100

FSUB X,Y

вычитание с ПЗ

00101

FMUL X,Y

деление с ПЗ

00110

FDIV X,Y

умножение с ПЗ

00111

FINC X

инкремент с ПЗ

01000

FDEC X

декремент с ПЗ

01001

FCOMP X

сравнение двух чисел с ПЗ

01010

FABS

модуль числа с ПЗ

01011

FCHS

инверсия знака числа с ПЗ

01100

FNOP

пустая операция

01101

FLD

обнуление числа с ПЗ

Итого: 13 команд для обработки чисел с ПЗ.

2.5.1 Регистры общего назначения

Разрядность РОН определяется максимальной разрядностью данных, обрабатываемых устройством. Следовательно, РОН данного устройства будут 64х разрядными. Каждый из РОН может быть использован в арифметико-логических операциях. Однако каждый РОН имеет своё определённое назначение. Это позволяет уменьшить разрядность команд при неявном использовании какого-либо из РОН. Так как в проектируемом устройстве используются данные разрядности также 8, 16, 32 в РОН'ах есть возможность адресации к младшим 16 битам, поделённым на восьмибитные поля, и к младшим 32 битам. Формат РОН представлен на рисунке 8, их кодирование представлено выше в таблице 2.

Рисунок 8 - Формат регистров общего назначения:

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

Рассмотрим специальное назначение РОН:

1) RAX - аккумулятор. Используется в качестве неявного операнда в некоторых одно- или безадресных командах;

2) RBХ - базовый регистр. Используется в качестве базового регистра;

3) RCX - счетчик. Является счетчиком при организации циклов;

4) RDX - данные. Является расширением регистра EAX при умножении двойных слов, а также при операциях деления хранит остаток;

5) ESI - индекс. Используется в качестве индексного регистра;

6) EDI - индекс. Используется в качестве индексного регистра;

7) EBP - дополнительный регистр базы. Используется в качестве базового регистра; в операциях со стеком содержит верхнюю границу стека;

8) ESP - указатель стека.

2.5.2 Управляющие регистры

Указатель инструкций IP (16 разрядов) содержит смещение следующей исполняемой инструкции относительно базы сегмента кода. IP находится в РОН и может быть прочитан или перезагружен как и другие регистры.

Рисунок 9 - Указатель инструкций:

В состав архитектуры процессора входит 16-ти разрядный регистр слова состояния ПР PSW (рисунок 10).

Слово состояния находится в УУВС, чтобы было проще поддерживать соответствие флагов операций в PSW и ОУ.

Рисунок 10 - Регистр слова состояния процессора:

- M - устанавливается текущий режим работы ПР (0 - реальный режим, 1 - защищённый режим);

- S - признак привилегий процесса (0 - системный, 1 - пользовательский). Два режима предусмотрены в целях защиты. В пользовательском режиме программам запрещается выполнение команд, влияющих на системные ресурсы;

- ERR - код ошибки при выполнении команды;

- DF - устанавливается текущий сегментный регистр (0 - DS,1- ES);

- TF - флаг трассировки;

- IF - флаг запрещения маскируемых прерываний;

- SF - флаг знакового разряда результата;

- OF - признак переполнения;

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

- CF - признак переноса;

2.5.3 Регистры сегментов

Сегментные регистры содержат 16-битные базовые адреса (в реальном режиме) или селекторы (в защищенном режиме) сегментов CS (сегмент кодов команд); SS (сегмент стека); DS (сегмент данных); ES - дополнительный сегмент. Использование сегментных регистров определяется типом обращения к памяти.

Таблица 18 - Использование сегментных регистров

Тип ссылки

Используемый сегмент

Используемый регистр

Правило выбора сегмента по умолчанию

Команды

Сегмент кода

регистр CS

Автоматически при выборе команды

Стек

Сегмент стека

регистр SS

Для команд занесения в стек и удаления из стека

Для некоторых ссылок с использованием базовых регистров ESP и EBP

Локальные данные

Сегмент данных

регистр DS

Все ссылки на данные, стека строк назначения

Строки-приемники

Дополнительный сегмент регистр ES

Приемник в командах обработки строк

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

Рисунок 11 -Использование сегментных регистров: а) - защищенный режим, б) - реальный режим:

Базовый адрес определяет сегмент в памяти (при реальном режиме), размером от 64Кб до 1Mб. Индекс дескриптора определяет номер используемого дескриптора сегмента, RPL - бит запрашиваемых привилегий.

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

2.5.4 Регистры системных адресов

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

Рисунок 12 - Формат регистра таблицы дескрипторов сегментов:

В регистре (32 бита) хранится 20-разрядный базовый адрес таблицы, следовательно она должна располагаться в памяти по адресу кратному 256, и 12-разрядный размер таблицы в дескрипторах, следовательно, максимально возможное число сегментов 2^12=4K. Регистр таблицы адресов прерываний (RGIDT).

Рисунок 13 - Формат регистра таблицы дескрипторов прерываний:

В регистре (32 бита) хранится 24 разрядный базовый адрес таблицы дескрипторов прерываний, который должен быть кратен 16, и 8-разрядный размер таблицы в дескрипторах, следовательно, максимально возможное число прерываний 2^8=256.

2.6 Выбор режимов работы процессора и системы управления памятью

Разрабатываемый процессор по ТЗ работает в однозадачном режиме.

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

По ТЗ размер ОЗУ составляет 256 Мбайт. Было решено предусмотреть для проектируемого ПР два режима работы: реальный и защищенный. Реальный режим или режим реальных адресов будет использоваться при начальной загрузке процессора для инициализации всех управляющих регистров и структур в памяти на этапе первоначальной загрузки операционной системы (ОС). Защищенный режим будет использоваться при обычной работе с пользовательскими программами. Именно в нем реализована защита памяти. Так как в ПР предусмотрена работа с байтами (согласно ТЗ), то минимальная ячейка памяти, к которой может обращаться ПР - байт. Следовательно, разрядность физического адреса должна быть 28 разрядов.

1) Реальный режим

В реальном режиме программисту доступно все 256 Мбайт физической памяти. При этом память разбивается на сегменты размером от 2 до 64 Кбайт. Физический адрес вычисляется конкатенацией 12 младших разрядов смещения с суммой сегментного регистра и номера блока в сегменте (старшие 4 разряда смещения) (рисунок 14).

Рисунок 14 - Формирование ФА в реальном режиме:

2) Защищенный режим

Защищенный режим работы обеспечивает выполнение следующих функций: контроль несанкционированного доступа пользователей к данным, повреждения программ и данных из-за ошибок в программах; предотвращение намеренных попыток разрушить целостность системы и использования информации в памяти не в соответствии с ее функциональным назначением. В защищенном режиме адресуются 256 Мбайт с разделением на сегменты до 1 Мбайта с использованием защиты памяти. При этом каждая задача может запросить данные из другого сегмента посредством дальней адресации. Присвоение каждому сегменту некоторых атрибутов с информацией о нём позволяет переложить часть функций по контролю за доступом на аппаратуру процессора. Для реализации данного подхода введена специальная структура, называемая дескриптором сегмента. Формат дескриптора сегмента представлен на рисунке 15.

ПР работает в однозадачном режиме, значит для организации его работы потребуется одна глобальная таблица дескрипторов (GDT). Количество сегментов, т.е. размер таблицы дескрипторов, должно быть таким, чтобы можно было адресовать всю физическую память и составляет максимально 4k дескрипторов.

Адрес начала ТД и её размер определяются в регистре GDTR (рисунок 15). Так как БА ТД 20-разрядный то ТД должна располагаться в памяти по адресу кратному 256.

Рисунок 15 - Формат регистра GDTR:

- БА - базовый адрес таблицы дескрипторов;

- Предел - размер ТД в дескрипторах.

63 53

52 51

50

49

48

47 20

19 0

*

DPL

C/D

ED

R/W

БА

Предел

- DPL - уровень привилегий сегмента;

- C/D - сегмент кода (=1) или данных (=0);

- ED - направление расширения сегмента данных (ED=1 - сегмент стека);

- R/W - запрет чтения из сегмента кода или запрет записи в сегмент данных (R/W=0).

- Предел - размер сегмента в байтах;

- БА - базовый адрес сегмента;

- * - зарезервировано.

Физический адрес ФА формируется, как сумма 28-разрядной базы, которая хранится в дескрипторе (рисунок 16), и 20-разрядного эффективного адреса.

Формирование физического адреса в защищенном режиме на основе таблицы дескрипторов ТД с использованием теневых регистров для хранения дескрипторов активных сегментов показано на рисунке 16.

При формировании ФА адрес базы сегмента выбирается из теневого регистра.

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

Затем происходит проверка найденного дескриптора по доступу и размеру, и если доступ разрешен, дескриптор загружается в соответствующий теневой регистр.

В зависимости от обрабатываемых команд адрес программ и данных в памяти определяется путём сложения смещения в требуемом сегменте с соответствующим базовым адресом сегмента из теневых регистров.

Рисунок 16 - Схема преобразования ЛА в ФА:

Предварительный расчет быстродействия.

По техническому заданию быстродействие разрабатываемого процессора должно составлять 6 млн. оп./с. Следовательно время Т выполнения одной команды не должно превышать:

Т ? 1/(6*106) > Т ? 166,7 нс

Для предварительной оценки быстродействия процессора можно воспользоваться формулой:

Tн = в *Tyy + б *Tзу + г *Tалу

Где в - среднее количество тактов УУ необходимое для выполнения команды без учета количества тактов на выборку из памяти самой команды и операнда задержки на АЛУ при вычислении операции и помещение результата в память;

Туу - длительность основного такта процессора (в УУ);

б - среднее количество обращений к ЗУ при выполнении команды;

Тзу - время выборки из ЗУ;

г - среднее количество тактов, необходимых на выполнение команды в АЛУ;

Талу - длительность одного такта работы АЛУ

Для того, чтобы было проще и точнее посчитать время, затрачиваемое ПР на выполнение одной команды, разделим весь цикл выполнения команды на логически завершенные стадии:

1) Выборка команды;

2) Дешифрация КОП;

3) Вычисление ЭА и ФА;

4) Выборка операндов;

5) Выполнение операции на операционном устройстве(ОУ);

6) Запись результата;

Выполнение каждого этапа не возможно без работы УУ, тогда получаем в = 6.

В таблице 19 представлены способы адресации и вероятности, с которыми они будут выполняться. Также в таблице 19 показано, осуществляет ли способ обращение к памяти.

Таблица 19 - Вероятности появления различных видов адресаций:

Способ адресации

Вероятность (%)

Обращение к памяти

1

Непосредственная

5

-

2

Регистровая

40

-

3

Косвенная регистровая

20

+

4

Базово-индексная автоинкрементная

15

+

5

Базово-индексная автодекрементная

15

+

6

Индексная

5

+

7

Базово-регистровая

5

+

8

Прямая

10

+

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

=1+0,2+0,15+0,15+0,05+0,05+0,1=1,7

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

Короткие операции (30%) выполняются за два такта, а длинные (15%) (например, умножение и деление) примерно за 6. Логические (20%) операции также выполняются за один такт работы АЛУ.

Таблица 20 - Вероятности появления различных типов команд:

Тип команд

Вероятность

Ср. кол-во тактов

Арифметические короткие

30

2

Арифметические длинные

15

6

Логические

20

1

Пересылки

15

1

Передачи управления

8

2

Остальные

2

1

Рассчитываем среднее количество тактов работы АЛУ:

г=0,3*2+0,15*6+0,2*1+0,15*1+0,08*2+0,02*1= 2,03

Примем время работы устройства управления:

Туу=120 нс,

АЛУ - Талу=100 нс

ОП - Тзу=150 нс

По заданию и произведём расчёт времени выполнения одной команды:

Тн = 6*120+1,7*150+2,03*100 = 720+255+203 = 1178 нс > 166,7 нс

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

Вводим очередь команд (ОК), что позволит нам ускорить выборку команд. Среднее обращение к памяти с ОК будет составлять =0,7. ОК обладает собственным устройством управления, поэтому из цикла выполнения команды исключается этап выборки команды и в будет равно пяти. Таким образом, при такой структуре общее время:

Тн = 5*120+0,7*150+2,03*100 = 600+105+203 = 908 нс > 166,7 нс

Заданное быстродействие все еще не достигнуто, поэтому вводим КЭШ данных, что позволит уменьшить время задержки на ОП.

Примем вероятность попадания в КЭШ - 95%, а время доступа Ткэш =70 нс.

Рассчитываем время выполнения одной команды:

Тн=5*120+0,7*(0,95*70+0,05*150)+2,03*100=720+51,8+203=854,8нс>166,7 нс

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

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

С учётом приведённых выше значений можно сделать вывод, что наиболее подходящим является вариант с 6 ступенями.

Время выполнения одной команды при этом будет примерно равно Тн = 854,8/6 = 142,47 нс. С учетом примерной погрешности 15% быстродействие составит 6,09 млн. операций в секунду, что удовлетворяет ТЗ.

Подробнее разработка ступеней будет рассмотрена ниже.

Таким образом, структурная схема ПР включает следующие устройства:

- операционное устройство (ОУ);

- шесть устройств управления работой ступеней(УУ1, УУ2, УУ3, УУ4, УУ5, УУ6);

- оперативное запоминающее устройство (ОЗУ);

- аппаратуру прерываний (АП);

- очередь команд (ОК);

- блоки формирования эффективного и физического адресов (БФЭА и БФФА);

- кэш-данных (КЭШД);

- буферные регистры для передачи данных между ступенями;

- математический сопроцессор (СоПР) для обработки данных с ПЗ;

- арбитр шины.

Разработка ступеней конвейера:

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

- управляющее устройство первой ступени (УУ1), осуществляющее роль связующего звена между остальными блоками и выполняющего все действия в зависимости от содержимого регистра команд;

- очередь команд (ОК), позволяющая благодаря предвыборке команд из оперативной памяти и своей организации выбирать команды и содержащийся в команде операнд за один такт;

- набор регистров для хранения промежуточных данных;

Вторая ступень состоит из:

- управляющего устройства второй ступени (УУ2), этот блок осуществляет дешифрацию команд.

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

- набора регистров для хранения промежуточных данных.

Третья ступень состоит из:

- управляющего устройства второй ступени (УУ3), этот блок осуществляет формирование физического адреса.

- блок формирования физического адреса (БФФА), организующий вычисление эффективного адреса, а затем физического по исполнительному и защиту памяти;

- набора регистров для хранения промежуточных данных.

К четвертой ступени относятся:

- устройство управления третьей ступенью (УУ4), осуществляет выборку данных из кэш памяти;

- набор регистров для хранения промежуточных данных.

Пятая ступень состоит из:

- управляющего устройства четвёртой ступени (УУ5), этот блок осуществляет непосредственное выполнение команд, а также запись в РОН;

- операционное устройство (ОУ), осуществляет работу под управлением УУ3(работа с регистрами) и УУ5 (выполнение команды).

На шестой ступени осуществляется запись результата в кэш-память.

Недостатком конвейера является возникновение ситуаций ведущих к формированию неправильного адреса или неправильного операнда.

На примере это выглядит следующим образом:

- subax, 7

- mov [аx], 8

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

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

При нарушении работы конвейера (команды передачи управления) команда на четвертой ступени выполняется до конца, а первые три ступени сбрасываются и начинают выборку и обработку новой команды.

Разработка операционного устройства:

Операционное устройство (ОУ) процессора предназначено для выполнения простых арифметических, логических операций, операций сдвига и сложных операций, таких как умножение и деление, на основе простых. ОУ выполняет действия с операндами, имеющими разрядность 8, 16, 32 или 64 бита.

В своем составе ОУ должно иметь два входных 64-разрядных регистра для операндов, устройство для выполнения требуемых операций и выходной 64-разрядный регистр для результата, а также внутренне УУ для выполнения длинных операций.

Основным элементом операционного устройства процессора являются микропроцессорные (МПС) секции типа КР1804ВС2 в количестве восьми микросхем.

ОУ процессора строится по типовой схеме включения. Для ускорения переноса между МПС вводятся схемы ускоренного переноса из микропроцессорного комплекта 1804 (КР1804ВР1 - 3 микросхемы). Для организации арифметических и логических сдвигов используется схема замыкания данных КР1804ВР2.

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

Операнды подаются в ОУ с буферных регистров RgB0 и RgB1, входами для которых могут быть РОН, КЭШД, а также буферный регистр RgB2, хранящий непосредственный операнд. Кроме того, при выполнении операций умножения и деления ОУ использует данные, записываемые в его РЗУ. Пересылка данных в ОУ и непосредственно его работа осуществляется на пятой ступени конвейера. Результат выполнения операции помещается в выходном регистре RgDO, откуда затем может быть передан на МД1. Выходы генерируемых МПС ВР2 флагов поступают на входы регистра флагов процессора. Задержка на ОУ не должна превышать 100 нс.

Разработка структуры ОЗУ: По ТЗ объем ОЗУ равен 256 Мбайт, время доступа 150 нс. Для ускорения работы применен метод расслоения обращений. Устройство строится из 4-х модулей, ширина выборки из каждого модуля - 64 бита. Внутри каждый модуль организован из четырех модулей с шириной строки по 8 бит (используется для записи 8-битных операндов). Таким образом ширина выборки 256 бит или 32 байт. Объем каждого модуля ОП 64 Мбайт. Для всех модулей в ОЗУ имеется один общий 28-разрядный регистр адреса. Младший нулевой и первый разряды определяют номер 8-разрядного модуля внутри 64-разрядного. Следующие 2 разряда (2 и 3) определяют номер модуля внутри ОЗУ. Остальные 24 разрядов ФА определяют номер строки в модуле.

Работа с ОЗУ производится в следующих направлениях:

- заполнение очереди команд (256 бит);

- заполнение КЭШД (256 бит);

- запись в ОЗУ 8-и разрядных слов;

- запись в ОЗУ 16-х разрядных слов;

- запись в ОЗУ 32-х разрядных слов;

- запись в ОЗУ 64-х разрядных слов.

В первом случае должна быть организована передача всей строки из ОЗУ в ОК.

При заполнений КЭШД передача данных осуществляется так же по 256 бит. Следует отметить, что, так как в КЭШД будет использоваться сквозная запись, в памяти должен быть предусмотрен буфер для записи данных в то время, когда к памяти не обращается ни одно из устройств.

Разработка КЭШ данных:

Время доступа к ОЗУ по техническому заданию составляет 150 нс. При заданном быстродействии работы процессора 6 млн. оп/сек это составляет практически все время, отведённое на команду, что не допустимо и прежде всего говорит о необходимости введения кэш-памяти.

Кэш-память вместе с ОЗУ образуют иерархическую структуру доступа к данным и ее действие эквивалентно быстрому доступу к ОЗУ. Рекомендуемый объем кэш-памяти 1/1000 от объема ОЗУ, что составит 256 Кбайт. Кэш-память строится из четырех модулей на основе частично-ассоциативного распределения (ЧАР). Достоинствами данного метода распределения являются:

- сокращение числа промахов по сравнению с методом прямого распределения,

- высокое быстродействие - чтение за один такт, запись за два такта,

- также незначительные аппаратурные затраты (использование БИС памяти с произвольным доступом статического типа).

Модули образуют группу строк. Для выбора группы строк используется метод прямого распределения, а для выбора строки в группе - метод полностью ассоциативного распределения. Емкость строки - восемь 64-разрядных слов.

Таким образом, получаем четыре модуля емкостью 64 Кбайт по 128 строк. При ЧАР адрес разбивается на три части: старшая часть - тег - для сравнения с тегами из группы строк и выбора одной строки, средняя часть - индекс - для выбора группы строк и младшая часть - номер слова в строке. Таким образом, по индексу выбирается множество строк (группа), а по тегу - конкретная строка из этого множества. Ещё одно поле вводится для того, чтобы обратиться в соответствии с заданными форматами к 8, 16, 32 или полностью к 64 разрядам в 64-разрядном слове.

Обращение к массиву тегов и СОЗУ данных кэш-памяти происходит параллельно, поэтому, если требуемая строка присутствует в кэш-памяти, данные сразу же выдаются на МД.

Стратегия обновления ОЗУ - сквозная (прямая) запись с распределением WTWA. При такой стратегии, если адрес не принадлежит тегу (кэш-памяти), то и при чтении, и при записи нет необходимости удалять строку из кэш-памяти в ОЗУ, а сразу реализуется процедура замещения кэш-памяти по выбранной стратегии. Из ОП считывается строка и записывается в кэш-память на место строки, назначенной кандидатом на удаление, в память тегов записывается новый тег считанной строки. Таким образом, данный метод даёт выигрыш в быстродействии, так как не требуется выполнять процедуру удаления строки из кэш-памяти в ОЗУ (её копия всегда хранится там). Кроме того, выполнение командного цикла продолжается сразу после записи данных в кэш-память, не дожидаясь окончания цикла записи в ОП.

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

Если АTeg (кэш-памяти), то по одной из выбранных стратегий замещения определяется строка, подлежащая удалению из кэш-памяти в ОП, и выполняется процедура удаления (перезаписи) выбранной строки в ОП как при чтении, так и при записи, а затем реализуется процедура замещения кэш-памяти, т.е. из ОП считывается запрашиваемая строка и записывается в СОЗУ данных на место удаленной строки, а в память тегов - новый тег считанной строки. Затем требуемое слово записывается или считывается из кэш-памяти, т.к. теперь АTeg.

При конвейерном выполнении команд одновременно может потребоваться доступ к кэш-памяти со стороны нескольких ступеней, т.е. можно говорить о введении двухпортовой кэш-памяти. При этом аппаратурные затраты увеличиваются приблизительно вдвое, т.к. требуется введение двухпортовых памяти тегов, памяти LRUи бит достоверности, СОЗУ данных, а также дублирование основных узлов (схем сравнения, регистров тегов, и др.). Но, как сказано выше, чтение и запись выполняются за 1 такт, в то время как время выполнения команды на других стадиях составляет 2 и более такта. Следует также отметить, что вероятность такой ситуации составляет 30-40 %. Поэтому простои, связанные с конфликтом по доступу к кэш-памяти, не скажутся на ухудшении характеристики быстродействия. Более подробно это будет рассмотрено в следующем разделе. Поэтому введение двухпортовой кэш-памяти является необоснованным и в данном процессоре используется однопортовая кэш-память.

Рисунок:

Разработка очереди команд:

На первой ступени, на которой производится выборка команды, вводится очередь команд (ОК) для увеличения быстродействия.

ОК представляет собой буфер FIFO, в который выбираются команды из памяти перед выполнением. Для безостановочной работы ОК необходим объём в 2 раза превышающий ширину выборки, поэтому ОК состоит из 16 16-разрядных слов или 512 бит. Функциональная схема ОК приведена на рисунке. На схеме: CTWR - счётчик записи, указывает на первое свободное слово; CTRD - счётчик чтения, указывает на следующую команду; CT в паре с DC2- счётчик выбора внутреннего 16-и разрядного регистра (RG0-RG15); DC1 - 4-х входовой дешифратор, работает в паре со счётчиком CTWR и выбирает слово, в которое будет записываться следующее данное из пакета; БФИ - блок формирования импульсов, формирует последовательно в течение такта три сигнала инкрементирования счетчика СТ и записи в выходные регистры. ОК содержит 16 шестнадцатиразрядных регистров, разбитых на пары по 4 байта. Для разных целей можно выбрать ...


Подобные документы

  • Разработка структурной схемы процессора; синтез микропрограммного и управляющего автомата с жесткой логикой. Функциональная организация процессора: программные модели, форматы данных и команд. Организация оперативной памяти. Проектирование блока операций.

    учебное пособие [1,1 M], добавлен 09.04.2013

  • Описание архитектуры внешних выводов кристалла процессора. Рассмотрение форматов данных для целых чисел со знаком и без знака. Выбор модели памяти и структуры регистровой памяти. Использование кэш прямого отображения. Арифметические и логические команды.

    курсовая работа [890,5 K], добавлен 05.06.2015

  • Рассмотрение принципа работы процессора и его практической реализации с использованием языка описания аппаратуры Verilog. Проектирование системы команд процессора. Выбор размера массива постоянной памяти. Подключение счетчика инструкций и файла регистра.

    курсовая работа [1,2 M], добавлен 26.05.2022

  • Принцип работы процессора, способы его охлаждения, кодовые названия. Шины процессора, разрядность и кэш–память. Технологии расширения и поток команд процессора. Процессорные вентиляторы и их характеристика. Алгоритм и способы разгона процессора.

    реферат [38,0 K], добавлен 21.02.2009

  • Функциональная и структурная организация ЭВМ. Разработка функциональных микропрограмм заданных команд. Их объединение и привязка к структуре операционного автомата процессора. Разработка управляющего автомата процессора с программируемой логикой.

    дипломная работа [4,0 M], добавлен 25.03.2012

  • Принцип работы процессора (одномагистральная структура). Временные диаграммы, описывающие выполнение микроопераций для каждой команды. Структурная схема управляющего автомата на основе памяти с одним полем адреса. Описание процессора на языке Active VHDL.

    курсовая работа [621,0 K], добавлен 24.09.2010

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

    курсовая работа [2,8 M], добавлен 15.05.2014

  • Синтез структуры простого магистрального процессора с одним АЛУ, выполняющего 8 заданных команд. Разработка формата и кодировки команд, структурной схемы процессора, функциональные схемы всех его блоков в целом с указанием шин и управляющих сигналов.

    реферат [123,9 K], добавлен 18.05.2009

  • Разработка устройства, реализующего набор команд из числа операций с плавающей точкой семейства процессора i486. Структура сопроцессора FPU. Принцип выполнения операций, разработка блок-схемы, построение структурной схемы основных блоков процессора.

    курсовая работа [734,9 K], добавлен 27.10.2010

  • Строка Меню текстового процессора и панель инструментов Форматирование текстового процессора MS Word, назначение основных команд и кнопок. Технология формирования (расчета) ведомости выдачи заработной платы средствами табличного процессора MS Excel.

    контрольная работа [15,1 K], добавлен 09.05.2010

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

    лабораторная работа [1,5 M], добавлен 23.07.2012

  • Изучение базовых команд ПК на базе МП i286 и их форматов. Изучение прямых способов адресации данных. Наработка практических навыков работы с командами. Разработка регистровой модели выполнения операций передачи данных. Программа реализации команд.

    контрольная работа [42,2 K], добавлен 12.03.2011

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

    курсовая работа [91,8 K], добавлен 24.09.2010

  • Типы системной памяти. ОЗУ (оперативное запоминающее устройство), ПЗУ (постоянное запоминающее устройство), "энергонезависимая память" (CMOS). Процессор. Основные шины. Адресные данные. Совокупность всех возможных команд - система команд процессора.

    контрольная работа [24,3 K], добавлен 30.03.2009

  • Структура процессора Pentium, суперскалярность, основные особенности архитектуры. Организация конвейера команд, правила объединения. Дополнительные режимы работы процессора. Источники аппаратных прерываний. Формат ММХ команды. Процессор Pentium 4, схемы.

    лекция [4,0 M], добавлен 14.12.2013

  • Функциональная схема микропроцессора Intel 8086 (i8086). Формирование физического адреса памяти, выборка команд из памяти и запись их в очередь команд. Система команд процессора. Суть защищенного режима, переход из защищенного режима в реальный режим.

    практическая работа [93,3 K], добавлен 24.03.2013

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

    курсовая работа [871,9 K], добавлен 16.09.2010

  • Распараллеливание операций, кэширование памяти и расширение системы команд как способы совершенствования архитектуры и роста производительности компьютеров. Внутренняя структура конвейера центрального процессора Pentium i486. Корпус и колодки ЦП Intel.

    презентация [281,2 K], добавлен 27.08.2013

  • Рост производительности и снижение потребляемой мощности процессора. Упрощенная-схема процессора BF535. Поддержка моделей памяти. Стандарты коммуникационных протоколов. Системные регистры процессора. Регистровый файл данных. Шины связи регистрового файла.

    презентация [6,3 M], добавлен 14.12.2013

  • Управление взаимодействием всех устройств ЭВМ. История создания и развития производства процессора. Структура центрального процессора. Регистры общего назначения. Обозначения популярных моделей процессоров Intel и AMD. Команды центрального процессора.

    реферат [111,2 K], добавлен 25.02.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.