180 likes | 320 Views
Optimizing the mMIPS. Sander Stuijk. Outline. Design flow Understanding the assembler Frequently asked questions How do I recompile the compiler? How can I abort a simulation? How can I debug the mMIPS? Where do I find the maximal frequency of my mMIPS? Assignment. Toolflow. test.
E N D
Optimizing the mMIPS Sander Stuijk
Outline • Design flow • Understanding the assembler • Frequently asked questions • How do I recompile the compiler? • How can I abort a simulation? • How can I debug the mMIPS? • Where do I find the maximal frequency of my mMIPS? • Assignment
Toolflow test implementation Application (C source) LCC C Compiler LCC C Compiler sw mMIPS (C++ sources that use SystemC libraries) hw Borland C++ Compiler Synopsys SystemC compiler Synopsys FPGA Compiler II Xilinx ISE
Outline • Design flow • Understanding the assembler • Frequently asked questions • How do I recompile the compiler? • How can I abort a simulation? • How can I debug the mMIPS? • Where do I find the maximal frequency of my mMIPS? • Assignment
From C to assembler Bootloader 0: 00000000 nop 4: 3c1c0001 lui gp,0x1 8: 279c0000 addiu gp,gp,0 c: 3c1d0002 lui sp,0x2 10: 27bd8000 addiu sp,sp,-32768 14: 3c1e0002 lui s8,0x2 18: 27de8000 addiu s8,s8,-32768 1c: 0c000020 jal 0x80 20: 00000000 nop 24: 08000009 j 0x24 28: 00000000 nop ... 40: 08000009 j 0x24 44: 00000000 nop ... 60: 08000009 j 0x24 64: 00000000 nop ... 80: 27bdfff8 addiu sp,sp,-8 int main(void) { int a = 0; if (a == 0) return 0; else return 1; } End of program Actual program
The program is terminated by a repeated jump to address 0x24. We can stop the simulation by detecting this jump. The boot loader... Skip first instruction 0: 00000000 nop 4: 3c1c0000 lui gp,0x0 8: 279c24e2 addiu gp,gp,9442 c: 3c1d0000 lui sp,0x0 10: 27bd2800 addiu sp,sp,10240 14: 3c1e0000 lui s8,0x0 18: 27de2800 addiu s8,s8,10240 1c: 0c000020 jal 0x80 20: 00000000 nop 24: 08000009 j 0x24 ... 40: 08000009 j 0x24 ... 60: 08000009 j 0x24 Global pointer Stack pointer Frame pointer Call main function Terminate program
Outline • Design flow • Understanding the assembler • Frequently asked questions • How do I recompile the compiler? • How can I abort a simulation? • How can I debug the mMIPS? • Where do I find the maximal frequency of my mMIPS? • Assignment
How do I recompile the LCC compiler? • export LCCDIR=/cygdrive/c/ImageProcessing/lcc/lccdir • cd $LCCDIR/.. • make clean • make
How can I abort a simulation? • Use <ctrl>+<c> to abort a running simulation. • VCD trace stored till point at which simulation is stopped.
How can I debug the mMIPS? • Create a small test program to check the newly added functionality • Create a VCD trace via a simulation • Compare the VCD trace with the assembler • Start at the beginning of the program • Does it do what you expect?
Where do I find the maximal frequency of my mMIPS? • You can find the maximal frequency of your design in XilinX ISE • Estimate is given by FPGA II Compiler
Outline • Design flow • Understanding the assembler • Frequently asked questions • How do I recompile the compiler? • How can I abort a simulation? • How can I debug the mMIPS? • Where do I find the maximal frequency of my mMIPS? • Assignment
Assignment • Optimize the run-time of an image processing algorithm running on the mMIPS. Allowed • Add special instructions to the mMIPS; • Change design of the mMIPS (e.g. forwarding). Not-allowed • Modification of the image processing algorithm that are not needed to use special instructions (e.g. replace multiply with shifts).
Testing and implementing the design Test for functional correctness • Run the original mMIPS with the algorithm to produce a reference output. • Compare the results of your mMIPS to the reference output. Implement your design on the FPGA • You must complete the flow till the FPGA. The maximum clock frequency at which your mMIPS can be synthesized is part of the performance.
Submitting your results • Login to ftp://ftp.es.ele.tue.nl using your username/password • Put all .cpp and .h files in the directory ‘final’ • Put ‘mips_rom.bin’ and ‘mips_ram.bin’ in the directory ‘final’ Remarks We need a working mMIPS to test your changes Put all files directly in the directory ‘final’ do not use subdirectories The input/output locations of your image must be the same as in our program Your input image is automatically replaced with a new image by our tools
Important dates • Test program available on Sunday 5/3 at 12.00h • http://www.es.ele.tue.nl/education/Computation/oo2/ • Submit results at Tuesday 7/3 before 12.00h • Make sure you submit before the deadline. It’s a hard deadline! • Presentations on Thursday 9/3 and Friday 10/3 • You will be informed about the schedule
Support and Information • Dominic Gawlowski - FPGA • Valentin Gheorghita - LCC • Sander Stuijk - SystemC • Each Monday, Tuesday, Thursday and Friday between 14.00 and 16.00h. • Look also at http://www.es.ele.tue.nl/education/Computation/oo2/ for information, tips, etc.