Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Федеральное агентство по образованию
ФГАОУ ВПО «Уральский федеральный университет имени первого Президента России Б.Н.Ельцина»
Кафедра ТиСС
Устройство для деления 2-х двоичных чисел.
Курсовая работа
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
Студент Лаптев С.А.
гр. Р-200802 ________________ ____________
дата сдачи работы Подпись
Преподаватель ________________ ____________ Шилов Ю.В.
дата приема работы Подпись
Екатеринбург
2012
Спроектировать устройство для деления 2-х 8ми разрядных чисел на основе счетчиков.
Схема устройства.
Рисунок 1 :Схема устроства.
ОПИСАНИЕ УСТРОЙСТВА:
Устройство предназначено для деления 2-х 8ми разрядных чисел.
Устройство осуществляет деление без остатка.
ВХОДЫ
A[7..0] Делимое в 2-чном коде
B[7..0] Делитель в 2-чном коде.
XStart Для запуска процесса деления на этот вход надо подать лог 1.
CLK Вход для тактовых импульсов.
ВЫХОДЫ.
C[7..0] Ответ на операцию деления(правильный только когда FINISH=1).
BUSY на этом выходе лог 1 если устройство в процессе деления (иначе 0).
FINISH на этом выходе лог 1 если устройство закончило делить (иначе 0).
При этом на c[7..0] подается правильный ответ на операция деления.
DIV0 На этом выходе возникает лог 1 если предпринята попытка делить на 0.
TITLE "DIVIDER";
SUBDESIGN DIVIDER
(
A[7..0]:INPUT;%ДЕЛИМОЕ%
B[7..0]:INPUT;%ДЕЛИТЕЛЬ%
CLK:INPUT; %ТАКТОВАЯ ЧАСТОТА;%
xSTART:INPUT; %ЗАПУСКАЕТ ДЕЛЕНИЕ%
FINISH:OUTPUT;%ГОТОВО%
DIV0 :OUTPUT;%Деление На Букву 'О'%
BUSY:OUTPUT;
C[7..0]:OUTPUT;%Результат%
)
VARIABLE
Q[7..0]:TFF;%Счетчик.Сюда Результат%
QA[7..0]:TFF;%Параллельный счетчик. Сюда Число А%
QB[7..0]:TFF;%Регистр. Сдесь Хранится B%
M[7..0] :TFF;%СЧЕТЧИК. ОСНОВА%
PL:NODE; %Разрешение параллельного переноса%
Br0:NODE; %B = 0%
WRK:SRFF; %Триггер "Устройтвао считает"%
FinTr:SRFF;%Завершили работу%
START:SRFF;
QAZERO:NODE;%Счетчик QA Обнулен%
eqp:NODE;
BEGIN
START.S=xSTART&!WRK;
START.R=!xSTART;
START.CLK=CLK;
PL=START;
WRK.S=START&(!Br0);
WRK.R=FinTr;
WRK.CLK=CLK;
BUSY=WRK;
%Параллельный счетчик (-). Сюда Число А%
QA[].CLK=CLK
QA[0].T=!PL&WRK #(PL&(!WRK)&(A[0]$QA[0]));
QA[1].T=!PL&WRK&!QA[0] #(PL&(!WRK)&(A[1]$QA[1]));
QA[2].T=!PL&WRK&!QA[1]&!QA[0] #(PL&(!WRK)&(A[2]$QA[2]));
QA[3].T=!PL&WRK&!QA[2]&!QA[1]&!QA[0] #(PL&(!WRK)&(A[3]$QA[3]));
QA[4].T=!PL&WRK&!QA[3]&!QA[2]&!QA[1]&!QA[0] #(PL&(!WRK)&(A[4]$QA[4]));
QA[5].T=!PL&WRK&!QA[4]&!QA[3]&!QA[2]&!QA[1]&!QA[0] #(PL&(!WRK)&(A[5]$QA[5]));
QA[6].T=!PL&WRK&!QA[5]&!QA[4]&!QA[3]&!QA[2]&!QA[1]&!QA[0] #(PL&(!WRK)&(A[6]$QA[6]));
QA[7].T=!PL&WRK&!QA[6]&!QA[5]&!QA[4]&!QA[3]&!QA[2]&!QA[1]&!QA[0] #(PL&(!WRK)&(A[7]$QA[7]));
%Регистр. Сдесь Хранится B%
QB[].CLK=CLK;
QB[0].T=PL&(!WRK)&(B[0]$QB[0]);
QB[1].T=PL&(!WRK)&(B[1]$QB[1]);
QB[2].T=PL&(!WRK)&(B[2]$QB[2]);
QB[3].T=PL&(!WRK)&(B[3]$QB[3]);
QB[4].T=PL&(!WRK)&(B[4]$QB[4]);
QB[5].T=PL&(!WRK)&(B[5]$QB[5]);
QB[6].T=PL&(!WRK)&(B[6]$QB[6]);
QB[7].T=PL&(!WRK)&(B[7]$QB[7]);
%Cчетчик. Сие Есть Результат%
Q[].CLK=EQp;
Q[].clrn=!(START);
Q[0].T=(BUSY)&VCC;
Q[1].T=(BUSY)&Q[0];
Q[2].T=(BUSY)&Q[1]&Q[0];
Q[3].T=(BUSY)&Q[2]&Q[1]&Q[0];
Q[4].T=(BUSY)&Q[3]&Q[2]&Q[1]&Q[0];
Q[5].T=(BUSY)&Q[4]&Q[3]&Q[2]&Q[1]&Q[0];
Q[6].T=(BUSY)&Q[5]&Q[4]&Q[3]&Q[2]&Q[1]&Q[0];
Q[7].T=(BUSY)&Q[6]&Q[5]&Q[4]&Q[3]&Q[2]&Q[1]&Q[0];
%СЧЕТЧИК. ОСНОВА%
M[].CLK=CLK;
M[].clrn=((!Start)&(!eqp)&(!Fintr));
M[0].T=(WRK)&(!QAZERO)&VCC;
M[1].T=(WRK)&(!QAZERO)&M[0];
M[2].T=(WRK)&(!QAZERO)&M[1]&M[0];
M[3].T=(WRK)&(!QAZERO)&M[2]&M[1]&M[0];
M[4].T=(WRK)&(!QAZERO)&M[3]&M[2]&M[1]&M[0];
M[5].T=(WRK)&(!QAZERO)&M[4]&M[3]&M[2]&M[1]&M[0];
M[6].T=(WRK)&(!QAZERO)&M[5]&M[4]&M[3]&M[2]&M[1]&M[0];
M[7].T=(WRK)&(!QAZERO)&M[6]&M[5]&M[4]&M[3]&M[2]&M[1]&M[0];
%Сравнение M и QB (Триггер eqD)%
%eqp=!((M[7]$QB[7])#(M[6]$QB[6])#(M[5]$QB[5])#(M[4]$QB[4])#(M[3]$QB[3])#(M[2]$QB[2])#(M[1]$QB[1])#(M[0]$QB[0]));%
eqp=(QB[]==M[])&BUSY&!Start;
%Закончили Делить%
%QA=0%
QAZERO=!(QA[7]#QA[6]#QA[5]#QA[4]#QA[3]#QA[2]#QA[1]#QA[0]);
%FINISH=1 если QA=0 и M=0%
Fintr.CLK=CLK;
FinTr.S=QAZERO&(WRK);
FinTr.R=START&(!WRK);
Finish=FinTr&(!WRK);
%Делить на букву 'О' нельзя - Если B=0 и жмем START То DIV0=1%
Br0=(!(B[7]#B[6]#B[5]#B[4]#B[3]#B[2]#B[1]#B[0]));
DIV0=Br0&START&(!WRK);
C[]=Q[];
Спроектированное устройство прошло ряд тестов, все успешно. Случаев генерации неправильных ответов и зависания в ходе теста не выявлено. Задание можно считать выполненным.