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

ЛИЧНЫЙ КАБИНЕТ 

 

Здравствуйте гость!

 

Логин:

Пароль:

 

Запомнить

 

 

Забыли пароль? Регистрация

Повышение уникальности

Предлагаем нашим посетителям воспользоваться бесплатным программным обеспечением «StudentHelp», которое позволит вам всего за несколько минут, выполнить повышение уникальности любого файла в формате MS Word. После такого повышения уникальности, ваша работа легко пройдете проверку в системах антиплагиат вуз, antiplagiat.ru, etxt.ru или advego.ru. Программа «StudentHelp» работает по уникальной технологии и при повышении уникальности не вставляет в текст скрытых символов, и даже если препод скопирует текст в блокнот – не увидит ни каких отличий от текста в Word файле.

Результат поиска


Наименование:


дипломная работа Учебная модель RISC-процессора

Информация:

Тип работы: дипломная работа. Добавлен: 04.06.13. Сдан: 2013. Страниц: 28. Уникальность по antiplagiat.ru: < 30%

Описание (план):


Федеральное агентство  по образованию
Государственное образовательное учреждение
высшего профессионального  образования
Пензенский  Государственный университет
Кафедра вычислительной техники
 
Никишин Кирилл Игоревич
 
 
Учебная модель RISC-процессора.
 
 
Выпускная работа на соискание степени
бакалавра техники  и технологии
по направлению 230100 – Информатика и вычислительная техника
 
 
Научный руководитель:
 к.т.н., профессор Коннов Н.Н.
 
 
 
 
 
Пенза 2012
 

Реферат
Пояснительная записка содержит 66 страниц, 57 рисунков, 7 таблиц, 5 плакатов формата А1.
MIPS-АРХИТЕКТУРА, КОНВЕЙЕР, КОНФЛИКТ, NOP ИНСТРУКЦИЯ, ШУНТ, LOGISIM, МАРШРУТИЗАТОР.
Объектом  исследования является модель RISC-микропроцессора с MIPS-архитектурой.
Цель  данной работы    состоит  в  разработке моделей RISC-микропроцессора с MIPS-архитектурой, демонстрирующих возникновения и методы устранения конфликтов по ресурсам, по данным, по управлению.
В  результате   проведённой работы  были  разработаны схемы RISC-микропроцессоров с MIPS-архитектурой в системе Logisim и набор программ на языке ассемблер, которые могут быть использованы в учебном процессе в подготовке бакалавров и магистров по направлению «Информатика и вычислительная техника».
 

Содержание
 

Введение.

Первые RISC-процессоры, разработанные  в Стенфордском и Калифорнийском университетах США в начале 80-х  годов, выполняли относительно небольшой набор команд - 50-100 вместо 100-300, выполняемых обычными - CISC (Complex Instruction Set Computer - компьютер со сложным набором команд) - процессорами. Именно эта особенность определила название данного класса процессоров - RISC (Reduced Insruction Set Computer - компьютер с сокращенным набором команд). Однако в последующих разработках RISC-процессоров набор команд значительно расширен, включая команды обработки чисел с плавающей точкой. В настоящее время определились следующие характерные особенности RISC-процессоров:
    расширенный объем регистровой памяти: от 32 до нескольких сотен регистров общего назначения, входящих в состав микропроцессора;
    использование в командах обработки данных только регистровой и непосредственной адресации (обращение к памяти используется в командах загрузки и сохранения содержимого регистров, а также в командах управления программой);
    отказ от аппаратной реализации сложных способов адресации;
    фиксированный формат команд (обычно два или четыре байта) вместо переменного формата (от 1 до 12 и более байт), характерного для CISC-процессоров;
    исключение из набора команд, реализующих редко используемые операции, а также команд, не вписывающихся в принятый формат.
