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

ния числа выпадений значений пар a , b и представляющая собой массив це лых чисел из 256 элементов (для чи сел a и b имеется по 16 значений, та ким образом, перекрёстных корзин или пар значений чисел a , b будет 16 × 16=256). В таблице 1 показана при нятая нумерация перекрёстных кор зин для значений a , b в массиве Cov CrossAB . Например, число выпадений пары a =2, b =14 будет храниться в эле менте 226 массива CovCrossAB . В строках 39, 40 происходит сбор покрытия значений чисел a и b , пред ставляющий собой увеличение на еди ницу значения элемента массива CovA и CovB , при этом номер элемента мас сива равен значению числа a и b соот ветственно. В строке 41 осуществляет ся сбор пар значений чисел a и b , попа дающих в соответствующие корзины– элементы массива CovCrossAB . В строках 26, 27 декларируются пере менные CovACovered , CovBCovered , Cov CrossABCovered , которые являютсяфла гами, обозначающими полное покры тие всех соответствующих корзин CovA , CovB , CovCrossAB . В строках 44–56 выполняются три цикла для проверки полноты покрытия точек CovA , CovB , CovCrossAB . В строке 29 выполняется проверка условия работы цикла while , который исполняется до тех пор, пока значение флага CovCrossABCovered не станет истинным ( true ), т.е. до покры тия всех пар чисел a , b . Анализ временной диаграммы, полу ченной после выполнения тестирую щей программы (листинг 1), показал, что при использовании стандартного генератора случайных чисел с равно мернымраспределением вероятностей появления чисел, для получения всех 256 пар чисел a , b требуется 1615 цик лов генерации. При этом покрытие корзин для числа a достигается за пер вые 103 цикла, а покрытие корзин для числа b – за первые 68 циклов. Рассмотренныйвышепримерявляет ся иллюстративным. На практике при ходится решать задачи функциональ ного покрытия проектов большой раз мерности. Тестирующие программы усложняются, если у тестируемых ком понентов не два, а большее число вход ных портов. В таких случаях для полу чения тестовых воздействий требуется генерация не пар, а наборов чисел. УсложняетсятакжеVHDL коддляпровер ки покрытия перекрёстных корзин, осо бенно, если приходится учитывать раз решённыеи запрещённые диапазоны. Таким образом, применение тради ционных средств VHDL для генерации случайных чисел и функционального покрытияне позволяет унифицировать написание тестирующихпрограмм, т.к. для каждогопроекта необходимо опре делять ииспользовать новые типыдан ных и писать сложный код, что требует большого опыта программирования на VHDL. Поэтому целесообразно исполь зовать уже разработанные средства, предлагаемые методологией OS VVM. Н АПИСАНИЕ ПРОГРАММЫ С ИСПОЛЬЗОВАНИЕМ ПАКЕТОВ C OVERAGE P KG , R ANDOM P KG Методология OS VVM базируется на использовании средств VHDL пакетов RandomPkg , CoveragePkg , предназна ченных для эффективного решения следующих задачфункциональной ве рификации: ● генерация псевдослучайных чисел, подчиняющихся различным зако нам распределения вероятностей их появления, например, нормальному закону с заданными параметрами; ● генерация псевдослучайных чисел, представленных различными типа ми данных – real , integer , unsigned , signed , std_logic_vector ; ● исключение некоторых значений (из определённых диапазонов) при генерации псевдослучайных чисел; ● организация перебора всех зна чений каждого из генерируемых чисел; ● организацияпереборавсехпар(троек и т.д.) значений генерируемых чисел. Рассмотрим программу (см. лис тинг 2), которая написана с использо ванием средств пакетов RandomPkg , CoveragePkg . Эта программа является более компактной, позволяет решать те же задачи тестирования, что и про грамма из листинга 1, и выдаёет те же результаты моделирования. Влистинге 2жирнымшрифтомвыде лены строки, позволяющие осущест влять генерациюпсевдослучайных чи сел a , b средствами пакета RandomPkg . Для каждого генератора чисел a , b в строке 13 декларируется своя перемен ная RndA , RndB защищённого типа Ran domPType . Затем требуется задать на чальные значения для каждого генера тора, чтобы они выдавали разные последовательности псевдослучайных чисел. Для этого в строках 28, 29 вызы вается метод InitSeed с такими же на чальными значениями аргументов, как в листинге 1, после чегоможноисполь зовать генераторы. В строках 31, 32 вы зывается метод RandSlv (0, 15, 4), кото рый возвращает 4 разрядный вектор типа std_logic_vector , псевдослучайное значение которого лежит в диапазоне [0, 15]. Таким образом, использование защищённого типа RandomPType и его методов существенно упрощает напи сание кодаиработу с генераторомпсев дослучайных чисел по сравнению со стандартнымподходом (листинг 1), т.к. не требуются дополнительные пере менные SeedA1 , SeedA2 , SeedB1 , SeedB2 . Теперь рассмотрим средства пакета CoveragePkg , позволяющие проводить функциональное покрытие. Основным объектом при покрытии являются кор зины. Впакете декларируется защищён ныйтип CovBinBaseType имножествоме тодов, позволяющихвыполнятьразлич ные операции над корзинами. Как уже говорилось выше, под корзиной пони мается «место», гдехранитсячислопопа даний значений переменной в опреде лённый диапазон при выполнении мо делирования. Строго говоря, в пакете CoveragePkg длякорзиныопределёнтип данных CovBinBaseType , а именно, тип record (запись).Поляэтойзаписизадают: ● BinVal – массив, включающий мини мальное и максимальное значения интервала собираемых корзиной значений; ● Count – текущее (при моделирова нии) число попаданий в корзину значений из заданного диапазона; ● AtLeast – цель покрытия задаёт число попаданий, при котором корзина бу дет считаться покрытой; ● Weight – вес – это целое (не равное нулю) положительное число, по ко торому вычисляется вероятность вы бора корзины при использовании метода RandCovPoint ; ● Action – действие (корзина может быть запрещённой, игнорируемой или рабочей); для рабочей корзины считается число попаданий. Для сбора покрытия значений чисел a , b и пар < a , b > в листинге 2 использу ются общие переменные CovA , CovB , CovCrossAB защищённого типа CovP ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 68 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 5 2013 Таблица 1. Нумерация перекрёстных корзин в массиве CovCrossAB b a 0 1 2 … 14 15 0 0 1 2 … 14 15 1 16 17 18 … 30 31 2 32 33 34 … 46 47 … … … … … … … 14 224 225 226 … 238 239 15 240 241 242 … 254 255

RkJQdWJsaXNoZXIy MTQ4NjUy