Вы находитесь на странице: 1из 7

Êîìïîíåíòû è òåõíîëîãèè, ¹ 7’2001 Ñîôò

Çíàêîìñòâî
ñ ïàêåòîì DesignLab 8
Óðîê 6.
Êàê ïðîåêòèðîâàòü èåðàðõè÷åñêèå ñõåìû

Ìàòåðèàëüíûé ìèð ñêëîíåí ê èåðàðõèè. Ýòî çíà÷èò, ÷òî ëþáîé îáúåêò ìîæíî ïðåäñòàâèòü
êàê ñîâîêóïíîñòü âçàèìîäåéñòâóþùèõ ÷àñòåé, êîòîðûå, â ñâîþ î÷åðåäü, ñîñòîÿò èç áîëåå
ìåëêèõ äåòàëåé. Íàïðèìåð, ñëîæíûå îáúåêòû âû÷èñëèòåëüíîé òåõíèêè ñîñòîÿò èç óñò−
ðîéñòâ, òå — èç óçëîâ, óçëû — èç ýëåìåíòîâ, ýëåìåíòû — èç êîìïîíåíòîâ (ðàäèîäåòàëåé).
 ñâÿçè ñ óñëîæíåíèåì ñîçäàâàåìûõ îáúåêòîâ èåðàðõè÷åñêîå ïðîåêòèðîâàíèå ñòàíîâèòñÿ
ñàìûì ìîùíûì è, âåðîÿòíî, åäèíñòâåííûì ìåòîäîëîãè÷åñêèì èíñòðóìåíòîì ïðîöåññà
ïðîåêòèðîâàíèÿ.

Àëåêñàíäð Øàëàãèíîâ, еловек не в состоянии воспринимать слиш- Построим DSL-блок, реализующий данную функ-
ê. ò. í.

shalag@vt.cs.nstu.ru
Ч ком большой объем данных. Если деталей
очень много, он может легко «утонуть» в них,
и успешное завершение проекта станет проблема-
цию. С этой целью запустим графический редактор
Schematics и активизируем команду Block в меню
Draw (в дальнейшем Draw > Block). На экране по-
тичным. При иерархическом проектировании в по- явится прямоугольный контур будущего блока, ко-
ле зрения необходимо держать лишь один фрагмент торый можно поместить в любое место чертежа. На-
объекта. Остальные фрагменты представлены в ви- жав левую кнопку мыши, мы зафиксируем его по-
де «черных ящиков» и присутствуют в проекте толь- ложение на схеме. По умолчанию блок получит имя
ко для того, чтобы имитировать «окружение», то HB1. Можно продолжить ввод блоков, но нам доста-
есть взаимодействие проектируемого фрагмента с точно одного. Поэтому нажмем клавишу Esc или
другими частями объекта. Благодаря иерархическо- правую кнопку мыши. В углах блока появятся не-
му проектированию удается ограничить текущую большие квадратики — узелки, которые можно бук-
сложность проекта на приемлемом уровне. сировать мышью, изменяя первоначальные разме-
Процесс иерархического проектирования может ры блока.
развиваться в двух противоположных направлени- Установим желаемые размеры и активизируем ко-
ях — «сверхувниз» (нисходящее проектирование) и манду Draw > Wire — рисовать проводники. Подве-
«снизувверх» (восходящее проектирование). дем к левой стороне блока три входных проводника
САПР DesignLab 8 поддерживает обе стратегии D0, D1 и A, а к правой — один выходной провод-
иерархического проектирования, предоставляя в ник Q. В точках, где проводники соприкасаются с бло-
распоряжение пользователя такие инструменты, как ком, редактор создаст интерфейсные контакты и при-
блоки, иерархические символы и макромодели. своит им имена по шаблону P1…P4. Двойным щелч-
Без сомнения, куда привлекательнее выглядит ком на имени контакта вызовем диалоговую панель
нисходящее проектирование, при котором работа Change Pin и переименуем их в D0, D1, A и Q (рис. 6.1).
начинается с определения функции будущего объ-
екта, а заканчивается трансляцией функционально-
го описания в структурное (принципиальную схе-
му). С него мы и начнем.

Áëîêè
Для функционального описания объекта в пакете
DesignLab 8 рекомендуется использовать так назы-
ваемые DSL-блоки (от англ. Design Synthesis
Language — язык синтеза проекта). Рис. 6.1. Процесс создания блока HB1
Предположим, целью нашего проекта является
разработка мультиплексора на два входа. Информа- Мы создали внешнее описание блока и теперь за-
ция с одного из них D0 или D1 передается на выход программируем его функцию. Выделим блок и ак-
Q в зависимости от состояния селекторного входа A. тивизируем команду Navigate > Push, чтобы пони-
Работа устройства может быть описана функцией: зить иерархию проекта на один уровень. Редактору
Q=(not A)×D0+A×∗D1. придется закрыть текущий уровень иерархии, по-

