Действительно ли нам нужен VHDL

       

Испытание Проекта при помощи Испытательного стенда


Действительно ли нам нужен VHDL? Представление Системы в VHDL: Единицы Проекта Объекты VHDL:Сигнал Спецификация Интерфейса Системы Конструкции VHDL для Описания Поведения Системы Описание Поведения при помощи Процессов Многократные Процессы в Архитектуре Определение Структуры Системы Испытание Проекта при помощи Испытательного стенда

Глава 9

Испытание Проекта при помощи Испытательного стенда

Содержание Главы 9

9.1. Краткий обзор Главы

9.2. Введение к Испытательным стендам

9.2.1. Что такое - Испытательный стенд?



9.2.2. VHDL Испытательные стенды

9.2.3. Компоненты VHDL Испытательного стенда

9.2.4. Использование Испытательных стендов

9.3. Структура Испытательного стенда

9.3.1. Объект Испытательного стенда

9.3.2. Тестируемый Блок

9.3.3. Стимулы Сигналов

9.3.4. Операторы Утверждения

9.3.5. Сообщение с Утверждениями

Резюме

9.1. Краткий обзор Главы

Это - последняя глава нашего руководства по VHDL, и она посвящена испытательным стендам - методу испытания VHDL проектов в окружающей среде VHDL.

Секция 2 вводит концепцию испытательного стенда. Имеются отдельные способы определения испытательных стендов, от простых проектов до очень сложных, достигающих тысячи строк текста программы VHDL. Для простоты изложения, только наиболее общие проекты будут представлены здесь.

Секция 3 рассматривает глубже внутреннюю структуру испытательного стенда. При этом отображаются три характерных элемента испытательных стендов: Объект без портов, инстоляция блока при помощи теста (UUT) и стимулами формы сигнала.

9.2.1. Что такое - Испытательный стенд?

Ключевые вопросы:

Процесс проекта неполон без проверки проекта. Имеются отдельные способы проверить проект VHDL. Однако, наиболее популярное решение использовать испытательные стенды.

Испытательный стенд это окружающая среда, в которой проект (называемый проектом или тестируемым блоком ) проверяется при помощи сигналов (стимулов) и при этом контролируется его реакция путем наблюдения и исследования (зондирования) сигнала, а также мониторинга.


Другими словами, испытательный стенд представляет окружающую среду проекта таким способом, при котором поведение проекта может наблюдаться и анализироваться.