Фиксированный формат команд, отказ от сложных и редко используемых команд и способов адресации существенно упрощает реализацию устройства управления процессора, что позволяет уменьшить размер кристалла RISC-процессоров, снизить их стоимость и повысить тактовую частоту. Введение фиксированного формата команд обеспечивает также более эффективную работу конвейера, уменьшает число тактов простоя и ожидания, что дает значительный рост производительности. Расширенный объем регистровой памяти и преимущественное использование регистровой адресации при обработке данных дополнительно повышают производительность микропроцессоров.
Перечисленные достоинства RISC-процессоров определили значительный интерес к этим изделиям. Данный класс микропроцессоров выпускает  большинство ведущих производителей СБИС - Intel, IBM, Hewlett-Packard, Hitachi, Phillips,  Texas Instruments, Sumsung, Atmel и другие. Выпускаемые RISC-процессоры имеют различную архитектуру. В настоящее время наиболее популярными являются следующие варианты RISC-архитектур:
ARM – разработка компании Advanced RISC Mashines,
MIPS – разработка компании MIPS Technology,
PowerPC – разработка компаний IBM и Motorola,
SPARC – разработка компании Sun Microsystems.
Отметим, что компании-разработчики архитектур ARM, MIPS, SPARC широко практикуют продажу лицензий на производство микропроцессоров с соответствующей архитектурой. Поэтому многие производители выпускают лицензионные RISC-микропроцессоры, архитектура которых соответствует спецификациям ARM, MIPS или SPARC.  Микропроцессоры с архитектурами MIPS и SPARC разрабатываются и выпускаются также российскими организациями.
В данном работе рассматривается RISC-микропроцессор с MIPS-архитектурой в программе Logisim.
 

1 Обоснование выбора среды моделирования Logisim.

Logisim  —   это  образовательный  инструмент  для  разработки  и моделирования   цифровых  логических  схем.  Её  написал  и  продолжает активную разработку преподаватель Hendrix College, США, Carl Burch.
Программа написана на Java и требует для работы установленную Java Runtime  Environment. 
Интерфейс Logisim полностью  переведён на русский язык, программа распространяется  с  подробнейшей  справочной  системой  на  русском языке. Почти  все нюансы  работы  с  программой  описаны  в  справочной  системе  —  от получения  базовых  навыков  работы  до  подробного  описания  всех компонентов встроенной библиотеки.
Интерфейс программы состоит  из строки меню, панели инструментов, панели  проводника,  таблицы  атрибутов  и  холста.  Панель  проводника содержит  список  схем  проекта  и  все  инструменты  загруженных  библиотек.  Любые  инструменты  можно  выносить  на  панель инструментов.  Состав  панели  инструментов  настраивается  в  окне параметров проекта, которое вызывается из пункта «Параметры» меню «Проект». На  холсте  располагаются  все  компоненты  редактируемой  в данный момент схемы. Холст покрыт сеткой, по которой выравниваются все  компоненты  и  провода  схемы.  Таблица  атрибутов  содержит атрибуты выделенного в данный момент инструмента или компонента на холсте. На рисунке 1 изображено окно программы Logisim.

Рисунок 1. Окно программы Logisim.
Лучший способ быстро освоить базовые навыки работы с Logisim — пройти все шаги «Пособия начинающего» из меню «Справка».
Logisim  позволяет  не  только  редактировать  цифровые  схемы,  но  и моделировать их  поведение. Если флаг «Моделирование  включено»  из меню «Моделировать» установлен, то Logisim просчитывает процессы, происходящие  в  схеме  прямо  во  время  её  редактирования:  меняются значения  на  входах  и  выходах  устройств,  обновляется  внутреннее состояние  устройств  памяти,  устройства  вывода  отображают соответствующую информацию, а провода меняют цвет в зависимости от проходящих  по  ним  значений.  Для  схем,  на  которых  присутствуют тактовые  генераторы,  можно  либо  осуществлять  моделирование потактово  (пункт  «Один такт» из  меню  «Моделировать»),  либо установить максимальную тактовую частоту (пункт «Тактовая частота») и запустить продолжительное моделирование схемы (пункт «Такты включены»).  Вернуть схему в исходное  состояние можно с помощью пункта «Сбросить моделирование».
Ещё  одна  важнейшая  функция  Logisim  —  возможность  собирать провода в пучки. Пучки  обозначаются на схемах чёрным цветом. Очень многие компоненты библиотеки имеют атрибут «Разрядность данных». Этот атрибут может принимать значение от 1 до 32, и если он больше 1, то  подключение  провода  к  соответствующему  контакту  компонента автоматически  создаст пучок проводов. Естественно, нужно  соединять контакты  с  одинаковой  разрядностью  данных.  Разрядность  данных можно  назначать  также  входным  и  выходным  контактам  схем,  что значительно  уменьшает  количество  проводов  на  схеме,  а  значит, повышает её удобочитаемость.
Огромным  преимуществом  программы  Logisim  является  обширная библиотека  компонентов.
Существует  возможность  писать  на  языке  Java  собственные библиотеки  компонентов,  обладающие  всем  набором  функций, доступных в Logisim. Руководство по написанию таких библиотек — в разделе «Библиотеки JAR» руководства пользователя Logisim.
 

