Моделирование дискретных устройств в системе PCAD. Асинхронное троичное моделирование дискретных устройств, позволяющее проверять правильность функционирования устройств, страница 13

if(~s&~r){q="1"; q'="1";}

if(~s&r){q="1"; q'="0";}

Рис. 1.9                 if(s&~r){q="0"; q'="1";}

if(s&r && z=="\")

{if(j=="x"||k=="x"){q="x"; q'="x";}

if(x&~y){q="1"; q'="0";}

if(~x&y){q="0"; q'="1";}

if(x&y|(x=="\"&&y=="\"))

if(q){q="0"; q'="1";}

else{q="1"; q'="0";}}}

/* Задержки для j,k,c увеличены в два раза по сравнению с r и s !*/

Универсальный регистр

/* Универсальный pегистp с последовательными входами ds0,ds7, последовательными выходами q0,q7, выводами вход/выход 0 – 7 с третьим состоянием, управляемым сигналами eo1'

и eo2',

r',c – традиционные входы сброса и синхронизации,

s0,s1 – входы управления режимом,

q1 – q6 – внутренние узлы. */

/* Начальные значения сигналов на двунаправленных выводах 0–7 задать командой INIT */

Рис. 1.10               rg8()

input ds0,ds7,s0,s1,r',c,eo1',eo2';

                              output q0,q7;

inout 0,1,2,3,4,5,6,7;

local q1,q2,q3,q4,q5,q6;

/*неопределенное состояние*/

{if (r'=="x" || s0=="x" || s1=="x")

{q7="x"; q6="x"; q5="x"; q4="x"; q3="x"; q2="x"; q1="x"; q0="x";}

if (eo1'=="x" || eo2'=="x" || s0=="x" || s1=="x")

{ 0="x";1="x";2="x";3="x";4="x";5="x";6="x";7="x";}

/* сбpос */

if (r'=="0") {q7="0";q6="0";q5="0";q4="0";q3="0";q2="0";q1="0";q0="0";}

/* 3–e состояние */

if (eo1'=="1" || eo2'=="1")

{7="1"(5,4,"z","z"); 6="1"(5,4,"z","z"); 5="1"(5,4,"z","z");

4="1"(5,4,"z","z"); 3="1"(5,4,"z","z"); 2="1"(5,4,"z","z");

1="1"(5,4,"z","z"); 0="1"(5,4,"z","z");}

/* прочие действия */

if (r'=="1" && c=="/")

/* загpузка из шины */

{if (s0=="1" && s1=="1")

{q0=0; q1=1; q2=2; q3=3; q4=4; q5=5; q6=6; q7=7;}

/* сдвиг влево */

if (s0=="1" && s1=="0")

{q7=q6; q6=q5; q5=q4; q4=q3; q3=q2; q2=q1; q1=q0; q0=ds0;}

/* сдвиг вправо */

if (s0=="0" && s1=="1")

{q0=q1; q1=q2; q2=q3; q3=q4; q4=q5; q5=q6; q6=q7; q7=ds7;}

/* выдача содержимого регистра в шину */

if (eo1'=="0" && eo2'=="0" && (s0=="0" || s1=="0"))

{0=q0; 1=q1; 2=q2; 3=q3; 4=q4; 5=q5; 6=q6; 7=q7;}}}

Двоичный счетчик (рис. 1.11)

сt2()

input st, r; /* st – счетный вход, r – сброс,*/

output y1,y2,y3,y4; /* y1,y2,y3,y4 – выходы.*/

{if(r=="x"){y1="x";y2="x";y3="x";y4="x";}

if(r=="1"){y1="0";y2="0";y3="0";y4="0;}

if(r=="0" && st=="\")

{if(y1) {y1="0";

if(y2) {y2="0";

if(y3) {y3="0";

if(y4) y4="0";

else y4="1";}

else y3="1";}

else y2="1";}

else y1="1";}}

Десятичный РЕВЕРСИВНЫЙ счетчик (рис. 1.12)

ct10 ()

input st, r; v; /* st – счетный вход, r – сброс, v – управление счетом.*/

output y1,y2,y3,y4,t;

/* y1,y2,y3,y4 – выходы разрядов, t – групповой перенос.*/

{if(r=="x"||v=="x"||st=="x") {y1="x";y2="x";y3="x";y4="x";t="x";}