Inhoudsopgave. Optimalisatie van de mmips. Forwarding optie 1. Design flow. implementation

Vergelijkbare documenten
Optimalisatie van de mmips

Oefeningen Interpretatie I Reeks 6 : Registermachines

Tentamen Computersystemen

EDK Walkthrough: Hardwareontwerp met GPIO en UART Deel 1

Computerarchitectuur. Terugblik / discussie / oefenopgaven

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files

Van Poort tot Pipeline. Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam

Hoe werkt een computer precies?

EE1410: Digitale Systemen BSc. EE, 1e jaar, , 10e hoorcollege

Beter, Sneller, Mooier. Processoren 12 januari 2015

DDS chips. DDS = Direct Digital (frequency) Synthesis. Output = sinusvormig signaal. Maximum frequentie = ½ klokfrequentie

Digitale Systemen (ET1 410)

Computerarchitectuur. H&P App. C. Pipelining

Basisconcept VHDL. Digitaal Ontwerpen Tweede studiejaar. Wim Dolman. Engineering, leerroute Elektrotechniek Faculteit Techniek

Uitwerking oefententamen Computerarchitectuur December 2016

Digitale technieken Deeltoets II

Sequentiële gepijplijnde machine

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

DomJudge-Practicum. Open Dag UU

ES1 Project 1: Microcontrollers

Examen computerarchitectuur

Digitale Systeem Engineering 1. Week 4 Toepassing: Pulse Width Modulation Jesse op den Brouw DIGSE1/

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

ES1 Project 1: Microcontrollers

Hardware-software Co-design

Lab6: Implementatie video timing generator

Het koppelen van een Weidmüller u-remote aan een System Q via Profibus.

Game Maker 6.1. Sprite up your life with Gamemaker. Hoofdstuk 1.2

Digitale en analoge technieken

Teamhandleiding DOMjudge (versie 2.2.0muKP) 31 mei 2008

Scan-pad technieken. Zet elk register om in een scan-pad register (twee opeenvolgende D-latches: master-slave):

Computerarchitectuur en netwerken. Memory management Assembler programmering

von-neumann-architectuur Opbouw van een CPU Processoren 1 december 2014

Zelftest Inleiding Programmeren

Arduino Workshop 1 Zuid-Limburg

Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel:

EE1410: Digitale Systemen BSc. EE, 1e jaar, , 2e werkcollege

Toets In2305-ii Embedded Programming Dinsdag 28 November 2006, 15:45-16:30

Computerarchitectuur en netwerken Toets 1 4 okt

Herconfigureerbare Hardware in Ieders Bereik

A Quick Start Guide: AVR programmeren

ES1 Project 1: Microcontrollers

11011 Processor MMI Intro. Binaire representatie. Computer: Logische opbouw (Von Neumann) 3-input 1-hot detector.

DOMjudge teamhandleiding

Versturen van vanuit een Delphi VCL toepassing

Zelf PIC's programmeren. Deel-1 KnipperLED (flashing LED)

SIM-PL, auteursomgeving voor digitale componenten

Deel 2: Endnote bibliografische software gebruiken als databasemanager en editor

Assembly en Assemblers. Processoren 5 januari 2015

Het aansturen van de FC280 via ABB op Profibus.

Handleiding Nieuwsbrief InSocial in Mailchimp

CURSUS DIGITAAL ATELIER Photoshop/ Illustrator/ Indesign

Succes! Theo DʼHondt 13 juni 2010

ROBOMIND EV3 EXPORT HANDLEIDING VOOR WINDOWS COMPUTERS

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.

Computerarchitectuur. H&P Appendix A: Instruction Set Principles

Computerarchitectuur. H&P Appendix A: Instruction Set Principles

Online c++ leren programmeren:

PROS1E1 Handleiding ( ) Kf/Dd/Bd

Spoilerfoto s meenemen op een GPSr.

Socio-technisch systemen. Ian Sommerville 2004 Software Engineering, 7th edition. Chapter 2 Slide 1

Antwoorden zijn afgedrukt!!!!!!!

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise

HOP9850. void sendfrequency(unsigned long frequency) zie SWEEP9850

1. Testdata TA sensor met Ohmse belasting

Grafisch programmeren met GTK

Vakgroep CW KAHO Sint-Lieven

Een ASP.NET applicatie opzetten. Beginsituatie:

scc = b) CD AB