2 Общие сведения RISC-микропроцессора с MIPS-архитектурой.

Набор инструкций и внутреннее устройство процессора  lilpM32  представляют собой очень сильно  упрощённый  вариант реализации  архитектуры MIPS I. MIPS (англ.  Microprocessor  without  Interlocked  Pipeline  Stages  — микропроцессор  без заблокированных стадий  конвейера) — семейство процессоров,  разработанных компанией MIPS  Technologies,  и являющихся  реализацией архитектуры RISC.  RISC  (англ.  Reduced Instruction  Set  Computer  — компьютер с сокращённым  набором инструкций)  —  архитектура  процессора,  в  которой  быстродействие увеличивается  за  счёт  упрощения  инструкций.  В  настоящее  время различные  реализации MIPS  используются  в  основном  во  встроенных системах  (в маршрутизаторах, шлюзах, игровых консолях; например, в Sony PlayStation Portable).
lilpM32 — 32-битный процессор. Это означает, что длина инструкции,
а также разрядность  обрабатываемых им данных — 32 бита. Формально, длина адреса ОЗУ — тоже 32 бита, но компонент ОЗУ в Logisim может иметь максимальную разрядность адреса 24 бита, поэтому фактически при доступе к памяти учитываются только младшие 24 бита адреса. В lilpM32  нельзя  получить  доступ  к  отдельному  байту  памяти  (как  это обычно  принято)  —  только  к  32-разрядному  слову.  Значение, поступающее на адресный вход ОЗУ, задаёт номер 32-разрядного слова (а  не  байта)  для  чтения  или  записи.  Таким  образом,  в  нашем распоряжении  примерно  16  миллионов  4-байтовых  ячеек  (то  есть  64 мегабайта памяти). Для инструкций и для данных используется общая память, то есть lilpM32 имеет архитектуру фон Неймана.
Для работы с  целыми числами и адресами lilpM32 имеет 32 32-битных регистра.  Они  объединены  в  регистровый  файл.  Номера  и  имена регистров принято начинать со знака доллара («$»); для ассемблера это обязательное  условие.  Регистр  с  номером  0  ($0)  всегда  содержит значение  «0»  (запись  в  него  не  имеет  смысла).  В  регистр  $31 сохраняется  адрес  возврата  из  подпрограммы  (функции).  Эти  два условия гарантируются аппаратной реализацией процессора. Кроме того, все остальные регистры  имеют свои  имена и назначение,  однако  это только соглашение, и сам процессор никак не контролирует выполнение этого соглашения  — это задача  программиста.  В  таблице  1 представлены названия регистров и их назначение.
Таблица 1. Назначение и названия регистров
Название
вызываемой
функцией?
Назначение
$zero
$0
константа 0
-
$at
$1
временный для  ассемблера
-
$v0-$v1
$2-$3
значения, возвращаемые функциями
-
$a0-$a3
$4-$7
аргументы функций
-
$t0-$t7
$8-$15
временные
-
$s0-$s7
$16-$23
сохраняемые временные
да
$t8-$t9
$24-$25
временные
-
$k0-$k1
$26-$27
зарезервированы для ядра ОС
-
$gp
$28
глобальный  указатель на данные
да
$sp
$29
указатель стека
да
$fp
$30
указатель окна
да
$ra
$31
адрес возврата из функции
-

