January 21st, 2013

Лабораторная работа 5: делаем процессор MIPS (4)

Продолжение, начало Лабораторная работа 5: делаем процессор MIPS (1), Лабораторная работа 5: делаем процессор MIPS (2) и Лабораторная работа 5: делаем процессор MIPS (3) <<

Полный код модуля Verilog - mips.v


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

Команды типа R-type: add и sub

Вспоминаем, что поле opcode для всех команд R-type равно нулю, а окончательный тип команды определяет поле funct, поэтому сразу же открываем по этому полю 2е вложенное ветвление case, чтобы отличить add от sub.

          INSTR_OP_RTYPE:
                case(instr_rtype_funct)

Команда add

А вот и он, код для реализации команды сложения значений двух регистров add:
                  INSTR_RTYPE_FUNCT_ADD:
                    begin
                        // add $s0, $s1, $s2
                        // $s0 = $s1 + $s2
                        // rs=$s1, rt=$s2, rd=$s0

                        // rf_rd1 немедленно получит значение регистра rs
                        rf_ra1 = instr_rtype_rs;

                        // rf_rd2 немедленно получит значение регистра rt
                        rf_ra2 = instr_rtype_rt;

                        // записать значение в регистр rd на следующий такт clock
                        rf_wa = instr_rtype_rd;
                        rf_wd = rf_rd1 + rf_rd2;
                        rf_we = 1;
                    end


Collapse )

Ну вот и достаточно, закрываем case, always и сам модуль.
      endcase
    end
endmodule

Замечание: Конечно мы реализовали всего несколько команд из всего множества команд, входящих в спецификацию ассемблера MIPS (в документации к чипу PIC32 я насчитал 85), но реализацию других команд при желании очевидно легко добавить в дизайн модуля, просто добавив необходимые блоки кода внутри case.

5. Ядро MIPS и модуль верхнего уровня

На этом дизайн внутренней логики работы процессора завершается - все составные части готовы. Осталось соединить их вместе в рамках единого ядра и подготовить модуль верхнего уровня для запуска прошивки с созданным ядром на ПЛИС или для отправки на фабрику на новую линию 90 нанометров в Зеленоград или Китай для производства чипа или же для продажи сторонним лицензиатам в виде интеллектуальной собственности. В рамках курса лабораторных работ производство партии чипов с приведенным дизайном вероятно будет излишним, тк. процесс изготовления как минимум займет некоторое время, которое скорее всего не впишется в расписание учебного плана, зато тестовый запуск на ПЛИС прошивки с рабочим процессором можно вполне провести прямо в аудитории. Также стоит отметить, что для варианта продажи дизайна в виде интеллектуальной собственности имеет смысл сначала решить возможные вопросы юридического характера с лицензированием архитектуры MIPS у ее владельца Imagination Technologies, в которую недавно вошла MIPS Technologes, а еще лучше на основе полученного опыта разработать собственную архитектуру вычислительной машины для решения каких-нибудь актуальных специализированных задач, с которыми традиционные процессоры общего назначения справляются недостаточно эффективно.

Collapse )

Ну вот собственно и всё. Процессор и остальные блоки готовы и подключены между собой в рамках единого дизайна - можно генерировать прошивку для ПЛИС, загружать процессор в память ПЛИС и запускать на нем разные интересные программы. Последний нюанс, который осталось решить - в текущем виде процессор будет обязательно работать и выполнять уже расположенные внутри памяти инструкций команды. Однако, что там в действительности будет происходить с процессором внутри ПЛИС, мы пока никак не увидим и не узнаем потому, что у нас до сих пор не был определен способ доступа к результатам работы, которым мог бы воспользоваться обычный человек через свои традиционные органы чувств.

Поэтому в завершении - подключение устройств ввода-вывода (конечно же это будут 7мисегментный диодный дисплей и совершенно новый потрясающий метод ввода данных - рычажковый) и демонстрация работы тестовых ассемблерных программ, запущенных на созданном выше процессоре MIPS на плате ПЛИС >>.