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

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

Ispod su izlistani informacije i saveti o ORT2 projektu, konkretno za školsku 2020/2021. godinu, kao privremeni pomoćni resurs pri izradi projekta. Najviše detalja u vezi sa konkretnom izradom je objašnjeno na vežbama iz trećeg bloka, a ispod su izlistani najčešći problemi i pitanja, kao i stvari koje nisu pomenute na vežbama.

Opšte

  • Projekat se mora braniti u roku ili pre roka kada se radi treći kolokvijum, jer rađenjem trećeg kolokvijuma govorimo da nam se upiše ocena, pa da bi se projekat uračunao u ocenu moramo da je poništavamo i zatim ponovo radimo K3.
  • U redu je da formular za projekat pravimo nekim drugim programom (npr. draw.io) dok god sadrži iste informacije kao i na onom njihovom šablonu. Svaki član tima predaje formular odvojeno, i kao datum se stavlja datum odbrane.
    • Taj formular se i ne pregleda već je više stvar formalnosti - kao papire koje smo predavali za PORT domaće zadatke.
  • Svaki deo projekta (FETCH, ADDR, EXEC i INTR) se boduje odvojeno, i projekat je moguće uraditi delimično i dobiti bodove za to.
  • Kolega Danko odgovara na Microsoft Teams u roku od par sati do par dana. Koliko je poznato, ovo je najbrži način kontaktiranja saradnika na predmetu.
  • Datum predaje projekta je u januarskom roku bio do oko 12 sati pre odbrane.

Postavka

  • Signal grinst nam govori tri stvari tokom dekodiranja instrukcije:
    1. da li je zadat kod operacije koji ne postoji (povezati neiskorišćene izlaze dekodera instrukcije na OR),
    2. da li je zadat način adresiranja koji ne postoji (isto kao iznad, samo još proveriti i da li je instrukcija adresna), i
    3. da li je zadata kombinacija instrukcije i adresiranja koja nema smisla.
    • Treća stavka zahteva da razumemo semantiku instrukcija koje pokrećemo. Na primer:
      • ST instrukcija nam govori da na operand upišemo vrednost akumulatora. Pisanje ST #1000h bi bilo ekvivalentno 0x1000 = acc;, što nema smisla.
      • Kao ST, instrukcije koje čuvaju rezultat operacije nazad u operand (umesto u akumulator) takođe nemaju smisla zajedno sa neposrednim adresiranjem.
      • JADR instrukcija nam govori da skačemo na adresu na memoriji datu operandom. Neposredno i registarsko direktno adresiranje ne sadrže nikakvu adresu u memoriji (neposredno nam govori koji je podatak nad kojim radimo a registarsko direktno koji je registar, ali ne sadrže nikakvu adresu).
      • Kod operacija sa niskama poput STRFIND prihvatano je i rešenje gde STRFIND #1000h nije validno i rešenje gde to smatra da niska počinje od adrese 1000h.
    • Nakon pravljenja ovog signala, on se mora iskoristiti u FETCH fazi kako bi se vraćalo nazad na prvi korak pri detekciji greške.
      • Dolazi se do jednog problema: ukoliko su podaci i adrese dva bajta a memorijska reč jedan bajt ovaj signal će morati da se proverava nakon oba bajta, ali se ne sme proveravati da li je adresiranje validno nakon čitanja prvog bajta.[1] Postoji više rešenja za ovaj problem:
        • Može se proveravati grinst tek nakon očitavanja oba bajta, ali se ne zna da li je ovaj metod bio prihvatan na odbrani.
        • Može se odvojiti grinst na dva signala: grinst (nije validan operacioni kod) i gradr (adresiranje ne postoji ili nije validna kombinacija instrukcije i adresiranja).
        • Mogu se davati različite vrednosti signalu grinst u zavisnosti od toga da li se čita prvi ili drugi bajt.
  • Podjednako je validno pretpostaviti da INC R1 inkrementira R1 i vrednost čuva nazad u R1, i da inkrementira R1 i vrednost čuva u akumulatoru (slično važi i za ostala adresiranja).
  • Nije potrebno brinuti se oko efikanosti implementacije - ako nam je procesor mnogo neefikasno napravljen pregledač može da nas pita da ga izmenimo na odbrani.
  • Ako su registri poput PC i SP unutar registarske reči GPR, dozvoljeno je dodati signal koji resetuje sve registre na njihove očekivane početne vrednosti (na primer, PC na 1000h) i dozvoljeno je imati ulazne signale koji sigurno rade operaciju nad nekim specijalnim registrom poput incPC, incSP ili decSP bez obzira na zadatu adresu.
  • Koja instrukcija ažurira koje bitove PSW možete zaključiti na osnovu simulatora za laboratorijske vežbe.
    • U MUL instrukciji, bit C se ne menja, a bitovi V, Z i (najverovatnije) N se postavljaju kao kod sabiranja.
  • Instrukcija CMP je suštinski ista stvar kao SUB, samo što se ne ažurira akumulator već samo bitovi PSW. Poenta je da ova funkcija dozvoljava poređenja dva broja kako bi se nakon nje moglo odlučiti kuda se skače korišćenjem instrukcija grananja.
  • Mikroinstrukcije bi trebalo da budu što kraće, i ne moraju nužno biti deljive sa 4 ili 8.
    • Preporučeno da se mikroinstrukcije "prošire" neefektnim bitovima pre odbrane. Vrlo je nezgodno dodavati bit za cc, ba i ostale signale na odbrani, naročito ako su u pitanju kompleksne formule u Excel-u. Ovo se naročito odnosi na upravljačku jedinicu EXEC faze. U redu je pretpostaviti da će vam trebati mesta za još makar 2-3 cc-a, i za nešto manje od 10 ostalih signala.
  • Excel tabele za generisanje sadržaja ROM memorije iz signala se mogu naći na Teams.

