Создание модуля "бегущего огонька" в программной среде Quartus II Verilog HDL
Создание принципиальных схем, иерархических блоков, алгоритмов функционирования устройств и тестовых файлов для проверки модулей с помощью программной среды HDL. Краткие теоретические сведения по языку Verilog. Создание модуля "бегущего огонька".
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 26.12.2019 |
Размер файла | 224,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Минобрнауки России федеральное государственное бюджетное образовательное учреждение высшего образования
«Балтийский государственный технический университет «ВОЕНМЕХ» им. Д.Ф. Устинова» (БГТУ «ВОЕНМЕХ» им. д.ф. Устинова»)
Контрольная работа
На тему: «Создание модуля «бегущего огонька» в программной среде QUARTUS II Verilog HDL»
Выполнил
Жосан Д.С.
Санкт-Петербург 2019 г
Теоретические сведения
Языки описания аппаратуры (HDL, Hardware Descripion Language) могут быть использованы на всех этапах разработки цифровых электронных систем. Они применяются на этапах проектирования, верификации, синтеза и тестирования аппаратуры, а так же для передачи данных о проекте, его модификации и сопровождении.
Языки описания аппаратуры, в основном, используются для проектирования программируемых логических устройств (PLD - Programmable Logic Devices) различного уровня сложности, вентильных программируемых матриц (FPGA - Field Programmable Gate Array). На сегодняшний день нашли применение несколько таких языков. Наиболее популярные из них - Абель, Palasm и Cupl (используются для устройств малой степени сложности), Verilog и VHDL (для сложных PLD и FPGA устройств).
Преимущества HDL:
· По имеющемуся HDL описанию можно синтезировать принципиальную схему устройства - генерация RTL описания (RTL - Register Transfers Level).
· Схему, описанную с помощью HDL, проще документировать.
· HDL позволяют реализовать как структурное описание узлов и цепей, так и поведенческое описание. Они имеют возможность вызывать функции, написанные на других языках программирования (например на “C”).
· HDL позволяют описывать такие специфические для цифровых схем понятия, как временные задержки и параллельное выполнение операций.
HDL позволяют создавать принципиальные схемы, иерархические блоки, алгоритмы функционирования устройств, а также тестовые файлы (test-bench) для проверки созданных модулей.
Язык Verilog
Verilog -- это язык описания аппаратуры, используемый для разработки и моделирования электронных систем. Этот язык (также известный как Verilog HDL) позволяет осуществить проектирование, верификацию и реализацию (например, в виде СБИС) аналоговых, цифровых и смешанных электронных систем на различных уровнях абстракции.
Verilog был разработан фирмой Gateway Design Automaton для использования внутри компании. Затем, в 1989 г., Verilog был открыт для общего использования. Стандарт для данного языка был принят в 1995 году (IEEE1364-1995).
Verilog имеет простой синтаксис, сходный с языком программирования “С”. Малое количество служебных слов и простота основных конструкций упрощают изучение и позволяют создавать эффективные приложения. На описание одной и той же конструкции в Verilog потребуется в 3-4 раза меньше символов, чем в VHDL.
Интересной особенностью Verilog является наличие стандарта PLI (Program Language Interface), который позволяет включать функции, написанные пользователем (например, на С), в код симулятора.
Краткие теоретические сведения по языку Verilog
Поддерживаемые типы данных:
· integer - 32-х разрядное целое число со знаком;
· real - 64-х разрядное число с плавающей точкой. Синтезирующими САПР не поддерживается;
· time - 64-х разрядное целое беззнаковое число, которое применяется встроенными функциями для моделирования времени;
Создавать свои типы данных в Verilog нельзя.
Кроме основных типов данных, которые присущи всем языкам программирования, в HDL вводится новое понятие - сигнал.
Сигналы бывают двух основных типов:
· wire - цепи;
· reg - регистры.
Отличие сигналов wire от сигналов reg состоит в том, что reg способен сохранять присвоенное значение (работает как переменная в языках программирования или как устройство последовательного типа). К сигналам типа wire требуется прилагать непрерывное воздействие (как устройство комбинационного типа). То есть wire моделирует связь (или устройство), которая переходит в неопределенное состояние при отключении входного воздействия. Существуют также типы wand, wor, tri0, tri1, triand, trior, trireg для моделирования различных типов связей (wand - wired and или «монтажное И», tri0 - подтягивающий резистор к нулевому уровню, trireg - накопительная емкость, и т.п.), но такие цепи встречаются редко и используются только для моделирования.
Идентификаторы:
Идентификаторы в Verilog являются чувствительными к прописным и строчным символам и подчиняются обычным правилам: не могут начинаться с цифры или знака $ и могут содержать буквы, цифры, $, и символ подчеркивания.
Простейший пример кода на Verilog
Допустимые значения для сигналов:
Всего существует четыре типа значений, которые могут принимать сигналы (wire и reg): 0, 1, z, x. Первые три соответствуют двум логическим уровням и состоянию с высоким импедансом. Четвертый (х) означает неопределенное состояние и используется при моделировании неинициализированных сигналов, при возникновении конфликтов (два выхода с противоположными состояниями соединены вместе), указания нестабильных состояний триггеров (при нарушении временных соотношений между входами данных и тактовым входом) и т.п. Другими словами - во всех случаях, когда моделирующая программа не может определить значение для данного сигнала. тестовый файл программный модуль
Для указания значения многоразрядных сигналов (констант, переменных) используются следующие конструкции:
1) 1'bz - одноразрядный высокоимпедансный сигнал;
2) 10'd1_000 - десятиразрядное число 1000 записанное в десятичном виде (символ подчеркивания игнорируется);
3) 4'bx01z - четырехразрядный двоичный сигнал с неопределенным старшим битом, высокоимпедансным младшим, вторым и третьим в состоянии логических «1» и «0», соответственно.
В общем виде - вначале указывается разрядность сигнала, потом одинарная кавычка `(не путать с апострофом ), далее основание системы счисления (b,o,d,h) и цифры использующиеся в данной системе счисления, задающие значение сигнала.
Для двоичной системы допускается использование символов z и x.
Символ подчеркивания служит для улучшения восприятия записи и игнорируется при синтезе и моделировании. Использование констант без указания разрядности не желательно, так как по умолчанию константа воспринимается с разрядностью, равной 32 бита.
Данные типа integer могут присваиваться регистрам.
Структурное описание:
Основной структурной единицей программы на языке Verilog является module. Модуль описывается ключевыми словами module - endmodule. В одном программном файле может присутствовать несколько модулей. Модули не могут быть вложенными. Другие модули могут подключаться к входным и выходным портам модуля, образуя иерархическую структуру. При запуске компилятора языка Verilog, он формирует иерархическое дерево проекта из всех входящих модулей и находит модуль верхнего уровня иерархии. Важно помнить, что имя модуля верхнего уровня иерархии должно совпадать с именем файла, в котором этот модуль описан.
Общая структура модуля:
1) module SomeModule( Param1, Param2, Param3,…,ParamN );
2) input Param1; // входной порт с именем Param1
3) output Param2; // выходной порт с именем Param2
4) inout Param3; // двунаправленный порт (вход/выход) с именем Param3
5) `include "somefile.v"
6) `define nc @( negedge clk )
7) Код
8) endmodule
Итак, сразу же после директивы module, следует имя модуля, а за ним - в круглых скобках, перечислены имена портов модуля (интерфейс модуля с внешним миром). Порты могут быть входными - input, выходными - output или двунаправленными - inout . После описания портов следует описание директив препроцессора `include, `define, и др. которые совершенно аналогичны директивам препроцессора языка С (Один важный момент - вышеописанные директивы начинаются с символа апострофа, а не одинарной кавычки).
Еще один нюанс связан с использованием директивы `include. Как известно, эта директива применяется для включения текста одного файла в другой. Однако в Verilog модули не могут объявляться внутри другого модуля (не могут быть вложенными). Поэтому, директиву `include можно использовать либо вне модуля, либо включать в модуль код, не содержащий описания модулей.
Ключевое слово assign
Ключевое слово assign используется для присвоения значения сигналу типа wire. Данный оператор не используется в процедурных блоках. Его синтаксис следующий:
assign <wire_name> = <expression>;
Параметр <expression> может быть представлен логическим выражением. Параметр <wire_name> представляет собой имя сигнала типа wire. Как только значение <expression> изменяется, полученное новое значение <expression> присваивается сигналу с именем <wire_name> Подробнее оператор assign будет рассмотрен в лабораторных работах.
Создание модуля «бегущего огонька»
Рассмотрим структуру создаваемого модуля "бегущего огонька", который назовем leds_case. В модуле будет один вход для тактового сигнала clk, и четыре выхода (четырехбитная шина) для светодиодов.
В модуле будет всего два процесса, которые будут выполнятся параллельно друг-другу, синхронно с тактовым сигналом clk. В первом процессе сделаем счетчик, который бы считал равные временные отрезки, через которые происходит переключение с одного светодиода на другой. Во втором процессе реализуем функцию, которая бы включала поочередно светодиоды по истечению определенного промежутка времени заданного счетчиком из первого процесса.
Cоздадим новый проект в среде Quartus II, которую можно скачать на официальном сайте Altera. Создаем новый проект New Project Wizard для запуска среды, новый модуль создадим как Verilog file.
Напишем код и разберем его.
module led_case // здесь мы объявляем порты, через которые данный модуль может быть связан с другими файлами в проекте
(
input clk, // input - обозначение что сигнал clk вход
output[3:0] out // output[3:0] - обозначение, что сигнал out это шина из четырех сигналов
);
reg[3:0] leds = 4'b0; // создание регистра, куда будет записываться значение выходной шины для светодиодов
// (4'b - запись четырехбитного числа в двоичном виде)
reg[21:0] count = 22'b0; // объявляем счетный регистр count
reg[1:0] select = 2'b0; // объявляем регистр выбора светодиода
always @ (posedge clk) // объявление первого процесса, который выполняется по нарастающему фронту clk
begin
count <= count + 1'b1; // с каждым тактом значение счетчика увеличивается на единицу
if (count == 22'b11_1111_1111_1111_1111_1111) // при переполнении счетчика
begin
select <= select + 1'b1; // изменяется значение регистра select, который отвечает за то, какой светодиод зажечь
end
end
always @ (posedge clk) // объявление второго процесса, который выполняется по нарастающему фронту clk
begin
case(select) // функция CASE
2'b00: leds <= 4'b0001; // Если значение регистра select "00", то зажигаем первый светодиод
2'b01: leds <= 4'b0010; // Если значение регистра select "01", то зажигаем второй светодиод
2'b10: leds <= 4'b0100; // Если значение регистра select "10", то зажигаем третий светодиод
2'b11: leds <= 4'b1000; // Если значение регистра select "11", то зажигаем четвертый светодиод
default: leds <= 4'b0000; // В любых других случаях выключаем все светодиоды
endcase
end
assign out = leds; // асинхронно передаем значение регистра leds на выходную шину out
endmodule
В результате получили код для модуля «бегущего огонька». После синтеза кода и присвоения портам из модуля реальных пинов ПЛИС произведем компиляцию проекта.
Размещено на Allbest.ru
...Подобные документы
Проектирование программного модуля в среде программирования Borland Delphi 7.0. Схемы алгоритмов решения задач по темам "Символьные переменные и строки", "Массивы", "Работа с файлами", "Создание анимации". Реализация программного модуля, код программы.
отчет по практике [961,6 K], добавлен 21.04.2012Описание разрабатываемой программы с точки зрения пользователя и программиста. Поэтапная разработка программной системы. Создание базы данных в Access. Разработка структуры классов. Создание структуры для хранения данных. Проектирование интерфейса.
курсовая работа [1,4 M], добавлен 07.08.2013Разработка структурной схемы и поведенческой модели последовательного CAN-порта. Методика синтеза и синтез схем. Построение топологии и анализ результатов. Техническая прогрессивность новой конструкции. Verilog-описание механизма сигнализации ошибок.
дипломная работа [548,1 K], добавлен 01.06.2013Определение назначения прикладных, системных и инструментальных программ. Общее описание программной среды Visual basic версии 6.0. Обзор требований к аппаратным средствам для создания программного продукта и разработка модуля "Конвертер величин".
курсовая работа [139,4 K], добавлен 27.07.2014Анализ структуры топологической сортировки в программной среде. Метод топологической сортировки с помощью обхода в глубину. Программа, реализующая топологическую сортировку методом Демукрона. Создание карты сайта и древовидная система разделов.
курсовая работа [1,3 M], добавлен 22.06.2011Описание технологии создания таблиц в режиме "Конструктор" в программной среде Microsoft Access. Сортировка и фильтрация данных в таблицах, создание полей с подстановкой. Пример структуры многотабличного запроса и пример создания итогового запроса.
лабораторная работа [1,6 M], добавлен 17.02.2013Создание расширенного календаря CMS Joomla, который предоставляет возможность создания ежедневника на любом сайте. Создание структуры модуля, файл шаблонизации. Выбор цветовой схемы для модуля. Проектирование XML файла с описанием и настройками.
дипломная работа [838,8 K], добавлен 31.05.2013Исследование алгоритмов и характеристик существующих программных систем аналогов для проверки знаний: Aму Life Test Gold, SunRav TestOfficePro. Разработка архитектуры программной системы. Проверка программы в нормальных условиях, руководство пользователя.
курсовая работа [2,5 M], добавлен 17.06.2012Разработка программной среды для вычислительных машин. Создание приложений для быстрого проведения сложных вычислений. Метод расчета оценок для контрольных работ. Объектно-ориентированный подход к программированию. Создание графической оболочки.
курсовая работа [99,2 K], добавлен 04.02.2012Разработка программной системы для регистратуры поликлиники; создание базы данных. Описание предметной области: сведения о врачах, пациентах, учет обращений, регистрация обследований и назначенных препаратов. Содержимое таблиц, пользовательский интерфейс.
курсовая работа [6,2 M], добавлен 30.07.2012Реализация схемы минимума матрицы в среде САПР- Active HDL (Aldec) и разработка VERILOG-кода схемы. Описание модуля и числовые примеры работы схемы. Разработка и описание фрагментов кода. Разработка временных диаграмм и рассмотрение их примеров.
курсовая работа [291,4 K], добавлен 11.11.2021Создание рабочего модуля аналого-цифрового преобразователя с минимальным количеством микросхем на основе микроконтроллера ATmega8L. Описание блок-схемы АЦП. Схема запуска преобразования. Программа микроконтроллера в среде программирования CodeVision.
курсовая работа [1,2 M], добавлен 04.10.2013Создание программного комплекса, обеспечивающего работу со структурой данных "Q-дерево", представленной в виде модели. Методы, применяемые в разработке. Особенности проектирования модуля UnitModel. Требования к информационной и программной совместимости.
курсовая работа [2,8 M], добавлен 11.02.2010Формализации в онтологии областей знаний с помощью концептуальной схемы. Определение атрибутов класса и свойств экземпляров. Создание экземпляров класса и DL-Query запросов. Методика использования для разработки онтологии среды разработки Protege.
курсовая работа [2,0 M], добавлен 18.06.2014Создание работоспособного модуля по работе с мобильными картами АЗС. Разработка базы данных в среде программирования Турбо Паскаль для работы с текстами и файловыми структурами. Описание методов алгоритмизации процессов сортировки и редактирования.
курсовая работа [1,9 M], добавлен 05.12.2011Рассмотрение принципа работы процессора и его практической реализации с использованием языка описания аппаратуры Verilog. Проектирование системы команд процессора. Выбор размера массива постоянной памяти. Подключение счетчика инструкций и файла регистра.
курсовая работа [1,2 M], добавлен 26.05.2022Основные понятия и назначение технологии JavaBeans, ее компоненты и принцип работы, преимущества. Методика создания jar файлов в среде Eclipse. Структура файлов манифеста. Создание многопоточных приложений. Изучение визуального редактора Java BeanBox.
лабораторная работа [67,4 K], добавлен 30.06.2009Теоретические основы обучения 3d моделированию на основе практикума с использованием Autodesk. Роль 3D-моделирования в повышении эффективности учебного процесса. Основные принципы создания практикума по 3D-моделированию в программной среде Autodesk.
дипломная работа [1,2 M], добавлен 13.12.2017Последовательность построения поверхностей, картографирования значений глубин и сравнения полученных моделей при помощи модуля Geostatistical Analyst. Визуализация рельефа и создание 3D-моделей местности в ArcGIS. Создание видео-обзора 3D-поверхностей.
курсовая работа [5,5 M], добавлен 23.04.2012Создание программного обеспечения для эмулирования виртуальной рабочей среды для сборки, отладки и проверки функционирования устройств на базе цифровых интегральных микросхем. Возможности применения программы в учебном процессе, ее характеристики.
курсовая работа [2,2 M], добавлен 09.06.2010