12. Работа с системой моделирования.

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

12.1. Режим работы со списком каналов.

В этом режиме канналы для анализа задаются в виде списка в порядке подключения выводов модели.
Программа для тестирования микросхемы 133ЛА3 через клипсу или контакную панель:

new init enall
exe "base.crt"

// настраиваем соответствие каналов анализатора выводам микросхемы на клипсе или панели
{16b}="p1"  {15b}="p2"  {14b}="p3"  {13b}="p4"  {12b}="p5"  {11b}="p6"  {10b}="p7"
{09b}="p8"  {08b}="p9"  {07b}="p10" {06b}="p11" {05b}="p12" {04b}="p13" {03b}="p14"

// для комбинационных схем можно использовать случайные настройки
{p1^p14}=nf,r
// настраиваем выходы микросхемы и выводы питания в третье состояние для чтения уровней
{p3,p6,p8,p11,p7,p14}=nf,x

// включаем режим логического анализатора для всех выводов микросхемы
{p1^p14}=la
@start=1000
@fr=100000

// запускаем режим работы с моделью - сравнение 14 выводов с моделью
chip/ttlla3
{p1^p14}=sim> "chip/ttlla3"

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

12.2. Режим работы с пробником.

В случае необходимости проверки микросхемы в плате и при отсутствии клипсы можно также воспользоваться режимом работы с пробником:

new init enall dprb // важно установить режим работы пробника
exe "base.crt"

. . . // настраиваем каналы для работы платы

{PRB}=nf,x // устанавливаем пробник в третье состояние для чтения уровней
{PRB}=la

@start=1000
@fr=100000

@SIMNAME=1 // режим вывода имён каналов из описания модели вместо номеров выводов
// запускаем режим работы с моделью при помощи пробника
sim "chip/ttlla3"

В этом режиме диаграммы снимаются пробником для каждого вывода по отдельности. При этом показываются и подсвечиваются нужным цветом сигнатуры канала. Для надёжного съёма сигнатуры следует снимать её трижды, если все три раза совпадают, сигнатуры высвечиваются зелёным цветом.
При таком тестировании очень важно создать такую тестовую последовательность для платы, при которой элементы памяти, если они есть, работают в правильном режиме и тест заканчивает последовательность переключений состояния платы всегда в одном и том же состоянии, то есть два и более повтора теста всегда дают один и тот же результат. Следует исключить возможность того, что состояние платы после теста будет зависеть от её начального состояния. В таком случае плату можно привести в стабильное состояние однократным запуском теста (start) перед запуском или во время работы системы моделирования.
Важно помнить что запрещённые состояния триггеров приводят к неопределённости в результатах тестов и при использовании пробника эта неопределённость нарастает. Например, если RS-триггер, собранный на отдельных элементах (например, 133ЛА3) перевести в состояние с активными R и S входами, результат будет определён, но при одновременном их переключении в неактивное состояние триггер может переключиться в любое состояние. Это состояние может казаться стабильным, если выходы имеют разную нагрузку или ёмкость, но подключение пробника в таких случаях выводит схему из равновесия. Как следствие, последовательный контроль входов и выходов для схемы в нестабильном состоянии даёт искажённую картину и может показать ложную неисправность.

12.3. Библиотека моделей.

Список существующих моделей и назначение их выводов доступно в окне библиотеки моделей (кнопка  панели инструментов консоли MACS).



При необходимости можно также добавить собственные модели. Библиотека моделей выбирает данные из каталогов системы моделирования, где хранятся отдельные модели и их описание.

Структура основных каталогов системы моделирования:

12.4. Создание новых моделей.

В самом основании системы моделирования лежат модели нулевого уровня, на основе которых построены базовые модели.
В библиотеке нулевого уровня находятся 10 моделей:
Для серии ТТЛ дополнительно определены две модели, находящиеся в подкаталоге ttl:
Из моделей нулевого уровня построены базовые модели, такие как многовходовые элементы И, ИЛИ, мажоритарные элементы и пр. Базовые модели также используют для собственного описания другие базовые модели. Для триггеров также определены базовые фрагменты, кроме того для серии ТТЛ добавлены дополнительные модели, расширяющие контроль питания.

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