Digitale Systeem Engineering 1. Week 1 VHDL basics, datatypes, signal assignment Jesse op den Brouw DIGSE1/

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15)

Opleiding: ESE, HAN Opl.variant: vt Groep/Klas: ES2 Digitaal Signaal Ontwerpen 26 januari 2012 Tijd: 13:30 15:00

Formulieren maken met Dreamweaver CS 4/CS 5

Inhoudsopgave Voorwoord 5 Voordat je begint 6 Wat heb je nodig? 7 De website bij het boek 7 Voor ouders, verzorgers en leraren

Let op dat de scoping regels gerespecteerd blijven; het volgende voorbeeld mag geen fout melden.

Cursus Onderwijs en ICT. Programmeren met Visual Basic

1. Programma installeren Installeren van TotalMedia Studio Kopiëren van de oefenbestanden Tips... 18

Huiswerk Linux: Apache groepsrechten

Java virtuele machine JVM

EE1400: Programmeren in C BSc. EE, 1e jaar, , 3e college

Het koppelen van een FC302 op Profibus met een Siemens PLC

6. Het maken van een database

Algoritmisch Denken: Dodo s Bit Parity

RCL Arduino Workshop 1

File Uploads met standaard ASP.NET

Hoofdstuk 7. Computerarchitectuur

Software Reverse Engineering. Jacco Krijnen

Hoofdstuk 4. Digitale techniek

Examen Geavanceerde Computerarchitectuur

Technische nota AbiFire Rapporten maken via ODBC

Inhoud. A Eskwadraat Linuxcursus UNIX. GNU/Linux. Slackware. Red Hat. GNU/Linux Bestanden Thuiswerken Shell Editors Opdracht.

Open Dag Informatica (28 nov 2003) 3D Graphics Workshop

WinCCFlex. WinCC Flex MeRa 1/22

Disclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen

Studentnummer:... Opleiding:... a) Met welke term wordt het interface tussen software en hardware van een processor aangeduid?

College 13: Patterns (2)

Sequentiële Logica. Processoren 24 november 2014

Informatica: C# WPO 13

Basis UNIX commando's - overzicht

Programmeren en Wetenschappelijk Rekenen in Python. Wi1205AE I.A.M. Goddijn, Faculteit EWI 8 mei 2014

Transcriptie:

2 Inhoudsopgave Optimalisatie van de mmips pc Sander Stuijk Veel gestelde vragen Hoe moet ik forwarding implementeren? Hoe moet ik clipping implementeren? Waarom is mijn simulatie zo traag? Hoe kan ik mijn mmips testen? Waarom stopt mijn mmips simulatie niet? Wat is de maximale frequentie van mijn mmips? Waarom werkt ImProc.exe niet? Waarom is het plaatje dat uit de mmips komt zo donker? Opdracht Belangrijke data Vragen Department of Electrical Engineering Electronic Systems 3 Design flow 4 implementation sw LCC C Compiler Application (C sources) LCC C Compiler Celoxica create memory add1 1 if_instr if_pc 7 imm2word shiftleft 2 add2 shiftleft_ jmp decoder_nb Forwarding optie 1 5 branch_ memdev signextend byte hw hardware simulator Visual C++ mmips (C++ sources that use SystemC library) CoCentric SystemC Compiler Xilinx XST Celoxica transfer Xilinx ISE hazard decoder hazard_ 4 8 6 3 1

pc 5 add1 1 if_instr if_pc 7 imm2word shiftleft 2 add2 shiftleft_ jmp 5 branch_ memdev decoder_nb Forwarding optie 2 6 Forwarding - aandachtspunten signextend byte Register 0 heeft altijd de waarde 0, ongeacht wat er in dit register wordt geschreven Forward dus nooit register 0 Forward altijd de nieuwste data EX gaat voor MEM, MEM gaat voor WB, WB gaat voor ID decoder 4 8 6 3 De twee register inputs kunnen uit dezelfde of verschillende pipeline stages komen De twee forwarding multiplexers moeten los worden aangestuurd hazard_ hazard De lees operaties (lw, lb) hebben 1 delay slot, de data uit het geheugen is pas beschikbaar is in de WB stage Er kan een data hazard zijn tussen een load instructie in the MEM stage en een instructie in de ID stage, deze kan niet worden opgelost met forwarding 7 Forwarding WB stage 8 Registerfile en de write-back stage Hazard detectie in WB stage else if (memwbregwrite_t == 1 && ((memwbwriteregister_t == ifidreadregister1_t) (memwbwriteregister_t == ifidreadregister2_t))) hazard = 1; Forwading vanuit WB stage if (memwbregwrite_t == 1 && memwbwriteregister_t == ifidreadregister1_t && memwbwriteregister_t!= 0) forwarda.write(3); if (memwbregwrite_t == 1 && memwbwriteregister_t == ifidreadregister2_t && memwbwriteregister_t!= 0) forwardb.write(3); H&P mmips Input Input Write Write Output Output Write REG Read REG De data is beschikbaar op de output van de registerfile in de huidige cycle De data is beschikbaar op de output van de registerfile in de volgende cycle 2

