ОРТ2/Пројекат 2021

Извор: SI Wiki
< ОРТ2
Датум измене: 1. новембар 2021. у 00:44; аутор: TopOfKeks (разговор | доприноси) (kategorizacija)
(разл) ← Старија измена | Тренутна верзија (разл) | Новија измена → (разл)
Пређи на навигацију Пређи на претрагу

Испод су излистани информације и савети о ОРТ2 пројекту, конкретно за школску 2020/2021. годину, као привремени помоћни ресурс при изради пројекта. Највише детаља у вези са конкретном израдом је објашњено на вежбама из трећег блока, а испод су излистани најчешћи проблеми и питања, као и ствари које нису поменуте на вежбама.

Опште

  • Пројекат се мора бранити у року или пре рока када се ради трећи колоквијум, јер рађењем трећег колоквијума говоримо да нам се упише оцена, па да би се пројекат урачунао у оцену морамо да је поништавамо и затим поново радимо К3.
  • У реду је да формулар за пројекат правимо неким другим програмом (нпр. драw.ио) док год садржи исте информације као и на оном њиховом шаблону. Сваки члан тима предаје формулар одвојено, и као датум се ставља датум одбране.
    • Тај формулар се и не прегледа већ је више ствар формалности - као папире које смо предавали за ПОРТ домаће задатке.
  • Сваки део пројекта (ФЕТЦХ, АДДР, ЕXЕЦ и ИНТР) се бодује одвојено, и пројекат је могуће урадити делимично и добити бодове за то.
  • Колега Данко одговара на Мицрософт Теамс у року од пар сати до пар дана. Колико је познато, ово је најбржи начин контактирања сарадника на предмету.
  • Датум предаје пројекта је у јануарском року био до око 12 сати пре одбране.

Поставка

  • Сигнал гринст нам говори три ствари током декодирања инструкције:
    1. да ли је задат код операције који не постоји (повезати неискоришћене излазе декодера инструкције на ОР),
    2. да ли је задат начин адресирања који не постоји (исто као изнад, само још проверити и да ли је инструкција адресна), и
    3. да ли је задата комбинација инструкције и адресирања која нема смисла.
    • Трећа ставка захтева да разумемо семантику инструкција које покрећемо. На пример:
      • ST инструкција нам говори да на операнд упишемо вредност акумулатора. Писање ST #1000h би било еквивалентно 0x1000 = acc;, што нема смисла.
      • Као ST, инструкције које чувају резултат операције назад у операнд (уместо у акумулатор) такође немају смисла заједно са непосредним адресирањем.
      • JADR инструкција нам говори да скачемо на адресу на меморији дату операндом. Непосредно и регистарско директно адресирање не садрже никакву адресу у меморији (непосредно нам говори који је податак над којим радимо а регистарско директно који је регистар, али не садрже никакву адресу).
      • Код операција са нискама попут STRFIND прихватано је и решење где STRFIND #1000h није валидно и решење где то сматра да ниска почиње од адресе 1000х.
    • Након прављења овог сигнала, он се мора искористити у ФЕТЦХ фази како би се враћало назад на први корак при детекцији грешке.
      • Долази се до једног проблема: уколико су подаци и адресе два бајта а меморијска реч један бајт овај сигнал ће морати да се проверава након оба бајта, али се не сме проверавати да ли је адресирање валидно након читања првог бајта.[1] Постоји више решења за овај проблем:
        • Може се проверавати гринст тек након очитавања оба бајта, али се не зна да ли је овај метод био прихватан на одбрани.
        • Може се одвојити гринст на два сигнала: гринст (није валидан операциони код) и градр (адресирање не постоји или није валидна комбинација инструкције и адресирања).
        • Могу се давати различите вредности сигналу гринст у зависности од тога да ли се чита први или други бајт.
  • Подједнако је валидно претпоставити да INC R1 инкрементира Р1 и вредност чува назад у Р1, и да инкрементира Р1 и вредност чува у акумулатору (слично важи и за остала адресирања).
  • Није потребно бринути се око ефиканости имплементације - ако нам је процесор много неефикасно направљен прегледач може да нас пита да га изменимо на одбрани.
  • Ако су регистри попут ПЦ и СП унутар регистарске речи ГПР, дозвољено је додати сигнал који ресетује све регистре на њихове очекиване почетне вредности (на пример, ПЦ на 1000х) и дозвољено је имати улазне сигнале који сигурно раде операцију над неким специјалним регистром попут incPC, incSP или decSP без обзира на задату адресу.
  • Која инструкција ажурира које битове ПСW можете закључити на основу симулатора за лабораторијске вежбе.
    • У MUL инструкцији, бит C се не мења, а битови V, Z и (највероватније) N се постављају као код сабирања.
  • Инструкција CMP је суштински иста ствар као SUB, само што се не ажурира акумулатор већ само битови ПСW. Поента је да ова функција дозвољава поређења два броја како би се након ње могло одлучити куда се скаче коришћењем инструкција гранања.
  • Микроинструкције би требало да буду што краће, и не морају нужно бити дељиве са 4 или 8.
    • Препоручено да се микроинструкције "прошире" неефектним битовима пре одбране. Врло је незгодно додавати бит за цц, ба и остале сигнале на одбрани, нарочито ако су у питању комплексне формуле у Еxцел-у. Ово се нарочито односи на управљачку јединицу ЕXЕЦ фазе. У реду је претпоставити да ће вам требати места за још макар 2-3 цц-а, и за нешто мање од 10 осталих сигнала.
  • Еxцел табеле за генерисање садржаја РОМ меморије из сигнала се могу наћи на Теамс.

