я посмотрел на простой 16-битный процессор RISC, предназначенный для студентов. Мне нужна небольшая помощь в документации, а также пропавший файл, однако мне удалось получить его для симуляции использования бесплатного в интернет-инструменте EDA Playground. На этот раз я возьму вас с деталями кода, а также как именно, как запустить симуляцию.
Вы захотите обратиться к предыдущему опубликунию, если вы уже не проверили его. Диаграммы, а также таблицы обеспечивают обзор высокого уровня, который поможет вам понять файлы, обсуждаемые в этом посте.
Если вы хотели пожелать по-настоящему программировать это на подлинной FPGA, у вас будет небольшая работа. Память, а также инициализация регистрации осуществляется в методе, который работает нормально для симуляции, однако не будет работать на подлинной FPGA. Во всяком случае, давайте начнем!
Файловый файл
Если вы принимаете каждый данные индивидуально, никто из них не очень трудно понять. Вот быстрый раздумчик (я использую имена данных, я буду использовать в моем имитации в Интернете):
PARAMETER.V – это похоже на включение данных, которые устанавливают некоторые фундаментальные определения для каждого другого файла.
PROG.V – это память направления. Простой модуль, он принимает адрес, а также представляет данные для этого адреса. Директиве $ readmemb считывает данные из данных (TEST.PROG).
register.v – файл реестра. Это почти похоже на память направления, однако у него есть два проверенных порта, а также вы можете составить к нему.
data.v – память оперативной памяти. Это почти как регистры, однако, больше, а также с одним зарегистрированным портом. Существует какой-то код моделирования, который открывает данные, а также распечатывает комментарии памяти, однако я удалил, что, как только для отладки. Предварительный контент исходит из файла test.data.
alu.v – ты поверишь, что это будет сложно, однако это не так. Это просто требует двух входов, а также что-то делает для производства вывода. Что-то простое, как добавляет или вычитает. Все всегда @ (*) рассказывает Verilog не производить тактовую логику для этого. Это просто превращается в несколько простых ворот, а также муки.
Datapath_unit.v – Это один из более сложных файлов, хотя если вы копаете его, вы увидите, что это в основном объем. Эти данные создают все ресурсы (например, регистры, а также воспоминания), а также их вместе.
Control_unit.v – еще один более длительный модуль, это просто реализует таблицу направления, устанавливая линии управления на основе настоящей инструкции.
ALUCONTROL.V – это данные декодирует инструкции для ALU. Не хватало на оригинальное сообщение. Как ни странно, есть еще один аналогичный процессор на том же сайте, который имеет файл ALUCONTROL, однако это явно для другого набора направления. Однако, начнем сохранение этих данных, а также использование таблицы стилей, я смог воссоздать его. Если [FPGA4Students] исправляет это, файлы могут выглядеть чрезвычайно различным.
Design.sv – Эти данные требуются для симулятора Edaplayground, я использую. Он содержит элементы верхнего уровня (путь данных, а также блок управления). Поскольку Edaplayground только обрабатывает этот файл, необходимо, чтобы он включил другие файлы, упомянутые выше. Это приводит к тому, что каждая предупреждает, поскольку у каждого из них есть директива о временении, однако это безобидно.
testbench.sv – Testbench не является частью подлинного дизайна, однако просто устанавливает симуляцию, а также собирает результаты. Мне пришлось немного изменить его для работы с Edaplayground, однако операция одинакова. Он просто производит процессор, питает его часами, а также дает ему работать некоторое время. Программа тестирования, а также содержимое памяти находятся в Test.Prog, а также Test.Data.
Симуляция
Вы можете сделать одну из двух вещей. Вы можете открыть свою копию стиля, готового к работе, однако это может не быть вашим лучшим вариантом. Я бы предложил вам просто пойти в Edaplayground и создать новый проект Verilog. Затем начните перемещать файлы из исходного поста. Вы столкнетесь с ошибками, а также отсутствующие файлы. Смотрите именно сколько вы можете исправить. Если вы ограблены, то вы можете использовать мою копию, чтобы помочь вам, если вы ограблены. Вы обнаружите больше таким образом.
Если вы решите попробовать, прямо здесь – несколько советов о Edaplayground. Вы не требуете выбранного UVM / OVM, и вы не требуете ли вы ни одного типа других библиотек. Я использовал ICARUS Verilog 0.9.7, однако, возможно, вы, скорее всего, используете любой тип доступных инструментов Verilog. Вы хотите проверить флажок Epwave, а также вам требовать добавить это к исследуемой части Testbench:
исходный
начинать
$ dumpfile (“Dump.vcd”);
$ dumpvars;
Используйте индикацию + рядом с вкладками имени данных, чтобы сделать новые файлы. Edaplayground имеет ограничение десяти файлов на панель. Помните, что вам придется включить любой тип файлов .v, которые вы производите в TestBench.sv или design.sv. Вы не требовали включения файлов данных, поскольку другие файлы используют их косвенно.
Бегать!
После того, как у вас будут разработаны все ошибки, вы можете нажать Run, а также вы получите Viewer Viewer, Epwave. Вы естьE Чтобы добавить сигналы процентов, чтобы вы могли посмотреть процессор на работе. Было бы забавно добавить некоторые устройства ввода / вывода в память или некоторые порты отладки, чтобы вы могли посмотреть вещи немного лучше. Я обычно наблюдаю, как счетчик программы, а также в реестре составляющий порт, чтобы получить концепцию того, что происходит внутри.
Оригинальный код имел программу, которая осуществляла многочисленные инструкции. Я прокомментировал его, а также заменил его с этим:
0000_0100_0000_0000 // 0000: тонн r0 <- mem (r2 + 0) С R2 = 0 Это ставит 1 в R0 0000_0100_0100_0000 // 0002: тонны Точно так же в R1 (R1 всегда будет содержать 1) // Место 8 (Байт), 4 (Word): 0010_0000_0101_0000 // 0004: R2 = R0 + R1 0001_0010_1000_0000 // 0006: mem [r1] = R2 (это mem [1] = R2 0000_0010_0000_0000 // 0008: R0 = mem [r1] 1101_0000_0000_0011 // 000a: Перейти к размещению # 4 (ЦП будет умножить на 2, а также добавить 2) // Нет направления на 000C, однако ПК будет повесить там, пока он обрабатывает прыгать Вы должны иметь возможность соблюдать увеличение стоимости, составив в памяти, а также наблюдать за циклом счетчика программы обратно 4 с каждым циклом. Вот типичная сессия: Я оставил много внутренних сигналов, однако вы можете увидеть, что адрес 1 памяти устанавливается на 2, а затем до 3 на самых первых двух итерациях петли. Конец игры Это отличный академический процессор? Я не уверен. Некоторые простые процессоры существуют, однако они часто мало, так как они сложны, или они чрезвычайно непрактичны. Что-нибудь более сложное, чем это, скорее всего, может укусить для новичка. Пока я верю, что вы должны иметь некоторое понимание фундаментального Verilog, прежде чем решать что-то подобное, документация была немного редким (и запутанным) в некоторых областях. Очевидно, что было достаточно здорово, так как я получил его работать, однако, если вы только что начинаете, вы, скорее всего, понравились бы немного больше оказания помощи, а также объяснения. У вас есть предпочтительный академический процессор Verilog? Я все еще ищу этого человека, который «просто прав».