Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
НУ „Львівська політехніка”
ІКТА
Кафедра ЕОМ
Лабораторна робота №1
з курсу „Проектуванння периферійних комп’ютерних мікросистем”
на тему:
„Симуляція на функціональному рівні”
Львів-2005
Мета роботи: Створення і перевірка функціональної VHDL-моделі кристалу.
Проектування кристалу починається з його функціонального опису на мові VHDL. Отже, за допомогою текстового редактора створюється файл, в якому описується VHDL-модель майбутнього кристалу. Часові затримки не вказуються - це, так звана, функціональна часово-незалежна VHDL-модель.
На цьому етапі також створюється файл з тестовими наборами для перевірки правильності роботи описаної моделі. Цей файл можна створити за допомогою текстового редактора, або за допомогою спеціальної програми-генератора GENPAT. Далі за допомогою VHDL-симулятора ASIMUT перевіряється робота тестових наборів на функціональній VHDL-моделі проектованого кристалу. При наявності помилок слід перевірити правильність моделі та тестових наборів.
Виконання роботи.
Розглядається схема 8-розрядного перемножувача 555ИП9 (рис.1), який приймає один операнд в паралельному вигляді (Х), а другий – в послідовному (по входу У), причому спочатку подається молодший байт. Результат з’являється на виході S в послідовному вигляді (спочатку з’являється молодший біт). В результаті множення n-розрядного на m-розрядне число отримуємо n+m – розрядне число, тобто необхідно n+m тактових імпульсів.
Входи паралельного операнду контролюються сигналом Cl. Якщо цей сигнал рівний логічному „0”, то всі внутрішні тригери скидаються і можна записувати нове слово, якщо ж Cl рівний логічній „1” – входи Хі закриті.
Вхід К призначений для каскадування, при якому на нього подається вихід суми більш старшого пристрою. Для визначення найстаршого пристрою на його вхід М подається „L”, а на інші – „Н”.
рис. 1. принципова схема перемножувача 555ИП9
В таблиці наведені режими роботи перемножувача:
Входы
Внутр Y-1
Выход S
Функция
Cl
Cк
K
M
Xi
Y
-
-
L
L
-
-
-
-
Найстарший множник
-
-
CS
H
-
-
-
-
Пристрої послідовно об’єднані
L
-
-
-
OP
-
L
L
Завантажити новий операнд і почистити внутр.суму і перенос
H
_/~
-
-
-
L
L
LB
Зсув регістра суми вправо
H
_/~
-
-
-
L
H
LB
Добавити операнд до регістра суми у зсунути результат вправо
H
_/~
-
-
-
H
L
LB
Відняти операнд від регістра суми і зсунути результат вправо
H
_/~
-
-
-
H
H
LB
Зсув регістра суми вправо
CS – приєднання з виходом суми старшого пристрою
ОР – входи відкриті для нових даних
LB – молодший розряд результату
рис.2. функціональна схема перемножувача
За допомогою текстового редактора створила файл multiplier.vbe, в якому задала функціональний VHDL-опис наведеної схеми перемножувача:
ENTITY multiplier IS
PORT(
X : IN BIT_VECTOR(7 DOWNTO 0);
Y : IN BIT;
CL : IN BIT;
CK : IN BIT;
M : IN BIT;
K : IN BIT;
vdd : IN BIT;
vss : IN BIT;
S : OUT BIT
);
END multiplier;
--}} End of automatically maintained section
ARCHITECTURE multiplier OF multiplier IS
SIGNAL sum: BIT_VECTOR(7 DOWNTO 0);
SIGNAL carry_a:BIT_VECTOR(6 DOWNTO 0);
SIGNAL carry_d:BIT_VECTOR(6 DOWNTO 0);
SIGNAL prev_Y: BIT;
SIGNAL res: BIT_VECTOR(7 DOWNTO 0);
SIGNAL sh_res: BIT_VECTOR(7 DOWNTO 0);
SIGNAL op_res: BIT_VECTOR(7 DOWNTO 0);
SIGNAL add: BIT_VECTOR(7 DOWNTO 0);
SIGNAL red: BIT_VECTOR(7 DOWNTO 0);
BEGIN
-- L0:BLOCK(Ck='1' AND Ck'EVENT)
-- BEGIN
ASSERT (vdd='1'AND vss='0')
REPORT "Wrong power supplies"
SEVERITY WARNING;
--мультиплексор1
WITH (Y XOR prev_Y) SELECT
res<=sum WHEN '0',op_res WHEN '1';
--мультиплексор2
WITH Y SELECT
op_res<=add WHEN '0',red WHEN '1';
--зсув
L1: BLOCK (Cl='1')
BEGIN
sh_res<="0" & res(7 DOWNTO 1);
END BLOCK L1;
--регістр суми
sum<=sh_res;
S<=sh_res(0);
--операція додавання
add(0)<=sum(0) XOR X(0);
carry_a(0)<=sum(0) AND X(0);
add(1)<=sum(1) XOR X(1) XOR carry_a(0);
carry_a(1)<=(sum(1)AND X(1)) OR (sum(1) AND carry_a(0)) OR (X(1) AND carry_a(0));
add(2)<=sum(2) XOR X(2) XOR carry_a(1);
carry_a(2)<=(sum(2)AND X(2)) OR (sum(2) AND carry_a(1)) OR (X(2) AND carry_a(1));
add(3)<=sum(3) XOR X(3) XOR carry_a(2);
carry_a(3)<=(sum(3)AND X(3)) OR (sum(3) AND carry_a(2)) OR (X(3) AND carry_a(2));
add(4)<=sum(4) XOR X(4) XOR carry_a(3);
carry_a(4)<=(sum(4)AND X(4)) OR (sum(4) AND carry_a(3)) OR (X(4) AND carry_a(3));
add(5)<=sum(5) XOR X(5) XOR carry_a(4);
carry_a(5)<=(sum(5)AND X(5)) OR (sum(5) AND carry_a(4)) OR (X(5) AND carry_a(4));
add(6)<=sum(6) XOR X(6) XOR carry_a(5);
carry_a(6)<=(sum(6)AND X(6)) OR (sum(6) AND carry_a(5)) OR (X(6) AND carry_a(5));
add(7)<=sum(7) XOR X(7) XOR carry_a(6);
--операція віднімання
red(0)<=sum(0) XOR X(0);
carry_d(0)<=sum(0)OR X(0);
red(1)<=sum(1) XOR X(1) XOR carry_d(0);
carry_d(1)<=(sum(1)OR X(1)) OR (sum(1) OR carry_d(0)) OR (X(1) OR carry_d(0));
red(2)<=sum(2) XOR X(2) XOR carry_d(1);
carry_d(2)<=(sum(2)OR X(2)) OR (sum(2) OR carry_d(1)) OR (X(2) OR carry_d(1));
red(3)<=sum(3) XOR X(3) XOR carry_d(2);
carry_d(3)<=(sum(3)OR X(3)) OR (sum(3) OR carry_d(2)) OR (X(3) OR carry_d(2));
red(4)<=sum(4) XOR X(4) XOR carry_d(3);
carry_d(4)<=(sum(4)OR X(4)) OR (sum(4) OR carry_d(3)) OR (X(4) OR carry_d(3));
red(5)<=sum(5) XOR X(5) XOR carry_d(4);
carry_d(5)<=(sum(5)OR X(5)) OR (sum(5) OR carry_d(4)) OR (X(5) OR carry_d(4));
red(6)<=sum(6) XOR X(6) XOR carry_d(5);
carry_d(6)<=(sum(6)OR X(6)) OR (sum(6) OR carry_d(5)) OR (X(6) OR carry_d(5));
red(7)<=sum(7) XOR X(7) XOR carry_d(6);
L2:BLOCK (Ck='1' AND Ck'STABLE)
BEGIN
prev_Y<=Y;
END BLOCK L2;
--END BLOCK L0;
END multiplier;
Для перевірки правильності функціонального опису VHDL-симулятор запустила в спеціальному режимі без симуляції:
> asimut -b -c multiplier [0]
multiplier.vbe - розширення в програмах пакету Alliance не вказуються (використовуються змінні оточення)
лише компіляція без симуляції (для симуляції необхідні тестові набори)
функціональний опис (behavioural description)
VHDL-симулятор
Для симуляції спочатку створила файл з тестовими наборами multiplier.pat з наступним вмістом:
IN vdd;
IN vss;
IN X(7 to 0);
IN CL;
IN Y;
IN K;
IN M;
IN CK;
OUT S;
BEGIN
pat_1:1 0 00000000 0 0 0 0 0 ?0;
pat_2:1 0 00000101 1 1 0 0 0 ?0;
pat_3:1 0 00000101 1 0 0 0 0 ?0;
pat_4:1 0 00000101 1 0 0 0 0 ?0;
pat_5:1 0 00000101 1 0 0 0 0 ?0;
pat_6:1 0 00000101 1 0 0 0 1 ?1;
pat_7:1 0 00000101 1 0 0 0 1 ?0;
pat_8:1 0 00000101 1 0 0 0 1 ?1;
pat_9:1 0 00000101 1 0 0 0 1 ?0;
END;
Симулюю роботу схеми паралельно-послідовного перемножувача на тестових наборах:
# ###-------------------------------------------------------------------------###
# check the correctness of specifications (Data-FLow VHDL) #
# running the logic simulation #
# ###------------------------------------------------------------------------###
asimut -b multiplier multiplier specifications [1]
Вихідний файл з результатами тестування
multiplier.pat
multiplier.vbe
Функціональний опис, симуляція на функціональному рівні
VHDL-симулятор
Результати роботи подані в електронному варіанті.
Висновок.
На лабораторній роботі я ознайомилася з системою автоатизованого проектування НВІС Alliance, основними етапами проектування кристаллу. Виконала перший етап розробки кристалу паралельно-послідовного перемножувача – симуляцію на функціональному рівні, для чого створила VHDL- опис заданої схеми та файл з тестовими наборами для перевірки правильності роботи описаної моделі. Тобто на етапі симуляції на функціональному рівні відлагодила функціональний опис схеми та сформулювала правильний та достатній набір тестових комбінацій.