, поскольку я обычно работаю со студентами, я всегда находку для просмотра CPU, предпочтительно в Verilog, в зоне Златовласка. То есть не так хорошо, как и не так хорошо. У меня были большие надежды на этот 16-битный процессор RISC, представленный [FPGA4Student], однако без какой-либо дополнительной работы он, скорее всего, не используется для его предполагаемой цели.
Сам процессор довольно прост, а также подходит на относительно длинную веб-страницу. Однако детали об этом немного редким. Это не всегда плохое. Вы можете предложить стажеры тоже большую помощь. С другой стороны, вы также можете также оказать мало. Однако то, что было хуже, является одним из модулей, необходимых для того, чтобы получить его на работу, отсутствует! Вы можете предложить этому упражнением, делегированным читателем, однако, скорее всего, было объяснено таким образом.
Сначала я был готов удалить закладку, а также двигаться дальше. Тогда я решил, что процесс фиксации этого стиля, а также до битового анализа на нем действительно может быть более поучительным, чем просто изучать совершенно рабочий дизайн. Поэтому я решил поделиться своим ремонтом с вами, а также посмотреть в дизайн немного больше. Кроме того, я покажу вам точно, как получить то, что нужно запускать в интернет-симуляторе, чтобы вы могли экспериментировать без установки программного приложения. Конечно, если вам удобно с помощью набора инструментов Verilog (например, из Xilinx или ALTERA, или даже бесплатных, таких как ICARUS или CVER), у вас не должно быть никакой проблемы, делая эту работу. На этот раз я сосредоточусь на том, как именно работает ЦП, а в следующий раз я покажу вам, как именно имитировать его с некоторыми бесплатными инструментами.
Дизайн
Начнем с блок-схемы ЦП. Он не сильно отличается от других архитектур RISC, особенно любого типа, которые не используют трубопровод. Счетчик программы (ПК) управляет памятью направления. Существует выделенный сумматор, чтобы добавить четыре на ПК для каждого направления, поскольку каждое направление четыре байта. MUX позволяет вам тонны на ПК для следующего направления или с целью прыжка (фактически, абсолютный прыжок, вычисляемый ветвь или адрес возврата). Есть еще один выделенный сумматор для вычисленных ветвей.
Обработка происходит в арифметической логической системе (ALU), которая выполняет разные операции. Место назначения может быть первичной памятью или одним из регистров. Данные регистры используют старую технику для предотвращения типичной проблемы. Предположим, вы можете проверить один регистр за цикл. Если вы включите только один реестр в инструкции, это нормально. Однако, если вы включите направление, чтобы сделать что-то вроде добавления двух регистров, у вас будет трудно загрузка обоих них, если вы не вытягиваете время направления. Вот почему файл реестра имеет два выходных порта.
Реальность такова, что данные регистра по крайней мере одна область, где стиль не может синтезировать на подлинное оборудование в дополнение к нему. Для одной вещи в предварительном блоке есть цикла для нуля регистров. Большинство инструментов синтеза просто выкинут это. Вы бы намного лучше с помощью сигнала сброса. Другой возможный выпуск зависит от того, какой точный FPGA вы будете цели, а также какие инструменты вы используете.
Дизайнер предоставляет два проверенных порта к регистрам, однако основное хранение одинаково. Это затруднит использование специализированных ячеек RAM, если они были доступны. Еще один типичный метод – просто использовать два отдельных блока регистрации, один для каждого проверенного порта. Создатель отправит данные как на блоки, так что из-за пределов вы не можете сказать разницу. Часто это приведет к более быстрой и более компактному дизайну.
Это было бы увлекательно (и не очень сложно) переписать данные регистра для этого. Однако, если вы не собираетесь разрабатывать на оборудовании, вы, скорее всего, не заметите никаких различий.
Как и самые похожие процессоры, все управление работает в MUCES, выбирающих, какие данные отправлены где. В частности, в пути данных процессора есть четыре муки.
PCSRC – маршруты «Далее» значение ПК на счетчик программы
REGDST – выбирает, какой реестр состоит из двух полей в направлении (диаграмма показывает три входа, однако, что, как кажется, ошибка)
BSRC – выбирает второе разногласие на ALU (либо мгновенное значение, либо значение регистра)
WBSRC – MUX «Записать» MUX выбирает, какие данные устанавливаются обратно в регистры для записи
Дизайн таблицы
Остальная часть стиля показывает тринадцать инструкций, пять форматов направления, а также контрольные сигналы, необходимые для каждого из форматов. Нюансы инструкций в каждой классификации зависят от того, что должен делать ALU. Другими словами, добавочное направление, а также подчитанное направление, точно так же, как то же самое, за исключением того, что делает ALU. Как вы можете себе представить, ALU принимает два входа, а также код работы, а также создает выход.
Оригинальное публикация на самом деле не утверждает, какие инструкции в какой категории, однако, это довольно просто для головоломкивне. Тонны, а также инструкции в магазине находятся в доступе доступа к форматам памяти. Ветвь на равных, а также не равных инструкциях, находятся в категории ветви. Направление прыжка имеет свой формат. Все остальные инструкции – «обработка данных». Одна таблица показывает код OP «Distance Distance», однако это не отображается нигде, в том числе в коде, поэтому я подозреваю, что это вырез, а также ошибка вставки.
Две таблицы делают большую задачу обобщения требований к операциям, чтобы заставить процессорную работу. Существует девять уникальных управляющих сигналов:
Regdst – это соответствует MUX на диаграмме точного же имени, а также выбирает, если пункт назначения является реестром (отображается как reg_dst в коде)
ALUSRC – выбирает источник разногласий ALU (так же, как BSRC MUX на диаграмме, а также отображается как ALU_SRC в коде)
MemToreg – Active, когда происходит память для регистрации регистрации (mem_to_reg в код)
RegWrite – установить при составке должен перейти в реестр (REG_WRITE в коде)
MEMREAD – установить, когда проверяется память, является исходным данным для направления (MEM_READ в коде)
MEMWRITE – УСТАНОВИТЬ, КОГДА М память является составным пунктом (mem_write в коде)
Филиал – активен, когда филиал в развитии (комбинация BEQ, а также сигналов BNE в коде)
Aluop – в сочетании с частью инструкции выбирает операцию для выполнения в ALU (ALU_OP в коде)
Прыгать – активен, когда прыжок занимается
Таблица напрямую соответствует Verilog в системе управления, за исключением изменений имени, что приведет к пришествию, так как это делает стол немного сложнее. Например, прямо здесь код для направления обработки данных с OPCode 0010:
4’B0010: // data_processing
начинать
reg_dst = 1’b1;
alu_src = 1’b0;
mem_to_reg = 1’b0;
reg_write = 1’b1;
mem_read = 1’b0;
mem_write = 1’b0;
beq = 1’b0;
BNE = 1’B0;
alu_op = 2’b00;
прыгать = 1’b0;
конец
Сравните это с таблицей в исходном опублике, а также вы увидите его на картах напрямую. На английском языке направление проверяется из двух регистров, которые записывают обратно в регистры с кодом операции ALU 0, а также не прыжко или ветвь.
Необъяснимо, этот блок дублируется для всех инструкций по обработке данных, даже если она не должна быть необходима. К счастью, для симуляции, он действительно не будет иметь значение, а также большинство инструментов синтеза найдут его, а также выясните его, а также объединить идентичный код для вас.
В следующий раз
В следующем взносе я покажу вам, как точно показать стиль в один из моих предпочтительных инструментов быстрого стиля, детская площадка EDA. Было пропущенные данные, а также некоторые массаж, необходимые для того, чтобы заставить его работать с интернет-инструментом. Тем не менее, ЦП работает как обещанный, как только вы выясните несколько особенностей. Если вы хотите Skyek Peek в симуляции, вы можете осматривать видео, ниже.