lilpM32  имеет   два  регистра  для  сохранения  двух  частей  64-битного результата  умножения и целочисленного деления:  регистры LO и HI. Для ввода  и   вывода  данных  у процессора  предусмотрено по  четыре 32-битных буфера (регистра) ввода/вывода. Для доступа к этим буферам процессор имеет по  четыре  32-битных  входа и выхода  для данных, тактовых  входа,  тактовых  выхода,  сигнализирующих о чтении  данных процессором,  и  тактовых  выхода  сигнализирующих  о  записи  данных процессором.  При  записи  нового  значения  (после  выполнения соответствующей  инструкции)  в  буфер,  процессор  подаёт  тактовый импульс  на  соответствующий  тактовый  выход.  Чтобы  записать  новое значение в буфер ввода, нужно подать это значение на соответствующий вход для данных, а на тактовый вход подать тактовый импульс. После этого  можно  обращаться  к  записанному  значению  посредством соответствующей инструкции. Каждый раз, когда процессор считывает значение из буфера, он подаёт  тактовый импульс на  соответствующий тактовый выход. Буферы ввода/вывода можно использовать для подачи в процессор символов  с клавиатуры,  или для вывода  информации  на терминал или на светодиодную матрицу (непосредственно или используя отдельную видеопамять). Заметьте, что наличие буферов ввода/вывода и инструкций для работы с ними — отличительная особенность  lilpM32; это  сделано  для  упрощения.  Как  правило,  ввод  и  вывод  MIPS процессоры осуществляют несколько другими способами.
Кроме  того,  у  процессора  предусмотрен  тактовый  выход,  который 
позволяет  подавать  во  внешнюю  схему  импульсы  непосредственно  с тактового  генератора, расположенного внутри схемы  процессора.
Все  инструкции  процессора  lilpM32  имеют  длину  32  бита.  В зависимости от типа инструкции (существуют R, I и J инструкции), эти 32 бита разбиваются на поля, каждое из  которых несёт определённую информацию —  код  операции  (opcode),  номера  регистров  ($s,  $t,  $d), величину  сдвига  (shamt),  код функции (funct),  непосредственное значение (imm) и адрес перехода (addr). Для инструкций R-типа значение кода операции  всегда равно нулю,  а инструкция определяется по  коду функции.  Для инструкций  I-типа  сама  инструкция  содержит непосредственное  16-битное  целочисленное  значение,  которое  может быть  интерпретировано  (и  расширено  до  32-битного)  как  беззнаковое, или как знаковое, записанное в дополнительном коде (в зависимости от конкретной инструкции). Форматы инструкций представлены в таблице 2.
 
 
Таблица 2. Форматы  инструкций
Формат (биты)
R
opcode (6)
$s (5)
$t (5)
$d (5)
shamt (5)
funct (6)
I
opcode (6)
$s (5)
$t (5)
imm (16)
J
opcode (6)
addr (26)

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

3 Структура процессора и его конвейерные стадии.

Структурная  схема  внутреннего  устройства  процессора  lilpM32 показана на рисунке 2. Эта схема показывает лишь самые ключевые моменты внутреннего устройства процессора; многие  составные части процессора  показаны  условно,  а  некоторые  —  совсем  опущены. 
 

Рисунок 2. Структурная схема процессора lilpM32
Каждая инструкция, считанная из ОЗУ, проходит по очереди  все пять стадий, то есть на выполнение одной инструкции тратятся пять тактов процессора.  Однако  в  каждый  момент  времени  выполняется  пять инструкций  (по  одной  на  каждой  стадии).  Таким  образом,  скорость выполнения  инструкций —  одна  инструкция  за  такт.  Блоки  регистров между  стадиями  нужны  чтобы  сохранять  промежуточные  результаты выполнения  каждой  стадии:  управляющие  сигналы,  считанные  из устройств памяти  данные, результат  выполнения операции АЛУ, и  т.д.
Устройства,  помеченные  на  схеме  треугольником,  имеют  тактовый
(синхронизирующий)  вход; ОЗУ —  асинхронное. ОЗУ  изображено  на схеме два раза только для наглядности; на самом деле это одно и то же устройство.  За  такт  происходит  два  обращения  к ОЗУ —  считывается инструкция,  расположенная  по  адресу,  сохранённому  в  программном счётчике  (на  стадии  получения  инструкции),  и  считывается  или записывается  значение  (на  стадии  доступа  к  памяти).  В  lilpM32  это достигается  за  счёт  асинхронности  ОЗУ  —  обращение  к  памяти производится  и  при  переднем  и  при  заднем  фронте  (этот  принцип используется в памяти типа DDR — Double Data Rate).