116 www.finestreet.ru
Êîìïîíåíòû è òåõíîëîãèè, ¹ 7’2001 Ñîôò
этому он запросит имя файла, в котором надо вающий выход будет восприниматься как
сохранить проектируемую схему мультиплек- ошибка. После этого выполним контрольное
сора. моделирование так, как это было сделано на
Введем имя test1_mux2, к которому редак- первом уроке.
тор добавит расширение SCH. После этого от- Итак, функциональное описание мульти-
кроется диалоговая панель Set Up Block, где плексора готово. Теперь в соответствии со
необходимо указать имя будущего DSL-бло- стратегией нисходящего проектирования нам
ка, например HB1_mux2, а в поле Type заме- предстоит детализировать проект, заменив
нить значение Schematic на DSL (рис. 6.2). Де- функциональное описание структурным (схе-
ло в том, что мы собираемся создавать не схе- мой замещения блока).
му замещения блока, а его функциональное Создадим только что описанным способом Рис. 6.5. Схема замещения блока HB2
DSL-описание. новый блок в нашей схеме. Активизируем ко-
манду Draw > Block и разместим рядом с уже Сохраним созданную схему замещения бло-
существующим блоком HB1 еще один. Редак- ка HB2 (файл HB2_1_mux2.sch) и вернемся на
тор автоматически присвоит ему имя HB2. верхний уровень иерархии (клавиша F3 или ко-
Начинкой этого блока должно быть структур- манда Navigate > Pop). Чтобы убедиться, что в
ное описание мультиплексора. Мы реализуем проделанной работе нет ошибок, выполним
его в виде функциональной схемы на элемен- контрольное моделирование (рис. 6.6). Сравни-
тах серии 74AC. вая временные диаграммы выходных сигналов
Зададим блоку HB2 такие же размеры, как Q_DSL и Q_SCH1, легко заметить, что в отли-
у первого, и подведем к нему те же входные чие от первого блока, второй блок моделирует
сигналы от генераторов стимулов не только функцию, но и временные задержки
DSTM1...DSTM3. Мы уже знаем, что если про- компонента.
водник подведен к левой стороне блока, со- Мы сделали для блока HB2 одну схему заме-
Рис. 6.2. Диалоговая панель для установки здаются входные порты, а если к правой — щения. Однако пакет DesignLab позволяет лю-
DSL-описания выходные. Заданные умолчанием имена кон- бому блоку назначить несколько различных
тактов P1…P4 заменим на D0, D1, A и Q. Вы- схем замещения и выполнять моделирование
Нажав кнопку OK, мы увидим окно тексто- ходную цепь назовем Q_SCH1 и подключим в поисках наилучшего варианта. Можно даже
вого редактора Text Editor, встроенного в па- к ней маркер (рис. 6.4). ассоциировать с одним блоком описания раз-
кет DesignLab 8. В нем будет размещен авто- ных видов — функциональное (DSL-описа-
матически созданный шаблон будущего DSL- ние) и структурное (схему замещения).
описания.
Шаблон содержит структуру описания бло-
ка с указанием его входных и выходных пор-
тов, а также пустое тело процедуры. Сюда-то
мы и должны вписать выполняемую блоком
функцию. Понятно, что функциональное
описание должно быть выполнено в терми-
нах языка DSL (рис. 6.3):
Q =/A×D0+A×D1. Рис. 6.6. Блок HB2 (выход Q_SCH1) имитирует
В языке DSL логическая операция инверсии не только функцию, но и задержки
кодируется знаком «/». Рис. 6.4. В схему добавлен блок HB2,
для которого будет создана схема замещения Подсоединение к блоку конкретной схемы
замещения выполняется командой Edit >
Создадим схему замещения блока HB2. Для Views... Активизировав ее, если был выделен
этого следует понизить уровень его иерархии блок HB2, мы увидим диалоговую панель
(команда Navigate > Push), присвоить имя бу- Block HB2 (рис. 6.7).
дущей подсхеме, например HB2_1_mux2, и
после того как редактор выполнит эту коман-
ду, показав входные и выходные порты, при-
ступить к построению его схемы замещения.
Конечно, если вы выполнили урок 1, то в
файле mux2.sch уже есть готовая схема муль-
типлексора и ее можно просто скопировать.
Рис. 6.3. Текст DSL-модели мультиплексора Однако дополнительная тренировка не повре-
дит, и вы можете заодно проверить степень
Закончив программирование блока, сохра- усвоения первого урока — если схема будет
ним полученный файл HB1_mux2.dsl и закро- готова через 5 минут, значит, все в порядке. Рис. 6.7. Подсоединение к блоку HB2 конкретной
ем окно текстового редактора. Произойдет воз- Разместив элементы 74AC04 (НЕ), 74AC08 схемы замещения
врат на верхний уровень иерархии. Нам оста- (2И) и 74AC32 (2ИЛИ) и соединив их провод-
лось верифицировать свой проект. С этой никами, следует подключить к внешним Так как с блоком HB2 связана только одна
целью подключим к построенному блоку гене- входным и выходным цепям соответствую- подсхема, то в левом поле View Name мы уви-
раторы входных воздействий DSTM1...DSTM3, щие порты. Для этого требуется выделить дим слово DEFAULT, а в правом — имя файла
присвоим проводникам имена (D0, D1, A, подключаемый порт и отбуксировать его к с расширением SCH, в котором хранится схе-
Q_DSL) и установим на них маркеры. нужному проводнику, контролируя образо- ма замещения этого блока (в примере — это
Не забудьте подключить к проекту файл вание электрического соединения (в точке файл HB2_1_mux2.sch). Она подключена к
внешних воздействий test1_mux2.stl. Кроме подключения появляется крестик и рядом с данному блоку по умолчанию.
того, при тестировании к внешнему выходу ним предупреждающий восклицательный Мы хотим создать для этого же блока еще
блока надо подсоединить какой-нибудь эле- знак). Главное — не перепутать порты места- одну схему замещения. С этой целью в поле
мент, например инвертор 74LS04, иначе пла- ми (рис. 6.5). View Name дадим ей имя schema_2, а в поле
Êîìïîíåíòû è òåõíîëîãèè, ¹ 7’2001 Ñîôò
Schematic or DSL File Name укажем имя фай- Запустим редактор Schematics и скопируем низит уровень иерархии, превратив блок в
ла, например, HB2_2_mux2.sch, где она бу- (загрузим) любимую, хотя и изрядно надоев- подсхему. Впрочем, подсхемы еще нет — на
дет храниться. Нажмем кнопку Save View, шую нам схему мультиплексора из файла экране видны лишь интерфейсные контакты
закроем диалоговую панель Block HB2 и mux2.sch. Сохраним ее в файле test2_mux2.sch. (порты) D0, D1, A и Q. Понизить иерархию
дважды щелкнем на блоке HB2. На экране А теперь попробуем «спрятать» схему можно и другими приемами, например, дваж-
монитора появится новая диалоговая панель мультиплексора (без внешних генераторов ды щелкнув на нужном блоке или нажав кла-
Select View со списком подключенных к дан- DSTM1...DSTM3) в черный ящик (блок). В ме- вишу F2 (клавиша F3 или команда Navigate >
ному блоку подсхем. Выделим строку стах, где контуры будущего блока должны пе- Pop выполняет обратную операцию — повы-
schema_2=HB2_2_mux2.sch и нажмем OK. Ре- ресекать проводники, поставим маркеры и шает иерархию на один уровень).
дактор понизит уровень иерархии и загрузит выполним команду Draw > Block. Первона- Командой Edit > Paste вставим ранее выре-
файл HB2_2_mux2.sch, в котором нам пред- чальные размеры блока никак не соответству- занную подсхему и подключим к ее входам и
стоит создать второй вариант реализации ют «вырезаемой» подсхеме, поэтому для на- выходу соответствующие порты. Для этого
мультиплексора. Нарисуем его функциональ- чала захватим блоком только верхний левый требуется выделить подключаемый порт и от-
ную схему на элементах 2И-НЕ типа 74AC00 маркер (или несколько соседних с ним). буксировать его к нужному проводнику.
и подключим расположенные здесь же порты. Щелкнем левой кнопкой мыши, чтобы за- Сохраним созданную подсхему (файл
Чтобы отличить созданную схему от преды- фиксировать блок на схеме, и нажмем клави- HB1_mux2.sch) и вернемся на верхний уро-
дущей, цепь на выходе элемента U1 назовем шу Esc. Зацепим мышью за правый нижний вень иерархии. Выполним контрольное моде-
not_A и подключим к ней маркер (впрочем, узелок и отбуксируем его так, чтобы внутри лирование, чтобы убедиться, что в проделан-
они отличаются и величинами задержек). Со- блока оказалась вся подсхема. В точках распо- ной работе нет ошибок.
храним новую схему замещения (рис. 6.8) и ложения маркеров (там, где проводники вхо- Моделирование схем на низком уровне (в на-
вернемся на верхний уровень иерархии. дят в блок или выходят из него) редактор ав- ших примерах — на вентильном) требует боль-
томатически поставит контакты (рис. 6.9). За- ших затрат времени и ресурсов ЭВМ, а для
данные по умолчанию имена P1...P4 лучше сложных проектов становится вообще невоз-
сразу изменить, назвав их именами соответ- можным. Выручает высокоуровневое модели-
ствующих цепей D0, D1, A и Q. рование, при котором уже разработанная прин-
ципиальная схема какого-либо фрагмента
(структурная модель) заменяется черным ящи-
ком, имеющим функциональное описание (по-
веденческая модель). Таким образом, выполня-
ется переход на одну ступеньку вверх по иерар-
хии проекта (восходящее проектирование).
Рис. 6.8. Второй вариант схемы замещения Однако, в отличие от проектирования «свер-
блока HB2 хувниз», когда о разрабатываемом объекте (или
его фрагменте) мы ничего не знали, кроме вы-
Если теперь дважды щелкнуть на блоке полняемой функции, теперь, при наличии его
HB2, то откроется панель Select View и для ре- принципиальной схемы, мы знаем, по крайней
дактирования на выбор будет предложено два Рис. 6.9. Выделенная схема должна быть «спрята- мере, его временные параметры. Поэтому вы-
варианта реализации мультиплексора. на» в блок HB1 сокоуровневое моделирование желательно вы-
Чтобы указать, какую из двух схем следует полнять с учетом временных задержек и кон-
использовать в текущем сеансе моделирова- Развернем, используя горячие клавиши тролем других временных соотношений в схе-
ния, необходимо выполнить команду Edit > Ctrl+R, маркеры таким образом, чтобы они ме (времена предустановки и удержания,
Views..., выбрать строку с нужной схемой и находились за пределами блока, и выделим минимальные длительности сигналов, соблю-
задать ей атрибут DEFAULT. Понятно, что курсором мыши «вырезаемую» подсхему, не дение правил синхронизации и т. п.). Язык
ключевое слово DEFAULT может встречаться выходя за габариты блока. Командой Edit > описания DSL, используемый в ходе нисходя-
только в одной строке списка схем замещения Cut удалим ее из блока. Размеры пустого бло- щего проектирования, таких возможностей не
данного блока. ка излишне велики, их следует уменьшить до обеспечивал. Однако в пакете DesignLab 8 для
При проектировании «снизувверх» сначала желаемой величины. Закончив с внешним этих целей существуют другие инструменталь-
создаются принципиальные схемы отдельных представлением блока (рис. 6.10), позаботим- ные средства. Они используются при построе-
элементов или узлов, которые на более высо- ся о его «начинке». нии поведенческих макромоделей сложных ци-
ком уровне иерархии объединяются в устрой- фровых компонентов и будут рассмотрены по-
ства. По мере проработки проекта принципи- зднее. Укажем лишь, что первое из них —
альная схема разрастается и может достичь LOGICEXP — применяется для описания
невероятных размеров. Возникает уже изве- функции объекта, второе — PINDLY — для за-
стная нам проблема чрезмерной сложности. дания задержек распространения сигналов, а
Ее можно избежать с помощью тех же блоков. третье — CONSTRAINT — контролирует вре-
Для этого нужно выделить в проектируемой менные соотношения в схеме.
схеме некоторую ее часть (подсхему) и «спря-
тать» в черный ящик, который в пакете
Èåðàðõè÷åñêèå ñèìâîëû
DesignLab 8 называется блоком. В блок реко-
мендуется упаковывать регулярные, часто по- Рассмотренные блоки имеют один весьма
вторяющиеся, функционально законченные серьезный недостаток — их графическое изо-
фрагменты схемы. бражение неудобно редактировать. Конечно,
Блок сохраняет все внешние связи с осталь- Рис.6.10. Схема мультиплексора «спрятана» в можно изменить размеры и число контактов
ной схемой и при моделировании «незаметно» блок HB1 блока, но на этом наши возможности закан-
для пользователя раскрывается до нижнего чиваются. Вы можете нанести на блок допол-
уровня иерархии. Однако для проектировщи- Выделим блок и активизируем команду нительные графические примитивы и текст,
ка укрупнение схемы облегчает ее восприятие Navigate > Push. Появится диалоговая панель однако полученный рисунок не будет воспри-
и снимает психологический фактор сложнос- Set Up Block. В поле Filename, расположенном ниматься как единое целое. Кроме того, блок
ти. С точки зрения нагрузки на ЭВМ такой на этой панели, введем имя подсхемы, напри- нельзя поместить в библиотеку и в дальней-
прием никаких преимуществ не дает. мер HB1_mux2, и нажмем OK. Редактор по- шем использовать его как готовый объект.

