2016-03-11 9 views
2

Я пытаюсь создать простой процессор в VHDL для FPGA Altera. Тем не менее я пытаюсь понять, как объяснить задержку, вызванную блоками ROM. Блоки ПЗУ сами могут иметь как входной адрес, так и выходные данные с синхронизацией или только тактовый сигнал ввода, дающий 1 или 2 такта синхронизации между запросом данных (установка адреса) и получением данных обратно.Как латентность ПЗУ учитывается при проектировании ЦП

Я могу понять, является ли ПЗУ по существу массивным мультиплексором данных, делая такие вещи, как прыжки, тривиально, потому что вы просто задаете адрес и следующий цикл тактовой синхронизации, там будет правильная инструкция! Я просто не совсем понимаю, как управлять этим с задержками между ПЗУ и ЦП. Из того, что я собираю, каждая инструкция должна знать, следует ли получать новую команду, изменять счетчик ПК (скачок) или срыв (сохраняйте ПК одинаково), но, конечно, если есть латентность в 2 цикла, инструкция потребуется знать за 2 цикла вперед?

Как можно писать ПК для такого рода систем?

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

+1

Если вы выглядите достаточно далеко назад в микропроцессорном дизайне, многие процессоры занимали 4 такта на инструкцию, больше для сложных insts. Это дает вам один путь. Когда технология позволила более сложным проектам ЦП, они могли бы преодолеть это ограничение скорости путем «конвейерной обработки». Если вы посмотрите, вы найдете много литературы о конструкции конвейера ЦП. –

ответ

3

На FPGA почти достаточно иметь только регистр входных адресов, дающий задержку в 1 такт. Затем вы можете адресовать ПЗУ только со следующим значением регистра ПК вместо текущего значения.

Следующее значение - это значение, которое будет загружено в регистр с последующим нарастающим (или падающим) фронтом часов. Это следующее значение также будет загружено в регистр адресов ROM с тем же фронтом синхронизации. Таким образом, оба регистра будут иметь один и тот же контент, и ПЗУ фактически доставляет данные на (новом) ПК после краев часов.

Выход ПЗУ сохраняется в регистре команд, если у вас более двух ступеней трубопровода. В этом случае вы автоматически будете иметь выходной регистр ПЗУ.

+0

Ах! Спасибо, как вы объясняете задержки, в которых ПК просто застопорился за такие вещи, как инструкции по доступу к памяти? Очевидно, что чтение в память - это двухтактные операции, поэтому, как только чтение памяти завершится, ПК будет захвачен командой один после инструкции, которую он должен был получить (из-за работы двух циклов infront)? – Pyrohaz

+1

Если трубопровод остановлен, тогда старое значение ПК загружается в ПК, а также в регистр адресов ПЗУ. Инструкция в регистре команд не будет потеряна, потому что этот регистр должен сохранять свое старое значение, когда трубопровод закрывается. –