3.1 Основные блоки процессора.

К основным блокам процессора относятся:
    память команд и память данных
    декодер инструкций
    регистровый файл
    арифметико-логическое устройство
На рисунке 3 представлена схема процессора  lilpM32 в программе Logisim.

Рисунок 3. Схема процессора lilpM32, реализованного в программе Logisim.

3.1.1 Память команд и память данных.

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

3.1.2 Декодер инструкций.

Как известно, команды х86 отличает сложность и переменная длина, затрудняющие их динамическое выполнение. Декодер, представляющий собой наиболее сложную часть микропроцессора,  разбивает  длинные  CISC-инструкции  на  небольшие RISC-подобные  компоненты  –  так  называемые  ROP  (RISC-операции). Условное изображение показано на рисунке 5. Сама схема декодера представлена на рисунке 6.

Рисунок 5. УГО декодера инструкций.

Рисунок 6. Схема декодера инструкций.

3.1.3 Регистровый файл.

Для работы с  целыми числами и адресами lilpM32 имеет 32 32-битных регистра.  Они  объединены  в  регистровый  файл.  Номера  и  имена регистров принято начинать со знака доллара («$»); для ассемблера это обязательное  условие. В  таблице  1 представлены названия регистров и их назначение. Условное изображение регистрового файла показано на рисунке 7. Сама схема регистрового файла представлена на рисунке 8, на рисунке показаны не все 32 регистра, а лишь часть из них. В приложении 1 на Э2 показана полная схема регистрового файла.
 

Рисунок 7. УГО регистрового файла.

Рисунок 8. Схема регистрового файла.

3.1.4 Арифметико-логическое устройство.

Арифметико-логическое  устройство  выполняет арифметические операции (сложение, вычитание, умножение, деление), логические операции, операции  сдвигов. Условное изображение арифметико-логического  устройства  показано на рисунке 9. Сама схема арифметико-логического  устройства представлена на рисунке 10, а также в приложении 1 на Э2.
 

Рисунок 9. УГО арифметико-логического  устройства.

Рисунок 10. Схема арифметико-логического  устройства.
 

3.2 Стадии конвейера процессора.

Процессор  lilpM32,  как  и  все MIPS  (и  вообще  RISC)  процессоры, использует конвейер. Конвейер (англ. pipeline) — это способ организации вычислений  внутри  процессора,  при  котором  обработка  инструкции разделяется на последовательность независимых стадий с сохранением результатов в конце каждой стадии. В lilpM32 таких стадий пять:
    получение инструкции (Instruction Fetch, IF)
    декодирование  инструкции  и  чтение  регистров  (Instruction Decode & Register Fetch, ID)
    выполнение и вычисление адреса (Execute & Address Calc., EX)
    доступ к памяти (Memory Access, MEM)
    запись в регистр (Write Back, WB)

3.2.1 Стадия получения инструкции.

Инструкция  считывается из памяти с использованием адреса в счётчике команд (PC), с последующим помещением её в регистр инструкций.
В ОЗУ инструкций загружаются машинные коды команд, которые пойдут на следующую стадию декодирования  инструкций  и чтения  регистров. Схема первой стадии конвейера изображена на рисунке 11.

Рисунок 11. Получение инструкции.

3.2.2 Стадия декодирования инструкции  и чтения  регистров.

Команды поступают  на декодер инструкций, где они  декодируются. Здесь же происходит чтение значений регистров. На рисунке 12 показана стадия декодирования  инструкции  и  чтения  регистров и условное изображение блока конвейера ID/EX. Инструкция, которая находится в регистре инструкций, предоставляет номера регистров для чтения двух регистров и расширяет знак 16-разрядного непосредственного значения ID/EX. На рисунке 13 представлена схема блока ID/EX.

Рисунок 12. Стадия декодирования  инструкции  и  чтения  регистров.
 

Рисунок 13. Схема блока ID/EX.

