СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №5/2013

Предлагаемая статья продолжает тематику функциональной верифика ции исходных VHDL описаний циф ровых систем [1]. Функциональная ве рификация в данном случае интерпре тируется как проверка соответствия VHDL описания проекта цифровой системы заданным требованиям. Для такой верификации предложена [2] методология OS VVM (Open Source VHDL VerificationMethodology), ориен тированная на создание сложных тес тирующих программ, а именно, поз воляющая реализовать настраиваемую генерацию псевдослучайных тестов и функциональное покрытие. В отличие от проблемно ориентиро ванных или прямых тестов [3, c. 463], настраиваемая генерация псевдослу чайных тестов позволяет обнаружи вать случайные ошибки в проектах. Функциональное покрытие (functional coverage) предназначено для измере ния того, какая часть функций проекта была проверена во время выполнения моделирования [4, с. 323]. В методоло гии OS VVM функциональное покры тие осуществляется сбором значений переменных и сигналов VHDL проекта при выполнении моделирования. Ме тодология OS VVM основана на VHDL пакетах CoveragePkg и RandomPkg стан дарта VHDL 2008 [5]. Ниже на примерах иллюстрируется применение средств VHDL пакетов CoveragePkg и RandomPkg . Предполага ется, что читатели знакомы с основами языка VHDL и со статьёй [1], в которой описан тип protected (защищённый), широко используемый в указанных па кетах VHDL. Т РАДИЦИОННЫЙ ПОДХОД Рассмотримгенерациюпсевдослучай ных тестовых векторов на примере тес тирования простейшего VHDL проекта цифровой системы – умножителя mult . ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 66 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 5 2013 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity mult is port (a, b : in std_logic_vector (4 downto 1); d : out std_logic_vector (8 downto 1)); end mult; architecture func of mult is signal e : integer range 0 to 225; begin p0 : process(a, b) variable a_int, b_int : integer range 0 to 15; begin a_int := to_integer(unsigned(a)); b_int := to_integer(unsigned(b)); e <= a_int * b_int; end process; d <= std_logic_vector(to_unsigned(e,8)); end func; Этот VHDL проект задаёт описание компонента, предназначенного для пе ремножения целых положительных чисел a и b , заданных 4 разрядными двоичными векторами. Выходные сиг налы устройства – это 8 разрядные двоичные векторы, представляющие числа из диапазона [0, 225], который обусловлен тем, что числа a , b прини мают значения из диапазона [0, 15]. Умножитель описан на алгоритми ческом уровне: с помощью функции to_integer пакета numeric_std осущест вляется переход к численным значе ниям входных векторов, затем полу ченные числа перемножаются, после чего осуществляется преобразование произведения (числа e ) в выходной вектор d . Целью функциональной верифи кации блока умножителя является ге нерация и подача на его входы всех возможных пар псевдослучайных зна чений для a и b . При этом будет осу ществляться проверка, все ли значения a и b перебраны и все ли различные пары a и b поданы на вход умножите ля. Таких пар будет 256, поскольку a и b принимают значения из диапазо на [0, 15]. Процесс генерации пар чисел a и b должен выполняться до достиже ния заданной цели. По сути, такая цель верификации (тестирования) называется функцио нальным покрытием , которое осу ществляется подсчётом значений пе ременных проекта по заранее опреде лённым корзинам (bins) – диапазонам значений, имеющих специальное на значение в проекте. Для корзин, ис пользующих только одну переменную, создаётся структура данных, которую называют точкой покрытия (coverage point). В нашем примере точка покры тия для числа a включает 16 корзин. По корзинам перекрёстного покры тия (cross coverage) распределяются пары (тройки и т.д.) значений двух ли бо нескольких переменных. Для кор зин, использующих две и более пере менных, создаётся структура данных, называемая точкой перекрёстного покрытия. В нашем примере точка пе рекрёстного покрытия пары чисел a и b включает 256 корзин. Напишем соответствующую тести рующую программу (см. листинг 1), используя традиционные средства VHDL – генератор псевдослучайных чисел, базирующийся на процедуре uniform пакета math_real VHDL биб лиотеки IEEE. Важное место в тестирующей про грамме testbench занимает подготовка псевдослучайных тестовых воздейст вий, подаваемых на вход компонента mult , т.е. тестовых векторов a , b . В стро ках 21–24 листинга 1 декларируются переменные для задания начальных значений генераторов чисел a , b . В процессе RandomGenProc1 выполня ются две процедуры (строки 30, 33) ieee.math_real.uniform (т.е. процедуры uniform из пакета math_real библиоте ки IEEE) для генерации двух псевдослу чайных вещественных чисел RndValA , RndValB из диапазона (0.0, 1.0) (не Средства VHDL для функциональной верификации цифровых систем Методология OS VVM Николай Авдеев, Пётр Бибило (г. Минск, Беларусь) С помощью методологии OS VVM демонстрируются возможности псевдослучайной генерации тестов и функционального покрытия при верификации цифровых систем.

RkJQdWJsaXNoZXIy MTQ4NjUy