Для создания новой модели нужно сначала создать исходное описание в формате cds, которое предсталяет собой список связей.
Рассмотрим описание микросхемы ЛА3, которое должно быть создано в файле ttlla3 каталога macs/simsys/crosslink/chip:

// секция описания компонентов модели
$F
// описывается внутреннее название элемента и его тип через двоеточие
// можно описать каталог, например
ttl/power4
// для описаний плат можно использовать описания микросхем,
// например chip/ttltm2
// название микросхемы (здесь d1, d2 и т.п.) не может содержать
// символ подчёркивания - "_"
d1:nand2 d2:nand2 d3:nand2 d4:nand2 pwr:ttl/power4
// здесь мы используем базовую модель 2И-НЕ и контроль питания
// по 4 выходам. Для контроля питания указан подкаталог, где
// содержится модель, для базовых моделей и моделей нулевого уровня
// каталог считается одним и тем же каталогом верхнего уровня,
// то есть для 2И без инверсии
// это выглядело бы как d1:and2 d2:and2 и т.д.

// секция описания входов модели
$X
// здесь описываются имена входов, которые будут использованы,
// как точки входа сигналов при соединении элементов
a1 b1 a2 b2 a3 b3 a4 b4
gnd vcc

// секция описания выходов модели, точки выхода сигналов
$Y
q1 q2 q3 q4

// секция описания внутренних связей
$Z
// внутренние связи - "провода", которыми связаны входы, выходы
// и элементы модели
za1 zb1 za2 zb2 za3 zb3 za4 zb4
zq1 zq2 zq3 zq4

pwgnd pwvcc
pwq1 pwq2 pwq3 pwq4

$M
// вход a1 соединяем с внутренней связью za1
a1:za1
// то же для входа b1 и до входа b4 далее
b1:zb1

a2:za2
b2:zb2

a3:za3
b3:zb3

a4:za4
b4:zb4

// первый вход элемента d1 соединяем со связью za1, второй со связью zb1
// порядок соединения в пары значения не имеет
d1_1_0:za1

d1_2_0:zb1
// первый выход соединяем со связью zq1
d1_0_1:zq1
// обратите внимание на правила кодирования: первое число - номер входа,
// второе - номер выхода, при этом один из номеров должен быть равен 0

// таким же образом соединяем остальные модели
d2_1_0:za2

d2_2_0:zb2
d2_0_1:zq2

d3_1_0:za3
d3_2_0:zb3
d3_0_1:zq3

d4_1_0:za4
d4_2_0:zb4
d4_0_1:zq4

// входы питания соединяем с внутренними связями
gnd:pwgnd

vcc:pwvcc

// входы элемента контроля питания соединяем с соответствующими
// связями
pwr_1_0:pwgnd

pwr_2_0:pwvcc
pwr_3_0:zq1
pwr_4_0:zq2
pwr_5_0:zq3
pwr_6_0:zq4

// и выходы тоже
pwr_0_1:pwq1

pwr_0_2:pwq2
pwr_0_3:pwq3
pwr_0_4:pwq4

// внутренние связи для выходов соединяем с выходами модели
q1:pwq1

q2:pwq2
q3:pwq3
q4:pwq4

// конец описания, в этой секции можно писать что угодно
$E
тут можно писать любые комментарии

Для наглядности также можно также рассмотреть модель RS-триггера с инверсными входами - сравните таблицу коммутации с метками на схеме:

$F
d1:nand2 d2:nand2

$X
nS nR

$Y
Q nQ

$Z
znr zns z1 z2

$M
ns:zns
nr:znr

zns:d1_1_0
z2:d1_2_0
z1:d1_0_1

d2_1_0:z1
d2_2_0:znr
d2_0_1:z2


z1:q
z2:nq

$E

     ┌─┬────┐
     │_│    │
 ────oS│  Q ├────
     │ │    │
     │_│  _ │
 ────oR│  Q o────
     │ │    │
     └─┴────┘

