Архив разработки (107 кб, Mathcad, MathConnex)
Моделирование арифметико-логического устройства
Цель работы: разработка и моделирование функций арифметико-логического устройства (АЛУ) на базе микросхемы КР1533ИП3 без детализации его внутренней структуры.
При создании АЛУ использовался компонент ConnexScript. К данному компоненту были добавлены условное графическое изображение, три входа и три выхода.
- Первому входу соответствуют 4 входа АЛУ: SE 0,..,SE3, комбинация сигналов на которых определяет тип операции.
- Второму входу компонента ConnexScript соответствуют 8 входов АЛУ: A0,B0,..,A3,B3, на которые подаются поразрядно операнды A и B.
- Третьему входу соответствуют 2 входа АЛУ: MO (MO="1" - выполняется логическая операция, МО="0" - выполняется арифметическая операция), CRn - перенос для возможности каскадирования микросхем.
- Первому выходу соответствуют 3 выхода АЛУ: Y- выход распространения переноса, CRn+4 - выход переноса для четвёртого разряда каскада, X - выход образования переноса.
- Второму выходу соответствуют 4 выхода АЛУ: F0,..,F3 - четырёхразрядный результат.
- Третьему выходу соответствует 1 выход АЛУ - A=B.
Таким образом, одному выводу компонента ConnexScript ставится в соответствие несколько выводов АЛУ. Другими словами, сигналы на входах и выходах компонента ConnexScript представляются в векторной форме. Это связано с тем, что у компонента ConnexScript можно задать только 4 входа и 4 выхода.
На следующем этапе была написана программа на языке ConnexScript, описывающая работу АЛУ. Ниже представлены фрагменты данной программы.
function Add(CRn,a,b) //функция сложения; CRn - перенос, a,b- //четырёхразрядные векторы (операнды 1 и 2)
a0=a[0];a1=a[1];a2=a[2];a3=a[3];
b0=b[0];b1=b[1];b2=b[2];b3=b[3];
G = {1, 1, 1, 1, 1}
G[0]=(~a0&~b0&CRn)|(~a0&b0&~CRn)|(a0&~b0&~CRn)|(a0&b0&CRn);
CRn0=(a0&CRn)|(a0&b0)|(b0&CRn);
G[1]=(~a1&~b1&CRn0)|(~a1&b1&~CRn0)|(a1&~b1&~CRn0)|(a1&b1&CRn0);
CRn1=(a1&CRn0)|(a1&b1)|(b1&CRn0);
G[2]=(~a2&~b2&CRn1)|(~a2&b2&~CRn1)|(a2&~b2&~CRn1)|(a2&b2&CRn1);
CRn2=(a2&CRn1)|(a2&b2)|(b2&CRn1);
G[3]=(~a3&~b3&CRn2)|(~a3&b3&~CRn2)|(a3&~b3&~CRn2)|(a3&b3&CRn2);
G[4]=(a3&CRn2)|(a3&b3)|(b3&CRn2);
Add=G;
end
// приём информации со входов:
SE=in0[0]*1+in0[1]*2+in0[2]*4+in0[3]*8; // перевод из двоичной системы в десятичную(для //удобства)
a0=in1[0];a1=in1[2];a2=in1[4];a3=in1[6];
b0=in1[1];b1=in1[3];b2=in1[5];b3=in1[7];
MO=in2[0];CRn=in2[1];
//если выполняется логическая операция
if(MO==1)
// выполнение логической операции F=~A
if(SE==0)
f0=~a0;
f1=~a1;
f2=~a2;
f3=~a3;
end
// выполнение логической операции F=~(A&B)
if(SE==1)
f0=~(a0&b0);
f1=~(a1&b1);
f2=~(a2&b2);
f3=~(a3&b3);
end
// выполнение логической операции F=(~A)|B
if(SE==2)
f0=(~a0)|b0;
f1=(~a1)|b1;
f2=(~a2)|b2;
f3=(~a3)|b3;
end
// выполнение логической операции F=1
if(SE==3)
f0=1;
f1=0;
f2=0;
f3=0;
…………………..
…………………..
…………………..
// выполнение логической операции F=A
if(SE==15)
f0=a0;
f1=a1;
f2=a2;
f3=a3;
end
end
//если выполняется арифметическая операция
if(MO==0)
// выполнение арифметической операции F=A-1
if(SE==0)
b0=1;b1=1;b2=1;b3=1;
A = { a0, a1, a2, a3 }
B = { b0, b1, b2, b3 }
F=Add(CRn,A,B);
f0=F[0];
f1=F[1];
f2=F[2];
f3=F[3];
CRn4=F[4];
end
// выполнение арифметической операции F=A&B-1
if(SE==1)
A = { a0&b0, a1&b1, a2&b2, a3&b3 }
b0=1;b1=1;b2=1;b3=1;
B = { b0, b1, b2, b3 }
F=Add(CRn,A,B);
f0=F[0];
f1=F[1];
f2=F[2];
f3=F[3];
CRn4=F[4];
end
…………………..
…………………..
…………………..
// выполнение арифметической операции F=A
if(SE==15)
f0=a0;
f1=a1;
f2=a2;
f3=a3;
CRn4=0;
end
end
//вывод результатов
out1={f0;f1;f2;f3}
out0={0;CRn4;0}
out2=0
Ниже представлена таблица истинности АЛУ:
Выбор функции
|
MO=H; Логич.
функция
|
MO=L; Арифметическая операция
|
SE3 |
SE2 |
SE1 |
SE0 |
~CRn=L(без переноса) |
~CRn=H(с переносом) |
L
L
L
L
L
L
L
L
H
H
H
H
H
H
H
H
|
L
L
L
L
H
H
H
H
L
L
L
L
H
H
H
H
|
L
L
H
H
L
L
H
H
L
L
H
H
L
L
H
H
|
L
H
L
H
L
H
L
H
L
H
L
H
L
H
L
H
|
F=~A
F=~(A&B)
F=(~A)|B
F=1
F=~(A|B)
F=~B
F=~(AxorB)
F=A|(~B)
F=(~A)&B
F= AxorB
F=B
F=A|B
F=0
F=A&(~B)
F=A&B
F=A
|
F=A-1
F=A&B-1
F=A&(~B)-1
F=-1
F=A+(A|(~B))
F=A&B+( A|(~B))
F=A-B-1
F=A|(~B)
F=A+(A|B)
F=A+B
F=A&(~B)+(A|B)
F=A|B
F=A+A
F=A&B+A
F=A&(~B)+A
F=A
|
F=A
F=A&B
F=A&(~B)
F=0
F=A+(A|(~B))+1
F=A&B+( A|(~B))+1
F=A-B
F=A|(~B)+1
F=A+(A|B)+1
F=A+B+1
F=A&(~B)+(A|B)+1
F=A|B+1
F=A+A+1
F=A&B+A+1
F=A&(~B)+A+1
F=A+1
|
После отладки полученного модуля, схема была собрана и промоделирована. При этом, помимо АЛУ в неё были включены следующие элементы:
- универсальный регистр, настроенный на параллельный занос информации;
- генератор прямоугольных импульсов, предназначенный для периодической смены
уровня сигнала на входе МО;
- два шинных формирователя векторных сигналов.
Библиотечные модули названных элементов (регистр, генератор, формирователи) взяты из
работы Макарычева П.П., Золотова Е.Г "Технология разработки виртуальных лабораторий",
представленной на образовательном математическом сайте www.exponenta.ru.
Пример моделирования АЛУ
В начало
|