DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

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

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних технологій, автоматики та метрології
Факультет:
Комп’ютерні науки
Кафедра:
Кафедра електронних обчислювальних машин

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

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

Про що ця робота

У цій лабораторній роботі розглядається створення та перевірка структурних VHDL-описів кристала і контактних майданчиків. Описано використання засобів проєктування пакету Alliance та компілятора genlib.

У роботі розглядаються

  • Проєктування мікросистем
  • Структурний опис VHDL
  • Пакет Alliance
  • Компілятор genlib
  • Симуляція схем
  • Інтегральні схеми

Зміст і розділи

  1. Мета роботи
  2. Виконання роботи
  3. Висновок
Для кого:Студенти технічних спеціальностей комп'ютерних напрямів
Викладачі:Не вказано

Ключові поняття

VHDLAlliancegenlibcorepadsasimutструктурний опискристалконтактні майданчикисимуляція

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

Міністерство освіти і науки України НУ „Львівська політехніка” ІКТА Кафедра ЕОМ Лабораторна робота №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-описи кристалу та зовнішніх корпусних контактних майданчиків схеми паралельно-послідовного перемножувача та здійснила перевірку цих описів.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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