January 13th, 2013

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

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

Продолжаем делать процессор MIPS на Verilog. В предыдущей части определились с понятием процессора, языка ассемблера и подмножеством архитектуры процессора, которое будет реализовано в рамках лабы. Теперь можно приступить непосредственно к созданию дизайна на HDL (Verilog). В конце лабы наш процессор, загруженный в память ПЛИС, будет аппаратно выполнять простую программу на ассемблере МИПС.

3. Основные модули дизайна HDL

Вспоминаем основные элементы, которые определяют текущее состояние системы - счетчик программы (program counter), файл регистров (register file), память инструкций (instruction memory) и память данных (data memory) - они и станут основными блоками дизайна - определим их в виде соответствующих модулей.

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

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

Чтобы оценить объем дизайна, можно сразу заглянуть в исходные файлы проекта:
mips.v - модули основной логики.
datamem.v - память данных.
instrmem.v - память инструкций (пусть объем файла не пугает - 99% строк в нем занимает двоичное представление тестовой программы).
mips_top.v - модуль верхнего уровня - для генерации файла прошивки ПЛИС и подключения устройств ввода-вывода.

Далее подробнее в описании каждого модуля.

Счетчик программы
Collapse )
Файл регистров
Collapse )
Память данных
Collapse )
Память инструкций
Collapse )

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

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