====== 4. Cvičení - Zadání semestrálního projektu ====== \\ První semestrání projekt - odevzdání v 10. týdnu \\ \\ **__Kompletní znění__ zadání prvního semestrálního projektu**: {{:courses:B4M35PAP:tutorials:04:01_semester_project.pdf|}} Hodnocení projektu: ^ ^ Počet bodů ^ | Přepis simulovaného programu do jazyka symbolických adres | 1 | | Vyjádření programu v strojovém kódu s ukázkou kódování alespoň dvou instrukcí | 1 | | Popis systému v jazyce Verilog | 4 | | Simulace (ověření funkčnosti návrhu) | 3 | | Úprava, komentáře k řešení a popis činnosti systému | 1 | | Celkem:^ 10 | \\ Pro úspěšné odevzdání projektu je potřeba dosáhnout alespoň 6 bodů (včetně). \\ \\ \\ Je možné používat překladač jazyka C mips-elf-gcc, program pro překlad jazyka symbolických adres mips-elf-as a program pro relokaci a skládaní aplikací (linker) mips-elf-ld. \\ Manuálně stáhnout balíčky [[ftp://rtime.felk.cvut.cz/debian.old/pool/mips-elf/binutils-mips-elf_2.20.51-1_amd64.deb|binutils-mips-elf_2.20.51-1_amd64.deb]] a [[ftp://rtime.felk.cvut.cz/debian.old/pool/mips-elf/gcc-mips-elf_4.4.4-1_amd64.deb|gcc-mips-elf_4.4.4-1_amd64.deb]] Provést instalaci sudo dpkg -i Downloads/binutils-mips-elf_2.20.51-1_amd64.deb sudo dpkg -i Downloads/gcc-mips-elf_4.4.4-1_amd64.deb \\ Užitečné odkazy: \\ QtSpim - MIPS Simulator: http://pages.cs.wisc.edu/~larus/spim.html \\ MipsIt - MIPS Simulator: http://www.bostream.nu/mats.brorsson/mipsit/ \\ Compiler: https://sites.google.com/site/lccretargetablecompiler/ \\ Compiler Win: http://code.google.com/p/micron-sysv3/downloads/detail?name=mips-elf-gcc.rar&can=2&q= \\ MIPS Environment over Cygwin on Windows: http://faculty.cs.tamu.edu/bettati/Courses/410/2006C/Projects/gxemulcygwin.html \\ MIPS Cross-compiler: https://eng.ucmerced.edu/soe/computing/il/collaboratory/collab-software/compilers-and-interpreters/mips-cross-compiler-package \\ Můžete použít následující popis pro datovou a instrukční paměť (pro naše účely postačující) - berte jako inspiraci: module dmem (input clk, we, input [31:0] a, wd, output [31:0] rd); reg [31:0] RAM[127:0]; assign rd = RAM[a[7:2]]; // word aligned always@(posedge clk) if(we) RAM[a[31:2]] <= wd; endmodule \\ module imem (input [5:0] a, output [31:0] rd); // The "a" is the address of instruction to fetch, what // for our purpose can be taken from ProgramCounter[7:2] reg [31:0] RAM[127:0]; initial $readmemh ("memfile.dat",RAM); assign rd <= RAM[a]; // word aligned endmodule \\ \\