Лабораторная работа №2 Осень 2014

О найденных ошибках и опечатках просьба сообщать  на ripopov@gmail.com

1. Цель работы:

2. Инструментальные средства

3. Краткие теоретические сведения

4. Порядок выполнения работы

5. Варианты задания

1. Цель работы:

2. Инструментальные средства

(оборудование и программное обеспечение)

Лабораторную работу можно выполнять как в ОС Windows, так и в ОС Linux. Дальнейшие инструкции приведены для ОС Windows.

3. Краткие теоретические сведения

Архитектура MIPS

Архитектура MIPS (англ. Microprocessor without Interlocked Pipeline Stages – микропроцессор без блокировок в конвейере) относится к классу процессоров с сокращенной системой команд (RISC).  Отличительными особенностями RISC архитектуры являются:

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

В данном курсе лабораторных работ будет рассматриваться упрощенное подмножество архитектуры MIPS32.

Программная модель процессора с архитектурой MIPS32

Форматы данных:

По-умолчанию используется прямой порядок байтов (little endian).

Регистры:

В архитектуре MIPS определены  следующие регистры:

Типы команд:

Система команд

В качестве примера рассмотрим процессор, реализующий следующее подмножество инструкций MIPS32:

С подробным описанием команд можно ознакомиться в MIPS32® Architecture For Programmers

Volume II: The MIPS32® Instruction Set ( http://www.mips.com/products/architectures/mips32/#specifications )

Форматы команд

Команды R-типа (регистровые)

35 или 43

[31:26]

rs

[25:21]

rt

[20:16]

rd

[15:11]

shamt

[10:6]

funct

[5:0]

Команды загрузки и выгрузки данных ( LW / SW)

35 или 43

[31:26]

rs

[25:21]

rt

[20:16]

адрес

[15:0]

Команда условного перехода

4

[31:26]

rs

[25:21]

rt

[20:16]

адрес

[15:0]

Команды безусловного перехода

2 или 3

[31:26]

адрес

[25:0]

Тракт данных многотактного процессора

Схема тракта данных показана на рисунке

Розовым цветом обозначены комбинационные схемы, серым - последовательностные схемы.

Основные компоненты тракта данных ( datapath.v ):

Регистры:

PC - Program Counter - Счетчик команд, хранит адрес следующей команды

IR - Instruction Register - Регистр команд, хранит код команды в период её выполнения

MDR - Memory Data Register - Регистр данных, хранит данные прочитанные из памяти

alu_out - Регистр для хранения результата вычислений на АЛУ

A, B - Регистры хранят данные прочитанные из регистрового файла

Память (memory.v):

Память с одним асинхронным портом для чтения и одним синхронным портом для записи.

Регистровый файл ( regfile.v ):

Банк из 32-х регистров, с двумя асинхронными портами для чтения и одним синхронным портом для записи

АЛУ ( alu.v , alu_ctrl.v ):

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

Устройство управления ( control_unit.v )

Синхронный автомат Мили, управляющий исполнением команд в тракте данных

Устройство управления многотактного процессора

Устройство управления многотактного процессора реализовано в виде автомата Мили. Диаграмма состояний автомата показана на рисунке:

В качестве пояснения рассмотрим пример выполнения команды LW (загрузка данных из памяти) в процессоре:

4. Порядок выполнения работы

  1. Ознакомьтесь с основами языка Verilog HDL, используя доступные в сети источники:

http://www.asic-world.com/verilog/verilog_one_day.html

http://www.asic-world.com/verilog/veritut.html

http://www.marsohod.org/index.php/verilog

http://www.marsohod.org/index.php/downloads/doc_download/37---verilog

http://habrahabr.ru/post/137643/

Рекомендуемые книги (на английском языке):

  1. Загрузите исходные тексты процессора с многотактным исполнением команд. https://github.com/ripopov/lab_1_spring_2013.git
  2. Создайте проект, в качестве целевой микросхемы выберите XC3S700AN:

  1. Добавьте к проекту исходные коды:

  1. Соберите тестовую программу воспользовавшись готовым Makefile’ом. Папка sw должна находиться внутри папки с исходными кодами Verilog.

ripopov@RIPOPOV-MOBL2 /c/work/lab_1_2013/sw

$ make

  mips-sde-elf-as -o test.o test.asm

  mips-sde-elf-ld -Ttext 0x0 -Tdata 0x200 -eentry -o test.axf test.o

  mips-sde-elf-objdump --disassemble test.axf > test.lst

  mips-sde-elf-objcopy -O verilog test.axf test.vh

  cat test.vh | perl -pe 's/([\dA-F]{2})\s+([\dA-F]{2})\s+([\dA-F]{2})\s+([\dA-F]{2})/$1$2$3$4/g;' > test.rom

  1. Изучите тестовую программу sw\test.asm и Makefile. Обратите внимание что данные располагаются в памяти с адреса 0x200, а команды с адреса 0x0.
  2. Запустите симуляцию в ISE:

  1. В консоли симулятора будет отображено значение регистра #8, изменяемого тестовой программой. Значения выводятся по фронту тактового сигнала (на каждом такте).

  1. Доработайте модель процессора согласно варианту задания.

5. Варианты задания

Номер варианта

Сложность

варианта

Описание задания

1.

низкая

Реализовать выполнение команд сдвига SRA, SRL, SLL

2.

низкая

Заменить память на полностью синхронную (с синхронным чтением и записью данных). Доработать процессор для работы с синхронной памятью.

3.

средняя

Реализовать аппаратную поддержку умножения, команды MUL, MFHI, MFLO, MTHI, MTLO. Операцию умножения реализовать в виде последовательностной схемы, через сложение и сдвиг.

4.

высокая

Реализовать обработку внешнего сигнала прерывания

5.

высокая

Реализовать обработку исключений при переполнении

6.

высокая

Реализовать аппаратную поддержку деления, команды DIV, MFHI, MFLO, MTHI, MTLO. Операцию деления реализовать в виде последовательностной схемы, по стандартному рекуррентному алгоритму (деление “столбиком”) или любому другому.

7.

низкая

Заменить память на байт-адресуемую, реализовать команды LB, LH, SH, SB

8.

низкая

Реализовать выполнение команд CLZ, CLO.

9.

низкая

Реализовать выполнение команд BNE, BLEZ, BLTZ