Генератор тестовых программ MicroTESK: средства моделирования системы команд микропроцессора Андрей Татарников [email protected] Institute for System Programming of the Russian Academy of Sciences (ISPRAS) http://hardware.ispras.ru Создание и верификация микропроцессоров Языки описания цифровой аппаратуры (HDL) Verilog VHDL Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 2 Подходы к верификации микропроцессоров Экспертиза Формальную верификация Имитационное тестирование Модульное (сигналы) Системное (тестовые программы) Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 3 Системное тестирование Тестовые программы lui ori lui ori ... s1,0x27 s1,s1,0xc8 s3,0x4e s3,s3,0xf7 Сравнение трасс ✕ Эталонная модель (эмулятор) на C Симулятор дизайна (Verilog) Возникла ошибка Успешный прогон Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 4 Подходы к разработке тестовых программ Дизайн Требования ? 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 5 Способы автоматической генерации тестов Случайная Комбинаторная Основанная на ограничениях Направленная генерация Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 6 Использование моделей в генераторах тестов Основные компоненты Ядро генератора Модель микропроцессора Модель системы команд Тестовое знание Генераторы основанные на моделях RAVEN (Obsidian Software, now ARM) Genesys-Pro (IBM Research) MicroTESK (ISPRAS) Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 7 Организация модели микропроцессора в MicroTESK Модель Провайдер метаданных Генератор (ядро) Симулятор Ресурсы Монитор состояния Конфигуратор вызовов Тестовая программа Команды Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 8 Описание системы команд при помощи формальных спецификаций Языки описания архитектуры (ADL) nML Sim-nML Преимущества Простота Расширяемость Возможность извлечения тестовых знаний Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 9 Язык Sim-nML: Спецификация ресурсов микропроцессора Типы данных: type dword = card(64) type word = card(32) type hword = card(16) type byte_t = card(8) Константы и метки: let REGS = 2**5 let byte_order = ”little” let PC = "GPR[15]” let SP = "GPR[13]” Регистры: reg GPR[REGS, word] reg CPSR[word] Память: mem M[2 ** 10, byte_t] Переменные: var temp[1,word] var shifter_carry_out[1,bit] var ALU_OUT[1,word] Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 10 Язык Sim-nML: Спецификация команд Композиция примитивов, OR- и AND-правила op instruction(x: arith_mem_inst) Instruction REG mov eax, ebx syntax = x.syntax image = x.image op Mov() IREG action = x.action AND-правило syntax = "mov“ OPRND image = "10“ Arithm op arith_mem_inst(y: Add_sub_mov, OPRNDL, op2:}OPRNDR) MEM action op1: = { DEST = SRC2; syntax = format("%s %s %s", y.syntax, op1.syntax, op2.syntax) image = format("%s %s 00%s",op y.image, op1.image, op2.image) Add_sub_mov = Add | Sub | Mov action = { OPRND REG SRC1 = Add_Mov_Sub op1; mode REG(i: nibble)=R[i] SRC2 = op2; syntax = format("R%d", i) y.action; image = format("01%4b", i) IREG op1 = DEST; PC = PC + 2; mode OPRNDL = MEM | REG | IREG Add Mov Sub } MEM op Add_sub_mov = Add | Sub | Mov OR-правило Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 11 Язык Sim-nML: Анализ кода op ADD(rd: GPR, rs: GPR, rt: GPR) action = { if(NotWordValue(rs) || NotWordValue(rt)) then UNPREDICTABLE(); endif; tmp_word = rs<31..31>::rs<31..0> + 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 12 Построение модели в MicroTESK Трансляции спецификации на Sim-nML в Java-модель Транслятор AST Парсер Sim-nML Парсер AST IR Генератор кода Модель API модели Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 13 Внутреннее представление (IR) Список таблиц примитивов: Константы Метки Типы данных Ресурсы (регистры, память, переменные) Операции и режимы доступа (op и mode) Параметры Результат Атрибуты Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 14 API модели системы команд Основные библиотеки: Data library Metadata Memory Instructions Simulation Monitoring Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 15 Программное представление модели Модель Инструкции Ресурсы Операции Режимы адресации @Override public IInstructionCall getCall() throws ConfigurationException { final IAddressingMode op1 = getArgument("op1"); final IAddressingMode op2 = getArgument("op2"); return new InstructionCall( new Instruction(new Arith_Mem_Inst(new Mov(), op1, op2))); } Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 16 Заключение Достигнутые результаты: API для моделирования ISA Транслятор языка Sim-nML Модель для ARM Дальнейшие планы: Интеграция модели ISA с моделью MMU Извлечение тестовых знаний Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 17 Спасибо! Вопросы? Institute for System Programming of the Russian Academy of Sciences (ISPRAS), 2013 18