Я планирую создать MIPS-подобный процессор в VHDL на FPGA. Процессор будет иметь классический пятиступенчатый конвейер без пересылки и предотвращения опасности. В курсе компьютерной архитектуры я узнал, что первые MIPS-процессоры, используемые для чтения из файла регистров на восходящем фронте тактовой частоты и записи на фронте падения часов. FPGA, который я использую, не поддерживает использование нарастающего и падающего фронта часов в то же время (относительно чтения и записи в регистры), поэтому я не могу точно сделать то же самое, что и оригинальный MIPS, и должен сделать все это при увеличении фронта часов ,Одновременное чтение и запись в регистры
Итак, вот часть, в которой у меня возникла проблема. Инструкция записывает обратно в регистр на этапе записи. Этап обратной записи отправляет данные непосредственно на этап декодирования. Другая инструкция на этапе декодирования хочет прочитать тот же регистр, который также хочет записать сцена обратной записи.
Что происходит в этом случае? Получает ли этап декодирования новое значение для инструкции или старое значение, которое все еще находится в файле регистров?
«Большинство ПЛИС не поддерживают падение фронта часов» ... какая любопытная идея, где вы ее читали? то, что они не поддерживают, синхронизирует один и тот же регистр на обоих краях тактовых импульсов (и исключения, как правило, блоки ввода/вывода) ... Однако чтение и запись на одном и том же фронте так же хороши, поскольку данные чтения и записи являются отдельными сигналы. Если вы переместите те регистры в BlockRam, обязательно прочитайте его данные относительно одновременного чтения и записи (обычно на отдельных портах). –
Вы правы. В этом вопросе руководство пользователя для платы было не таким ясным. FPGA поддерживает задний фронт, но не использует оба края одновременно. – fsasm
Я думаю, что если вы прочитаете старое значение, вам понадобится еще один цикл перенаправления результатов (чтение нового значения обеспечивает пересылку через файл регистра). –