3.2.3 Стадия выполнения и вычисления адреса.

Значения первого  и второго операндов поступают  в  арифметико-логическое  устройство. На вход первого операнда поступает значение регистра, а на вход второго операнда могут поступать: значение регистра, либо значение беззнаковой, либо знаковой константы. Значение операции сформируется на выходе АЛУ (выход result) и с помощью датчика можно будет увидеть значение полученной операции.  На этой стадии конвейера происходит вычисление адреса. Если есть условие, то этой стадии будет вычисляться адрес; нужно ли будет выполнить следующую инструкцию, либо сделать переход по вычисленному адресу. На рисунке 14 показана стадия выполнения и вычисления адреса и условное изображение блока конвейера EX/MEM. На рисунке 15 представлена схема блока EX/MEM.

Рисунок 14. Стадия выполнения и вычисления адреса.
 

Рисунок 15. Схема блока EX/MEM.

3.2.4 Стадия доступа к памяти.

На этой стадии конвейера может осуществляться чтение данных из памяти, запись данных в память. Данные могут браться  из памяти, для того чтобы выводить эти данные на 4 буфера вывода процессора. На рисунке 16 показана стадия доступа к памяти и условное изображение блока конвейера MEM/WB. На рисунке 17 представлена схема блока MEM/WB.

Рисунок 16. Стадия доступа к памяти.

Рисунок 17. Схема блока MEM/WB.

3.2.5 Стадия запись в регистр.

На этой стадии конвейера происходит запись результата выполненной операции в необходимый регистр, который находится в регистровом файле. По сигналу writeRegNum определяется номер регистра, куда должно поступить значение операции. По сигналу writeRegData записывается значение операции в регистр. На рисунке 18 показана стадия записи в регистр.

Рисунок 18. Стадия записи в регистр.
 

4.Конфликты процессора.

Использование  конвейера  даёт  большой  прирост  производительности — за  один  такт  выполняется  одна  инструкция,  и суммарная  задержка  устройств  внутри  одной  стадии  меньше,  чем  без использования конвейера  (а  значит  тактовая частота — выше). Однако часто  возникают  ситуации,  когда  использование  конвейера  приводит  к возникновению  конфликтов  (англ.  hazard).  Чтобы понять  суть  этого явления,  рассмотрим  таблицу,  демонстрирующую состояние конвейера во времени (таблица 3).
Таблица 3. Обычное состояние конвейера
Номер
инструкции
Состояние конвейера
1
IF
ID
EX
MEM
WB
       
2
  IF
ID
EX
MEM
WB
     
3
    IF
ID
EX
MEM
WB
   
4
      IF
ID
EX
MEM
WB
 
5
        IF
ID
EX
MEM
WB
Номер
такта
1
2
3
4
5
6
7
8
9

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

4.1 Конфликт по данным.

