Синтаксис основных конструкций и операторов языка VHDL
Синтаксис основных конструкций и операторов языка VHDL Структура описания интерфейса объекта entity имя объекта is Generic(список настроечных параметров); Port (список входных сигналов: in bit; список выходных сигналов: out bit; список входных/выходных сигналов: inout bit); begin пассивные параллельные операторы вызова процедур, операторы сообщения или операторы процесса end имя объекта; У каждого объекта проекта может быть только интерфейс и соответственно только одно описание интерфейса. Настроечные параметры после ключевого слова generic нужны в случае необходимости передачи в интерфейс объекта таких параметров, как ширина шины, временная задержка и т. д. Описание интерфейса объекта в некоторых случаях может быть вообще пустым (например, если объект является тестирующей программой). Структура архитектурного тела Architectureимя архитектурного телаofимя объектаis Описание компонент; Описание внутренних сигналов и переменных; begin операторы и команды end имя архитектурного тела; У одного объекта может быть несколько архитектурных тел. Если никакие компоненты в архитектурном теле не используются, то и их описание отсутствует. Оператор назначения сигнала Примеры операторов назначения сигнала: имя сигнала < = inertial логическое выражение after K ns имя сигнала < = transport логическое выражение after K ns Ключевые слова inertial и transport определяют соответственно инерционную и транспортную задержку передачи сигнала по времени. После ключевого слова after указывается длительность К временной задержки в долях секунды (например, наносекунды, ns). Если ключевые слова inertial и transport отсутствуют, то это значит, что задержка является инерционной! Кроме того, если отсутствует ключевое слово after с указанием длительности временной задержки, то считается, что временная задержка отсутствует.
Оператор объявления компонента в объекте Component имя компонента Port (список входных сигналов: in bit; список выходных сигналов: out bit; список входных/выходных сигналов: inout bit); End component; Оператор конкретизации компонента Вид оператора конкретизации компонента следующий: Метка: имя компонента port map (список портов); Список портов в скобках может быть указан двумя способами: - ключевое соответствие. - позиционное соответствие. При ключевом соответствии для описания соответствия каждого сигнала компонента сигналу объекта используется следующая конструкция: имя сигнала компонента => имя сигнала объекта Пример: P1: task port map (x1=> a, y=> c, x2=> b); x1, x2, y – сигналы компонента task; a, b, c – сигналы объекта, который содержит указанный компонент При позиционном соответствии указываются только сигналы объекта, содержащего компонент, строго в том порядке, в котором описаны сигналы компонента, соответствующие им. Например: Пусть компонент task содержит три сигнала, описанных в следующем порядке: x1, x2, y. Этим сигналам соответствуют сигналы объекта a, b, c в указанном порядке. Тогда правильным вариантом описания будет следующий: P1: task port map (a, b, c);
Задание По таблице истинности заданной системы логических функций составить VHDL-модель и выполнить моделирование на всех наборах значений входных переменных.
Ход выполнения 1. Определить для каждой функции системы её форму реализации – прямую или инверсную. 2. Минимизировать представление функции, применив любой метод минимизации (карты Карно, карты Вейча и т. д. ) и записать каждую функцию системы в СДНФ или СКНФ. [1] 3. Составить программу, описывающую систему функций, на языке VHDL (см. пример выполнения работы).
4. Составить тестирующую программу на языке VHDL (см. пример выполнения работы). 5. Проверить правильность работы программы, запустив её в симуляторе ModelSim в режиме прогона или в пошаговом режиме. 6. Занести всю необходимую информацию в отчёт. Пример выполнения Рассмотрим пример выполнения работы на основе варианта №30. Пусть задана таблица истинности трёх функций:
Проведём минимизацию функций с помощью карт Вейча:
Запишем функции в СКНФ. Получаем:
Создаём проект (по инструкции из приложения 1) и делаем 2 программы (2 файла по одной программе в каждом) на языке VHDL. В 1-й программе опишем функции, полученные после минимизации: entity main is описание интерфейса основной программы port (x1, x2, x3, x4: in bit; описание входных s1, s2, s3: out bit); и выходных сигналов end main; конец описания интерфейса основной программы architecture fun of main is описание архитектурного тела основной программы begin начало описания fun s1 < = (x1 or (not (x2)) or x3 or (not (x4))) and (x1 or (not (x2)) or (not (x3)) or x4) and ((not (x1)) or x2 or x3 or (not (x4))); s2 < = (x1 or x3 or x4) and (x1 or (not (x2)) or (not (x3)) or (not (x4))) and ((not (x1)) or (not (x2)) or x3 or (not (x4))); s3 < = (x2 or x3 or x4) and ((not (x1)) or x2 or x4) and (x1 or (not (x2)) or x3 or (not (x4))); end fun; конец описания fun Напишем 2-ю (тестовую) программу для описанной выше программы main. entity test_main is описание интерфейса end test_main; тестирующей программы
architecture behavior of test_main is описание архитектурного тела тестирующей программы component main описание компонента port (x1, x2, x3, x4: in bit; описание входных s1, s2, s3: out bit); и выходных сигналов компонента end component; конец описания компонента signal x1, x2, x3, x4: bit; описание внутренних сигналов signal y1, y2, y3: bit; тестирующей программы begin начало описания behavior p1: main port map (x1, x2, x3, x4, описание связи переменных main y1, y2, y3); и переменных test_main (сокращённое) x1< ='0', задание значений и временных '0' after 50 ns, интервалов для сигнала x1 '0' after 100 ns, '0' after 150 ns, '0' after 200 ns, '0' after 250 ns, '0' after 300 ns, '0' after 350 ns, '1' after 400 ns, '1' after 450 ns, '1' after 500 ns, '1' after 550 ns, '1' after 600 ns, '1' after 650 ns, '1' after 700 ns, '1' after 750 ns; x2< ='0', задание значений и временных '0' after 50 ns, интервалов для сигнала x2 '0' after 100 ns, '0' after 150 ns, '1' after 200 ns, '1' after 250 ns, '1' after 300 ns, '1' after 350 ns, '0' after 400 ns, '0' after 450 ns, '0' after 500 ns, '0' after 550 ns, '1' after 600 ns, '1' after 650 ns, '1' after 700 ns, '1' after 750 ns; x3< ='0', задание значений и временных '0' after 50 ns, интервалов для сигнала x3 '1' after 100 ns, '1' after 150 ns, '0' after 200 ns, '0' after 250 ns, '1' after 300 ns, '1' after 350 ns, '0' after 400 ns, '0' after 450 ns, '1' after 500 ns, '1' after 550 ns, '0' after 600 ns, '0' after 650 ns, '1' after 700 ns, '1' after 750 ns; x4< ='0', задание значений и временных '1' after 50 ns, интервалов для сигнала x4 '0' after 100 ns, '1' after 150 ns, '0' after 200 ns, '1' after 250 ns, '0' after 300 ns, '1' after 350 ns, '0' after 400 ns, '1' after 450 ns, '0' after 500 ns, '1' after 550 ns, '0' after 600 ns, '1' after 650 ns, '0' after 700 ns, '1' after 750 ns; end behavior; конец описания behavior Далее запускаем симулятор (см. инструкцию в приложении 1) и производим моделирование системы функций. В симуляторе нужно запустить тестирующую программу!
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|