Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
НУ „Львівська політехніка”
ІКТА
Кафедра ЕОМ
Лабораторна робота №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- опис заданої схеми та файл з тестовими наборами для перевірки правильності роботи описаної моделі. Тобто на етапі симуляції на функціональному рівні відлагодила функціональний опис схеми та сформулювала правильний та достатній набір тестових комбінацій.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!