Логисим

  • Пројекат је подељен на неколико шема:
    • ЕТФ.цирц и ЕТФЕxтендед.цирц - Библиотеке са компонентама које смо досад учили на предмету. Као што је горе поменуто, једине корисне компоненте из ових библиотека јесу регистарске компоненте и РисингЕдге. Немојте додавати компоненте у ове шеме јер ће вам на одбрани бити дате ове шеме (нећете смети да их спакујете заједно са пројектом) па компоненте додате овде можете изгубити на одбрани.
    • ЕТФСтудент.цирц - Овде додајте своје компоненте које су вам потребне за израду пројекта.
    • ОРТ2Пројецт.цирц - Овде се налазе компоненте за сваку фазу. Нове компоненте додајте у ЕТФСтудент.цирц.
  • Пројекат је дозвољено радити у Логисим-еволутион. Од помоћи вам могу бити ЕТФ.цирц и ЕТФЕxтендед.цирц конвертовани да буду компатибилни са Логисим-еволутион. Поједине ствари попут интерфејса, изгледа компоненти и правила именовања сигнала могу бити различите од старог Логисим-а, али је доста ствари побољшано (екран скролује са померањем компоненти ван екрана, зумирање је доступно коришћењем точкића миша, 64 бита је ограничење ширине сигнала уместо 32 бита, много се лакше одређује шта је који пин на екрану за дизајн кола, подразумевани изглед корисничких компоненти је много смисленији, итд.) па ако донекле знате шта радите препоручује се да радите у Логисим-еволутион. На одбрани ће бити доступан са мрежног диска.
  • У пројекту је дозвољено користити све уграђене Логисим компоненте осим оних које досад нисмо радили (попут множача), и могуће је да нас прегледачи питају како раде те компоненте на одбрани. Такође је препоручено користити уграђене Логисим компоненте из више разлога:
    • У ЕТФ.цирц су доступне имплементације компоненти на начин на који смо их имплементирали на ОРТ1, што доводи до разних непогодности, попут неефикасности тих компоненти (само ГПР8x16 компонента из ЕТФЕxтендед.цирц садржи више од 300 кола чија се стања морају израчунавати због начина на који су прављени регистри и зато Логисим много успори након њеног постављања) и лоших имплементација (библиотека је прошла чак пет ревизија и студенти и даље пријављују проблеме са компонентама попут РОМ или декодера). Нема потребе измишљати топлу воду - када су доступне ефикасне имплементације које раде (једино што могу да имају мало другачији изглед од очекиваног) није потребно ручно правити све те компоненте, нити користити те ручно направљене компоненте.
    • Компоненте из ЕТФ.цирц не могу да имају параметре за подешавање, попут броја битова или улаза на мултиплексеру. Ово доводи до два проблема:
      1. студенти морају да губе време да направе своје компоненте које имају оне подешене параметре који су им потребни у пројекту (нема потребе правити четири РОМ компоненте за сваку од фаза када можете само искористити уграђену компоненту), и
      2. лева трака са компонентама постаје много тежа за навигацију са толиким бројем компоненти.
  • fc сигнал постаје активан након насумичног броја корака, али тек након што се упали rdMEM. Ово је овако имплементирано како бисмо морали да чекамо да се изврши операција над меморијом пре настављања у нашем дијаграму управљачких јединица.
    • Приликом тестирања асемблерског програма, много времена може да вам одузме чекање на fc сигнал да се упали, па можете овај сигнал поставити на логичку јединицу како би тестирање прошло брже.
  • Ако вам смета неефикасност ГПР8x16 компоненте дате у ЕТФЕxтендед.цирц, можете користити уграђену бројачку компоненту (Меморy > Цоунтер) како бисте реализовали свој бројачки регистар, и затим искористили тај регистар у својој ГПР компоненти. Бројачки регистар се користи овако, с тим што кад су сигнали ЛД и ИНЦ укључени у исто време вредност бројача се декрементира (функционише као ДЕЦ сигнал). У Логисим-еволутион је интерфејс бројачких регистара много смисленији и на сваком пину интуитивније пише шта ради.

