Генерация тестовых программ для микропроцессоров на основе моделей их архитектуры. Андрей Татарников andrewt@ispras.ru Institute for System Programming of the Russian Academy of Sciences (ISPRAS) http://hardware.ispras.ru Создание и верификация микропроцессоров Hardware Description Languages (HDL) Verilog VHDL Architecture Description Languages (ADL) nML Sim-nML Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 2 of 14 Уровни верификации микропроцессоров Уровень юнита (через входные и выходные сигналы Системный уровень (через тестовые программы) Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 3 of 14 Подходы к созданию тестовых программ Дизайн Требования ? lui s1, 0x2779 ori s1, s1, 0x0 lui s3, 0x4ee ori s3, s3, 0xf add v0, a0, a2 sub t1, t3, t5 add t7, s1, s3 Тестовые программы Ручная разработка Случайная генерация Генерация основанная на тестовых шаблонах Генерация основанная на моделях Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 4 of 14 Генерация тестовых программ основанная на ограничениях Входные значения Ограничения (инварианты) Выходные значения (тестовые данные) Предоставляемые возможности: Переносимый движок (например, Z3) Удобный язык (SMT-LIB) Широкий выбор теорий Преимущества: Проще создавать тесты Лучшее покрытие Меньше тестовых багов Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 5 of 14 Эволюция генераторов тестовых программ Генератор для конкретной архитектуры Генератор, основанный на моделях Ядро генератора Модель микропроцессора Модель набора инструкций Тестовое знание Настраиваемый генератор, основанный на моделях Ядро генератора Описание микропроцессора / Конфигурация Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 6 of 14 Мотивация проекта MicroTESK Упрощения адаптации к новым дизайнам Упрощение создания тестовых наборов Основные требования: Должно быть легко изменить набор инструкций: добавить/удалить инструкции изменить семантику инструкций Должно быть легко изменить свойства микроархитектуры: конфигурация кэш-памяти алгоритм трансляции адресов Должна быть возможность генерировать тестовые программы автоматически на основе высокоуровневых параметров Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 7 of 14 Архитектура MicroTESK MicroTESK Specifications (ADL, Configuration) Modeling Engineer Engine Libraries Model ADL Translator Model API Design Model (Instruction Set, Resources) Test Template Generator Basic TK Testing Knowledge Test Program Generator CSP Solver API Test Templates Testprograms programs Test Test Programs CSP Solver Testtemplates templates User–Defined Test Test Templates Verification Engineer Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 8 of 14 Пример спецификации на Sim-nML op ADD(rd: GPR, rs: GPR, rt: GPR) Тестовый шаблон action = { if(NotWordValue(rs) || NotWordValue(rt)) then UNPREDICTABLE(); ALU r(), r(), r(); Предусловие endif; ADD R, r(), r();; normal; tmp_word = rs<31..31>::rs<31..0> SUB+ r(), R, r();; overflow; rs<31..31>::rt<31..0>; if(tmp_word<32..32> != tmp_word<31..31>) then SignalException("IntegerOverflow"); else Тестовые ситуации rd = sign_extend(tmp_word<31..0>); endif; } syntax = format("add %s, %s, %s", rd.syntax, rs.syntax, rt.syntax) op ALU = ADD | SUB | ... Классы эквивалентности Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 9 of 14 Описание системы управления памятью ПримерШаблон описание кэша Тестовый Ассоциативность LD r(), 0x0, r();; hit(TLB, loaded::PFN1);; Количество строк miss(L1);; hit(L2); Структура данных (поля и их размер) ... Функция вычисления позиции основе адреса SD r(), 0x0,данных r();;наhit(TLB, loaded::PFN2);; Предикат проверки промаха/попадания equals(PFN1, PFN2);; hit(L1); Стратегии вытеснения buffer L1 = { set = 4 length = 128 line = { tag:card(27), data:card(32) } index(addr:36) = { addr<8..2> } match(addr:36) = { addr<35..9> == tag<0..26> } policy = LRU } Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 10 of 14 Ограничения Предусловия (define-sort DWORD64 () (_ BitVec 64)) Интервалы возможных значений (define-fun INT_ZERO () DWORD64 (_ bv0 64)) Зависимости между данными (define-fun INT_BASE_SIZE () DWORD64 (_ bv32 Псевдослучайные значения 64)) (define-fun INT_SIGN_MASK () DWORD64 (bvshl (bvnot INT_ZERO) INT_BASE_SIZE)) (declare-const rs DWORD64) (define-fun IsValidPos ((x!1 (declare-const rt DWORD64) DWORD64)) Bool (ite (= (bvand x!1 INT_SIGN_MASK) INT_ZERO) true false)) (assert (IsValidSignedInt (define-fun IsValidNeg ((x!1rs)) DWORD64)) Bool (= (bvand x!1 INT_SIGN_MASK) INT_SIGN_MASK) true false)) (assert (ite (IsValidSignedInt rt)) (assert (not (IsValidSignedInt (bvadd rs rt)))) (define-fun IsValidSignedInt ((x!1 DWORD64)) Bool (assert (ite (not(or(=(IsValidPos rs rt)))x!1) (IsValidNeg x!1)) true false)) (check-sat) (get-value (rs rt)) Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 11 of 14 Тестовые шаблоны Предусловия Классы эквивалентности Настраиваемые последовательности команд Комбинаторная генерация class MyTemplate < Template def test() data = [ [0xEF, 0xFF], [0x1EF, 0x1FF], [0xFEF, 0xFFF] ]; data.each { |d| xor r0, r0, r0; ori r(2), r0, d[0]; ori r(4), r0, d[1]; ld tmp1=r(1), 0x0, r(2);; hit([L1(), L2()], [25, 50, 75]); ld tmp2=r(3), 0x0, r(4);; hit([L1(), L2()], [25, 50, 75]); dadd r(5), tmp1, tmp2;; overflow; } end end # class MyTemplate Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 12 of 14 Заключение Адаптация основанного на моделях тестирования для инженеров-верификаторов Предметно-ориентированные языки Облегчение реагирования на изменения в дизайне и поддержки моделей Легко модифицируемые спецификации Полностью автоматическая генерация тестов Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 13 of 14 Спасибо! Вопросы? Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 14 of 14