118 www.finestreet.ru
Êîìïîíåíòû è òåõíîëîãèè, ¹ 7’2001 Ñîôò
Чтобы такая возможность появилась, необ- фическое изображение. При этом предвари- готовая схема замещения этого компонента, и
ходимо преобразовать блок в иерархический тельно запрашивается имя символа (назовем выполним команду Tools > Create Subcircuit.
символ. Это делается с помощью команды его HS_dmux2) и библиотека, где будет хра- В статусной строке редактор сообщит, что
Edit > Convert Block. ниться его внешнее описание. он создал список цепей макромодели (Netlist
Загрузим в графический редактор файл Изображение иерархического символа за- complete) и поместил его в файл dmux2.sub.
test1_mux2.sch и сохраним его под именем носится в названную библиотеку (например, Найдем этот файл и посмотрим его содержи-
test3_mux2.sch. Выделим конвертируемый блок в личную библиотеку my_lib.slb), а схема за- мое (рис. 6.13).
(например, HB1) и активизируем названную мещения символа оказывается в файле с рас-
команду. Мы увидим диалоговую панель, ко- ширением SCH. В нашем примере — это
торая запрашивает имя будущего символа. Вве- файл dmux2.sch.
дем его название, например HS1_mux2, и на- Автоматически созданное изображение сим-
жмем кнопку OK. Последует запрос, в какую вола, как правило, требует коррекции. Вы легко
библиотеку поместить новый символ. Можно убедитесь в этом, если загрузите его в графиче-
выбрать уже существующую библиотеку, на- ский редактор (рис. 6.12, справа). Но в
пример my_lib.slb, или назвать новую. DesignLab она выполняется так же просто, как
Теперь полученный иерархический символ и для обычного символа (рис. 6.12, слева).
можно редактировать, как и любые другие
простые символы. Выделим созданный сим- Рис. 6.13. Макромодель демультиплексора
вол и переведем редактор в режим Symbol DMUX2, представленная списком элементов
Editor (команда Edit > Symbol). Пронумеруем
подряд его контакты и дополним графику так, По умолчанию файл должен оказаться в
чтобы она удовлетворяла требованиям ГОСТ. папке Projects. Обратите внимание на структу-
Введя команду Navigate > Push…, мы можем ру макромодели. Она начинается с директивы
раскрыть содержимое иерархического симво- .SUBCKT и заканчивается директивой .ENDS.
ла и внести изменения в его схему замещения Между этими директивами помещен список
или функциональное описание. Другими сло- соединений демультиплексора. Вы без труда
вами, конвертировав блок в иерархический найдете элементы, на которых он построен
символ, мы сохранили все свойства, присущие (74LS04 и 74AC08), а также связи между ними.
блоку, и дополнительно получили возмож- Итак, внутреннее описание компонента
ность хранить его в библиотеке и редактиро- Рис. 6.12. Автоматически созданное изображение (в виде макромодели) готово. Теперь предсто-
вать его графику. символа DMUX2 (справа) и его отредактированная ит нарисовать его внешнее описание — гра-
Создавая иерархический символ мульти- версия в соответствии с ГОСТ (слева) фическое изображение. В принципе оно уже
плексора, мы действовали в следующей по- есть, и его можно позаимствовать от иерархи-
следовательности: блок-схема замещения- ческого символа HS_dmux2, который нахо-
иерархический символ, то есть по принципу Ìàêðîìîäåëè дится в библиотеке my_lib.slb. Однако это не
«сверхувниз». Классический способ построе- Макромодели экономичнее блоков и иерар- совсем простая работа, и мы отложим ее на
ния иерархических символов начинается хических символов, потому что им не требу- некоторое время.
«снизу» — с его схемы замещения. Это само- ется промежуточная трансляция графическо- Кроме того, дополнительная тренировка ни-
стоятельная процедура, и мы познакомимся с го описания в текстовое (в список цепей). когда не повредит, а заодно вы можете прове-
нею на другом примере. В результате уменьшаются вычислительные рить степень усвоения урока 5. Считайте, что
Предположим, требуется создать иерархи- затраты на моделирование. вы освоили технологию проектирования сим-
ческий символ демультиплексора на два вхо- Существует два способа построения макро- волов, если на работу у вас уйдет не более 10
да. Откроем новый файл и разместим в окне моделей. Первый заключается в том, что для минут. Не забудьте, определяя атрибуты, сде-
редактора требуемые компоненты: 7408 (2И) компонента сначала создается схема замещения, лать ссылку на ранее созданную макромодель:
и 74LS04 (НЕ). Соединим их проводниками в которая затем преобразуется в список соедине- MODEL=dmux2
соответствии со структурой демультиплексо- ний. Другими словами, графическое описание Сохраните нарисованный символ под име-
ра и подведем к внешним входным и выход- транслируется в текстовое. Второй способ пред- нем macro_dmux2 в библиотеке my_lib.slb.
ным цепям интерфейсные порты IF_IN и ставляет собой прямое функциональное описа- Спроектированную макромодель и символ
IF_OUT, которые находятся в библиотеке ние работы компонента и его временных задер- необходимо протестировать. С этой целью
port.slb. Входным портам присвоим имена D жек с помощью специальных примитивов создадим новый файл test2_dmux2.sch. Най-
и A, а выходным — Q0 и Q1. Полученную LOGICEXP, PINDLY и CONSTRAINT. дем в библиотеке my_lib.slb только что со-
схему замещения (рис. 6.11) сохраним в фай- Рассмотрим первый способ построения ма- зданный символ macro_dmux2 и подведем к
ле dmux2.sch. кромоделей. Схема замещения компонента со- нему сигналы D и A от внешних генераторов
здается точно так же, как и для иерархического стимулов (рис. 6.14).
символа (рис. 6.11). Затем выполняется коман-
да Tools > Create Subcircuit, по которой осуще-
ствляется преобразование графического описа-
ния подсхемы в текстовое. Оно заносится в
файл с расширением SUB и впоследствии мо-
жет быть скопировано в любую библиотеку ма-
кромоделей (в файлы с расширением LIB).
Если отсутствует графическое изображение
компонента, для которого строится макромо-
дель, то его надо создать обычным образом
Рис. 6.11. Схема замещения демультиплексора (урок 5). Затем с помощью атрибута MODEL
DMUX2 из созданного символа следует сделать ссылку
на соответствующую макромодель. Рис. 6.14. Тестирование макромодели
После этого по команде File > Symbolize ав- Построим первым способом макромодель демультиплексора и проверка правильности
томатически создается внешнее описание демультиплексора dmux2. Откроем файл созданного символа macro_dmux2
иерархического символа — его условное гра- dmux2.sch (рис. 6.11), в котором хранится уже
Êîìïîíåíòû è òåõíîëîãèè, ¹ 7’2001 Ñîôò
Сформируем для них временные диаграм- возможностями. Познакомимся с ними на + <входной_узел_1>...<входной_узел_m>
мы и сохраним в файле test2_dmux2.stl. Ко- примере мультиплексора на два входа. + <выходной_узел_1>...<выходной_узел_n>
мандой Analysis > Library and Include Files... Основная идея метода достаточно проста — + <имя_модели_динамики> < имя_моде-
подключим его к исследуемой схеме и то же представить модель цифрового устройства в ли_вход/выход>
самое сделаем с файлом dmux2.sub. Теперь виде двух частей (рис. 6.16). Первая (логиче- + [IO_LEVEL=<уровень_модели_интерфей-
схему можно промоделировать, чтобы убе- ский блок) должна моделировать логику са>]
диться, что мы не наделали ошибок. Если все функционирования с нулевыми задержками, + [MNTYMXDLY=<выбор_значения_задерж-
правильно (рис. 6.15), то построенную макро- а вторая (блок задержки) — имитировать ре- ки>]
модель демультиплексора из файла альные задержки. + LOGIC:
dmux2.sub следует перенести в библиотеку Собственно, ничего нового в этой идее вро- + <логическое_назначение>
макромоделей my_lib.lib и отключить ненуж- де бы и нет. Все модели в пакете DesignLab 8 Логическое назначение может включать ло-
ный больше файл dmux2.sub. организованы подобным образом, и для ото- гические выражения для выходных узлов и
бражения временных задержек в каждой мо- промежуточных переменных в следующей
дели компонента есть ссылка на ее динамиче- форме:
скую модель, в которой в табличной форме <имя_выходного_узла> = {<логическое вы-
перечислены присущие данному компоненту ражение>}
задержки. <промежуточная_переменная> = {<логичес-
Разница на первый взгляд в малом — в ди- кое выражение>}
намических моделях задержки представлены Каждый упомянутый в спецификации вы-
Рис. 6.15. Результаты моделирования конкретными числами, тогда как в блоках за- ходной узел должен иметь только одно логи-
демультиплексора DMUX2 держки они могут быть описаны функциями. ческое выражение. Назначенные один раз
Благодаря этому в одном блоке задержки промежуточные переменные могут использо-
Если вы все же решили не рисовать новый можно смоделировать временные соотноше- ваться в последующих выражениях много-
символ, а скопировать его графическое изоб- ния и выходные характеристики целой интег- кратно.
ражение с уже готового иерархического сим- ральной схемы, в том числе схемы с триста- Посмотрим, как выглядит этот примитив
вола, то возникнет небольшая проблема. Дело бильными вентилями. для мультиплексора MUX2 (рис. 6.17).
в том, что с иерархическим символом ассоци- Логико-временная модель оформляется так Здесь показана наиболее простая макромо-
ирована одна или несколько схем замещения, же, как и любая другая макромодель. Отличие дель, которая имитирует только функцию
которые за ненадобностью нужно отключить. заключается в ее содержимом. Обычная мак- мультиплексора:
Эта работа выполняется в режиме Symbol ромодель представляет собой список соедине- Q = {~A&D0 | A&D1}.
Editor командой Edit > Set Schematic... Когда ний, то есть описание компонента на более Отметим, что в описании присутствует ди-
появится диалоговая панель с тем же назва- низком уровне, где он представлен в виде намическая модель D_MUX2, а это означает,
нием, из нижнего окна удаляют все подклю- структуры (функциональной или принципи- что есть принципиальная возможность моде-
ченные к символу схемы замещения. Кроме альной схемы). лировать задержки распространения сигналов
того, необходимо заменить шаблон атрибута Логико-временная модель не имеет списка в компоненте. Правда, возможности здесь не-
REFDES с HS (для иерархических символов) соединений, а содержит два (LOGICEXP и велики и ограничены уровнем простых логи-
на DD (для цифровых компонентов). PINDLY) или даже три (LOGICEXP, PINDLY ческих элементов (встроенная модель задерж-
и CONSTRAINT) примитива. Можно ограни- ки UGATE). Пустые круглые скобки модели
читься и одним примитивом LOGICEXP, но UGATE означают нулевые задержки.
Âûñîêîóðîâíåâîå ìîäåëèðîâàíèå
тогда вы не сможете имитировать и прове- Создадим компонент MUX2, поддерживае-
Все рассмотренные ранее приемы иерархи- рять временные соотношения. мый макромоделью, показанной на рис. 6.17.
ческого проектирования, кроме, пожалуй, DSL- Примитив LOGICEXP (от слов Logic Сначала откроем текстовый редактор, загру-
блоков, преследовали одну главную цель — Expression) описывает логику работы компо- зим в него библиотечный файл my_lib.lib и
контролировать сложность проекта на прием- нента. Он имеет следующий формат: допишем туда текст макромодели mux2_log,
лемом для человека уровне. Однако и для ЭВМ Uxxx LOGICEXP (<число входов>, <число приведенный на рис. 6.17.
когда-то наступает предел дозволенной слож- выходов>) Затем нарисуем графическое изображение
ности. Ее весьма внушительные ресурсы рано + <питание> <земля> мультиплексора, из него сделаем ссылку на
или поздно могут быть исчерпаны. Именно эти
причины не позволяют реализовать сверхболь-
шие проекты. Поэтому в современных САПР
должны быть инструменты, позволяющие рас-
ширять возможности не только человека, но и
ЭВМ.
Одним из таких инструментов является вы-
сокоуровневое моделирование, а точнее вы-
сокоуровневое логико-временное моделиро-
вание. В этих словах заложена основная его
идея: не раскрывая структуру объекта, смоде-
лировать его работу, по возможности так же
точно, как если бы он моделировался на низ-
ком уровне (например, на уровне вентилей
или даже компонентов).
Другими словами, такой инструмент дол-
жен имитировать не только функцию, но и
временные соотношения в схеме, а при необ-
ходимости и нагрузочные характеристики.
Эффективность высокоуровневого моделиро-
вания на 1…3 десятичных порядка выше низ- Рис. 6.16. Структура функционального описания цифровых устройств на примере мультиплексора
коуровневого моделирования, а это говорит на два входа mux2_log
о многом. Пакет DesignLab 8 обладает такими