Проблеми

  • Боје у Логисим могу лако да сигнализирају проблеме:
    • Плаво - X - сигнализира да вредност сигнала није дефинисана (стање високе импедансе). Ово није нужно грешка, али ако очекујете да неки сигнал буде дефинисан а није, проверите где је то он требало да буде постављен а није.
    • Црвено - Е - сигнализира да се негде приликом постављања вредности сигналу десила грешка. Ова грешка може да се деси из више разлога:
      • Тростатичком баферу (сигнал пропуштања) или логичком колу је доведена недефинисана вредност на улаз - ако вам црвени сигнал излази из неког тростатичког бафера или логичког кола проверите њихове улазне сигнале
      • Једном сигналу се на више места задаје различита вредност - ово се често дешава када на магистралу пропуштате вредности без да претходно у одговарајућу шему додате тростатички бафер који вредност пропушта само када је 1 (као што је то Данко радио на вежбама)
    • Наранџасто - сигнал је повезан на више улазних пинова са различитом ширином. Проверите ширине свих пинова на које је тај сигнал повезан и промените им ширине тако да одговарају једни другима. Ово значи да кад мењате ширину магистрале у једној шеми, морате да је промените у свим шемама које ту магистралу користе.
  • Генерално, ако вам се нека компонента одједном чудно понаша и не можете да закључите зашто, рестартујте симулацију. Понекад (само на старом Логисим-у) одвезивање па повезивање сигнала који је црвен може да реши проблем.
  • Ако вам Логисим испише "Цаннот модифy цирцуит" то значи да покушавате да измените компоненту која није у .цирц фајлу који сте отворили. Ту компоненту можете изменити тако што отворите .цирц фајл у којем се налази да компонента (Филе > Опен) или, ако се та компонента налази у ЕТФ.цирц или ЕТФЕxтендед.цирц, прекопирати њен садржај и изглед у неку нову компоненту у ЕТФСтудент.цирц.
  • Ако вам Логисим не да да копирате садржај компоненти из једног .цирц фајла у други, морате отворити један фајл користећи Филе > Опен опцију из прозора са другим .цирц фајлом.
  • Ако мењате улазне пинове у било којој шеми, може да се деси да се сви улазни пинови на шеми ресетују назад на своје подразумеване позиције. Овај проблем можете приметити када вам сигнали са магистрала имају недефинисане вредности у некој шеми а ништа нисте мењали у ЦПУ - то значи да су се улазни пинови у изгледу кола испремештали и да морате да их поново подесите. (Срећно с тиме, ако користите стари Логисим.)
  • Када тестирате како вам ради процесор, обавезно се пребаците у таб за симулацију и изаберите симулацију за ЦОМПУТЕР. То Логисим-у каже да се пребацујете у контекст симулације за главну шему, и вредности улазних сигнала као и сигнал такта ће бити рачунати у односу на главну шему. Навигацију између шема у моду симулације радите тако што проширујете листе подкомпоненти и бирате те подкомпоненте из листе - не бирате друге шеме првог нивоа јер то мења ваш контекст симулације. Таб за симулацију се налази поред таба за компоненте, у горњем десном углу, тачно изнад панела са листом компоненти.
    • Овај проблем можете приметити тако што вам не ради сигнал такта у неким шемама, или улазни пинови имају сви вредности логичке нуле иако неки од доведених сигнала из спољашњег кола имају вредност логичке јединице.
  • Ако вам се садржај РОМ меморије не чува након рестартовања симулатора, или једна шема добија садржај микромеморије друге шеме након измене микромеморије те друге шеме, користите уграђену РОМ компоненту уместо прављења својег оквира за њу или коришћења оне из ЕТФЕxтендед.цирц.