Logisim

  • Projekat je podeljen na nekoliko šema:
    • ETF.circ i ETFExtended.circ - Biblioteke sa komponentama koje smo dosad učili na predmetu. Kao što je gore pomenuto, jedine korisne komponente iz ovih biblioteka jesu registarske komponente i RisingEdge. Nemojte dodavati komponente u ove šeme jer će vam na odbrani biti date ove šeme (nećete smeti da ih spakujete zajedno sa projektom) pa komponente dodate ovde možete izgubiti na odbrani.
    • ETFStudent.circ - Ovde dodajte svoje komponente koje su vam potrebne za izradu projekta.
    • ORT2Project.circ - Ovde se nalaze komponente za svaku fazu. Nove komponente dodajte u ETFStudent.circ.
  • Projekat je dozvoljeno raditi u Logisim-evolution. Od pomoći vam mogu biti ETF.circ i ETFExtended.circ konvertovani da budu kompatibilni sa Logisim-evolution. Pojedine stvari poput interfejsa, izgleda komponenti i pravila imenovanja signala mogu biti različite od starog Logisim-a, ali je dosta stvari poboljšano (ekran skroluje sa pomeranjem komponenti van ekrana, zumiranje je dostupno korišćenjem točkića miša, 64 bita je ograničenje širine signala umesto 32 bita, mnogo se lakše određuje šta je koji pin na ekranu za dizajn kola, podrazumevani izgled korisničkih komponenti je mnogo smisleniji, itd.) pa ako donekle znate šta radite preporučuje se da radite u Logisim-evolution. Na odbrani će biti dostupan sa mrežnog diska.
  • U projektu je dozvoljeno koristiti sve ugrađene Logisim komponente osim onih koje dosad nismo radili (poput množača), i moguće je da nas pregledači pitaju kako rade te komponente na odbrani. Takođe je preporučeno koristiti ugrađene Logisim komponente iz više razloga:
    • U ETF.circ su dostupne implementacije komponenti na način na koji smo ih implementirali na ORT1, što dovodi do raznih nepogodnosti, poput neefikasnosti tih komponenti (samo GPR8x16 komponenta iz ETFExtended.circ sadrži više od 300 kola čija se stanja moraju izračunavati zbog načina na koji su pravljeni registri i zato Logisim mnogo uspori nakon njenog postavljanja) i loših implementacija (biblioteka je prošla čak pet revizija i studenti i dalje prijavljuju probleme sa komponentama poput ROM ili dekodera). Nema potrebe izmišljati toplu vodu - kada su dostupne efikasne implementacije koje rade (jedino što mogu da imaju malo drugačiji izgled od očekivanog) nije potrebno ručno praviti sve te komponente, niti koristiti te ručno napravljene komponente.
    • Komponente iz ETF.circ ne mogu da imaju parametre za podešavanje, poput broja bitova ili ulaza na multiplekseru. Ovo dovodi do dva problema:
      1. studenti moraju da gube vreme da naprave svoje komponente koje imaju one podešene parametre koji su im potrebni u projektu (nema potrebe praviti četiri ROM komponente za svaku od faza kada možete samo iskoristiti ugrađenu komponentu), i
      2. leva traka sa komponentama postaje mnogo teža za navigaciju sa tolikim brojem komponenti.
  • fc signal postaje aktivan nakon nasumičnog broja koraka, ali tek nakon što se upali rdMEM. Ovo je ovako implementirano kako bismo morali da čekamo da se izvrši operacija nad memorijom pre nastavljanja u našem dijagramu upravljačkih jedinica.
    • Prilikom testiranja asemblerskog programa, mnogo vremena može da vam oduzme čekanje na fc signal da se upali, pa možete ovaj signal postaviti na logičku jedinicu kako bi testiranje prošlo brže.
  • Ako vam smeta neefikasnost GPR8x16 komponente date u ETFExtended.circ, možete koristiti ugrađenu brojačku komponentu (Memory > Counter) kako biste realizovali svoj brojački registar, i zatim iskoristili taj registar u svojoj GPR komponenti. Brojački registar se koristi ovako, s tim što kad su signali LD i INC uključeni u isto vreme vrednost brojača se dekrementira (funkcioniše kao DEC signal). U Logisim-evolution je interfejs brojačkih registara mnogo smisleniji i na svakom pinu intuitivnije piše šta radi.