Вернёмся к описанию микросхемы ЛА3. После того, как составлен файл описания, следует создать файл соответствия выводов микросхемы. Без него создание подключаемого модуля невозможно, можно только скомпилировать промежуточное описание, как фрагмент для построения других моделей.
В файле соответствия будут определён порядок передачи входов и выходов модели. Рассмотрим содержимое файла ttlla3.pin в каталоге macs/simsys/simcode/chip:

# 133/136/155/1533 ЛА3 ЛА9 ЛА11 ЛА13 ЛА15 ТЛ3

pinout: a1 b1 a2 b2 a3 b3 a4 b4 gnd vcc q1 q2 q3 q4
ttlla3: 1  2  4  5  9  10 12 13 7   14  3  6  8  11
ttltl3: 1  2  4  5  9  10 12 13 7   14  3  6  8  11

# 133/136/155/1533  ЛА12
#        a1 b1 a2 b2 a3 b3 a4 b4 gnd vcc q1 q2 q3 q4
ttlla12: 1  3  5  6  11 12 14 15 8   16  4  7  9  13

# 134 ЛБ1 А/Б
#       a1 b1 a2 b2 a3 b3 a4 b4 gnd vcc q1 q2 q3 q4
ttllb1: 2  3  5  6  8  9  13 14 11  4   1  7  10 12

Строки, начинающиеся символом # - комментарии. В строке, начинающейся ключевым словом pinout перечислены входы и выходы модели в том же порядке, в котором они находятся в файле описания. Определяющим здесь является порядок, заданный в файле описания, список в файле соответствия нужен для упрощения расстановки номеров выводов.
Один файл может использоваться для генерации нескольких разных моделей. В приведённом примере описаны 4 модели: ЛА3 и её аналоги с отличающимися электрическими и временными характеристиками; триггер Шмитта с функциональностью, идентичной ЛА3 (выводы полностью соотвествуют ЛА3, он выделен в отдельную модель лишь для упрощения работы с библиотекой); ЛА12 - полный функциональный аналог ЛА3 в корпусе с 16 выводами; 134ЛБ1 - функциональный аналог ЛА3 с центральным расположением выводов питания.

Следующим этапом является содание промежуточного описания модели на языке C++.
Для этого используется компилятор моделей modmaker32. После запуска его в каталоге macs/simsys/crosslink с именем модели в командной строке будет сгенерировано промежуточное описание и исходный код для генерации модели:

modmaker32 chip/ttlla3

Можно также сгенерировать исходный код для остальных моделей, описанных в файле ttlla3.pin:

modmaker32 -layout ttlla12 chip/ttlla3
modmaker32 -layout ttllb1 chip/ttlla3
modmaker32 -layout ttltl3 chip/ttlla3

Теперь осталось скомпилировать подключаемый модуль из исходного кода модели. Для этого существует пакетный файл в каталоге macs/simsys/simcode:

builddll chip/ttlla3

Модель будет скомпилирована при помощи Visual C++ 2008 Express и полученный подключаемый модуль будет помещён в каталог macs/simsys/sim32/chip под именем ttlla3.sim32.
Можно создать модули и для остальных моделей, основанных на ЛА3:

builddll chip/ttlla12
builddll chip/ttllb1
builddll chip/ttltl3

Последнее, что осталось сделать - подготовить описание модели для библиотеки. Для этого в каталоге macs/simsys/sim32/chip нужно создать файл ttlla3.alias:

ЛА3 00
ЛА9 03
ЛА11 26
ЛА13 38
ЛА15

Таким образом, по описанию в ttlla3.alias модель ttlla3.sim32 подходит для тестирования микросхем ЛА3, ЛА9, ЛА11, ЛА13, ЛА15, а также их зарубежных аналогов 00, 03, 26 и 38. То есть, её можно использовать для 133ЛА3, К1533ЛА3, К155ЛА9, 74LS00, 74ALS03 и т.д Такие же описания следует создать и для ЛА12, ЛБ1 и ТЛ3.

Если в описании сделать более детальное описание, включающее в себя серию, спектр аналогов сузится. Так, например, модель dtlli1 подходит только для 109ЛИ1 и не может быть использована для тестирования 133ЛИ1.

Та же схема построения моделей используется и для плат, за исключением того, что каталоги chip меняются на boards.