120 www.finestreet.ru
Êîìïîíåíòû è òåõíîëîãèè, ¹ 7’2001 Ñîôò
блоке задержки создаются пути, проходя по ко-
* Функциональная модель мультиплексора MUX2 с нулевыми задержками торым сигнал и получает необходимое запаз-
.SUBCKT mux2_log D0 D1 A Q ; директива начала макромодели дывание. Оно может быть определено как
U_MUX2_LOG LOGICEXP (3, 1) ; имя примитива должно начинаться с буквы «U» функция от внутренних узлов этого блока.
+ DPWR DGND ; контакты питания и земли В примитив PINDLY нельзя заводить сиг-
+ D0 D1 A ; входы в логический блок LOGICEXP налы непосредственно с внешних входов, по-
+Q ; выход из логического блока LOGICEXP этому их приходится транслировать через ло-
+ D_MUX2 ; ссылка на модель динамики гический блок даже в том случае, если они не
+ IO_STD ; ссылка на стандартную модель вход/выход претерпевают никаких логических преобра-
+ LOGIC: ; логическая секция зований.
+ Q = {~A&D0 | A&D1} ; логическое выражение для выходного узла Q Запаздывание выходного сигнала Q зависит
.ENDS mux2_log ; директива конца макромодели от того, с какого входа поступает конкретное
*S* ; строка комментария начинается с символа «*» событие (переключение). Путь от входов D0
.MODEL D_MUX2 UGATE () ; модель динамики логического примитива и D1 включает два вентиля, а от входа A —
три, следовательно, от него задержка должна
Рис. 6.17. Функциональная модель мультиплексора без учета задержек быть больше.
Изменения состояний на входах контроли-
поведенческую модель mux2_log и сохраним Как видно из рис. 6.18, с добавлением ново- руется функциями:
его образ в библиотеке my_lib.slb. Протести- го примитива пришлось внести изменения и CHANGED (<узел>, <интервал_времени>)
руем полученную макромодель, чтобы убе- в ранее созданный логический блок LOGIC- CHANGED_LH (<узел>, <интервал_времени>)
диться, что она правильно выполняет свою EXP. Теперь он имеет не один, а целых четы- CHANGED_HL (<узел>, <интервал_времени>).
функцию и имеет нулевые задержки. С этой ре выхода. Они используются в качестве вхо- Функция CHANGED принимает истинное
целью создадим файл test_mux2_log.sch и дов в блок задержки (рис. 6.16). На выходы значение TRUE, если указанный в специфи-
проведем требуемые модельные экспери- D0_INT, D1_INT и A_INT (INT от слова inter- кации узел изменял свое состояние на
менты. nal — внутренний) осуществляется прямая указанном интервале времени. Функция
Вновь вернемся к макромодели mux2_log, трансляция входных сигналов D0, D1 и A. CHANGED_LH контролирует фронт, а функ-
скопируем ее содержимое и изменим имя на Они не претерпевают никаких логических ция CHANGED_HL — спад сигнала в соответ-
mux2_log_dly. Мы собираемся отразить в на- преобразований (Buffering) и будут исполь- ствующем узле. Если параметр <интервал
звании тот факт, что теперь модель должна зованы в блоке задержки PINDLY в качестве времени> задать равным нулю, то будут вы-
имитировать задержки. Добавим в нее при- внутренних (дополнительных) узлов. являться переключения в текущий момент
митив PINDLY, который воспроизводит эти Сигнал Q_INT является выходом из LOGIC- модельного времени.
задержки (рис. 6.18). EXP и входом в PINDLY. Для таких сигналов в Функции TRN_LH и TRN_HL следят за из-
менением выходных узлов, для которых вы-
* Функциональная макромодель мультиплексора MUX2 с учетом задержек числяются задержки. Вместо уровней L (низ-
.SUBCKT mux2_log_dly D0 D1 A Q ; новое имя макромодели мультиплексора кий уровень) и H (высокий уровень) можно
U_MUX2_LOG_DLY LOGICEXP (3, 4) ; теперь логический блок имеет четыре выхода использовать также Z (высокоомный выход)
+ DPWR DGND и $ (любой уровень). Эти функции не имеют
+ D0 D1 A аргументов и просто фиксируют изменения
+ D0_INT D1_INT A_INT Q_INT ; имена выходных узлов логического блока состояний выходных узлов в текущий мо-
+ D_MUX2 IO_STD ; они являются внутренними сигналами модели мент времени.
+ LOGIC: В секции PINDLY могут быть использова-
+ D0_INT = {D0} ; прямая трансляция входных данных ны выражения для задержек, включающие
+ D1_INT = {D1} ; на выход блока ( рис. 6.16) оператор выбора CASE. Он проверяет услов-
+ A_INT = {A} ные выражения в порядке их следования, по-
+ Q_INT={~A&D0 | A&D1} ; определение выходного сигнала без учета задержки ка не обнаружит первое истинное. После это-
* го задержкам присваиваются значения из со-
U_MUX2_DLY PINDLY (1, 0, 3) ; начало примитива PINDLY ответствующей выполненному условию
+ DPWR DGND ; строки.
+ Q_INT ; примитив имеет один путь (вход), для которого Оператор DELAY (<min>, <typ>, <max>)
+ вычисляется задержка определяет соответственно минимальную, ти-
+ D0_INT, D1_INT, A_INT ; примитив имеет три внутренних узла, от которых пичную (задается по умолчанию) и макси-
+ ; зависит эта задержка мальную задержки. Для спецификации неиз-
+Q ; имя выходного узла примитива PINDLY, вестной величины используется значение «-1».
+ ; для которого вычисляется задержка В нашем примере типичная задержка, свя-
+ IO_STD ; стандартная модель вход/выход занная с переключением любого из входов
+ BOOLEAN: ; секция определяет промежуточные переменные, D0 или D1, равна 25 нс, а при изменении вхо-
+ ; которые используются для вычисления задержек да A — 50 нс. Минимальные задержки не
+ ANY_CH_D={CHANGED (D0_INT, 0) | CHANGED (D1_INT, 0)} специфицированы. Если ни одно условие не
+ PINDLY: ; будет истинным, то выполняется последний
+Q={ оператор DELAY, не имеющий вообще ника-
+ CASE ; оператор вычисляет конкретную задержку кого условия.
+ ( ANY_CH_D & (TRN_LH | TRN_HL, DELAY (-1, 25ns, 25ns), Чтобы увидеть воочию потрясающие ре-
+ CHANGED (A_INT, 0) & (TRN_HL | TRN_LH), DELAY (-1, 50ns, 50ns), зультаты работы примитива PINDLY, загру-
+ DELAY (-1, 10ns, 20ns) зим в редактор Schematics файл
+) test_mux2_log.sch и выделим компонент
+ } mux2_log. Переведем редактор в режим ре-
.ENDS mux2_log_dly дактирования символов и командой Part >
Copy... скопируем символ mux2_log, сменив
Рис. 6.18. Поведенческая модель мультиплексора с учетом задержки его имя на mux2_log_dly. Активизируем ко-
манду Part > Attributes... и изменим значе-
Êîìïîíåíòû è òåõíîëîãèè, ¹ 7’2001 Ñîôò
ния двух атрибутов: PART = mux2_log_dly и ла D0 и параметры импульсов D1, убедимся,
MODEL = mux2_log_dly. что их контроль выполняется безупречно.
В результате проделанной работы в библи- Кроме рассмотренных параметров, данный
отеке my_lib.slb появится еще один символ примитив позволяет также контролировать
мультиплексора, который поддерживается время установки SETUPTIME, время удержа-
макромоделью mux2_log_dly, учитывающей ния HOLDTIME и время восстановления RE-
временные задержки. Разместим его рядом с LEASETIME.
уже существующим символом mux2_log и по- Более подробно о функциональном описа-
дадим на него те же самые сигналы (рис. 6.19). Рис. 6.20. Результаты тестирования нии цифровых устройств с помощью рассмо-
поведенческих моделей мультиплексора MUX2 тренных примитивов можно прочитать в [1].

U_MUX2_CON CONSTRAINT (2) ; примитив контролирует два входа


+ DPWR DGND
+ D0 D1 ; имена контролируемых входов D0 и D1
+ IO_STD ; стандартная модель вход/выход
+ FREQ: ;
+ NODE = D0
+ MAXFREQ = 10MEG ; максимальная частота равна 10 мегагерц
+ WIDTH:
+ NODE = D1
Рис. 6.19. Схема для тестирования макромоделей + MIN_LO = 50NS ; минимальная пауза между импульсами равна 50нс
мультиплексора MUX2 + MIN_HI = 100NS ; минимальная длительность импульсов равна 100нс

Промоделировав оба варианта, следует из- Рис. 6.21. Содержимое примитива CONSTRAINT для мультиплексора MUX2
мерить все задержки и убедиться, что они со-
ответствуют заданным в примитиве PINDLY ключения сигнала на входе D0 и минималь-
(рис. 20). ную длительность импульсов на входе D1.
Ëèòåðàòóðà
Примитив CONSTRAINT проверяет соблю- Добавим текст примитива CONSTRAINT,
дение временных параметров в моделируемой приведенный на рис. 6.21, в макромодель 1. Разевиг В. Д. Система схемотехнического
схеме. mux2_log_dly (она находится в библиотеке моделирования и проектирования печатных
На рис. 6.21 показано, каким образом он my_lib.lib) и повторим только что проведен- плат Design Center (PSpice). — М.: СК Пресс,
контролирует максимальную частоту пере- ные эксперименты. Варьируя частоту сигна- 1996. — С. 272.

122 www.finestreet.ru