Одбрана

  • Ако лоше урадите одбрану у једном року, можете изаћи и у још једном следећем да поправите.
  • На одбрани у јануару 2021. била је прва модификација да се напише асемблерски програм који сортира низ бројева у меморији, а друга да се напише инструкција која ће то да ради. Време израде модификација је било три сата за прву групу, у којој те модификације нису уопште биле бодоване (јер су биле једва урадиве за три сата) а за остале групе, због тога што су сарадници каснили са прегледањем модификација, је то време било дуже и бодовала се само прва модификација (ако није ни покушана, -4п, ако није успешно одрађена, -3п, ако је донекле успешно одрађена, -2п или -1п).
    • На одбрани у фебруару 2021. модификације су носиле свака по 15 бодова и биле су:
      • Минимум три броја на задатим адресама, додавање инструкције DIV (не сме са одузимањем већ мора битовско шифтовање са ОРТ1, у супротном -3п).
      • Максимум три броја на задатим адресама, додавање инструкције МОД.
      • Колико од три броја на задатим адресама су исти, додавање инструкције која брише елемент из уланчане листе (један елемент уланчане листе је два бајта податка па два бајта адресе).
    • На одбрани у августу 2021. модификације су носиле свака по 15 бодова и биле су:
      • Прва модификација је писање асемблерског програма: Дат је један низ на адреси 510х. Направити нови низ на адреси 610х и преписати у њега све вредности првобитног низа које су веће од вредности L. Дужина низа (Н) и вредност (L) су произвољни и задају се у асемблерском коду. За све који нису имали ЦМП или СУБ за филтрирање, потребно је било да се у други низ преписују све вредности које нису једнаке L (са XОРом нпр).
      • Друга модификација је прављење нове инструкције ФИЛТЕР: Дат је један низ на адреси која се задаје адресирањем (ФИЛТЕР 510х, ФИЛТЕР (Р1), ...). Први члан тог низа је број осталих елемената у низу. Потребно је да инструкција ФИЛТЕР на исту локацију препише све елементе првобитног низа који су веће од вредности АЦЦ. За све који нису имали ЦМП или СУБ за филтрирање, потребно је било да се преписују све вредности које нису једнаке АЦЦ (са XОРом нпр).
    • На одбрани у септембру 2021. модификације су носиле свака по 15 бодова и биле су:
      • Прва модификације је писање асемблерског програма: Дат је један низ на адреси 510х. Саставити нови низ на адреси 610х тако што свака два суседа из првог низа замене места (1,2,3,4,5,6 -> 2,1,4,3,6,5). Дужина низа (L) је произвољна и задаје се у асемблерском коду. Студенти који нису имали ИНЦ или ДЕЦ су морали да га имплементирају прво.
      • Друга модификација је прављење нове инструкције АСWАП: Дат је један низ на адреси која се задаје типом адресирања (АСWАП 510х, ФИЛТЕР (Р1), ...). Први члан тог низа је број осталих елемената у низу. Потребно је да инструкција АСWАП на место првобитног низа препише нови низ формиран мењањем места свака два суседа првобитног низа (1,2,3,4,5,6 -> 2,1,4,3,6,5). У случају да је низ непарне дужине, последњи елемент остаје исти.
  • Ако сте пројекат урадили сами, не би требало да вам буде тешко да одговорите на питања о пројекту на одбрани.
  • Очекујте много кашњења на одбрани пројекта. На јануарској одбрани, студенти из првог термина су испитани тек за три сата, тако да су студенти који су израду модификација почели у 13:00 (и требали да заврше до 16:00) завршили одбрану у 21:00. Фебруарска одбрана је почела у 8:00 и завршила се у 1:30 (ујутру, следећег дана).

Референце

  1. Контекст, СИ 2019 Дисцорд сервер