OS-VVM (Диплом)/Описание тестовой программы — различия между версиями
(→Pause) |
ANA (обсуждение | вклад) м (→Автоматизация запуска тестов) |
||
(не показаны 25 промежуточных версий 2 участников) | |||
Строка 39: | Строка 39: | ||
=== Pause === | === Pause === | ||
− | + | Pause — ждет ответ DUT и считает периоды. Если по истечению MaxWaitTime сигнал не пришел, выходит из процедуры | |
− | + | ||
− | Pause — ждет ответ DUT и считает периоды. | + | |
Интерфейс: | Интерфейс: | ||
Строка 64: | Строка 62: | ||
=== Команды === | === Команды === | ||
− | ==== | + | ==== REQWUP ==== |
− | + | REQA — запрос карты | |
− | + | WUPA — запрос всех карт | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | * Подаёт соответствующую команду на драйвер (если Mode = 0, то REQA(0х26), если Mode = 1, то WUPA(0х52)) | |
− | * | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | = | + | |
− | + | ||
− | + | ||
* Контролирует паузу между запросом и ответом | * Контролирует паузу между запросом и ответом | ||
− | * Принимает ответ и сравнивает его с ожидаемым ответом | + | * Принимает ответ и сравнивает его с ожидаемым ответом |
− | * Выдаёт ошибку | + | * Выдаёт ошибку, если |
− | ** Пауза не соответствует спецификации | + | ** Пауза не соответствует спецификации (Error=1) |
− | ** Ошибка в данных ответа | + | ** Ошибка в данных ответа (Error=2) |
+ | ** Если нет ошибки, Error=0 | ||
Интерфейс: | Интерфейс: | ||
*Входы | *Входы | ||
− | ** | + | ** Mode : in bit; -- 0 = REQA 1 = WUPA |
*Выходы | *Выходы | ||
− | ** Error : out | + | ** Error : out bit (0..2). |
*Сигналы | *Сигналы | ||
** signal tdata_mod : in std_logic - сигнал, идущий с выхода DUT; | ** signal tdata_mod : in std_logic - сигнал, идущий с выхода DUT; | ||
Строка 106: | Строка 89: | ||
* Контролирует паузу между запросом и ответом | * Контролирует паузу между запросом и ответом | ||
* Принимает ответ и сравнивает его с ожидаемым ответом (используя UID) | * Принимает ответ и сравнивает его с ожидаемым ответом (используя UID) | ||
− | * Выдаёт ошибку | + | * Выдаёт ошибку, если |
− | ** Пауза не соответствует спецификации | + | ** Пауза не соответствует спецификации (Error=1) |
− | ** Ошибка в данных ответа | + | ** Ошибка в данных ответа (Error=2) |
+ | ** Если нет ошибки, Error=0 | ||
Интерфейс: | Интерфейс: | ||
Строка 116: | Строка 100: | ||
** UID : in integer_vector(6 downto 0) — UID (7 байт, 6-MSB, 0-LSB) | ** UID : in integer_vector(6 downto 0) — UID (7 байт, 6-MSB, 0-LSB) | ||
*Выходы | *Выходы | ||
− | ** Error : out | + | ** Error : out bit (true = ошибка, false= всё Ок). |
*Сигналы | *Сигналы | ||
** signal tdata_mod : in std_logic - сигнал, идущий с выхода DUT; | ** signal tdata_mod : in std_logic - сигнал, идущий с выхода DUT; | ||
Строка 127: | Строка 111: | ||
* Принимает ответ и сравнивает его с ожидаемым ответом (используя эталонную модель карточки) | * Принимает ответ и сравнивает его с ожидаемым ответом (используя эталонную модель карточки) | ||
* Выдаёт ошибку (Error=0..3), если | * Выдаёт ошибку (Error=0..3), если | ||
− | ** 0 | + | ** 0 – нет ошибки |
− | ** 1 | + | ** 1 – Пауза не соответствует спецификации |
− | ** 2 | + | ** 2 – Ошибка в данных ответа |
− | ** 3 | + | ** 3 – выдала NAK |
− | + | ** 4 – нет ответа | |
+ | ** 10 – другое | ||
Интерфейс: | Интерфейс: | ||
*Входы | *Входы | ||
Строка 174: | Строка 159: | ||
Интерфейс: | Интерфейс: | ||
*Входы | *Входы | ||
− | ** | + | ** Addr : in natural - адрес (0-15) |
** Data : in integer_vector(3 downto 0) — 4 байта | ** Data : in integer_vector(3 downto 0) — 4 байта | ||
*Выходы | *Выходы | ||
Строка 210: | Строка 195: | ||
Тип EEPROMGoldenModelPType включает: | Тип EEPROMGoldenModelPType включает: | ||
− | + | ||
− | + | ==== '''Данные:'''==== | |
− | * | + | * массив данных Memory |
− | ** процедура | + | variable Memory : integer_vector(0 to 16*4-1) := InitMemory("vhd/xeeprom.map"); |
− | ** процедура | + | * <code>TestMode : boolean := false;</code> -- Тестовый режим работы метки |
− | + | * Флаги битов защиты | |
− | ** {{ЖЛампа|24px}} + дополнительные функции чтения | + | variable BL1510 : boolean := false; -- Lock bits L15-L10 lock bit |
+ | variable BL0904 : boolean := false; -- Lock bits L09-L0 lock bit | ||
+ | variable BLOTP : boolean := false; -- Lock bit LOTP lock bit | ||
+ | * Регистр хранения битов защиты (Должен иницилизироваться только по командам запроса ATQA WUPA | ||
+ | variable LockRegister : std_logic_vector(15 downto 0) := InitLockBits; | ||
+ | |||
+ | ==== Внутренние (скрытые) фунцкии ==== | ||
+ | |||
+ | * процедура InitMemory (FileName) — инициализация массива Memory из файла FileName | ||
+ | function InitMemory (constant filename : string) return integer_vector | ||
+ | |||
+ | * Функция инициализации битов защиты от записи | ||
+ | impure function InitLockBits return std_logic_vector is | ||
+ | |||
+ | ==== '''Методы''':==== | ||
+ | * функция CmdREQA — Переводит метку из состояния IDLE в READY1. Из других состояний возвращает метку в IDLE | ||
+ | impure function CmdREQA return integer_vector; | ||
+ | * функция CmdWUPA — Переводит метку из состояния IDLE, HALT в READY1. Из других состояний возвращает метку в IDLE | ||
+ | impure function CmdWUPA return integer_vector; | ||
+ | |||
+ | * процедура CmdWrite (Addr : 0..15 ; Data : 4 bytes) — запись в массив Memory, начиная с адреса Addr | ||
+ | impure function CmdWrite ( | ||
+ | Addr : natural; | ||
+ | Data : integer_vector(0 to 3)) | ||
+ | return std_logic_vector; | ||
+ | * функция CmdRead (Addr : 0..15 ) return 4 bytes; — возвращает 4 байта данных, начиная с адреса Addr | ||
+ | function CmdRead (Addr : natural) return integer_vector; | ||
+ | * функция Read — возвращает содержимое памяти с адреса Addr1 по Addr2 | ||
+ | impure function Read (Addr1, Addr2 : natural) return integer_vector; | ||
+ | * функция GetUID — возвращает 10 байт UID метки | ||
+ | impure function GetUID return integer_vector; | ||
+ | |||
+ | * {{ЖЛампа|24px}} + дополнительные функции чтения | ||
+ | |||
+ | == Автоматизация запуска тестов == | ||
+ | |||
+ | === Описание === | ||
+ | |||
+ | Для каждого теста задаются следующие параметры: | ||
+ | * в папке tb/ файл конфигурации для тесбенча djin22_tb(tb2) (в котором задаётся имя архитектуры блока tb_TestBlock соответствующее данному тесту). Формат файла <code>djin22_tb2_{{Сн|<имя_архитектуры_для_tb_TestBlock>}}_cfg.vhd</code> | ||
+ | * в папке tb/ файл <code>djin22_tb2_{{Сн|<имя_архитектуры_для_tb_TestBlock>}}_cfg.map</code>, в котором перечислены в отдельной строке имена файлов прошивки памяти (eeprom*.map), с которыми нужно запустить данный тест. При отсутствии файла <code>djin22_tb2_{{Сн|<имя_архитектуры_для_tb_TestBlock>}}_cfg.map</code>, то тест запускается с map-файлом по умолчанию (<tt>tb/maps/xeeprom_Rnd1.map</tt>). Файлы прошивок должны находиться в папке <tt>tb/maps/</tt>. | ||
+ | |||
+ | Запуск прогона тестов | ||
+ | vsim -do vsim/run_all.do -c | ||
+ | Параметр <code>-с</code> означает запуск в консольном режиме. Скрипт запуска сначала проверяет наличие файла tb/tests.list и при его наличии читает из него список тестов, которые должен выполнить. Если tb/tests.list нет, то на моделирование запускаются все конфигурации находящиеся в папке tb/ (выбираются все файлы по формату <code>tb/*_cfg.vhd</code>) | ||
+ | |||
+ | |||
+ | При запуске теста должно выполняться: | ||
+ | * моделирование (run -all) | ||
+ | * сбор покрытия | ||
+ | * по завершении моделирования, должна проводиться проверка контрольного сигнала (<code>[examine djin22_tb/TestStatus]</code>) и в консоль (лог) выдаваться сообщение о успешном или ошибочном прохождении теста. | ||
+ | * сохранять базу UCDB по покрытию | ||
+ | * сохранять логи (транскрипт) | ||
+ | |||
+ | Программа регрессионного прогона всех тестов должна: | ||
+ | * скомпилировать исходники модели, тестбенча и всех тестов | ||
+ | * По списку всех тестов по очереди запускать моделирование каждого теста с заданным списком параметров (например, map файлом) | ||
+ | * В зависимости от заданного параметра (IGNORE_FAILS) останавливать выполнение следующего теста или продолжать проверку следующих тестов, если текущий тест выполнился с ошибкой. | ||
+ | * после выполнения всех тестов должна собирать общую базу по покрытию, включая тестовый план, и формировать отчет по покрытию | ||
== NEW == | == NEW == |
Текущая версия на 12:18, 29 апреля 2013
- Спецификация ИМС
- Тестовый план
- Описание тестовой программы
- Метрики и процессы покрытия (en)
- Coverage Examples (Practice) (en)
- Requirements Writing Guidelines (en)
Содержание |
Архитектура тестбенча
|
---|
Рисунок 1 — Архитектура тестбенча (edit) |
Описание процедур/функций
Driver
Драйвер преобразует последовательность бит, передаваемых ему командой в огибающую.
Интерфейс:
- Входы
- data_size : in natural - размер передаваемых данных;
- data : in bit_vector - входной сигнал;
- Сигналы
- signal output : out std_logic - выходной сигнал (огибающая);
Responder
Респондер преобразует выходной сигнал DUT в последовательность бит. Запускается при получении стартового бита ответа.
Интерфейс:
- Входы
- —
- Выходы
- out_data : out std_logic_vector(1 to 164) - выходная информация респондера;
- bit_num : out integer - количество бит, полученных респондером;
- Сигналы
- signal tdata_mod : in std_logic - сигнал из DUT;
Pause
Pause — ждет ответ DUT и считает периоды. Если по истечению MaxWaitTime сигнал не пришел, выходит из процедуры
Интерфейс:
- Входы
- MaxWaitTime : out natural — в периодах clk
- Выходы
- clk_num : out natural - количество периодов. Возвращает 0, если нет ответа после MaxWaitTime-циклов
- Сигналы
- signal tdata_mod : in std_logic - сигнал из DUT;
Reset
Reset останавливает clock генератор на указанное время.
Интерфейс:
- Входы
- wait_time : in time - время сброса(при 0 - бесконечно);
- Выходы
- —
- Сигналы
- signal stop : out bit - сигнал остановки clock генератора;
Команды
REQWUP
REQA — запрос карты
WUPA — запрос всех карт
- Подаёт соответствующую команду на драйвер (если Mode = 0, то REQA(0х26), если Mode = 1, то WUPA(0х52))
- Контролирует паузу между запросом и ответом
- Принимает ответ и сравнивает его с ожидаемым ответом
- Выдаёт ошибку, если
- Пауза не соответствует спецификации (Error=1)
- Ошибка в данных ответа (Error=2)
- Если нет ошибки, Error=0
Интерфейс:
- Входы
- Mode : in bit; -- 0 = REQA 1 = WUPA
- Выходы
- Error : out bit (0..2).
- Сигналы
- signal tdata_mod : in std_logic - сигнал, идущий с выхода DUT;
- signal CoilModulation : out std_logic - огибающая;
Anticollision
Anticollision — Антиколлизия и select 1/2 каскадного уровня
- Подаёт соответствующую команду на драйвер (вычисляет код команды, добавляет 0x88 для 1 уровня, добавляет BCC и CRC)
- Контролирует паузу между запросом и ответом
- Принимает ответ и сравнивает его с ожидаемым ответом (используя UID)
- Выдаёт ошибку, если
- Пауза не соответствует спецификации (Error=1)
- Ошибка в данных ответа (Error=2)
- Если нет ошибки, Error=0
Интерфейс:
- Входы
- Level : in bit — каскадный уровень 1/2 (0=0х93, 1=0х95)
- Arg : in natural - аргумент (0х20-0х67)
- UID : in integer_vector(6 downto 0) — UID (7 байт, 6-MSB, 0-LSB)
- Выходы
- Error : out bit (true = ошибка, false= всё Ок).
- Сигналы
- signal tdata_mod : in std_logic - сигнал, идущий с выхода DUT;
- signal CoilModulation : out std_logic - огибающая;
READ
READ - чтение
- Подаёт соответствующую команду на драйвер (подаёт код команды 0x30, адрес и вычисляет CRC)
- Контролирует паузу между запросом и ответом
- Принимает ответ и сравнивает его с ожидаемым ответом (используя эталонную модель карточки)
- Выдаёт ошибку (Error=0..3), если
- 0 – нет ошибки
- 1 – Пауза не соответствует спецификации
- 2 – Ошибка в данных ответа
- 3 – выдала NAK
- 4 – нет ответа
- 10 – другое
Интерфейс:
- Входы
- Arg : in natural - адрес (0-15)
- Выходы
- Error : out natural (0..3).
- Сигналы
- signal tdata_mod : in std_logic - сигнал, идущий с выхода DUT;
- signal CoilModulation : out std_logic - огибающая;
HALT
HALT — перевод в состояние ожидания
- Подаёт соответствующую команду на драйвер ('50' '00' + CRC)
- Контролирует паузу между запросом и ответом. Если ответа нет, то команда выполнилась успешно.
- Принимает ответ и сравнивает его с ожидаемым ответом (NACK либо ACK(нет ответа))
- Выдаёт ошибку (Error=0..3), если
- 0 — всё Ок (ответа не было)
- 1 — получен NACK
- 2 — Пауза не соответствует спецификации
- 3 — Ошибка в данных ответа (в NACK)
Интерфейс:
- Входы
- —
- Выходы
- Error : out natural (0..3).
- Сигналы
- signal tdata_mod : in std_logic - сигнал, идущий с выхода DUT;
- signal CoilModulation : out std_logic - огибающая;
WRITE
WRITE — запись
- Подаёт соответствующую команду на драйвер (подаёт команду (0xA2), данные, вычисляет четность, добавляет CRC)
- Контролирует паузу между запросом и ответом
- Принимает ответ и сравнивает его с ожидаемым ответом (используя Data)
- Выдаёт ошибку (Error=0..3), если
- 0 — всё ок
- 1 — выдала NAK
- 2 — Пауза не соответствует спецификации
- 3 — Ошибка в данных ответа
Интерфейс:
- Входы
- Addr : in natural - адрес (0-15)
- Data : in integer_vector(3 downto 0) — 4 байта
- Выходы
- Error : out natural (0..3).
- Сигналы
- signal tdata_mod : in std_logic - сигнал, идущий с выхода DUT;
- signal CoilModulation : out std_logic - огибающая;
COMPATIBILITY WRITE
COMPATIBILITY WRITE — совместимая запись
- Подаёт первую часть команды на драйвер (вычисляет код команды, добавляет CRC)
- Контролирует паузу между запросом и ответом
- Подаёт вторую часть команды на драйвер (вычисляет код команды, добавляет CRC)
- Контролирует паузу между запросом и ответом
- Принимает ответ и сравнивает его с ожидаемым ответом (используя UID)
- Выдаёт ошибку (Error=true), если
- Пауза не соответствует спецификации
- Ошибка в данных ответа
Интерфейс:
- Входы
- Arg : in natural - адрес (0-15)
- Data : in integer_vector(4 downto 1) — 4 байта
- Выходы
- Error : out boolean (true = ошибка, false= всё Ок).
- Сигналы
- signal tdata_mod : in std_logic - сигнал, идущий с выхода DUT;
- signal CoilModulation : out std_logic - огибающая;
Эталонная модель метки
Реализуется с помощью защищённого типа EEPROMGoldenModelPType и глобальной общей (shared) переменной EEPROMGoldenModel.
Тип EEPROMGoldenModelPType включает:
Данные:
- массив данных Memory
variable Memory : integer_vector(0 to 16*4-1) := InitMemory("vhd/xeeprom.map");
-
TestMode : boolean := false;
-- Тестовый режим работы метки - Флаги битов защиты
variable BL1510 : boolean := false; -- Lock bits L15-L10 lock bit variable BL0904 : boolean := false; -- Lock bits L09-L0 lock bit variable BLOTP : boolean := false; -- Lock bit LOTP lock bit
- Регистр хранения битов защиты (Должен иницилизироваться только по командам запроса ATQA WUPA
variable LockRegister : std_logic_vector(15 downto 0) := InitLockBits;
Внутренние (скрытые) фунцкии
- процедура InitMemory (FileName) — инициализация массива Memory из файла FileName
function InitMemory (constant filename : string) return integer_vector
- Функция инициализации битов защиты от записи
impure function InitLockBits return std_logic_vector is
Методы:
- функция CmdREQA — Переводит метку из состояния IDLE в READY1. Из других состояний возвращает метку в IDLE
impure function CmdREQA return integer_vector;
- функция CmdWUPA — Переводит метку из состояния IDLE, HALT в READY1. Из других состояний возвращает метку в IDLE
impure function CmdWUPA return integer_vector;
- процедура CmdWrite (Addr : 0..15 ; Data : 4 bytes) — запись в массив Memory, начиная с адреса Addr
impure function CmdWrite ( Addr : natural; Data : integer_vector(0 to 3)) return std_logic_vector;
- функция CmdRead (Addr : 0..15 ) return 4 bytes; — возвращает 4 байта данных, начиная с адреса Addr
function CmdRead (Addr : natural) return integer_vector;
- функция Read — возвращает содержимое памяти с адреса Addr1 по Addr2
impure function Read (Addr1, Addr2 : natural) return integer_vector;
- функция GetUID — возвращает 10 байт UID метки
impure function GetUID return integer_vector;
Автоматизация запуска тестов
Описание
Для каждого теста задаются следующие параметры:
- в папке tb/ файл конфигурации для тесбенча djin22_tb(tb2) (в котором задаётся имя архитектуры блока tb_TestBlock соответствующее данному тесту). Формат файла
djin22_tb2_<имя_архитектуры_для_tb_TestBlock>_cfg.vhd
- в папке tb/ файл
djin22_tb2_<имя_архитектуры_для_tb_TestBlock>_cfg.map
, в котором перечислены в отдельной строке имена файлов прошивки памяти (eeprom*.map), с которыми нужно запустить данный тест. При отсутствии файлаdjin22_tb2_<имя_архитектуры_для_tb_TestBlock>_cfg.map
, то тест запускается с map-файлом по умолчанию (tb/maps/xeeprom_Rnd1.map). Файлы прошивок должны находиться в папке tb/maps/.
Запуск прогона тестов
vsim -do vsim/run_all.do -c
Параметр -с
означает запуск в консольном режиме. Скрипт запуска сначала проверяет наличие файла tb/tests.list и при его наличии читает из него список тестов, которые должен выполнить. Если tb/tests.list нет, то на моделирование запускаются все конфигурации находящиеся в папке tb/ (выбираются все файлы по формату tb/*_cfg.vhd
)
При запуске теста должно выполняться:
- моделирование (run -all)
- сбор покрытия
- по завершении моделирования, должна проводиться проверка контрольного сигнала (
[examine djin22_tb/TestStatus]
) и в консоль (лог) выдаваться сообщение о успешном или ошибочном прохождении теста. - сохранять базу UCDB по покрытию
- сохранять логи (транскрипт)
Программа регрессионного прогона всех тестов должна:
- скомпилировать исходники модели, тестбенча и всех тестов
- По списку всех тестов по очереди запускать моделирование каждого теста с заданным списком параметров (например, map файлом)
- В зависимости от заданного параметра (IGNORE_FAILS) останавливать выполнение следующего теста или продолжать проверку следующих тестов, если текущий тест выполнился с ошибкой.
- после выполнения всех тестов должна собирать общую базу по покрытию, включая тестовый план, и формировать отчет по покрытию