Vis enkel innførsel

dc.contributor.advisorAunet, Snorre
dc.contributor.advisorBarzic, Ronan
dc.contributor.authorRotevatn, Synnøve Andersen
dc.date.accessioned2021-09-30T16:24:26Z
dc.date.available2021-09-30T16:24:26Z
dc.date.issued2021
dc.identifierno.ntnu:inspera:77039769:50486635
dc.identifier.urihttps://hdl.handle.net/11250/2786755
dc.descriptionFull text available on 2023-06-14
dc.description.abstractAsynkrone kretsar er i utgangspunktet meir robuste for endringar i forseinking enn synkrone kretsar, som er meir vanlege. Automatisert desynkronisering mogleggjer design av asynkrone kretsar ved å fjerne den globale klokka og erstatte den med ein handshake-krets, utan å endre på designflyten. Endringane i Verilog-kode som trengst for å desynkronisere synkrone kretsar til ein Muller-pipeline er presentert. Ein implementasjon i Python med Pyverilog er laga for å automatisere prosessen. Den er testa på to små design. Eit er ein lineær pipeline-krets med utelukkande register. Den andre er ein ikkje-lineær pipeline-krets med ei forgreining, ei samanslåing og kombinatorisk logikk. Implementasjonen lukkast med å transformere kretsane til asynkrone kretsar, og begge dei desynkroniserte kretsane består testar som er ekvivalente med testar for dei synkrone kretsane. Typen asynkron krets som er valt er derimot så enkel at funksjonaliteten ikkje identisk som for den synkrone kretsen. Til slutt vart implementasjonen testa på ein RISC-V CPU. Alle dei same endringane vart gjort, men løysinga er ikkje avansert nok til å handtere ein så komplisert krets. Det blei identifisert fleire problem med den noverande implementasjonen, som må forbetrast for å få til ei nytting desynkronisering. Metoden er ikkje optimal, men den kan vere mest hensiktsmessig å bruke for nokon som har full kontrol på syntaksen til kretsen som skal desynkroniserast.
dc.description.abstractAsynchronous circuits are inherently more robust to delay variability than the more common synchronous circuits. Automated desynchronization allows for making asynchronous circuits by removing the global clock and replacing it with handshake circuitry, without changing the design flow. The changes in the Verilog code needed to desynchronize a synchronous circuit into a simple Muller pipeline are presented. An implementation in Python using Pyverilog is made to automate that process. It is tested on two small designs. One is a linear pipeline consisting of just registers, and the other is a non-linear pipeline with a fork, a join and combinational logic. The implementation succeeds in transforming the designs into asynchronous circuits, and both pipelines pass tests that are comparable to the tests of the original circuits. However, the simplicity of the type of asynchronous circuit that is chosen means that the functionality is not equivalent to the original. Lastly, the implementation is tested on a RISC-V CPU core. All the same changes are made as with the smaller designs, but the solution is not advanced enough to handle such a complex circuit. A number of limitations to the current implementation are identified, which would need to be improved to have useful, automated desynchronization. The method is not optimal for all cases, but can be the most useful for someone who has full control of the coding style of the circuit they are desynchronizing.
dc.languageeng
dc.publisherNTNU
dc.titleAutomated Desynchronization Using Pyverilog
dc.typeMaster thesis


Tilhørende fil(er)

FilerStørrelseFormatVis

Denne innførselen finnes i følgende samling(er)

Vis enkel innførsel