Испытательный стенд всегда состоит из следующих элементов:

  • Сокет для тестируемого блока (UUT);
  • Генератор стимулов (подсистема, которая выдает стимулы на UUT, а так же производит их внутренние чтение или чтение из внешнего источника);
  • Инструментальные средства для контроля реакций UUT на стимулы.

    Рисунок:

    9.2.2. VHDL Испытательные стенды

    Ключевые вопросы:

    Идея относительно испытательных стендов адаптировалась к проектам VHDL. Однако, VHDL испытательный стенд - не автономная система, а VHDL спецификация, которая моделируется VHDL моделирующим устройством. Она составлена из реализации тестируемых блоков и процессов, которые поддерживают стимулы которые подаются на UUT. Этим способом, гибридная спецификация создана так, что она смешивает структурные и поведенческие типы операторов. Такой подход приемлем в VHDL, потому что и составляющая реализация и процессы –параллельные утверждения.

    Стимулы для UUT определенные внутри архитектуры испытательного стенда или могут считаться из внешнего файла. С другой стороны, реакция UUT, может наблюдаться или через выходы моделирующего устройства (например, форм сигнала, которые показываются на экране), а также сообщения - как сообщения моделирования или информация записанная в файл при помощи VHDL операторов ввода вывода.. Большое количество опций VHDL обеспечивает большую гибкость в создании испытательных стендов. Однако, это может привести к испытательным стендам, которые имеют большую сложность чем спецификация тестируемого блока, для которого они были написаны.

    Примеры:

    Рисунок:

    9.2.3. Компоненты VHDL Испытательного стенда

    Ключевые вопросы:

    Как Вы видели на предыдущей странице, VHDL испытательный стенд - только другая спецификация с собственым Объектом и архитектурой. Однако, она имеет, , специальную структуру с некоторыми элементами, которые являются характерными по отношению этому типу спецификации:



  • Объект испытательного стенда не имеет никаких портов;
  • Моментальная компонента UUT – это связь между испытательным стендом и UUT определенная через составляющую реализации и спецификацию с структурным типом;
  • Стимулы - это - набор сигналов, которые объявлены внутри в архитектуре испытательного стенда, а также сигналы назначенные портам UUT. Стимулы определены как формы сигнала в одном или более поведенческом процессе.

    Примеры:

    entity test_bench is

    end test_bench;

    architecture test_bench_arch of test_bench is

    component and_gate is

    port(

    a : in bit;

    b : in bit;

    y : out bit

    );

    end component;

    signal a, b, c : bit;

    begin

    UUT: and_gate port map (a,b,c);

    a<='0', '1' after 20 ns, '0' after 40 ns;

    b<='1', '0' after 40 ns, '1' after 80 ns;

    end test_bench_arch;

    Рисунок:

    9.2.4. Использование Испытательных стендов

    Ключевые вопросы:

    Всякий раз, когда новая VHDL спецификация создана, необходимо предусмотреть то, что проект должен быть проверяемый. Очевидно, любой проект может моделироваться, но в случае больших проектов, это может потребовать значительного времени, так как делается при помощи централизованного управления. Намного более удобно использовать испытательный стенд для проверки проекта. Поскольку тестирование это комплексная задача, то начиная с описания испытательного стенда, строго рекомендует описывать некоторые руководящие принципы для будущего развития стимулов, поскольку Вы прогрессируете с проектом.

    Некоторые эксперты даже предлагают писать полные файлы стимулов в то же самое время.

    Когда тест блока и испытательный стенд готовы, проверка может быть начата. Заметьте, что это - испытательный стенд, который моделируется, а тестируемый блок. UUT один из компонентов содержащийся в испытательном стенде. Не имеется никакого ограничения на размере испытательного стенда. Единственное ограничение - моделирующая способность VHDL и возможности ее реализовать.

    Примеры:

    Как описывать стимул ДАТЧИКА МЕТОК ВРЕМЕНИ:

    ...

    constant CLK_C: time := 20 ns;



    signal CLK : std_logic;

    ...

    CLOCK_GEN: process(CLK)

    begin

    if CLK = 'U' then

    CLK <= '0';

    else

    CLK <= not CLK after CLK_C;

    end if;

    end process;

    Рисунок:

    9.3.1. Объект Испытательного стенда

    Ключевые вопросы:

    Испытательный стенд выглядит точно так же как и любая другая VHDL спецификация, состоящая из сущности и архитектуры. Имеется, однако, одно важное различие, а именно - это отсутствие портов или generics.

    Причина для этого очень проста - испытательный стенд - не реальный прибор или система, которая должна связываться с окружающей средой, а следовательно, не требуется никаких входов или выходов. Все значения для входных портов UUT определены внутри архитектуры испытательного стенда как стимулы. Выходы наблюдаемые через датчик меток моделирующего устройства, или форма сигнала отображаются на экране и сохраняются в файле.

    Почему мы трактуем испытательный стенд как Объект, когда это – фактически только архитектура? Потому, что как показано во второй главе, архитектура не может быть определена без сущности, и это правило также применяется к испытательным стендам.

    Примеры:

    entity tb_D is

    end tb_D;

    architecture TB_A of tb_D is

    --Declaration of tested component

    component D_ent port (...);

    end component;

    shared variable END_SIM: boolean := false;

    signal CLK : bit;

    -- Time period of CLK signal

    -- generator

    constant CLK_PERIOD: time := 20 ns;

    begin

    -- Unit Under Test instantiation

    UUT: D_ent port map (...);

    CLK_GEN: process

    begin

    if not END_SIM then

    CLK <= '0';

    wait for CLK_PERIOD/2;

    CLK <= '1';

    wait for CLK_PERIOD/2;

    else wait;

    end if;

    end process; STIMULUS: process

    begin

    D <= '1';

    wait for 200 ns;

    D <= '0';

    wait for 200 ns;

    END_SIM := TRUE;

    wait;

    end process;

    end TB_A;



    9.3.2. Тестируемый Блок

    Ключевые вопросы:

    Система, которая будет проверена на испытательном стенде, не нуждается в любых изменениях или дополнительных декларациях. По этой причине испытательный стенд может применяться к любой VHDL спецификации, даже такой которая была получена от внешнего источника.


    Такое может иметь место, когда необходимо моделирование на уровне макета с отдельными элементами. Однако, никакие изменения в спецификации элемента не допускаются, потому что они могут полностью изменять результаты проверки.

    Тестируемый блок должен быть внутренним в архитектуре испытательного стенда. Это может быть выполнено таким же образом как и в любой структурной спецификации - или через прямую реализацию или комплексную инстоляцию составляющих декларации и конфигурации. Инстолируемым портам UUT будут назначенные сигналы стимулов.

    Так как процесс и составляющая реализация – параллельные операторы, то не имеет значение, будет ли UUT инстолировано сначала, а затем будут определены стимулы или наоборот.

    Примеры:

    entity dmux_e is

    port(

    X:in bit;

    S:in bit_vector(1 downto 0);

    Y:out bit_vector (3 downto 0));

    end dmux_e;

    architecture dmux_a of dmux_e is

    begin

    Y<=('0','0','0',X) when S="00" else

    ('0','0',X,'0') when S="01" else

    ('0',X,'0','0') when S="10" else

    (X,'0','0','0') when S="11";

    end dmux_a;

    entity tb is

    end tb;

    architecture TB_ARCH of tb is

    component dmux_e

    port(

    X:in bit;

    S:in bit_vector (1 downto 0);

    Y:out bit_vector (3 downto 0));

    end component dmux_e; signal X:bit;

    signal S: bit_vector(1 downto 0);

    signal Y: bit_vector(3 downto 0);

    begin

    UUT : dmux_e

    port map(X=>X,S=>S,Y=>Y);

    STIM: process

    begin

    X<='1'; S<="00";

    wait for 40 ns;

    S<="01";

    wait for 40 ns;

    S<="10";

    wait for 40 ns;

    S<="11";

    wait for 40 ns;

    wait;

    end process;

    end TB_ARCH;

    Рисунок:

    9.3.3. Стимулы Сигналов

    Ключевые вопросы:

    Основа каждого испытательного стенда - набор стимулов - последовательность значений для каждого входного сигнала UUT, подаваемых в нужное время. Так как испытательный стенд не связывается с транзитными сигналами окружающей среды, все стимулы должны быть объявлены внутри архитектуры испытательного стенда. Они объявляются так же как любой другой сигнал внутри декларативной части архитектуры.



    Стимулы могут быть определены или как параллельное присваивания сигнала (с изменениями входных сигналов, которые указанны как формы сигнала), или в процессе, который содержит присваивание сигнала, отделяемое в соответствии с оператором wait, и путем ввода задержки между последующими заданиями значений сигнала. В последнем случае, пустой wait (без всяких условий) добавлен как последний оператор в процесс. Такой оператор заставляет моделирование приостанавливать неопределенно (с другой стороны, процесс выполнится с начала наново).

    В заключение, связь между стимулами и тестируемым блоком достигается через назначения в предложении отображения порта реализации UUT.

    Примеры:

    entity tb is

    end tb;

    architecture tb_arch of tb is

    component COUNTER8

    port (...);

    end component;

    signal CLK,RESET,CE,LOAD,DIR: std_logic;

    signal DIN:integer range 0 to 255;

    signal COUNT:integer range 0 to 255;

    begin

    U1: COUNTER8 port map(...);

    process(CLK)

    begin

    if CLK='U' then CLK<='0';

    else CLK<=not CLK after 15 ns;

    end if;

    end process;

    RESET<='1', '0' after 15 ns;

    CE<='1';

    DIR<='1';

    DIN<=250; STIM1:process

    begin

    LOAD<='0'; wait for 3 us;

    LOAD<='1'; wait for 100 ns;

    LOAD<='0'; wait;

    end process;

    STIM2:process

    begin

    DIR<='1'; wait for 2 us;

    DIR<='0'; wait for 1 us;

    DIR<='1'; wait for 1 us;

    DIR<='0'; wait;

    end process;

    end tb_arch;

    Рисунок:

    9.3.4. Операторы Утверждения

    Ключевые вопросы:

    Последний элемент успешной проверки элемента выделяет и сообщает о результатах моделирования. Это может быть выполнено рядом способов: выводом списка временных значений сигнала на дисплей в виде временной диаграммы, записью результатов моделирования в log файл или при помощи предложения VHDL report.

    Последний выбор легко применить, и это обычно используется, для того чтобы показать сообщение, когда что нибудь идет неправильно. Если этот выбор используется, и никакие доклады не показаны в течение моделирования, то это означает, что UUT работало как ожидалося.



    Предложение report состоит из трех элементов: оператор assert (утверждения) (контролирующий Булево условие), оператор report (определяющий сообщение, которое будет показано, когда условие ложно) и оператор severity (устройство моделирования информируется насколько серьезная ошибка произошла, причем сообщается и о неисправности системы). См. Детальное руководство по применению.

    Примеры:

    Рисунок:

    9.3.5. Сообщение с Утверждениями

    Ключевые вопросы:

    Оператор assertion по природе последовательный, и поэтому он используется внутри процессов. Его применение не ограничено испытательными стендами, но здесь то место, где они наиболее часто используется.

    Утверждения используются для сообщения о неправильных реакциях UUT на стимулы. Они используются следующим образом:

  • Применяйте пару assert-report каждый раз когда ожидается новое значение выхода UUT;
  • Определите предполагаемую величину как условие в утверждении;
  • Всегда обеспечьте очень определенное и детальное сообщение об ошибках: простая "Ошибка" не сообщит Вам ничто относительно моделирования. Пишите то, что неправильно и когда это случилось (то есть при каких условия входа).
  • Помните, однако, что новые значения присвоены только тогда, когда процесс приостановлен. Так что не ожидайте изменений сразу на выходах после назначения новых значений на входах!

    Примеры:

    STIMUL:process

    begin

    NEW_CARD <= '1';

    GEN_RES <= '1';

    START <= '1';

    wait for 50 ns; -- 50 ns

    GEN_RES <= '0';

    wait for 1200 ns; -- 1250 ns

    START <= '0';

    report "The new game starts";

    ...

    wait for 150 ns; -- 6050 ns

    NEW_CARD <= '0';

    ...

    wait for 1850 ns; -- 10400 ns

    START <= '0';

    report "The new game starts";

    wait for 500 ns; -- 10900 ns

    START <= '1';

    wait for 650 ns; -- 11550 ns

    NEW_CARD <= '0';

    ... wait for 100 ns; --14910 ns

    NEW_CARD <= '1';

    wait for 500 ns; --15410 ns

    END_SIM := TRUE ;

    report "BJACK testing completed";

    wait;

    end process;

    CHECK_HOLD:assert not(HOLD='1')



    report "enough cards!"

    severity NOTE;

    CHECK_BUST:assert not(BUST='1')

    report "Sorry, the game is lost"

    severity NOTE;

    Рисунок:

    Резюме

    1. Никакой проект не закончен без проверки его операторов. Имеются ряд способов для этого и одино из наиболее популярных решений это использование испытательных стендов. Испытательный стенд - окружающая среда, где проект (названный, тестируемый блок) проверяется при помощи стимулов. Реакции проекта – наблюдаются через вывод на дисплей временных диаграмм.
    2. Испытательный стенд состоит из следующих элементов:
      • Сокет для тестируемого блока;
      • Генератор стимулов (подсистема, которая применяет стимулы чаще всего генерируемые изнутри для UUT, или считывает их из внешнего источника);
      • Инструментальные средства для контроля реакций UUT к стимулам.
    3. VHDL испытательный стенд - спецификация с собственным Объектом и архитектурой. Он имеет специальную структуру, которая является характерной для этого типа спецификации:
      • Объект испытательного стенда не имеет никаких портов;
      • Инстоляция компонент UUT устанавливает связь между испытательным стендом и UUT через инициализацию компонент и структурный тип спецификации;
      • Стимулы - набор сигналов, которые объявлены внутри архитектуры испытательного стенда и присвоены портам UUTпри их инстоляции; также стимулы можно определить способом поведения как форму сигнала при одном или большем количестве процессов.
    4. Последний элемент успешной проверки элемента рапорт о результатах моделирования. Это может быть выполнено рядом способов: используя вмонтированный в моделирующее устройство показ, запись результатов моделирования в log файл, или используя предложение report языка VHDL.
    5. Предложение report (доклад) состоит из трех элементов: оператора assert (контролирующего Булево условие), оператора report (который определяет сообщение, которое будет показано, когда условие ложно) и оператор severity (который информирует моделирующее устройство о неисправности системы и местоположении ошибки).
    6. Оператор утверждения последователен, поэтому он используется внутри процессов.
    7. Используйте пару assert-report каждый раз когда ожидается новое значение выхода UUT и детально описывайте ошибки, так как простая запись "Ошибка" не сообщит Вам ничто относительно моделирования; описывайте в чем ошибка и при каких сигналах она возникла.


    Содержание раздела