8. Функциональное тестирование.

Функциональное тестирование проводится при помощи системы программирования блока выдачи тестовых воздействий. Система использует специально созданный для этого язык. Окно ввода - вывода в системе (текстовая консоль) доступно в системе в окне "Консоль MACS":



Панель инструментов окна содержит 7 кнопок:
Запуск уже существующего файла программы. Эта кнопка позволяет выбрать файл тестовой программы и запустить его в системе MACS. Если в консоли уже запущена другая программа, система выдаст сообщение об ошибке. Файлы программы можно также запускать двойным щелчком из Windows - при этом они будут запускаться точно так же, а в случае, если инструментальная система VectorLAB не была запущена, запустит и её тоже.
Перезапуск последней запущенной программы. Это действие также дублируется двойным щелчком мыши по окну консоли.
Переход в консольный режим. В этом режиме подсистема MACS переходит в режим интерпретатора с командной строкой. В командной строке можно использовать те же конструкции, что и в программе. Это используется для оперативного управления и краткого тестирования, когда написание отдельной полнофункциональной тестовой программы не оправдано из-за её однократного использования и очень малого объёма (1-3 строки). 
В этом режиме предыдущие команды сохраняются в специальном буфере до выхода из консольного режима и доступны по нажатию курсорных стрелок вверх/вниз. При необходимости сохранить введённые команды как программу, следует воспользоваться командой ed. Эта команда откроет редактор с новым файлом, где уже будут введены все предыдущие команды.
Создание нового файла программы в редакторе. Система открывает редактор с пустым файлом для создания новой программы.
Редактирование уже существующего файла программы. Система позволяет выбрать файл для редактирования и открывает его в редакторе.
Копирование содержимого экрана в системный буфер обмена. Текущий текст копируется полностью, в виде блока 80*25 символов. Если программа, куда будет копироваться текст, имеет возможность форматирования текста в цвете, текст будет вставлен цветным.
Изменение шрифта в окне консоли. При необходимости изменить шрифт (например, чтобы установить более жирное начертание для работы с проектором или в условиях низкой контрастности изображения) можно воспользоваться этим пунктом. По умолчанию устанавливается системный моноширинный шрифт (как правило, Courier New). В списке шрифтов будут присутствовать только моноширинные шрифты, то есть те, у которых ширина всех букв одинакова (как у печатной машинки). Изменение шрифта не затронет начертание текстовых рамок (символы ├, ┬, ╔, и т.п.) и блочной заливки (░, ▒, ▓, ▄, █ и т.п).
Просмотр библиотеки системы моделирования. В окне библиотеки можно найти требуемые модели и просмотреть их описание.

8.1. Первый запуск программы.

В качестве программы для первого запуска можно использовать программу самотестирования, входящую в состав системы. Программа находится в каталоге C:\Program Files\VectorLAB\macs\ под именем selftest.mcs. Откройте её при помощи кнопки . Программа автоматически запустится и предложит проверить подключение стенда к компьютеру и нажать любую клавишу.
Внимание - нажатие клавиши будет распознано только, если окно консоли в данный момент активно, то есть нажатия клавиш будут направлены именно этому окну. Определить это очень просто - активное окно выглядит цветным и контрастным, если же оно неактивно, содержимое окна будет показано градациями серого с пониженной контрастностью.
После нажатия клавиши система начинает самотестирование, в процессе которого проверяются различные режимы работы стенда. Такая проверка требует содействия оператора, поэтому в определённые моменты программа будет выдавать звуковой сигнал и сообщение, после чего ожидать какого-либо действия (какого - будет написано в тексте сообщения).
При работе с готовыми программами этого уже достаточно (при условии хорошей детализации теста и понятных сообщений), но в реальной работе с системой нужно уметь вести разработку таких программ.

8.2. Разработка первой программы.

Система "Вектор" использует для работы интерпретатор языка MACS - языка, основанного на макрокомандах. По сути, это набор команд, выполняющих то, либо иное действие, причём с возможностью создавать новые, внутренне более сложные команды, использование которых делает работу в системе ещё проще. Для того, чтобы сделать какой-либо тест, нужно описать последовательность действий стенда при тестировании.

