====== 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
\\ \\