Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  5 1014
Jeg har nettopp implementert en liten turingmaskin (luke 9 i min julekalender). Men den er kodet i hu og hast, og jeg utfordrer derfor folk her til å vise meg bedre implementasjoner (valgfritt språk).

Do you have what it takes?
Ah, moro tormaroe! Er det noen spesielle språk du ønsker å se dette bli implementert i?

Dere som ikke aner hva det er snakk om her kan framover kutte ut med flåsete innlegg.
Sist endret av m0b; 9. desember 2010 kl. 15:46.
virker som et morsomt prosjekt. Tror jeg blir å skrive en versjon i enten python eller C# så fort jeg er ferdig med eksamen i morgen.

Vi implementerte forresten en "mips-simulator" som kjører binær-instruksjoner som en obligatorisk innlevering (med noe begrenset instruksjonsett, men med fullstendig implementasjon av pipeline og hazard-detection). Er dette noe som ville vært interesant for deg å se på?
codeslinger
tormaroe's Avatar
Trådstarter
Er interessert i å se typisk imperative / objektorienterte løsninger, men også funksjonelle som min - for å se hva jeg eventuelt kunne gjort bedre. De fleste språk er interessante, python og C# er flott det.

Og en mips-simulator er absolutt interessant, for jeg har ofte tenkt på å gjøre det selv, uten at jeg noengang har satt meg inn i den arkitekturen.
Okei. Legger ut MIPS-simulatoren så du kan se på den. Den er skrevet i Python 2.6 og har følgende instruksjoner implementert:

Jump, store-word, loadword, branch-not-equal, break, and, add og addui.

For å kjøre koden starter men med å kjøre "simulator.py" og legg ved navnet på "memory-fila". Memory-fila er da en fil som inneholder minnet slik det skal være når programmet starter; men instruksjonene og eventuelt data, satt opp på den måten at først en minne-adresse, så en instruksjon (i hex), og alt etter det er kommentarer. Med en minneadresse per linje.

Programmet vil starte med å sette PC til første minne-adressen i fila, men utover denne er den ikke avhengi av at minne-adressene er sortert.

Programmet er implementert etter følgende tegning og modell:
http://rolsted.co.uk/images/mipsProject/mipsHwDia.jpg
Bildet er desverre litt lite.

De ulike logiske enhetene er forskjellige klasser (f.eks. er det laget en klasse for å beskrive ulike MUX-er og ALU-er), men alle arver fra en standard-komponent klasse. Det betyr at de har visse likheter, som gjør at man kan koble de sammen. Så i begynnelsen av koden så sier man i programmet hvilke logiske enheter som er koblet sammen. (I praksis så sies det her at f.eks. "MUX1 henter input fra outputten til ALU1 og ALU2, og har kontrollsignal "Jump")

Programmet er satt opp for å simulere hvordan en pipeline-prosesor fungerer. Det vil si at den hele tiden vil lese inn en instruksjon og legge den til i pipelinen ved å endre input og output-verdiene til de ulike klassene, på en måte som har likhet med hvordan det ville blitt på elektronikk nivå.

For hver klokkesykel vil programmet oppdatere alle de simulerte logiske enhetene. Denne delen kunne vært gjort på en bedre måte, men for å ha det oversiktlig - og samtidig unngå en del bugs ble det valgt å manuelt kalle oppdatering på hvert enkelt element. Men personlig skulle jeg gjerne ha fått implementert denne delen bedre.

Siden dette er implementert som en pipeline, vil den få samme problemer med data-hazards og kontroll-hazards som den i virkeligheten får. Dette er håndtert med hensyn til stalls. Forwarding-unit rakk jeg desverre ikke implementere.
Sist endret av etse; 9. desember 2010 kl. 17:00.
codeslinger
tormaroe's Avatar
Trådstarter
Kult, etse. Litt for mye å sette seg inn i akkurat nå, men kanskje jeg kan kose meg med det til helgen