Конфликт может  случиться, если потребуется выполнить вот такую последовательность  инструкций  (все символы строки,  начиная с  «#», являются комментариями), листинг программы приведён ниже на рисунке 19.
 addiu $t3, $s1, 4   # $t3 = $s1 + 4
 addiu $t4, $t3, 2   # $t4= $t3 + 2
Рисунок 19. Листинг программы с конфликтом по данным.
Записывая  такую последовательность, подразумевается,  что на момент выполнения второй инструкции первая уже будет выполнена, то есть  регистр $t3  будет содержать результат сложения.  Что же произойдёт  на  самом деле?  Запись  результата  сложения  в регистр происходит  на  стадии  WB,  а чтение  значения  регистра  (в нашем случае — $t3)  — на  стадии  ID.  Если  внимательно посмотреть  на таблицу состояний конвейера (таблица 4),  то  видно,  что первая инструкция пройдёт стадию WB позже, чем вторая — стадию ID.
Таблица 4. Конфликт по данным при чтении из регистра
Инструкция
Состояние конвейера
addiu
IF
ID
EX
MEM
WB
 
addiu
  IF
ID
EX
MEM
WB
Номер такта
1
2
3
4
5
6

В данном примере  получается, что регистр $t3 запишется значение операции, равным 4 (на рисунке 20 кругом обведены поступления в регистры кодов операций и результат первой инструкции). Но сразу же после выполнения первой операции последует вторая операция, но запись результата первой операции произойдёт значительно позже, и результат второй инструкции будет не верен. Он получится равным 2 (0+2), а не 6 как предполагается, на рисунке 21 выделен кругом полученный неверный результат.

Рисунок 20. Выполнение первой инструкции.

Рисунок 21. Выполнение второй инструкции.

4.1.1 Устранение конфликта по данным.

Чтобы результаты инструкций выдавали правильные значения необходимо исправлять конфликты по данным. Ниже будет рассмотрено два  варианта устранения конфликта по данным:
    с помощью введения заглушек (введение nop инструкций) программным путём.
    с помощью введения обратной связи (шунт) аппаратным путём.

4.1.1.1 Устранение конфликта по данным с помощью заглушек (nop).

Самый  простой  способ  избежать  конфликта  —  вставить  между инструкциями три  псевдоинструкции nop («заглушки»). В таком случае инструкции пройдут  стадии WB и  ID в нужном нам порядке  (таблица 5), но процессор три такта будет простаивать (выполнять «отсутствие операции»).  Самый правильный  с точки зрения  производительности способ  обходить  конфликты — вставлять между потенциально конфликтующими инструкциями другие инструкции программы, то есть изменять  порядок следования  инструкций  определённым  образом. Ассемблер lilpM32asm  автоматически обнаруживает  потенциально конфликтные ситуации  такого  рода  (когда  чтение  регистра  может произойти  до  необходимой  записи  в  него)  и  вставляет  столько инструкций  nop,  сколько  необходимо  (их  число  может  быть  меньше трёх, если программист вставил между ними другие инструкции). Общий вид программы lilpM32asm представлен на рисунке 22.

Рисунок 22. Окно программы lilpM32asm.
В левой части  программы пишется программа  на ассемблере, а левой части уже  сам компилятор пишет машинные коды, которые и будут загружаться  в память команд. Листинг hex-файла приведён на рисунке 23.
# lilpM32 program; format:
# xxxxxxxx # instr (opcode, funct)
262b0004 # addiu (09, 00)
00000000 # nop
00000000 # nop
00000000 # nop
256c0002 # addiu (09, 00)
Рисунок 23. Листинг hex-фала.
Здесь видно, что  компилятор обнаружил конфликт по данным между двумя командами сложения и поставил заглушки.
 
 
 
 
 
 
 
 
 
Таблица 5. Обход конфликта по данным при чтении из регистра
Инструкция
Состояние конвейера
addiu
IF
ID
EX
MEM
WB
       
nop
  IF
ID
EX
MEM
WB
     
nop
    IF
ID
EX
MEM
WB
   
nop
      IF
ID
EX
MEM
WB
 
addiu
        IF
ID
EX
MEM
WB
Номер такта
1
2
3
4
5
6
7
8
9

Если загрузить  этот код в схему процессора  lilpM32, то можно увидеть, что после выполнения первой инструкции сложения в регистр $t3 и в память данных записалось значение 4. После выполнения второй инструкции сложения, которой требовался результат первой операции, в регистр  $t4 и в память данных записалось значение 6.
На рисунке 24 кругом обведено значение, которое получилось при выполнении второй инструкции сложения на выходе арифметико-логического устройства. Это значение получилось равным 6. На рисунке 25 показано, какие значения хранятся в регистрах в регистровом файле, кругом обведены значения, которые записались. На рисунке 26 показано, какие значения записаны в память данных.

Рисунок 24. Выполнение второй инструкции сложения.

Рисунок 25. Записанные значения в регистровом файле.

Рисунок 26. Дамп ячеек памяти данных.
Напишем более  сложную программу. Её листинг приведён ниже на рисунке 27.
addiu $t3, $s1, 4   # $t3= $s1 + 4 (4)
addiu $t4, $t3, 2   # $t4= $t3 + 2 (6)
addiu $t5, $t3, 3   # $t5= $t3 + 3 (7)
addiu $t2, $t4, 9   # $t2= $t4 + 9 (15)
addiu $t6, $t3, 5   # $t6= $t3 + 5 (9)
addiu $t3, $0,  5   # $t3= 5  
addiu $t5, $t6, 1   # $t5= $t6 + 1 (10)
ori   $t3, $t3, 3   # $t3= $t3|| 3 (7)
subu  $t6, $t5, $t6 # $t6= $t5-$t6 (1)
addu  $t4, $0, $0   # $t4= 0
addu  $t3, $0, $0   # $t3= 0
addiu $t3, $t3, 1   # $t3= $t3 + 1 (1)
addiu $t4, $t3, 2   # $t4= $t3 + 2 (3)
Рисунок 27. Листинг  программы.
В круглых скобках показаны значения, которые должны быть получены в результате вычислений. При выполнении первой инструкции в регистр $t3 должно записаться значение=4. При выполнении инструкции addiu $t4, $t3, 2 в регистр $t4 должно записаться значение=6 (4+2). При выполнении инструкции addiu $t5, $t3, 3 в регистр $t5 должно записаться значение=7 (4+3). При выполнении инструкции addiu $t2, $t4, 9 в регистр $t2 должно записаться значение=15 (6+9). При выполнении инструкции addiu $t6, $t3, 5 в регистр $t6 должно записаться значение=9 (4+5). При выполнении инструкции addiu $t3, $0, 5 в регистр $t3 должно записаться значение=5 (0+5). При выполнении инструкции addiu $t5, $t6, 1 в регистр $t5 должно записаться значение=10 (9+1). При выполнении инструкции ori   $t3, $t3, 3 в регистр $t3 должно записаться значение=7 (5||3). При выполнении инструкции subu  $t6, $t5, $t6 в регистр $t6 должно записаться значение=1 (10-9). При выполнении инструкции addu  $t4, $0, $0 в регистр $t4 должно записаться значение=0. При выполнении инструкции addu  $t3, $0, $0 в регистр $t3 должно записаться значение=0. При выполнении инструкции addiu $t3, $t3, 1 в регистр $t3 должно записаться значение=1. При выполнении инструкции addiu $t4, $t3, 2 в регистр $t4 должно записаться значение=3 (1+2). Листинг hex-файла приведён на рисунке 28.
# lilpM32 program; format:
# xxxxxxxx # instr (opcode, funct)
 
262b0004 # addiu (09, 00)
00000000 # nop
00000000 # nop
00000000 # nop
256c0002 # addiu (09, 00)
00000000 # nop
00000000 # nop
256d0003 # addiu (09, 00)
258a0009 # addiu (09, 00)
256e0005 # addiu (09, 00)
240b0005 # addiu (09, 00)
00000000 # nop
00000000 # nop
25cd0001 # addiu (09, 00)
00000000 # nop
00000000 # nop
356b0003 # ori (0d, 00)
01ae7023 # subu (00, 23)
00006021 # addu (00, 21)
00005821 # addu (00, 21)
00000000 # nop
00000000 # nop
00000000 # nop
256b0001 # addiu (09, 00)
00000000 # nop
00000000 # nop
00000000 # nop
256c0002 # addiu (09, 00)
Рисунок 28. Листинг hex-файла.
На рисунке 29 показано, какие значения хранятся в регистрах в регистровом файле. На рисунке 30 показано, какие значения записаны в память данных.

Рисунок 29. Записанные значения в регистровом файле.

Рисунок 30. Дамп ячеек памяти данных.

4.1.1.2 Устранение конфликта по данным с помощью введения обратной связи (шунт).

Другой  способ  избежать  конфликта  —  ввести обратную связь (шунт) на стадию выполнения инструкции. В таком случае результат предыдущей инструкции будет поступать на мультиплексор. И на первый вход арифметико-логического устройства будет поступать либо значение операнда s, либо значение предыдущей операции, либо значение из памяти данных.
Первый мультиплексор  пропускает значение или предыдущей операции или памяти данных, когда адрес в блоке конвейера ID/EX больше адреса в блоке EX/MEM. Иначе мультиплексор пропускает значение операнда s.

и т.д.................


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


Скачать работу с онлайн повышением уникальности до 90% по antiplagiat.ru, etxt.ru или advego.ru


Смотреть полный текст работы бесплатно


Смотреть похожие работы


* Примечание. Уникальность работы указана на дату публикации, текущее значение может отличаться от указанного.