Создание модуля "бегущего огонька" в программной среде 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.