Розробка на структурному рівні

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
Не вказано
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2004
Тип роботи:
Лабораторна робота
Предмет:
Проектуванння периферійних комп’ютерних мікросистем
Група:
СКС-52

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України НУ „Львівська політехніка” ІКТА Кафедра ЕОМ Лабораторна робота №2 з курсу „Проектуванння периферійних комп’ютерних мікросистем” на тему: „Розробка на структурному рівні” Мета роботи: Створення і перевірка структурних VHDL-описів кристалу та зовнішніх корпусних контактних майданчиків. На цьому етапі переходять від функціонального опису кристалу до структурного . Тут кристал розбивається на два конструктиви: 1). Безпосередньо схема кристалу (core). 2). Зовнішні корпусні контактні майданчики (pads). Структурний рівень передбачає опис цих двох конструктивів мовою структурного опису VHDL. Відмінність структурного опису VHDL від функціонального полягає в тому, що в структурному описі оперують реальними бібліотечними елементами кристалу. Створити структурний опис, який за обсягом на кілька порядків більший за функціональний, важко. Тому пакет Alliance передбачає два незалежних способи автоматизоавного отримання структурного опису для core та pads: За допомогою текстового редактора створюється файл мовою С. Цей файл є проміжним форматом для створення структурного опису. У ньому за допомогою викликів спеціальних функцій формується виборка необхідних елементів з бібліотеки кристалу. Далі програмою-компілятором GENLIB проміжний С-файл переводять у необхідний структурний опис. У системі Alliance цей спосіб є рекомендованим. Другий спосіб не вимагає додаткового набору інформації. Достатньо скористатись програмою-генератором LOGIC, на вхід якої задають функціональний VHDL-опис, а на виході отримують структурний VHDL-опис. Виборка бібліотечних елементів кристалу відбувається автоматично. Після отримання структурних описів для core та pads, виконується симуляція на структурному рівні. Користуючись симулятором ASIMUT, перевіряють роботу тестових наборів на структурній VHDL-моделі безпосередньо схеми кристалу core. При виникненні помилки слід повернутись на попередні рівні. Симуляція для структурного опису зовнішніх корпусних контактних майданчиків pads не потрібна, оскільки цей опис не містить логічних перетворень сигналів. Виконання роботи. Розробку структурного опису проводжу в три кроки: Описую на проміжній структурній мові власне схему кристалу core.c. Описую на проміжній структурній мові зовнішні корпусні контактні майданчики addaccu.c. Отримую результуючий структурний VHDL-опис за допомогою компілятора GENLIB. Опис на проміжній структурній мові включає підключення стандартних бібліотечних елементів, логічні функції яких є необхідні для реалізації схеми. Проміжна мова - це мова С з викликами спеціальних функцій, головні з яких DEF_LOFIG, LOCON та LOINS. Для їх використання необхідно підключити хедер-файл genlib.h: #include <genlib.h> DEF_LOFIG - визначає ім’я результуючого структурного VHDL-опису; LOCON - включає новий елемент; LOINS - включає наперед визначений блок. С-файли компілюються утилітою GENLIB. Змінні оточення MBK_IN_LO та MBK_OUT_LO повинні вказувати на тип формату структурного VHDL-опису. Рекомендованим є формат vst на відміну від al (al-формат може включати такі елементи, як конденсатори, які неможливо описати мовою VHDL.) Отже, створюю за допомогою текстового редактора наступний проміжний структурний опис для core.c: #include <genlib.h> main() { int i; DEF_LOFIG("core"); LOCON("X[0:7]",IN,"X[0:7"); LOCON("Y",IN,"Y"); LOCON("Cl",IN,"Cl"); LOCON("Ck",IN,"Ck"); LOCON("M",IN,"M"); LOCON("K",IN,"K"); LOCON("S",OUT,"S"); LOCON("vdd",IN,"vdd"); LOCON("vss",IN,"vss"); /*bit0*/ LOINS("xr2_y","xr0","sum[0]","X[0]","add[0]","vdd","vss",0); LOINS("a2_y","an0","sum[0]","X[0]","carry_a[0]","vdd","vss",0); LOINS("xr2_y","xr1","sum[0]","X[0]","red[0]","vdd","vss",0); LOINS("o3_y","an1","sum[0]","X[0]","carry_d[0]","vdd","vss",0); /*bit1*/ LOINS("xr2_y","xr2","sum[1]","X[1]","int[1]","vdd","vss",0); LOINS("xr2_y","xr3","int[1]","carry_a[0]","add[1]","vdd","vss",0); LOINS("a2_y","an2","sum[1]","X[1]","int[2]","vdd","vss",0); LOINS("a2_y","an3","sum[1]","carry_a[0]","int[3]","vdd","vss",0); LOINS("a2_y","an4","X[1]","carry_a[0]","int[4]","vdd","vss",0); LOINS("03_y","an5","int[2]","int[3]","int[4]","carry_a[1]","vdd","vss",0); LOINS("xr2_y","xr4","sum[1]","X[1]","int[5]","vdd","vss",0); LOINS("xr2_y","xr5","int[5]","carry_d[0]","red[1]","vdd","vss",0); LOINS("o3_y","an6","sum[1]","X[1]","int[6]","vdd","vss",0); LOINS("o3_y","an7","sum[1]","carry_d[0]","int[7]","vdd","vss",0); LOINS("o3_y","an8","X[1]","carry_d[0]","int[8]","vdd","vss",0); LOINS("o3_y","an9","int[6]","int[7]","int[8]","carry_d[1]","vdd","vss",0); /*bit2*/ LOINS("xr2_y","xr6","sum[2]","X[2]","int[9]","vdd","vss",0); LOINS("xr2_y","xr7","int[9]","carry_a[1]","add[2]","vdd","vss",0); LOINS("a2_y","an10","sum[2]","X[2]","int[10]","vdd","vss",0); LOINS("a2_y","an11","sum[2]","carry_a[1]","int[11]","vdd","vss",0); LOINS("a2_y","an12","X[2]","carry_a[1]","int[12]","vdd","vss",0); LOINS("03_y","an13","int[10]","int[11]","int[12]","carry_a[2]","vdd","vss",0); LOINS("xr2_y","xr8","sum[2]","X[2]","int[13]","vdd","vss",0); LOINS("xr2_y","xr9","int[13]","carry_d[1]","red[2]","vdd","vss",0); LOINS("o3_y","an14","sum[2]","X[2]","int[14]","vdd","vss",0); LOINS("o3_y","an15","sum[2]","carry_d[1]","int[15]","vdd","vss",0); LOINS("o3_y","an16","X[2]","carry_d[1]","int[16]","vdd","vss",0); LOINS("o3_y","an17","int[14]","int[15]","int[16]","carry_d[2]","vdd","vss",0); /*bit3*/ LOINS("xr2_y","xr10","sum[3]","X[3]","int[17]","vdd","vss",0); LOINS("xr2_y","xr11","int[17]","carry_a[2]","add[3]","vdd","vss",0); LOINS("a2_y","an18","sum[3]","X[3]","int[18]","vdd","vss",0); LOINS("a2_y","an19","sum[3]","carry_a[2]","int[19]","vdd","vss",0); LOINS("a2_y","an20","X[3]","carry_a[2]","int[20]","vdd","vss",0); LOINS("03_y","an21","int[18]","int[19]","int[20]","carry_a[3]","vdd","vss",0); LOINS("xr2_y","xr12","sum[3]","X[3]","int[21]","vdd","vss",0); LOINS("xr2_y","xr13","int[21]","carry_d[2]","red[3]","vdd","vss",0); LOINS("o3_y","an22","sum[3]","X[3]","int[22]","vdd","vss",0); LOINS("o3_y","an23","sum[3]","carry_d[2]","int[23]","vdd","vss",0); LOINS("o3_y","an24","X[3]","carry_d[2]","int[24]","vdd","vss",0); LOINS("o3_y","an25","int[22]","int[23]","int[24]","carry_d[3]","vdd","vss",0); /*bit4*/ LOINS("xr2_y","xr14","sum[4]","X[4]","int[25]","vdd","vss",0); LOINS("xr2_y","xr15","int[25]","carry_a[3]","add[4]","vdd","vss",0); LOINS("a2_y","an26","sum[4]","X[4]","int[26]","vdd","vss",0); LOINS("a2_y","an27","sum[4]","carry_a[3]","int[27]","vdd","vss",0); LOINS("a2_y","an28","X[4]","carry_a[3]","int[28]","vdd","vss",0); LOINS("03_y","an29","int[26]","int[27]","int[28]","carry_a[4]","vdd","vss",0); LOINS("xr2_y","xr16","sum[4]","X[4]","int[29]","vdd","vss",0); LOINS("xr2_y","xr17","int[29]","carry_d[3]","red[4]","vdd","vss",0); LOINS("o3_y","an30","sum[4]","X[4]","int[30]","vdd","vss",0); LOINS("o3_y","an31","sum[4]","carry_d[3]","int[31]","vdd","vss",0); LOINS("o3_y","an32","X[4]","carry_d[3]","int[32]","vdd","vss",0); LOINS("o3_y","an33","int[30]","int[31]","int[32]","carry_d[4]","vdd","vss",0); /*bit5*/ LOINS("xr2_y","xr18","sum[5]","X[5]","int[33]","vdd","vss",0); LOINS("xr2_y","xr19","int[33]","carry_a[4]","add[5]","vdd","vss",0); LOINS("a2_y","an34","sum[5]","X[5]","int[34]","vdd","vss",0); LOINS("a2_y","an35","sum[5]","carry_a[4]","int[35]","vdd","vss",0); LOINS("a2_y","an36","X[5]","carry_a[4]","int[36]","vdd","vss",0); LOINS("03_y","an37","int[34]","int[35]","int[36]","carry_a[5]","vdd","vss",0); LOINS("xr2_y","xr20","sum[5]","X[5]","int[37]","vdd","vss",0); LOINS("xr2_y","xr21","int[37]","carry_d[4]","red[5]","vdd","vss",0); LOINS("o3_y","an38","sum[5]","X[5]","int[38]","vdd","vss",0); LOINS("o3_y","an39","sum[5]","carry_d[4]","int[39]","vdd","vss",0); LOINS("o3_y","an40","X[5]","carry_d[4]","int[40]","vdd","vss",0); LOINS("o3_y","an41","int[38]","int[39]","int[40]","carry_d[5]","vdd","vss",0); /*bit6*/ LOINS("xr2_y","xr22","sum[6]","X[6]","int[41]","vdd","vss",0); LOINS("xr2_y","xr23","int[41]","carry_a[5]","add[6]","vdd","vss",0); LOINS("a2_y","an42","sum[6]","X[6]","int[42]","vdd","vss",0); LOINS("a2_y","an43","sum[6]","carry_a[5]","int[43]","vdd","vss",0); LOINS("a2_y","an44","X[6]","carry_a[5]","int[44]","vdd","vss",0); LOINS("03_y","an45","int[42]","int[43]","int[44]","carry_a[6]","vdd","vss",0); LOINS("xr2_y","xr24","sum[6]","X[6]","int[45]","vdd","vss",0); LOINS("xr2_y","xr25","int[45]","carry_d[5]","red[6]","vdd","vss",0); LOINS("o3_y","an46","sum[6]","X[6]","int[46]","vdd","vss",0); LOINS("o3_y","an47","sum[6]","carry_d[5]","int[47]","vdd","vss",0); LOINS("o3_y","an48","X[6]","carry_d[5]","int[48]","vdd","vss",0); LOINS("o3_y","an49","int[46]","int[47]","int[48]","carry_d[6]","vdd","vss",0); /*bit7*/ LOINS("xr2_y","xr26","sum[7]","X[7]","int[49]","vdd","vss",0); LOINS("xr2_y","xr27","int[49]","carry_a[6]","add[7]","vdd","vss",0); LOINS("xr2_y","xr28","sum[7]","X[7]","int[53]","vdd","vss",0); LOINS("xr2_y","xr29","int[53]","carry_d[6]","red[7]","vdd","vss",0); /*mux1*/ LOINS("xr2_y","xr30","Y","prev_Y","ch","vdd","vss",0); LOINS("n1_y","n10","ch","nch","vdd","vss",0); for(i=0;i<4;i++) { LOINS("mx2_y",NAME("res%d",i), NAME("sum[%d]",i),"nch", NAME("op_res[%d]",i),"ch", NAME("res[%d]",i),"vdd","vss",0); } /*mux2*/ LOINS("n1_y","n11","Y","nY","vdd","vss",0); for(i=0;i<4;i++) { LOINS("mx2_y",NAME("op_res%d",i), NAME("add[%d]",i),"nY", NAME("red[%d]",i),"Y", NAME("op_res[%d]",i),"vdd","vss",0); } /*shifter*/ LOINS("ms_y",NAME("res[%d]",i), "Cl","Ck", NAME("sh_res[%d]",i),"vdd","vss",0); /*registr*/ LOINS("ms_y",NAME("sh_res[%d]",i),"Ck", NAME("sum[%d]",i),"vdd","vss",0); SAVE_LOFIG(); exit(0); } Перетворюю проміжний структурний опис core.c в структурний VHDL-опис core.vst за допомогою компілятора GENLIB: # ###--------------------------------------------------------------------------### # generate structural description of the circuit's core # # core.c is the schematic capture of the core, using # # the genlib language # # the environment variable specify the structural VHDL format # # ###--------------------------------------------------------------------------### MBK_IN_LO=vst ;\ MBK_OUT_LO=vst ;\ MBK_CATA_LIB=$TOP/cells/scr ;\ export MBK_IN_LO MBK_OUT_LO MBK_CATA_LIB ;\ genlib core [2] core.c --> core.vst Отримала структурний VHDL-опис core.vst, що поданий в електронному варіанті. Далі за допомогою текстового редактора створюю наступний проміжний структурний опис для multiplier.c: #include <genlib.h> main() { int i; DEF_LOFIG("multiplier"); LOCON("X[0:7]", IN, "X[0:7]"); LOCON("Y", IN, "Y"); LOCON("Cl", IN, "Cl" ); LOCON("Ck", IN, "Ck" ); LOCON("M", IN, "M" ); LOCON("K", IN, "K" ); LOCON("vdd", IN, "vdd" ); LOCON("vss", IN, "vss" ); LOCON("S", OUT, "S"); LOINS ("pvsse_sp", "p15", "cki", "vdd", "vss", 0); LOINS ("pvsse_sp", "p16", "cki", "vdd", "vss", 0); LOINS ("pvdde_sp", "p17", "cki", "vdd", "vss", 0); LOINS ("pvssi_sp", "p18", "cki", "vdd", "vss", 0); LOINS ("pvddi_sp", "p19", "cki", "vdd", "vss", 0); for (i = 0; i < 7; i++) LOINS("pi_sp", NAME("p%d", i), NAME("X[%d]", i), NAME("XX[%d]", i), "cki", "vdd", "vss", 0); LOINS("pi_sp", "p12", "Cl", "ClCl", "cki", "vdd", "vss", 0); LOINS("pi_sp", "p13", "Ck", "CkCk", "cki", "vdd", "vss", 0); LOINS("pi_sp", "p14", "M", "MM", "cki", "vdd", "vss", 0); LOINS("pi_sp", "p15", "K", "KK", "cki", "vdd", "vss", 0); LOINS("pi_sp", "p16", "Y", "YY", "cki", "vdd", "vss", 0); LOINS("po_sp", "S", "SS", "cki", "vdd", "vss", 0); LOINS("core", "core", "XX[0:7]", "ClCl", "CkCk","MM","KK", "YY", "SS", "vdd", "vss", 0); SAVE_LOFIG(); exit(0); /* necessary for the proper run of the Makefile */ } Перетворюю проміжні структурні описи addaccu.c та core.c, які включаються в multiplier.c, в результуючий структурний VHDL-опис multiplier.vst за допомогою компілятора GENLIB: # ###--------------------------------------------------------------------------### # generate structural description of the complete circuit # # addaccu.c is the schematic capture of the circuit, using # # the genlib language # # the circuit can be generated only if the core is generated # # the environment variable specify the structural VHDL format # # ###--------------------------------------------------------------------------### MBK_IN_LO=vst ;\ MBK_OUT_LO=vst ;\ MBK_CATA_LIB=$TOP/cells/scr:$TOP/cells/ring ;\ export MBK_IN_LO MBK_OUT_LO MBK_CATA_LIB ;\ genlib multiplier [3] multiplier.c --> multiplier.vst Останньою дією, що проводиться на етапі розробки на структурному рівні, є симуляція на структурному рівні з використанням тестових наборів: # ###---------------------------------------------------------### # check the correctness of the generated structural # # description running the logic simulation # # ###---------------------------------------------------------### MBK_IN_LO=vst ;\ MBK_CATA_LIB=$TOP/cells/scr:$TOP/cells/ring ;\ export MBK_IN_LO MBK_CATA_LIB ;\ asimut multiplier multiplier schema [4] вихідний файл з результатами тестування multiplier.pat multiplier.vst Отримали таку функціональну схему:  Вихідний файл з результатами тестування поданий в електроному вигляді. Висновок. На лабораторній роботі створила структурні VHDL-описи кристалу та зовнішніх корпусних контактних майданчиків схеми паралельно-послідовного перемножувача та здійснила перевірку цих описів.
Антиботан аватар за замовчуванням

31.03.2013 14:03-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!