9 Hoe moet ik clipping implementeren? 10 Voeg een custom patroon aan de C code toe void main(void) int a, b, result; char *buf_i = (char*)0x600000, *buf_o = (char*)0x665400; for (a = 1; a < HEIGHT - 1; a++) for (b = 1; b < WIDTH - 1; b++) result=(( 5*(int)buf_i[(a - 1) * WIDTH + b - 1] + -3*(int)buf_i[(a - 1) * WIDTH + b ] + 6*(int)buf_i[(a - 1) * WIDTH + b + 1] + -7*(int)buf_i[ a * WIDTH + b - 1] + 11*(int)buf_i[ a * WIDTH + b ] + -7*(int)buf_i[ a * WIDTH + b + 1] + 6*(int)buf_i[(a + 1) * WIDTH + b - 1] + -3*(int)buf_i[(a + 1) * WIDTH + b ] + 5*(int)buf_i[(a + 1) * WIDTH + b + 1] + 128) / 13); /* Clipping */ if(result<0) buf_o[a * WIDTH + b] = 0; else if (result > 255) buf_o[a * WIDTH + b] = (char)255; else buf_o[a * WIDTH + b] = result; #define clip(a,b) ((a) - ((b) + *(int *) 0x12344321)) void main(void) int a, b, result; char *buf_i = (char*)0x600000, *buf_o = (char*)0x665400; for (a = 1; a < HEIGHT - 1; a++) for (b = 1; b < WIDTH - 1; b++) result=(( 5*(int)buf_i[(a - 1) * WIDTH + b - 1] + -3*(int)buf_i[(a - 1) * WIDTH + b ] + 6*(int)buf_i[(a - 1) * WIDTH + b + 1] + -7*(int)buf_i[ a * WIDTH + b - 1] + 11*(int)buf_i[ a * WIDTH + b ] + -7*(int)buf_i[ a * WIDTH + b + 1] + 6*(int)buf_i[(a + 1) * WIDTH + b - 1] + -3*(int)buf_i[(a + 1) * WIDTH + b ] + 5*(int)buf_i[(a + 1) * WIDTH + b + 1] + 128) / 13); /* Clipping */ result = clip(result,result); buf_o[a * WIDTH + b] = result; 11 Voeg clipping aan de LCC compiler toe 12 Compileer de LCC compiler Open het bestand lcc/src/minimips.md in een text editor Wijzig de custom operatie Open een cygwin shell en voer de volgende commando s uit: 1) cd /cygdrive/d/mmips/lcc 2) make clean 3) make opcode = 0 function code = 0x31 3

pc Voeg de clipping functionaliteit toe aan de mmips add1 1 if_instr if_pc decoder 4 imm2word 7 shiftleft 2 add2 shiftleft_ jmp 5 branch_ hazard_ 13 14 Controleer dat clipping gebruikt wordt decoder_nb 8 6 memdev signextend byte 3 Open een cygwin shell en voer de volgende commando s uit: 1) lcc image.c o mips_mem.bin 2) disas mips_mem.bin less Zoek een assembler instructie met opcode 0 and function code 0x31 hazard 15 Waarom is mijn simulatie zo traag? 16 Hoe kan ik mijn mmips testen? Controleer met disas hoeveel instructies er uitgevoerd moeten worden om 1 pixel te bewerken en vermenigvuldig dit met het aantal pixels in het plaatje Met behulp van deze procedure kun je mogelijke optimalisaties vinden Maak een klein test programma om de nieuwe functionaliteit te testen Maak een VCD bestand met behulp van een similatie Vergelijk de VCD trace met de assembler code Begin aan het begin van het programma Gebeurt er precies dat wat jij verwacht? 4

