- •1.1. Структура программы на vhdl. Её основные компоненты
- •Практикум по теме
- •1.3. Контрольные вопросы
- •2. Представление комбинационных схем
- •2.1. Параллельные и последовательные операторы
- •Переменные и сигналы
- •2.3. Данные, выражения и их интерпретация в цифровом устройстве
- •Типичные ошибки при представлении комбинационных схем на vhdl
- •Практикум по теме
- •2.5. Контрольные вопросы
- •3. Структурное представление устройств
- •3.1. Структура и поведение
- •3.2. Описание структур на языке vhdl
- •3.3. Практикум по теме
- •3.4. Контрольные вопросы
- •4. Описание и синтез последовательностных схем
- •4.1. Триггеры и регистровые схемы
- •4.2. Практикум по теме
- •4.3. Контрольные вопросы:
- •5. Описание и синтез автоматов
- •5.1. Классические понятия цифровых автоматов
- •5.2. Инженерный подход к проектированию цифровых автоматов
- •5.3. Практикум по теме
- •5.4. Контрольные вопросы
- •6. Проектирование операционных устройств
- •6.1. Методы построения операционных устройств
- •6.2. Основные этапы проектирования цифровых устройств
- •6.3 Пример проектирования
- •6.4. Имплементация и отладка проектов
- •6.5. Практикум по теме
- •Рекомендуется придерживаться следующего порядка работы:
- •6.4. Контрольные вопросы
- •I. Описание системы моделирования
- •1. Краткое знакомство с системой меню
- •Окно библиотеки проекта – содержит список доступных библиотек пользователя и файлов, включенных в проект
- •Примерный порядок работы в системе QuestaSim V.6.5/6.6
- •4. Компиляция и синтаксическая отладка
- •5. Моделирование
- •II. Описание системы имплементации проектов в плис
- •2.1. Типовая последовательность выполнения работы.
- •2.2. Процесс моделирования работы узлов средствами пакета Quartus II
- •Работа в редакторе временных диаграмм
- •III. Создание программ, описывающих автоматы
- •Рекомендованные номера контактов для проекта
- •3.2. Таблица соединений платы Cyclone II Starter Board.
Типичные ошибки при представлении комбинационных схем на vhdl
Из наиболее распространенных ошибок представления комбинационных схем, приводящих к явно избыточным затратам, а иногда к некорректному поведению синтезированной схемы, отметим следующие.
Неполный список чувствительности процесса порождает «неожиданные» триггеры. Рассмотрим для примера такой оператор
PROCESS(x0, x1)
BEGIN
z <= x0 AND x1 AND x2:
END PROCESS;
Отсутствие в списке чувствительности сигнала x2 синтезатор воспринимает как необходимость использовать триггер, управляемый сигналами x0 и x1.
2. Неполное представление альтернатив в операторах IF и CASE, а также в условных присваиваниях, порождает «неожиданные» триггеры.
Например, казалось бы, конъюнктор можно описать так:
PROCESS( x0, x1 )
BEGIN
IF x0 = '1' THEN z <= x1; END IF;
END PROCESS;
А что делать, если x0 = '0', а x1 изменяется? Такая запись предполагает в этом случае сохранение состояния. Синтезатор в этом случае выбирает триггер с управлением записью уровнем сигнала x1. Для схемы без памяти следовало бы записать
z <= '0';
IF x0 = '1' AND x1 = '1' THEN z <= '1' ;
END IF;
В данном примере это достаточно очевидно, тем более что здесь пользователь, попросту, будет использовать операцию И. Однако в сложных разложениях и случаях не полностью заданных функций подобная ошибка возможна, неочевидна и требует внимательного анализа.
3. Отнесение промежуточных членов разложения логических функций в процессах к категории сигналов может привести к неадекватному моделированию или породить «неожиданные» триггеры.
Пример:
-- a , b, c, d, e, f – сигналы типа BIT
PROCESS (a, b, c)
BEGIN
d <= a AND b;
e <= d AND c;
f <= d AND NOT c;
END PROCESS;
Изменение a или b вызывает исполнение процесса и предсказание изменения сигнала d. Но ввиду того, что это предсказание не изменяет сигнала до окончания процесса, e и f будут определяться на основании устаревшего значения d, а изменение d скажется только при следующей инициализации процесса.
Практикум по теме
Для практического освоения темы предлагается выполнить модификацию и осуществить моделирование комбинационной схемы на основе различных способов реализации логической функции. Варианты индивидуальных заданий сведены в табл. 2.1.
Таблица 2.1.
Входной |
Числовой |
Варианты задания функции |
|||||||
код |
эквивалент |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
000 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
001 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
010 |
2 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
011 |
3 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
100 |
4 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
101 |
5 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
110 |
6 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
111 |
7 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
В качестве исходных обучающемуся представляется файлы Lab21.vhd, Lab22.vhd и Lab23.vhd, содержание которых соответствует различным схемным реализациям комбинационных схем (рис. 2.2), а представление на языке VHDL приведено в программах 2.1 – 2.4.
При проведения тестовых экспериментов над рядом схожих схем использование команды системы моделирования FORCE не рационально. В данной работе и последующих, в отличие от работы №1, используется принцип построения специальной тестовой программы TestBench. Текст программы содержится в файле Tb_Lab2 и приведен на листинге 2.5. В отличие от программы на листинге 1.1 здесь декларация ENTITY не определяет портов. Предполагается, что проект полностью «внутренне» определен. Он содержит генератор тестовой последовательности (процесс Stimulator) и модель некоторого «исследуемого» устройства (компонент – Lab2*), выходы которого будут наблюдаться проектировщиком в сеансе моделирования. Такой подход – создание модели экспериментальной установки, включающей в качестве компонентов собственно проектируемое устройство, генератор тестовых воздействий, а иногда и модуль анализа результатов – это весьма распространенный прием проектирования и отладки.
В программе (листинг 2.5.) процесс stimulator не имеет определенных инициализаторов и поэтому, безусловно, запускается в начале моделирования. Процесс включает в себя цикл изменения переменной i, причем между последующими изменениями предусмотрена приостановка (сохранение сигналов неизменными) на 50 нс. модельного времени. В начале каждого периода выполняется формирование сигналов, соответствующих текущему значению параметра цикла i в нескольких различных формах: как целое, как вектор, как набор независимых скалярных сигналов. В процессе выполнения работы этот фрагмент не меняется и служит для тестирования различных модификаций способа описания комбинационной логической схемы. В процессе работы обучающийся модифицирует функцию, воспроизводимую процессом.
Листинг 2.5 Совместное представление комбинационной схемы и генератора тестового воздействия
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE STD.textio.ALL;
ENTITY Tb_Lab2 IS
END Tb_Lab2;
ARCHITECTURE test OF Tb_Lab2 IS
SIGNAL stim_integer : INTEGER;
SIGNAL z, x0, x1, x2 : std_logic;
SIGNAL v : std_logic_vector( 1 DOWNTO 0);
COMPONENT Lab2
PORT (
x0, x1, x2 : IN std_logic;
z : OUT std_logic
);
END COMPONENT;
BEGIN
u1: Lab2
PORT MAP(x0, x1, x2, z);
stimulator:
PROCESS
VARIABLE i : INTEGER;
VARIABLE stim_vector : std_logic_vector( 2 DOWNTO 0);
BEGIN
--TIME_VAR := 5ns;
FOR i IN 0 TO 15 LOOP
stim_integer <= i;
stim_vector :=conv_std_logic_vector(i, 3);
x0 <= stim_vector(0);
x1 <= stim_vector(1);
x2 <= stim_vector(2);
WAIT FOR 50 ns;
END LOOP;
ASSERT false REPORT "End of Stimulation !"
SEVERITY error;
WAIT;
END PROCESS;
END test;
Рекомендуется придерживаться следующего порядка работы:
I. Моделирование
1. Запустить моделирующую программу (QuestaSim или ModelSim).
2. Создать в системе моделирования новый проект, включив в него файл Tb_Lab2.vhd, а также файлы Lab21.vhd, Lab22.vhd и Lab23.vhd . Изменить тексты программ в файлах Lab2*.vhd так, чтобы реализовать в каждой из них одну из функций таблицы 2.1 по заданию преподавателя.
3. Выполнить компиляцию проекта Tb_Lab2.vhd со встроенным компонентом Lab21.
4. Запустить процедуру моделирования, вызвав опцию simulate системы моделирования. Открыть окна наблюдения source, signal, wave. После отладки проект сохранить в новом директории.
5. Выполнить моделирование в автоматическом режиме. Просмотреть временную диаграмму, убедиться в правильности реализации логической функции.
6. Повторить пункты 3 – 5 для компонента Lab22. Объяснить получаемую реализацию.
7. Повторить пункты 3 – 5 для компонента Lab23. Объяснить получаемую реализацию.
II. Синтез и имплементация.
1. Открыть пакет Quartus II (версия задается преподавателем).
2. Создать новый проект – File / New Project Vizard, указав созданный директорий и программу lab2.vhd.
3. Компилировать проект (Processing / Start Compilation), опираясь на данные о ПЛИС, соответствующие используемому учебному стенду (Assigments / Device)
4. Оценить затраты на реализацию проекта Processing / Compilation Report.
5. Просмотреть RTL вид проекта и его топологическую реализацию – Tools / RTL View – Tools / Technology Map View.
6. Задать номера контактов ИС, соответствующие подключению учебной платы DE0. Подключить к контактам ИС x0, x1 x2 переключатели SW, а к контакту z Led.
7. Выполнить компиляцию проекта с назначенными контактами.
8. Загрузить в ИС полученный загрузочный файл проекта и проверить работоспособность разработки.
9. Повторить пункты 2 – 8, перестроив программу Tb_Lab2.vhd, чтобы она включала компонент Lab22.
10. Повторить пункты 2 – 8, перестроив программу Tb_Lab2.vhd, чтобы она включала компонент Lab23.
11. Объяснить расхождение поведения проектов.
12. Имплементировать проект в ИС учебного стенда
13. Проверить реальную работу загруженной программы
Содержание отчета по теме:
- Порядок и результаты синтеза устройств по пп. 1, 8, 9.
- Тексты всех разработанных версий программы с комментарием вносимых изменений.
- Временные диаграммы результатов моделирования.