200 likes | 309 Views
Speciale. Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende ”Java Optimized Processor” (JOP) Speciale – efterår 2005 Teknisk Informationsteknologi Jan Lauritzen & Mads Pedersen. Agenda. Opsummering Hvad har vi arbejdet med siden?
E N D
Speciale Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende ”Java Optimized Processor” (JOP) Speciale – efterår 2005 Teknisk Informationsteknologi Jan Lauritzen & Mads Pedersen
Agenda • Opsummering • Hvad har vi arbejdet med siden? • JOP’s realtidsprofil • Gennemgang af SW/HW co-design JOP-speciale: Jan Lauritzen & Mads Pedersen
Opsummering af JOP • Main features: • Small core that fits in a low cost FPGA • Configurable resource usage throughHW/SW co-design • Predictable execution time of Java bytecodes • Fast execution of Java bytecodeswithout JIT-Compiler • Flexibility for embedded systemsthrough FPGA implementation JOP-speciale: Jan Lauritzen & Mads Pedersen
Hvad har vi arbejdet med siden? • Analyse af realtid, arkitektur, API mv. • Portering til en anden FPGA-platform: Spartan-3 • SW/HW co-design JOP-speciale: Jan Lauritzen & Mads Pedersen
JOP’s realtidsprofil • Inspireret af Ravenscar-Java JOP-speciale: Jan Lauritzen & Mads Pedersen
JOP’s realtidsprofil • Ikke kompatibel med hverken RTSJ eller Ravenscar-Java • Forskelle mellem JOP og Ravenscar-Java • Mere low-level, skal selv håndtere detaljer som f.eks. waitForNextPeriod() • Ravenscar-Java bygget ovenpå som test • Fordel: Flere er bekendt med Ravenscar-Java samt detaljer pakkes pænere ind JOP-speciale: Jan Lauritzen & Mads Pedersen
JOP’s realtidsprofil JOP-speciale: Jan Lauritzen & Mads Pedersen
JOP-eksempel public class JopExample { public JopExample() { MyThread t = new MyThread(); } public static void main(String[] args) { JopExample example = new JopExample(); RtThread.startMission(); for (;;) {;} // busy do nothing private class MyThread extends RtThread { private MySwEvent ev = new MySwEvent(); public MyThread() { super(1, 1000000); } public void run() { while (true) { System.out.println("."); waitForNextPeriod(); } } } } JOP-speciale: Jan Lauritzen & Mads Pedersen
Eksempel med Ravenscar-Java import ravenscar.*; ... public class RavenscarExample extends Initializer { public void run() { MyThread t = new MyThread(); } public static void main(String[] args) { RavenscarExample example = new RavenscarExample(); example.start(); } private class MyThread extends PeriodicThread { public MyThread() { super(new PriorityParameters(10), new PeriodicParameters(new AbsoluteTime(0,0),new RelativeTime(1000,0)), new Runnable() { public void run(){ System.out.println("."); } } ); } } } JOP-speciale: Jan Lauritzen & Mads Pedersen
SW/HW co-design • Udføre udvalgte operationertættere på hardware: • Optimering 1: JOP-mikrokode • Optimering 2: FPGA (VHDL) JOP-speciale: Jan Lauritzen & Mads Pedersen
SW/HW co-design • Eksempel med 32-bit multiplikation JOP-speciale: Jan Lauritzen & Mads Pedersen
JOP-mikrokode • P.t. ingen Java-processorer i stand til at udføre alle Java-bytekoder direkte i hardware • Almindelig løsning • Udføre noget i HW og resten i SW • I JOP oversættes Java-bytekoder til JOP-mikrokode: • Native instruktionssæt, som udføres direkte i hardware • Hver mikrokode udføres på én cycle • WCET-analyse mulig • Se i Schoeberls phd-afhandling, Appendix C JOP-speciale: Jan Lauritzen & Mads Pedersen
Java-bytekode JOP-mikrokode JOP-speciale: Jan Lauritzen & Mads Pedersen
Processor pipeline JOP-speciale: Jan Lauritzen & Mads Pedersen
Optimering 1 • Fordele ved mikrokode • Håndkode bedre en Java-kompiler • Tilføj egen bytekode • Fibonacci-algoritme valgt. • 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, … JOP-speciale: Jan Lauritzen & Mads Pedersen
Optimering 1: Java-kode public long fib(int n) { int res = 1; int f1 = 1; int f2 = 1; for (int i = 2; i <= n; i++) { res = f1 + f2; f2 = f1; f1 = res; } return res; } JOP-speciale: Jan Lauritzen & Mads Pedersen
Optimering 1: Fremgangsmåde • Tilføj i følgende filer: • jvm.asm • Native.java • JopInstr.java • JopSim.java • Rekompiler for at få det inkluderet i VHDL JOP-speciale: Jan Lauritzen & Mads Pedersen
Optimering 1: Resultat • Java-bytekode: • 13 instruktioner (vha. værktøjet jclasslib) • 29 cycles (Schoeberls Appendix D) • JOP-mikrokode: • 11 instruktioner • 11 cycles JOP-speciale: Jan Lauritzen & Mads Pedersen
Optimering 2 • Udførsel direkte i hardware • FPGA, VHDL • Eksempel: Counter i FPGA • Kører parallelt • Interruptes tilbage, når valgt grænse nås • Work in progress JOP-speciale: Jan Lauritzen & Mads Pedersen
Links • Hjemmeside for JOP • www.jopdesign.com/ • Schoeberls phd-afhandling • www.jopdesign.com/thesis/index.jsp • jclasslib (værktøj til at se Java-bytekoder) • www.ej-technologies.com/products/jclasslib/overview.html JOP-speciale: Jan Lauritzen & Mads Pedersen