17 Waarom stopt mijn mmips simulatie niet? 18 Wat is de maximale frequentie van mijn mmips? Gebruik <>+<c> om een simulatie te stoppen Het VCD bestand bevat alle signalen tot het moment dat de simulatie wordt gestopt Bekijk de signalen in het VCD bestand om je probleem te vinden Veel voorkomende problemen Een combinatorische lus in de mmips Een fout in de forwarding Het synthese rapport wordt opgeslagen in het bestand mmips.srp maximale frequentie kritiek pad 19 Waarom werkt ImProc.exe niet? 20 Waarom is het plaatje zo donker? De combinatie van MS Vista en Cygwin geeft soms problemen met de file permissions Voer de volgende stappen uit als je een permission denied foutmelding krijgt op ImProc.exe of imgproc.exe 1)Open een cygwin shell 2)chmod a+rwx /usr/bin/imgproc.exe 3)chmod a+rwx /usr/bin/improc.exe 4)cd /cygdrive/d/imageprocessing/cygwin_post_install 5)./create_commands.sh 6)chmod a+rwx /usr/bin/imgproc.exe 7)chmod a+rwx /usr/bin/improc.exe Dit probleem kan een aantal oorzaken hebben imgproc.exe neemt standaard aan dat het plaatje 128x128 pixels is de filter coëfficiënten zijn niet altijd even logisch (vanuit een image processing perspectief) er zit een fout in je mmips Het plaatje dat jouw mmips oplevert moet uiteindelijk bit exact overeenkomen met het plaatje dat door de originele mmips wordt geproduceerd. Als beide plaatjes precies even donker zijn dan is het goed Je kunt dit echter niet zelf zien, gebruik daarom check-image 5

21 Inhoudsopgave 22 Opdracht Veel gestelde vragen Hoe moet ik forwarding implementeren? Hoe moet ik clipping implementeren? Waarom is mijn simulatie zo traag? Hoe kan ik mijn mmips testen? Waarom stopt mijn mmips simulatie niet? Wat is de maximale frequentie van mijn mmips? Waarom werkt ImProc.exe niet? Waarom is het plaatje dat uit de mmips komt zo donker? Opdracht Belangrijke data Vragen Optimaliseer de run-time van een image processing algoritme dat draait op de mmips. Beperkingen Alle programma s die op de originele mmips draaien moeten ook op jouw mmips werken. Programma s die op jouw mmips draaien moeten precies hetzelfde resultaat (bit-exact) produceren als de originele mmips. Toegestaan Toevoegen van speciale instructies aan de mmips; Aanpassen van het ontwerp van de mmips (b.v. forwarding). Niet toegestaan Aanpassingen aan het image processing algoritme die niet nodig zijn om speciale instructies te gebruiken (b.v. vervangen van vermenigvuldiging door shifts). 23 Testen en implementeren van het ontwerp 24 Insturen van je ontwerp Test de functionele correctheid Draai de originele mmips met het algoritme om een referentie output te maken. Vergelijk deze referentie output met het resultaat van jouw eigen mmips. Hiervoor kun je gebruik maken van het check-image commando Gebruik het submit-design commando om jouw ontwerp in te sturen Je kunt zo vaak als je wilt een nieuw ontwerp opsturen, alleen de laatste versie wordt getest Implementeer jouw ontwerp op de FPGA Door je ontwerp op de FPGA te implementeren kun je de maximale klok frequentie van jouw mmips bepalen. 6

25 Belangrijke data 27 Ondersteuning en informatie Het test programma is beschikbaar op zaterdag 12 juni om 9.00 op www.es.ele.tue.nl/education/computation/mmips/assignment/submit2.php Stuur je resultaat op voor woensdag 16 juni a.s. om 12.00 uur Dit is een harde deadline. Je kunt geen uitstel krijgen! Iedere woensdag tussen 13.00 en 15.00 uur in PT 9.10 Kijk ook op www.es.ele.tue.nl/education/computation/mmips voor meer informatie, tips, etc. Presentaties op vrijdag 18 juni a.s. Maak een afspraak voor een presentatie via de website De presentatie moet gaan over wat jij gedaan hebt om de mmips sneller te maken (leg dus niet het boek, forwarding of clipping uit) 28 Vragen 7