Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_VHDL.doc
Скачиваний:
59
Добавлен:
13.11.2019
Размер:
3.18 Mб
Скачать
    1. Типичные ошибки при представлении комбинационных схем на vhdl

Из наиболее распространенных ошибок представления комбинационных схем, приводящих к явно избыточным затратам, а иногда к некорректному поведению синтезированной схемы, отметим следующие.

  1. Неполный список чувствительности процесса порождает «неожиданные» триггеры. Рассмотрим для примера такой оператор

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 скажется только при следующей инициализации процесса.

    1. Практикум по теме

Для практического освоения темы предлагается выполнить модификацию и осуществить моделирование комбинационной схемы на основе различных способов реализации логической функции. Варианты индивидуальных заданий сведены в табл. 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.

- Тексты всех разработанных версий программы с комментарием вносимых изменений.

- Временные диаграммы результатов моделирования.