Разработка цифрового узла, создание его структурных и поведенческих моделей в пакетах DesignLab 8, OrCAD 9.1, ActiveHDL 6.2, страница 7

* K555KP17  DUAL 1-OF-4 DATA SELECTORS/MULTIPLEXERS WITH 3-STATE OUTPUTS

*

*

.SUBCKT K555KP17M G1BAR_I G2BAR_I A_I B_I 1C0_I 1C1_I 1C2_I  1C3_I

+ 2C0_I 2C1_I 2C2_I 2C3_IY1_OY2_O;имя модели мультиплексора К555КП17,

;перечисление имен входов

+ OPTIONAL: DPWR=$G_DPWRDGND=$G_DGND;контакты питания и земли

+ PARAMS: MNTYMXDLY=0 IO_LEVEL=0

*

UKP17MLOGLOGICEXP(12,14) DPWRDGND;имя примитива, 12 – число входов в логический блок,

; 14 – число выходов из логического блока, контакты питания и земли

+ G1BAR_I G2BAR_I A_I B_I 1C0_I 1C1_I 1C2_I 1C3_I 2C0_I 2C1_I 2C2_I 2C3_I ;имена ;входныхузлов в логический блок

+ G1BARG2BARAB 1C0 1C1 1C2  1C3 2C0 2C1 2C2 2C3 Y1 Y2 ;имена выходных узлов

;логического блока, они являются внутренними сигналами модели

+ D0_GATEIO_LSIO_LEVEL={IO_LEVEL} ;ссылка на модель динамики, ссылка на модель

;вход/выход

+ LOGIC: ;логическая секция

+   G1BAR = { G1BAR_I }       ;прямая трансляция входных данных на выход блока

+   G2BAR = { G2BAR_I }

+   A = { A_I }

+   B = { B_I }

+   1C0 = { 1C0_I }

+   1C1 = { 1C1_I }

+   1C2 = { 1C2_I }

+   1C3 = { 1C3_I }

+   2C0 = { 2C0_I }

+   2C1 = { 2C1_I }

+   2C2 = { 2C2_I }

+   2C3 = { 2C3_I }

+   G1 = { ~G1BAR }

+   G2 = { ~G2BAR }

+   ABAR = { ~A }

+   BBAR = { ~B }

+   I0 = { G1 & BBAR & ABAR & 1C0 } ;описаниеоперации мультиплексирования

+   I1 = { G1 & BBAR & A    & 1C1 } ;с помощью логических выражений

+   I2 = { G1 & B    & ABAR & 1C2 }

+   I3 = { G1 & B    & A    & 1C3 }

+   I4 = { G2 & BBAR & ABAR & 2C0 }

+   I5 = { G2 & BBAR & A    & 2C1 }

+   I6 = { G2 & B    & ABAR & 2C2 }

+   I7 = { G2 & B    & A    & 2C3 }

+   Y1 = { ~(I0 | I1 | I2 | I3) }

+   Y2 = { ~(I4 | I5 | I6 | I7) }

*

UKP17MDLY PINDLY (2,2,10) DPWR DGND ;Началоблока задержки, 2 – числопутей, 2 –

;число входов разрешения, 10 – число внутренних узлов

+ Y1 Y2 ;примитив имеет 2 пути, для которых вычисляется задержка

+ G1BARG2BAR;входы разрешения работы узла

+ AB 1C0 1C1 1C2 1C3 2C0 2C1 2C2 2C3 ;внутренние узлы примитива

+ Y1_OY2_O;имя выходных узлов, для которых вычисляется задержка

+ IO_LS;модель вход/выход

+ MNTYMXDLY = {MNTYMXDLY} IO_LEVEL = {IO_LEVEL}

+ BOOLEAN: ;секция определяет промежуточные переменные, использующиеся для

;вычисления задержек

+   DATA1 = { (CHANGED(1C0,0) | CHANGED(1C1,0) | CHANGED(1C2,0) |

+     CHANGED(1C3,0)) } ;истина, если было изменение состояния на каком-либо из

;информационных входов первого «подмультиплексора»

+   DATA2 = { (CHANGED(2C0,0) | CHANGED(2C1,0) | CHANGED(2C2,0) |

+     CHANGED(2C3,0)) };истина, если было изменение состояния на каком-либо из

;информационных входов второго «подмультиплексора»

+   SELECT = { CHANGED(A,0) | CHANGED(B,0) } ;истина, если изменилось значение

;сигнала на каком-либо адресном входе

+ TRISTATE: ;три состояния: L, H, Z.

+   ENABLELOG1BAR;Работа разрешена при низком уровне сигнала на входе

;разрешения

+   Y1_O = { ;Выход первого «подмультиплексора»

+     CASE( ;оператор выбора, проверяет все выражения, пока не обнаружит первое

;истинное, после этого задержкам присваиваются значения из соответствующей

; выполненному условию строки

+       TRN_ZH, DELAY(-1,11NS,23NS), ;Задержка переключения выхода из

;высокоомного состояния в высокий уровень сигнала. Функция TRN_... следит за изменением ;выходных узлов, для которых вычисляются задержки. Эта функция не имеет аргументов и ;просто фиксирует изменение состояния выходного узла в текущий момент.

+       TRN_ZL, DELAY(-1,15NS,23NS), ;Задержка переключения выхода из

;высокоомного состояния в низкий уровень сигнала

+       TRN_HZ, DELAY(-1,27NS,41NS), ;Задержка переключения выхода из

;высокого уровня сигнала в состояние «Отключено»

+       TRN_LZ, DELAY(-1,12NS,27NS), ;Задержка переключения выхода из

;низкого уровня сигнала в состояние «Отключено»

+       SELECT & TRN_LH, DELAY(-1,20NS,45NS), ;Задержка переключения выхода из

;низкого уровня в высокий при изменении сигнала на адресном входе

+       SELECT & TRN_HL, DELAY(-1,21NS,32NS), ;Задержка переключения выхода из

;высокого уровня в низкий при изменении сигнала на адресном входе

+       DATA1 & TRN_LH, DELAY(-1,11NS,25NS), ;Задержка переключения выхода из

;низкого уровня высокий при изменении сигнала на информационном входе

+       DATA1 & TRN_HL, DELAY(-1,13NS,20NS), ;Задержка переключения выхода из

;высокого уровня в низкий при изменении сигнала на информационном входе

+       DELAY(-1,28NS,46NS) ;Задержка, если не сработало ни одно условие выше

;Оператор DELAY(<min>,<typ>,<max>) определяет соответственно минимальную,

;номинальную и максимальную задержки. Для определения неизвестной величины используется ;значение «-1».

+       )

+     }

+ TRISTATE:   ;То же самое, что для первого «подмультиплексора», см. выше!

+   ENABLE LO  G2BAR

+   Y2_O = {

+     CASE(

+       TRN_ZH, DELAY(-1,11NS,23NS),

+       TRN_ZL, DELAY(-1,15NS,23NS),

+       TRN_HZ, DELAY(-1,27NS,41NS),

+       TRN_LZ, DELAY(-1,12NS,27NS),

+       SELECT & TRN_LH, DELAY(-1,20NS,45NS),

+       SELECT & TRN_HL, DELAY(-1,21NS,32NS),

+       DATA2 & TRN_LH, DELAY(-1,11NS,25NS),

+       DATA2 & TRN_HL, DELAY(-1,13NS,20NS),

+       DELAY(-1,28NS,46NS)

+       )

+     }

*

.ENDS ;конец макромодели

Рис. 28.Функциональное описание проектируемого узла с помощью примитивов LOGICEXP, PINDLY.