Problemi

  • Boje u Logisim mogu lako da signaliziraju probleme:
    • Plavo - X - signalizira da vrednost signala nije definisana (stanje visoke impedanse). Ovo nije nužno greška, ali ako očekujete da neki signal bude definisan a nije, proverite gde je to on trebalo da bude postavljen a nije.
    • Crveno - E - signalizira da se negde prilikom postavljanja vrednosti signalu desila greška. Ova greška može da se desi iz više razloga:
      • Trostatičkom baferu (signal propuštanja) ili logičkom kolu je dovedena nedefinisana vrednost na ulaz - ako vam crveni signal izlazi iz nekog trostatičkog bafera ili logičkog kola proverite njihove ulazne signale
      • Jednom signalu se na više mesta zadaje različita vrednost - ovo se često dešava kada na magistralu propuštate vrednosti bez da prethodno u odgovarajuću šemu dodate trostatički bafer koji vrednost propušta samo kada je 1 (kao što je to Danko radio na vežbama)
    • Narandžasto - signal je povezan na više ulaznih pinova sa različitom širinom. Proverite širine svih pinova na koje je taj signal povezan i promenite im širine tako da odgovaraju jedni drugima. Ovo znači da kad menjate širinu magistrale u jednoj šemi, morate da je promenite u svim šemama koje tu magistralu koriste.
  • Generalno, ako vam se neka komponenta odjednom čudno ponaša i ne možete da zaključite zašto, restartujte simulaciju. Ponekad (samo na starom Logisim-u) odvezivanje pa povezivanje signala koji je crven može da reši problem.
  • Ako vam Logisim ispiše "Cannot modify circuit" to znači da pokušavate da izmenite komponentu koja nije u .circ fajlu koji ste otvorili. Tu komponentu možete izmeniti tako što otvorite .circ fajl u kojem se nalazi da komponenta (File > Open) ili, ako se ta komponenta nalazi u ETF.circ ili ETFExtended.circ, prekopirati njen sadržaj i izgled u neku novu komponentu u ETFStudent.circ.
  • Ako vam Logisim ne da da kopirate sadržaj komponenti iz jednog .circ fajla u drugi, morate otvoriti jedan fajl koristeći File > Open opciju iz prozora sa drugim .circ fajlom.
  • Ako menjate ulazne pinove u bilo kojoj šemi, može da se desi da se svi ulazni pinovi na šemi resetuju nazad na svoje podrazumevane pozicije. Ovaj problem možete primetiti kada vam signali sa magistrala imaju nedefinisane vrednosti u nekoj šemi a ništa niste menjali u CPU - to znači da su se ulazni pinovi u izgledu kola ispremeštali i da morate da ih ponovo podesite. (Srećno s time, ako koristite stari Logisim.)
  • Kada testirate kako vam radi procesor, obavezno se prebacite u tab za simulaciju i izaberite simulaciju za COMPUTER. To Logisim-u kaže da se prebacujete u kontekst simulacije za glavnu šemu, i vrednosti ulaznih signala kao i signal takta će biti računati u odnosu na glavnu šemu. Navigaciju između šema u modu simulacije radite tako što proširujete liste podkomponenti i birate te podkomponente iz liste - ne birate druge šeme prvog nivoa jer to menja vaš kontekst simulacije. Tab za simulaciju se nalazi pored taba za komponente, u gornjem desnom uglu, tačno iznad panela sa listom komponenti.
    • Ovaj problem možete primetiti tako što vam ne radi signal takta u nekim šemama, ili ulazni pinovi imaju svi vrednosti logičke nule iako neki od dovedenih signala iz spoljašnjeg kola imaju vrednost logičke jedinice.
  • Ako vam se sadržaj ROM memorije ne čuva nakon restartovanja simulatora, ili jedna šema dobija sadržaj mikromemorije druge šeme nakon izmene mikromemorije te druge šeme, koristite ugrađenu ROM komponentu umesto pravljenja svojeg okvira za nju ili korišćenja one iz ETFExtended.circ.

