VHDL MIPS 5-этапный трубопроводный жук - PullRequest
0 голосов
/ 08 декабря 2011

Код для этого слишком длинный, чтобы писать, поэтому я просто опишу его. Я создал 5-ступенчатую MIP-трубу, которая почти работает. Уловка в том, что КАЖДАЯ lw инструкция, которая достигает стадии декодирования инструкции, перезаписывает значения управляющего сигнала на стадии исполнения. Мало того, что это приводит к тому, что ПК пропускает инструкцию, то есть от 300 до> 308. Мне просто нужно некоторое представление о том, где искать ошибки, так как это назначение класса. Если вынуть все инструкции LW, процессор будет работать нормально.

Пример: Сумматор на стадии EX собирается на $ 4 $ 1 $ 2, который должен быть 1 Как только LW входит в стадию ID, ALUsrc утверждается, и ALUop изменяется с вычитания на добавление Это вынуждает сумматор на стадии EX добавлять $ 4 $ 1 $ 2, в результате чего 5 сохраняется в $ 4

1 Ответ

1 голос
/ 18 января 2012

http://en.wikipedia.org/wiki/File:MIPS_Architecture_%28Pipelined%29.svg

enter image description here 5-ступенчатый конвейер MIPS (с аннотацией, показывающей Write Reg Выбор и включение)

Нижняя строка через этапы конвейера представляет адрес порта записи (обратного) файла регистра и разрешение записи, а WB - данные из памяти.

http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html

Инструкция загрузки слова Описание: Слово загружается в регистр с указанного адреса.

Операция: $ t = MEM [$ s + смещение]; advance_pc (4);

Синтаксис: lw $ t, смещение ($ s)

Кодирование: 1000 11sss tttt iiii iiii iiii iiii

Где ввод адреса регистра записи ($ t) считывается из адреса памяти данных, состоящего из смещения регистра регистра $ s с непосредственным значением i, которое получает знак расширения. Ваши $ 4 - это $ t выше, $ 1 или $ 2 - это $ s, в то время как оставшаяся полоса выходного файла регистра звучит как подчиненная для знака, расширенного немедленно.

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

При использовании трехпортового файла регистров конфликты возникают только в том случае, если вы пытаетесь использовать новое значение файла регистра из памяти до того, как оно будет считано из памяти и записано в файл реестра. Это может управляться компилятором, планирующим NOOP, до тех пор, пока не будет завершена незавершенная запись в регистровый файл, когда следующая инструкция пытается его использовать, или не остановит IF / ID в аппаратном обеспечении, когда его вывод содержит ссылку на ожидающую запись в регистровый файл.

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

Поскольку адреса файлов регистров записи ID / EX, EX / MEM и MEM / WB нигде не используются, схема для сравнения может быть совмещена с IF / ID и файлом регистра, предотвращая ненужные задержки компоновки, влияющие на минимум тактовый цикл.

Использование двухпортового регистра-файла намного проще и выводит из строя IF / ID до тех пор, пока разрешение записи не возвращается из MEM / WB, эффективно превращая любые инструкции чтения из памяти в 3-тактовые инструкции (или более, память данных может зависнуть, если она кеш или медленно). Это делает регистровый файл с тремя портами более или менее необходимым по соображениям производительности. Существует неявный мультиплексор для источника, по крайней мере, для одного из двух элементов управления портом файла регистра (разрешение записи, адрес записи) со стадии MEM / WB, когда IF / ID остановлен (для памяти-> regfile).

Доступ к памяти данных может заблокировать MEM / WB, точно так же, как доступ к памяти команд также может заблокировать IF / ID. Остановленный IF / ID не выдает разрешение записи для файла регистра в ID / EX и не останавливает MEM / WB.

...