Примерный сценарий работы простого теста:
  1. Установка стенда в начальное состояние (инициализация).
  2. Настройка каналов, к которым подключено тестируемое устройство, таким образом, чтобы на них был выдан требуемый сигнал и считана реакция устройства.
  3. Запуск теста.
  4. Просмотр отклика от устройства.
Запрограммируем это на языке MACS:

Откройте редактор кнопкой и наберите в нём следующую программу:
  1. new init enall
  2. {}=la
    @start=128
    @fr=1000000

    {^}=nf,x
    {032,033,035,036}=nf,ct
  3. start
  4. {032,033,034,035,036,037}=lp
Редактор подсвечивает ключевые слова программы, для того, чтобы в ней легче было ориентироваться, а также для быстрого нахождения и исправления опечаток в ключевых словах программы:

[*[без имени]                                                                 
new init enall                                                                  
                                                                                
{}=la                                                                           
@start=128                                                                      
@fr=1000000                                                                     
{^}=nf,x                                                                        
{032,033,035,036}=nf,ct                                                         
                                                                                
start                                                                           
                                                                                
{032,033,034,035,036,037}=lp                                                    
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
 F1 Help F2 Save F3 Load F5 Run Alt+X Quit     ░▒▓ 10/11:1             124 байт 

Программу нужно сохранить - для этого нужно нажать F2 и выбрать место хранения файла, после чего сохранить файл нажатием кнопки "Сохранить". При выборе места постарайтесь подобрать для программы подходящее место в структуре каталогов системы Windows - при необходимости создайте новые папки и вложенные в них папки. Старайтесь не хранить файлы в стандартных каталогах системы VectorLAB - это может вызвать путаницу. Так как система запоминает каталог, откуда в последний раз запускалась программа, после запуска программы самотестирования может быть выбран как раз внутренний каталог системы, в этом случае нужно выбрать другой, например, на диске D:.

После того, как файл программы был сохранён, можно запустить программу прямо из редактора клавишей F5 и просмотреть результат отработки теста на экране в виде логической диаграммы:

 Space / Kn - стаpт F4 - задать смещение  F10 - цикл  F9 - пpосмотp Esc - выход 
                                                                                
    0 CH ┼....+....┼....+....┼....+....┼....+....┼....+....┼....+....┼...(+128) 
┌──────────────────────────────────────────────────────────────────────────────┐
│     032       │
│     033       │
│     034       │
│     035       │
│     036       │
│     037       │
└───┌───────────────────────────────────────┐──────────────────────────────────┘
    │CTE-128  CTI-0  CRC-6EBE               │                                   
    └───────────────────────────────────────┘                                   
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
 ────────────────────────────────────────────────────────────────────────────── 
                                                                                
                                                                  Mem - 1992352k

Режим просмотра показывает последний полученный результат. Для повторного запуска теста в этом режиме можно нажать "Пробел". Если нажать F10, система запустит циклический повтор теста - при этом, если тест не очень длинный (как в этом случае), результат можно наблюдать немедленно. Для выхода из такого цикла нужно нажать ESC. Для наглядности теста можно отыскать на разъёме канал 034 (или 03B - это третий контакт в верхнем ряду разъёма) и аккуратно замкнуть его на любой соседний контакт, наблюдая за диаграммой - таким образом мы подадим сигнал на контакт, с которого считывается реакция объекта - в данном случае выхода первого элемента микросхемы.

8.3. Подключение объекта диагностирования к системе.

Для подключения объектов диагностирования к стенду следует знать, на какие контакты должны выдаваться воздействия. TTL-совместимые канальные платы, поставляемые в стандартной поставке, имеют по 16 выходов на разъём. На каждой плате находится разъём с 34 контактами. весь нижний ряд и крайний правый контакт верхнего ряда подключены к земле, остальные 16 - информационные:



При сборке шлейфа кабель выходит из разъёма таким образом, что крайний левый провод (красный) подключён к земле, затем идёт информационный, за которым чередуются провода с землёй и информационные (то есть каждый 2-й провод, кроме последнего - информационный). Таким образом обеспечивается экранирование кабеля. Важным условием при сборке кабеля также является соединение всех заземлённых проводов в одну точку и подключение её к нулевой точке объекта диагностирования. Таким образом подключены все канальные платы за исключением первой, в ней первый (крайний левый верхний) контакт соединён с цифроаналоговым щупом и на разъём не подключён.

Для работы с первой программой можно подключить шлейф к микросхеме - либо непосредственно к микросхеме, либо через разъём на макетной плате:



На этой макетной плате микросхема подключена так, что её контакты соответствуют разъёму в следующим образом:

шлейф микросхема
1 1
2 2
3 3
4 4
5 5
6 6
7 общий (ноль)
8 7
9 8
10 9
11 10
12 11
13 12
14 питание (+5 В)

Подключите шлейф с подключённой микросхемой к группе контактов 01B-16B, подключите контакты питания к общей шине и гнезду +5 соответственно. Включите источник питания +5В.

Микросхема готова к тестированию, можно запускать написанную ранее программу:

 Space / Kn - стаpт F4 - задать смещение  F10 - цикл  F9 - пpосмотp Esc - выход 
                                                                                
    0 CH ┼....+....┼....+....┼....+....┼....+....┼....+....┼....+....┼...(+128) 
┌──────────────────────────────────────────────────────────────────────────────┐
│     032       │
│     033       │
│     034       │
│     035       │
│     036       │
│     037       │
└───┌───────────────────────────────────────┐──────────────────────────────────┘
    │CTE-96  CTI-8  CRC-E3CA                │                                   
    └───────────────────────────────────────┘                                   
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
 ────────────────────────────────────────────────────────────────────────────── 
                                                                                
                                                                  Mem - 1990304k

После наблюдения за реальной работой микросхемы программу можно усовершенствовать так, чтобы она была более простой и наглядной:

Исходный текст:

new init enall

{}=la
@start=128
@fr=1000000
{^}=nf,x
{032,033,035,036}=nf,ct

start

{032,033,034,035,036,037}=lp

Программу можно модифицировать следующим образом:

new init enall
exe "base.crt"

{}=la
@start=128
@fr=1000000
{^}=nf,x
{032,033,035,036}=nf,ct
{01b,02b,04b,05b}=nf,ct

start

{032,033,034,035,036,037}=lp
{01b,02b,03b,04b,05b,06b}=lp

Отличия:
exe "base.crt" - эта строка выполняет стандартную программу из комплекта сервисных программ системы, которая меняет имена каналов системы таким образом, чтобы вместо номеров от 001 до 223 им были назначены имена, соответствующие надписи на передней панели (PRB,02A..16A, 01B...16B,  17E..32E и.т.д). Самый первый канал - PRB изначально назначен цифроаналоговому пробнику и его имя не меняется (поэтому, кстати, в системе нет канала 01A).
start был вычеркнут по причине того, что полученной программе используется только режим просмотра логических диаграмм, в котором start и так выполняется неявно. В других тестовых программах он ещё понадобится, но отсюда вычеркнут для сокращения лишнего текста.
После того, как было выполнено переименование, мы получили более внятные имена каналов - иначе было бы сложно быстро вычислить, например, третий контакт в шестом ряду правого столбца канальных разъёмов. Однако, если вернуться к таблице соответствия проводов в шлейфе контактам микросхемы, окажется, что вторая половины таблицы подключена со сдвигом на один контакт. Это может привести к путанице, поэтому стоит переименовать их ещё раз:

new init enall
exe "base.crt"
{01b}="p1"
{02b}="p2" {03b}="p3" {04b}="p4" {05b}="p5" {06b}="p6"
{07b}="p8" {08b}="p9" {09b}="p10" {10b}="p11" {11b}="p12" {12b}="p13"


{}=la
@start=128
@fr=1000000
{^}=nf,x
{01b,02b,04b,05b}=nf,ct
{p1,p2,p4,p5,p9,p10}=nf,ct

{01b,02b,03b,04b,05b,06b}=lp
{p1,p2,p3,p4,p5,p6,p8,p9,p10}=lp

В начале программы добавилось две строки, которые меняют имена каналов так, чтобы они соответствовали контактам микросхемы. Так как общий и питание на микросхеме не были подключены к разъёму, контакты p7 и p14 не назначались.
Такой список можно вынести в отдельный файл, например "dip14.crt" и запускать его при необходимости из других программ командой exe "dip14.crt". Так обычно делается для устройств сопряжения с платами, имеющими стандартный разъём. Панель для микросхемы на макетной плате по сути - тоже устройство сопряжения.

Получив более правильный список каналов, мы также смогли без лишних проблем добавить в список третий логический элемент - на контактах 8, 9 и 10.

Система "Вектор" изначально предназначалась для функционального тестирования в понятиях, очевидных для инженера, разрабатывающего или ремонтирующего цифровую технику. Тестирование микросхемы по номерам её контактов не совсем отвечает таким требованиям, что может быть исправлено ещё одним переименованием каналов - уже для конкретной микросхемы.

Если назвать входы каждого элемента a и b соответственно, а выход - q, к которым добавить номер логического элемента в сборке, то в результате очередного переименования мы получим следующую программу:

new init enall
exe "base.crt"
{01b}="p1"
{02b}="p2" {03b}="p3" {04b}="p4" {05b}="p5" {06b}="p6"
{07b}="p8" {08b}="p9" {09b}="p10" {10b}="p11" {11b}="p12" {12b}="p13"


{p1}="a1" {p2}="b1" {p3}="q1"
{p4}="a2" {p5}="b2" {p6}="q2"
{p10}="a3" {p9}="b3" {p8}="q3"
{p13}="a4" {p12}="b4" {p11}="q4"

{}=la
@start=128
@fr=1000000
{^}=nf,x
{p1,p2,p4,p5,p9,p10}=nf,ct
{a1,b1,a2,b2,a3,b3}=nf,ct

{p1,p2,p3,p4,p5,p6,p8,p9,p10}=lp
{
a1,b1,q1,a2,b2,q2,a3,b3,q3}=lp

Теперь список настроек стал понятен, так как стало очевидно функциональное назначение каналов. В последней строке также изменился порядок следования каналов, так чтобы каналы всех трёх элементов располагались в списке окна просмотра одинаковым образом.
В качестве последнего штриха можно упростить последнюю строку. Порядок следования каналов в последней строке полностью соответствует порядку последнего переименования каналов - с a1 по q4 включительно. В таких случаях список можно записать в виде {a1^q3}=lp, что означает "каналы с a1 по q3".

Результат:

new init enall
exe "base.crt"
{01b}="p1"
{02b}="p2" {03b}="p3" {04b}="p4" {05b}="p5" {06b}="p6"
{07b}="p8" {08b}="p9" {09b}="p10" {10b}="p11" {11b}="p12" {12b}="p13"


{p1}="a1" {p2}="b1" {p3}="q1"
{p4}="a2" {p5}="b2" {p6}="q2"
{p10}="a3" {p9}="b3" {p8}="q3"
{p13}="a4" {p12}="b4" {p11}="q4"

{}=la
@start=128
@fr=1000000
{^}=nf,x

{a1,b1,a2,b2,a3,b3}=nf,ct
{a1^q3}=lp

В полученной программе сам тест и визуальная проверка его результатов занимают последние 2 строчки, причём при просмотре результатов функциональное назначение каждого сигнала в диаграмме очевидно:

 Space / Kn - стаpт F4 - задать смещение  F10 - цикл  F9 - пpосмотp Esc - выход 
                                                                                
    0 CH ┼....+....┼....+....┼....+....┼....+....┼....+....┼....+....┼...(+128) 
┌──────────────────────────────────────────────────────────────────────────────┐
│      a1       │
│      b1       │
│      q1       │
│      a2       │
│      b2       │
│      q2       │
│      a3       │
│      b3       │
│      q3       │
└───┌───────────────────────────────────────┐──────────────────────────────────┘
    │CTE-96  CTI-2  CRC-80CC                │                                   
    └───────────────────────────────────────┘                                   
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
 ────────────────────────────────────────────────────────────────────────────── 
                                                                                
                                                                  Mem - 1992352k

В большинстве технологических программ используются такие же приёмы, а список настроек для отдельного теста занимает, как правило,.всего несколько строк, построенных схожим образом.

8.4. Счётчики сигнатур.

Только что рассмотренный режим логического анализатора хорош для исследования поведения объекта и построения теста, но проверка корректности работы устройства в нём чересчур сложна. Не очень сложно проверить логическую функцию такой микросхемы, как ЛА3 по диаграммам на экране, но что-либо более сложное, с тестом, включающим много взаимосвязанных каналов и длинными последовательностями таким образом проверить практически невозможно. Для этого в используется метод компактного тестирования, который запоминает для эталонного цифрового сигнала несколько его основных параметров (без необходимости записывать всю диаграмму целиком). Он заключается в том, что для сигнала записываются три характеристики - количество логических единиц в сигнале (CTE), количество импульсов (переходов из 0 в 1 - CTI) и двоичной свёртки последовательности 0 и 1 сигнала по полиному (CRC). Эти три числа называются сигнатурами и их вполне достаточно для сравнения с эталонными значениями. При этом нет необходимости считывать в ПК весь сигнал - эти значения могут вычислены аппаратно, что значительно ускоряет прохождение тестов на сравнение с эталоном.
Программа может либо использовать вычисленные значения в виде переменных, либо использовать базу данных, где все значения будут проверяться автоматически. Программный доступ к переменным будет рассмотрен далее.
Более полная информация о расчёте сигнатур содержится в главе 2.4. руководства по инструментальной системе MACS.

8.5. База данных сигнатур.

Значения счётчиков сигнатур, вычисленные стендом для набора каналов, могут храниться в базе данных программы и сравниваться системой автоматически. Эта база данных не связана жёстко с базой данных аналоговых сигнатур и фотографией устройства - база счётчиков сигнатур автономна и хранится в отдельном файле.
В тесте для микросхемы ЛА3 стоит сравнить сигнатуры выходов логических элементов, то есть q1, q2, q3 и q4.
Сначала нужно открыть файл базы данных - для этого используется команда в форме настройки каналов. В случае с ЛА3 это будет выглядеть как {q1,q2,q3,q4}=db>"la3". Здесь {q1,q2,q3,q4} - список каналов, сигнатуры которых нужно сохранить или сравнить с эталоном, а db>"la3" - команда, указывающая, что данные будут храниться в группе файлов с именем la3.
Выбор режима работы с базой - запись или сравнение - управляется переменной @DBP: если записать в неё значение больше 0, система сохранит прочитанные сигнатуры в базу данных, если записать в неё 0, то прочитанные сигнатуры будут сравниваться со значениями, хранящимися в базе. Тип записываемых сигнатур задаётся соответствующей командой, также в форме настройки каналов, например, {q1,q2,q3,q4}=cmpeic. Команда start при этом тоже выполняется неявно. В этом случае будут записаны сигнатуры импульсов, единиц и CRC. В таблице перечислены типы команд и данные, которые для них записываются:

единицы импульсы CRC
cmpe +
cmpi +
cmpc +
cmpei + +
cmpec + +
cmpic + +
cmpeic + + +

После использования базу следует закрыть командой closedb.

Итак, запись сигнатур в базу данных для ЛА3 будет выглядеть так:

{q1,q2,q3,q4}=db>"la3"
@dbp=5

{q1,q2,q3,q4}=cmpeic
closedb

В этом случае идёт запись данных, причём, так как в @dbp устанавливается значение 5, система повторит тест 5 раз, и в случае, если значения при повторах не совпадут, выдаст предупреждение. Несовпадение сигнатур указывает на то, что тест построен неоднозначно и перед его использованием следует найти и исправить ошибки - такие, например, как отсутствие сброса объекта диагностирования в исходное состояние либо установка запрещённого состояния комбинационной схемы (например, триггера).

После записи эталонных данных можно использовать эту базу для последующего тестирования других объектов, для этого в программе делается одно изменение - строка @dbp=5 меняется на @dbp=0, после чего система начинает работать в режиме сравнения. При этом система автоматически показывает процесс прохождения сравнения на экране и, в случае возникновения ошибок, выдаёт предупреждение. Кроме того, в случае возникновения ошибок переменная @dberror устанавливается в ненулевое значение, которое можно при необходимости проконтролировать в более сложных тестовых программах - их написание будет рассмотренао позже.

Один файл базы данных может содержать несколько разных сигнатур для разных тестов, для того чтобы их отличить, предусмотрены числовые переменные @TEST, @DB1, @DB2 и @DB3. Если записать в них какие-либо значения, они будут записаны вместе с сигнатурами и при последующем сравнении система выберет те сигнатуры, для которых текущие значения этих переменных совпадают со значениями переменных, хранящимися в базе данных.

Пример:

{q1,q2,q3,q4}=db>"la3"
@dbp=5

{a1,b1,a2,b2,a3,b3}=nf,ct
@test=1
{q1,q2,q3,q4}=cmpeic

{a1,b1,a2,b2,a3,b3}=nf,r
@test=2
{q1,q2,q3,q4}=cmpeic

closedb

В приведённом примере сохраняются два разных теста. При последующем сравнении также будут выбраны два разных теста, так как в момент каждого сравнения @test тоже будет иметь разные значения. Переменные @DB1, @DB2 и @DB3 при необходимости используются точно так же:

{a1,b1,a2,b2,a3,b3}=nf,ct
@test=1 @db1=1
{q1,q2,q3,q4}=cmpeic

{a1,b1,a2,b2,a3,b3}=nf,r
@test=1 @db1=2
{q1,q2,q3,q4}=cmpeic

{a1,b1,a2,b2,a3,b3}=nf,r
@test=2 @db1=1
{q1,q2,q3,q4}=cmpeic

и т.д.

Переменная @test может использоваться, например, чтобы отличать тесты, @db1 - отдельные вариации в настройках каналов каждого теста, @db2 - изменения общих настроек стенда (например, частоты) при полностью одинаковых настройках каналов одного и того же теста, и т.п. - реальных смысл этих переменных зависит от разработчика. По умолчанию (в начале программы) все эти переменные равны 0.

8.6. Принципы создания функционального теста.

При разработке тестов для системы "Вектор" объект диагностирования (или его часть) рассматривается как функциональный блок, на который передаются какие-то сигналы, управляющие его состоянием в соответствии с назначением этих сигналов. Тесты при этом тоже строятся с учётом назначения сигналов. К таким сигналам можно отнести, например, сигнал сброса, сигнал тактовой синхронизации, сигнал записи сигнала с шины, сама шина передачи данных или шина адреса и т.п. Для таких сигналов существуют специальные функции настройки каналов, которые описываются в терминах назначения сигнала. Например, для меандра указывается его скважность (период), для синхроимпульса - его положение и продолжительность, для синхросерии - период повторения серии и длительность сигнала. Есть также настройки каналов, ориентированные на работу с группой каналов - например, передача двоичного числа по шине, либо передача счётного двоичного кода (в этом случае можно задать период наращивания числа, направление отсчёта и начальное значение). Для более общих случаев можно также использовать псевдослучайные последовательности и т.п.
Все эти функции детально описаны в главе 5 руководства по инструментальной системе MACS.

С практической точки зрения рассмотрим пример - запоминающее устройство.
У запоминающего устройства может быть следующий набор сигналов:
Для проверки такого устройства сначала нужно записать в в него случайные данные по каждому адресу.
Предварительный вид будет таким:

{wr}=nf,l1     // режим записи
{d0^d7}=nf,r   // случайные данные
{a0^a11}=nf,ct // последовательный перебор всех адресов
{eo}=nf,ss     // серия синхронизирующих импульсов
start          // провести цикл перезаписи

Обратите внимание на строки в виде "{wr}=nf,l1     // режим записи" - эта строка содержит в себе комментарий. Комментарий начинается с пары символов "//" и продолжается до конца строки - он нужен для пояснений в тексте программы, которые не должны мешать процессу её выполнения.

В этом примере подобраны типы воздействий, но их соотношение во времени ещё не установлено. Предположим, что 3 физических цикла достаточно - в таком случае стробирующий сигнал eo сможет проводить запись при любых условиях - при управлении и фронтом, и спадом и уровнем сигнала. Тогда  следует ещё установить правильную длину теста. Если внести все изменения, получится следующий вид:

@start=4096*3      // 2 в степени 12 (ширина адреса) цикла длиной по 3 такта.
{wr}=nf,l1         // изменения не требуются

{d0^d7}=nf,r(50,3) // вероятность появления единицы 50%, меняется каждые 3 такта.
{a0^a11}=nf,ct(3)  // меняется каждые 3 такта
{eo}=nf,ss(3,1,1)  // один такт каждые три такта, сдвинут на 1 такт
start              // провести цикл перезаписи

Если нарисовать такую диаграмму, окажется что для сигнала eo первый такт не был определён, поэтому конечный вид списка настроек будет таким:

{wr}=nf,l1
{d0^d7}=nf,r(50,3)
{a0^a11}=nf,ct(3) 
{eo}=nf,l0,ss(3,1,1)

Здесь все такты до начала действия настройки eo будут определены как логический ноль (l0).
После того, как сигналы записаны, проведём чтение:

{wr}=nf,l0        // режим чтения
{d0^d7}=nf,x      // перевод шины данных в третье состояние для возможности чтения
{a0^a11}=nf,ct(3) // изменения не требуются, те же адреса
{eo}=nf,ss(3,1,1) // изменения не требуются

start             // провести цикл чтения

На месте последней команды (start) нужно проконтролировать соответствие прочитанных данных ожидаемым. Для этого используется эталонная база данных. Полностью (за исключением настройки имён каналов) программа будет выглядеть так:

new init enall
exe "base.crt"

//условные настройки имён каналов, реальное подключение может отличаться
{01b}="wr" {02b}="eo"
{03b}="d0" {04b}="d1" {05b}="d2" {06b}="d3"
{07b}="d4" {08b}="d5" {09b}="d6" {10b}="d7"

{11b}="a0" {12b}="a1" {13b}="a2" {14b}="a3" {15b}="a4" {16b}="a5"
{17b}="a6" {18b}="a7" {19b}="a8" {20b}="a9" {21b}="a10" {22b}="a11"


{}=la

@start=4096*3
@fr=1000000
{^}=nf,x

{wr}=nf,l1            // режим записи
{d0^d7}=nf,r(50,3)    // случайные данные
{a0^a11}=nf,ct(3)     // последовательный перебор всех адресов
{eo}=nf,l0,ss(3,1,1)  // серия синхронизирующих импульсов

start

{d0^d7}=db>"memtest"

@dbp=3            // после первого запуска с эталоном изменить на @dbp=0

{wr}=nf,l0        // режим чтения
{d0^d7}=nf,x      // перевод шины данных в третье состояние для возможности чтения

{a0^a11}=nf,ct(3) // на самом деле, эти настройки канала не изменились с предыдущего раза,

{eo}=nf,ss(3,1,1) // поэтому в реальном тесте их можно пропустить

{d0^d7}=cmpeic


closedb

Таким образом получилась простая и понятная программа тестирования, написанная в терминах функционального назначения каналов. При тестировании сравнение сигнатур проводится системой автоматически, без необходимости описывать это вручную.

8.7. Особенности при работе со схемами, содержащими элементы памяти.

При разработке тестов следует обращать внимание на фрагменты, содержащие триггеры. Дело в том, что триггеры, как правило, имеют либо запрещённые состояния, либо могут неправильно срабатывать в определённые моменты. Фрагменты схем, содержащие обратную связь, могут оказаться триггерами, как, например, следующие фрагменты в любых комбинациях:

 
Это фрагменты RS-триггеров, для них запрещённым состоянием является подача одновременно управляющих уровней на вход S и R. При этом оба выхода такого триггера переключатся в одинаковое состояние (что уже является запрещённым состоянием) и установятся в нормальное состояние (прямое и инверсное) только после прекращения подачи одного из сигналов. При прекращении подачи двух сигналов одновременно триггер может переключиться в любое состояние, причём может сделать это с задержкой, вызванной аналоговыми процессами при переключении. Такая задержка характерна для триггеров и называется эффектом метастабильности. Для D - триггеров, в которых состояние со входа D записывается в триггер по тактовому импульсу C недопустимым является одновременная подача сигнала записи и изменение уровня сигнала на входе D - в этом случае также может проявится эффект метастабильности, либо триггер может просто не переключиться. При создании тестов для устройств с триггерами нужно следить за такими эффектами, разносить переходы уровней на входах триггеров и, по возможности, избегать запрещённых состояний.
Для иллюстрации подобных эффектов можно воспользоваться микросхемой ТМ2 серии ТТЛ, например, КР1533ТМ2. Микросхема представляет собой два комбинированных D-триггера, управляемых по фронту сигнала с асинхронными входами сброса и установки, то есть, один элемент сочетает в себе синхронный D-триггер и асинхроный RS-триггер. Структурная схема одного элемента показана на рисунке:



Создадим неправильную тестовую программу для тестирования RS-триггера:

new init enall
exe "base.crt"
{01b}="p1" {02b}="p2" {03b}="p3" {04b}="p4" {05b}="p5" {06b}="p6"
{07b}="p8" {08b}="p9" {09b}="p10" {10b}="p11" {11b}="p12" {12b}="p13"

{p1}="nR1" {p2}="D1" {p3}="C1" {p4}="nS1" {p5}="Q1" {p6}="nQ1"
{p13}="nR2" {p12}="D2" {p11}="C2" {p10}="nS2" {p9}="Q2" {p8}="nQ2"

{}=la
@start=128
@fr=10000000
{^}=nf,x

{nR1,nS1,nR2,nS2}=nf,m(10)

{nR1^nq2}=lp

Результат работы программы:

 Space / Kn - стаpт F4 - задать смещение  F10 - цикл  F9 - пpосмотp Esc - выход 
                                                                                
    0 CH ┼....+....┼....+....┼....+....┼....+....┼....+....┼....+....┼...(+128) 
┌──────────────────────────────────────────────────────────────────────────────┐
│     nR1       │
│      D1       │
│      C1       │
│     nS1       │
│      Q1       │
│     nQ1       │
│     nR2       │
│      D2       │
│      C2       │
│     nS2       │
│      Q2       │
│     nQ2       │
└───┌───────────────────────────────────────┐──────────────────────────────────┘
    │CTE-128  CTI-0  CRC-6EBE               │                                   
    └───────────────────────────────────────┘                                   
                                                                                
                                                                                
                                                                                
 ────────────────────────────────────────────────────────────────────────────── 
                                                                                
                                                                  Mem - 1989564k

На диаграмме видно, что при синхронном изменении сигналов R и S поведение двух, казалось бы, одинаковых элементов хоть и достаточно стабильно, но существенно отличается. Поведение элементов может меняться в зависимости от серии микросхемы, от длины провода, которым подключены управляющие выводы, даже от влажности воздуха. В граничных условиях диаграммы выходов становятся нестабильными, что можно проконтролировать по их цифовым сигнатурам.

Теперь перейдём к метастабильности синхронного D-триггера. Программа для неправильного тестирования D-триггера будет выглдеть так:

new init enall
exe "base.crt"
{01b}="p1" {02b}="p2" {03b}="p3" {04b}="p4" {05b}="p5" {06b}="p6"
{07b}="p8" {08b}="p9" {09b}="p10" {10b}="p11" {11b}="p12" {12b}="p13"

{p1}="nR1" {p2}="D1" {p3}="C1" {p4}="nS1" {p5}="Q1" {p6}="nQ1"
{p13}="nR2" {p12}="D2" {p11}="C2" {p10}="nS2" {p9}="Q2" {p8}="nQ2"

{}=la
@start=128
@fr=10000000
{^}=nf,x

{nR1,nR2}=nf,s(0,-1)
{nS1,nS2}=nf,l1

{d1,d2}=m(8)
{c1,c2}=ss(8,4)

{nR1^nq2}=lp


 Space / Kn - стаpт F4 - задать смещение  F10 - цикл  F9 - пpосмотp Esc - выход 
                                                                                
    0 CH ┼....+....┼....+....┼....+....┼....+....┼....+....┼....+....┼...(+128) 
┌──────────────────────────────────────────────────────────────────────────────┐
│     nR1       │
│      D1       │
│      C1       │
│     nS1       │
│      Q1       │
│     nQ1       │
│     nR2       │
│      D2       │
│      C2       │
│     nS2       │
│      Q2       │
│     nQ2       │
└───┌───────────────────────────────────────┐──────────────────────────────────┘
    │(|)CTE-72  CTI-7  CRC-C9E4             │                                   
    └───────────────────────────────────────┘                                   
                                                                                
                                                                                
                                                                                
 ────────────────────────────────────────────────────────────────────────────── 
                                                                                
                                                                  Mem - 1982260k

Результат работы программы выглядит почти нормально, за исключеним того, что на нём запечатлён момент нестабильного переключения второго триггера - в этом случае эффект метастабильности привёл к тому, что триггер просто не переключился. Этот эффект тоже зависит от длины провода (от него зависит соотношение фаз сигналов D и C), от влажности воздуха, степени чистоты печатной платы (что влияет на ёмкость, существующую параллельно управляющим выводам) и т.п.
Эта иллюстрация показывает, почему важно не допускать совпадения фазы изменения сигналов на управляющих выводах триггеров. Для того, чтобы избавиться от этого эффекта, достаточно всего лишь сдвинуть сигналы хотя бы на один такт - это позволяют сделать все функции настройки каналов.