Odbrana

  • Ako loše uradite odbranu u jednom roku, možete izaći i u još jednom sledećem da popravite.
  • Na odbrani u januaru 2021. bila je prva modifikacija da se napiše asemblerski program koji sortira niz brojeva u memoriji, a druga da se napiše instrukcija koja će to da radi. Vreme izrade modifikacija je bilo tri sata za prvu grupu, u kojoj te modifikacije nisu uopšte bile bodovane (jer su bile jedva uradive za tri sata) a za ostale grupe, zbog toga što su saradnici kasnili sa pregledanjem modifikacija, je to vreme bilo duže i bodovala se samo prva modifikacija (ako nije ni pokušana, -4p, ako nije uspešno odrađena, -3p, ako je donekle uspešno odrađena, -2p ili -1p).
    • Na odbrani u februaru 2021. modifikacije su nosile svaka po 15 bodova i bile su:
      • Minimum tri broja na zadatim adresama, dodavanje instrukcije DIV (ne sme sa oduzimanjem već mora bitovsko šiftovanje sa ORT1, u suprotnom -3p).
      • Maksimum tri broja na zadatim adresama, dodavanje instrukcije MOD.
      • Koliko od tri broja na zadatim adresama su isti, dodavanje instrukcije koja briše element iz ulančane liste (jedan element ulančane liste je dva bajta podatka pa dva bajta adrese).
    • Na odbrani u avgustu 2021. modifikacije su nosile svaka po 15 bodova i bile su:
      • Prva modifikacija je pisanje asemblerskog programa: Dat je jedan niz na adresi 510h. Napraviti novi niz na adresi 610h i prepisati u njega sve vrednosti prvobitnog niza koje su veće od vrednosti L. Dužina niza (N) i vrednost (L) su proizvoljni i zadaju se u asemblerskom kodu. Za sve koji nisu imali CMP ili SUB za filtriranje, potrebno je bilo da se u drugi niz prepisuju sve vrednosti koje nisu jednake L (sa XORom npr).
      • Druga modifikacija je pravljenje nove instrukcije FILTER: Dat je jedan niz na adresi koja se zadaje adresiranjem (FILTER 510h, FILTER (R1), ...). Prvi član tog niza je broj ostalih elemenata u nizu. Potrebno je da instrukcija FILTER na istu lokaciju prepiše sve elemente prvobitnog niza koji su veće od vrednosti ACC. Za sve koji nisu imali CMP ili SUB za filtriranje, potrebno je bilo da se prepisuju sve vrednosti koje nisu jednake ACC (sa XORom npr).
    • Na odbrani u septembru 2021. modifikacije su nosile svaka po 15 bodova i bile su:
      • Prva modifikacije je pisanje asemblerskog programa: Dat je jedan niz na adresi 510h. Sastaviti novi niz na adresi 610h tako što svaka dva suseda iz prvog niza zamene mesta (1,2,3,4,5,6 -> 2,1,4,3,6,5). Dužina niza (L) je proizvoljna i zadaje se u asemblerskom kodu. Studenti koji nisu imali INC ili DEC su morali da ga implementiraju prvo.
      • Druga modifikacija je pravljenje nove instrukcije ASWAP: Dat je jedan niz na adresi koja se zadaje tipom adresiranja (ASWAP 510h, FILTER (R1), ...). Prvi član tog niza je broj ostalih elemenata u nizu. Potrebno je da instrukcija ASWAP na mesto prvobitnog niza prepiše novi niz formiran menjanjem mesta svaka dva suseda prvobitnog niza (1,2,3,4,5,6 -> 2,1,4,3,6,5). U slučaju da je niz neparne dužine, poslednji element ostaje isti.
  • Ako ste projekat uradili sami, ne bi trebalo da vam bude teško da odgovorite na pitanja o projektu na odbrani.
  • Očekujte mnogo kašnjenja na odbrani projekta. Na januarskoj odbrani, studenti iz prvog termina su ispitani tek za tri sata, tako da su studenti koji su izradu modifikacija počeli u 13:00 (i trebali da završe do 16:00) završili odbranu u 21:00. Februarska odbrana je počela u 8:00 i završila se u 1:30 (ujutru, sledećeg dana).

Reference

  1. Kontekst, SI 2019 Discord server