Основы работы в средах Logisim и Quartus Prime Lite
Введение
Представленный Вашему вниманию курс "Проектирование процессоров RISC-V в среде Logisim и на языке Verilog в среде Quartus" представляет собой труд, направленный на последовательное освоение основ цифровой схемотехники результатом которого станет создание простого ядра процессора RISC-V.
При создании курса автор был нацелен обеспечить слушателей простым и доступным входом в освоение базовых основ цифрой электроники и открытой архитектуры RISC-V.
Теоретический материал дополняется обширной практической частью, в рамках которой изучаются ключевые блоки цифровых устройств: комбинационные и последовательностные схемы, регистры, счетчики, арифметико-логические устройства, модули памяти и дешифраторы.
Для освоения материала предлагается использование известной в академической среде программы моделирования устройств Logisim Evolution. Материал курса по данной среде является единственным открытым русскоязычным текстовым учебным пособием.
Помимо Logisim Evolution в курсе рассматриваются методы работы в среде Intel Quartus Prime, включая использование языка описания аппаратуры Verilog HDL для разработки цифровых модулей.
Подход в изучении основ схемотехнического проектирования устройств, совмещённый с их описанием на языке описания аппаратуры, позволит лучше понять принципы организации и функционирования как отдельных модулей, так и процессора в целом.
В результате прохождения курса слушатель должен получить базовое понимание фундаментальных принципов цифровой электроники и работы современных микропроцессоров.
Получить основные навыки работы с графическими инструментами проектирования Logisim Evolution, а также навыки создания модулей на языке Verilog HDL в среде Quartus Prime.
Иметь представление об архитектуре современных процессоров и понимать принцип построения и функционирования процессоров RISC-V.
Презентация по установке инструментальных сред
Установка среды моделирования Logisim, среды разработки Quartus Prime Lite
Видеолекция. Основы Logisim (часть 1)
Видеолекция. Основы Logisim (часть 2)
Основы работы в средах Logisim и Quartus Prime Lite
Видеолекция. Описание работы в среде Quartus Prime Lite.
Краткий справочник по языку описания аппаратуры Verilog и основам верификации
Введение
Для синтеза цифровых устройств глобально можно определить несколько методов: схемотехническое построение устройств и текстовое на языках описания аппаратуры.
Язык Verilog является одним из самых популярных языков описания аппаратуры (HDL), используемым для проектирования и моделирования работы цифровых и микропроцессорных систем. Удобство, выразительность, а также широкая поддержка языка со стороны инструментов проектирования, сделали Verilog неотъемлемой частью индустрии разработки цифровых устройств.
Verilog был разработан в 1984 году как язык описания аппаратуры, который позволяет проектировщикам описывать логику цифровых схем на высоком уровне абстракции. Он обеспечивает средства для описания как структурной, так и поведенческой модели аппаратуры. Структурное описание позволяет проектировать систему как комбинацию компонентов, тогда как поведенческое описание фокусируется на логике работы системы.
Язык поддерживает различные уровни абстракции, что позволяет инженерам сосредоточиться на нужной детали в зависимости от этапа проектирования.
Язык Verilog обладает следующими преимуществами:
- Объектно-ориентированный подход: Verilog поддерживает некоторые принципы объектно-ориентированного программирования, что упрощает организацию кода и его повторное использование. Инженеры могут создавать модули, которые могут быть и использованы в разных проектах, что увеличивает эффективность разработки. Создано большое количество открытых модулей, которые разработчики могут применять в своих проектах, что ускоряет процесс разработки.
- Открытость и стандартизация: Язык стандартизован (IEEE 1364), что обеспечивает его совместимость и предсказуемость в использовании, а также стабильность инструментов, которые его поддерживают.
- Поддержка тестирования: Verilog предоставляет мощные средства для проверки и тестирования проектируемых систем. Конструирование тестов и создание testbenches для верификации работы проектируемых схем -это неотъемлемая часть процесса проектирования. Так появился язык System Verilog, изначально разработанный для верификации, а в настоящее время применяемый для описания RTL.
- Удобство для параллельного описания: Verilog позволяет описывать параллельно работающие процессы, что естественно отражает реальную архитектуру цифровых систем. Это делает язык особенно эффективным для описания сложных систем на кристалле (SoC), где множество компонентов работают одновременно.
Необходимо выделить ряд недостатков, которые по мере освоения языка начинающим разработчиком могут быть сняты:
- Сложность синтаксиса: для начинающих разработчиков синтаксис Verilog может показаться сложным и запутанным, особенно при переходе от поведенческого описания к структурному.
- Ограниченная выразительность: хотя язык позволяет представлять широкий спектр возможностей, но некоторые сложные конструкции могут быть неудобными для описания. Например, работа с состояниями и временными зависимостями может требовать значительных усилий.
1. Вводные данные для описания аппаратуры на языке Verilog
В целом необходимо выделить ряд существенных преимуществ языков описания аппаратуры над схемотехническим вводом:
- Высокоуровневая абстракция. Verilog позволяет описывать функциональность устройства на более высоком уровне, чем схемотехнический ввод. Вместо начертания электрических схем можно формулировать свойства и поведение системы через код, что упрощает процесс проектирования и позволяет быстрее перейти от идеи к реализации. Verilog поддерживает описание как на уровне логических элементов (gate level), так и на уровне функциональных блоков (behavioral level). Это позволяет инженерам выбирать необходимый уровень детализации в зависимости от задачи.
- Повторное использование кода. В Verilog модули могут быть определены один раз и использованы много раз, что сильно упрощает проектирование. Это позволяет создавать библиотеку заранее протестированных компонентов, что ускоряет процесс разработки.
- Набор инструментов для верификации. Verilog позволяет создавать тестовые стенды (testbenches) для автоматической верификации проектируемых систем. Это позволяет обнаруживать ошибки и проводить тестирование на ранних этапах разработки без необходимости физической реализации схемы.
- Легкость изменения и обновления. В случае необходимости изменения дизайна, изменения могут быть легко внесены в код. Это значительно экономит время по сравнению с обновлением схемы, где каждое изменение может потребовать полной переработки. Разработчики могут анализировать и отлаживать код, что гораздо удобнее и быстрее, чем изучение схем.
- Упрощение процесса сопровождения и документации, а также читаемость. Код на Verilog может быть легче читаем и понятен другим инженерам, изучение схемы, что упрощает поддержку и сопровождение проектов. Документирование проекта на языках описания аппаратуры позволяет лучше структурировать и документировать проект, что делает его понятнее.
- Интеграция с другими инструментами. Проект реализованный, например, Verilog легче переносить (интегрировать) в средах автоматизированного проектирования (CAD), что позволяет эффективно разрабатывать, моделировать и синтезировать сложные цифровые устройства.
- Скорость реализации проекта.
В литературе можно встретить описание языков описания аппаратуры как составной системы из двух компонент: общеалгоритмической и проблемно-ориентированной.
Алгоритмическая компонента языка Verilog заключается в схожести его семантики и синтаксиса с Си подобными языками. Язык содержит операторы, типы данных, процедурные блоки и функции.
Проблемно-ориентированная компонента заключается в наличии интерфейсов, в том числе данных физического типа, сигналов, конкретизации применяемых компонентов.
Освоение языка можно начать с формирования представления о зарезервированных словах.
В языке Verilog определены следующие зарезервированные слова, применяемые при реализации описания схем - модулей. Соответственно для применения в качестве имен переменных, констант их использовать нельзя. Зарезервированные слова Verilog приведены в таблице 1.1.
always and assign attribute automatic begin buf bufif0 bufif1 case casex casez cell cmos config deassign default defparam disable edge else end endattribute endcase endconfig endfunction realtime |
endgenerate endmodule endprimitive endspecify endtable endtask event for force forever fork function generate genvar highz0 highz1 if ifnone incdir include instance initial inout input integer join large |
liblist library localparam micromodule medium module nand negedge nmos nor not notif0 notif1 nowshowcancelled or output parameter pmos posedge primitive pull0 pull1 pulldown pullup pulsestyle_ondetect pulsestyle_onevent remos |
real reg release repeat rnmos rpmos rtran rtranif0 rtranif1 scalared signed small specify showcancelled specparam strength strong0 strong1 supply0 s upply1 table task time tran tranif0 tranif1 tri |
tri0 tri1 triand trior trireg unsigned use vectored wait wand weak0 weak1 while wire wor xnor xor |
Необходимо закрепить базовые понятия, которыми необходимо руководствоваться при описании аппаратуры:
- В Verilog имя (идентификатор) - последовательность букв и цифр, знаков "$" и "_", причем начинаться оно обязано не с цифры. Регистр имеет значение. Если начальный символ - "\", то следом за ним может идти любая последовательность символов. Все, что до пробела, будет считаться корректным именем. Например: "Namee", "nAmee", "$Char", "\c+Ha^ra".
-
При написании программного кода разработчик должен оставлять комментарии. В Verilog также существуют средства обозначения комментариев. Комментарии делятся на:
- однострочные (//);
- блочные (/* текст комментария или часть программы */).
Однострочными комментариями можно закомментировать часть одной строки или всю строку полностью.
- Пунктуация - пробелы игнорируются. Точка с запятой используется для обозначения конца командной строки. Запятые, как правило, используются для отдельных элементов в списке.
Описание каждого объекта аппаратуры осуществляется в модулях и размещается между зарезервированными словами: module и endmodule.
Создаваемые объекты должны иметь интерфейсы - порты.
Порты в Verilog бывают трёх типов:
- Input - вход;
- Output - выход;
- Inout - двунаправленный.
Порт объявляется следующим образом: тип [разрядность] имя порта;.
Если не задана спецификация диапазона, например input [2:0] a, то считается, что порт имеет ширину одного бита, а передаваемые сигналы считаются скалярными. Если порт представляет собой шину, то есть имеет диапазон, то передаваемые сигналы считаются векторными.
Порты могут иметь в объявлении константные выражения, через зарезервированное слова parameter. Также могут объявляться внутренние цепи через зарезервированное слово wire.
Существует еще один тип источника сигнала reg. Данный тип при описании комбинационной логики ведет себя как переменная - провод wire. При проектировании синхронных схем сигнал reg способен сохранять значение, т.е. является триггером или регистром.
Сигналы или переменные могут быть представлены следующими логическими уровнями:
- 0: ноль, логический низкий уровень, "ложно", "земля" (zero, logic low, false, ground);
- 1: единица, логический высокий уровень, "истина", "питание" (one, logic high, power);
- X: неизвестное значение (unknown);
- Z: высокий импеданс, неподключенный сигнал, третье состояние (high impedance, unconnected, tri-state).
Пример описания модуля приведен в листинге 1.1, где красным выделены зарезервированные слова, зеленым - пользовательские имена и коментарии, синим функционал.
module name_module #(parameter M=4) // константа (input [3:0] A,B, // четырехразрядные входы А и B input cin,// однопроводная линия output [M-1:0] S, //выход использующий для определения разрядности //константу output co); //выход линия wire [4:0] sum; // внутренние сигналы assign sum = A + B + cin; // Суммируем A, B и cin assign S = sum[M-1:0]; // Выход S - последние M разрядов суммы assign co = sum[4]; // Выход переноса endmoduleЛистинг 1.1.